var req_timeout = 30;
var redirect_after_logout = site_root_url + 'account/login.php';
var get_press_reviews_url = site_root_url + 'press/';
var get_fund_stats_url = site_root_url + 'funds/stats.php';
var get_funds_rewards_url = site_root_url + 'funds/rewards.php';
var edit_resume_url = site_root_url + 'resume/edit.php';
var check_authentication_url = site_root_url + 'account/checkauthenticated.php';
var mailbox_root_url = site_root_url + 'mailbox/';
var new_message_url = site_root_url + 'mailbox/newmessage.php';
var my_invitations_url = site_root_url + 'contacts/myinvitations.php';
var get_regions_url = site_root_url + 'account/getregions.php';
var get_cities_url = site_root_url + 'account/getcities.php';
var get_cities_by_name_url = site_root_url + 'account/getcitiesbyname.php';
var get_departments_url = site_root_url + 'account/getdepartments.php';
var get_job_functions_url = site_root_url + 'account/getjobfunctions.php';
var resume_actions_url = site_root_url + 'resume/actions.php';
var resume_add_url = site_root_url + 'resume/add.php';
var resume_edit_url = site_root_url + 'resume/edit.php';
var resume_url = site_root_url + 'resume';
var get_companies_by_name_url = site_root_url + 'company/getcompaniesbyname.php';
var company_add_url = site_root_url + 'company/add.php';
var get_contacts_by_name_url = site_root_url + 'contacts/getcontactnames.php';
var contacts_search_url = site_root_url + 'contacts/search.php';
var jobapplications_add_url = site_root_url + 'jobapplications/add.php';
var jobapplications_delete_url = site_root_url + 'jobapplications/delete.php';
var contacts_url = site_root_url + 'contacts/';
var saved_searches_add_url = site_root_url + 'savedsearches/add.php';
var saved_searches_delete_url = site_root_url + 'savedsearches/delete.php';
var saved_searches_edit_url = site_root_url + 'savedsearches/edit.php';
var favorites_add_url = site_root_url + 'favorites/add.php';
var favorites_delete_url = site_root_url + 'favorites/delete.php';
var job_offer_url = site_root_url + 'joboffers';
var job_offer_actions_url = site_root_url + 'joboffers/actions.php';

var button_class = web_site == 1 ? 'blackbutton' : 'blackbutton3';

var select_other_id = 1000000000;

var is_ie = !!(window.attachEvent && !window.opera);
var className = (!is_ie) ? 'class' : 'className';
Prototype.Browser.IE6 = Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5)) == 6;

function _(s) {
  if (typeof(i18n)!='undefined' && i18n[s]) {
    return i18n[s];
  }
  return s;
}

function getElementsByClassName(rootid, classname, tagname) {
  alert('ok');
  var rootElt = (rootid == undefined) ? document.body : document.getElementById(rootid);
  if (tagname == undefined)
    tagname = "*";
  var regExp = new RegExp('\\b' + classname + '\\b');
  var elts = rootElt.getElementsByTagName(tagname);
  alert(elts);
  var res = Array();
  for(var i=0;i<elts.length;i++){
      if(regExp.test(elts[i].className)){
         res.push(elts[i]);
      }
  }
  return res;
};


function get_key_code(e) {
  var keycode;
  if (window.event) keycode = window.event.keyCode;
  else if (e) keycode = e.which;
  return keycode;
}
function body_onkeydown(e) {
/*
  if (get_key_code(e) == 27)
    showHide('lang-list', 'none');
*/
}

function window_onload() {


}

function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
}

function addScript(url) {
  var headID = document.getElementsByTagName("head")[0];         
  var newScript = document.createElement('script');
  newScript.type = 'text/javascript';
  newScript.src = url;
  headID.appendChild(newScript);
}

Ajax.Responders.register({
  onCreate : function() {/*showLoader();*/ },
  onComplete : function() {hideLoader();}
});

function showLoader () {
	$('load').style.display = 'block';
	//alert('show');
}

function hideLoader () {
	$('load').style.display = 'none';
	//alert('hide');
}

function displayMessage(msg) {
$('messenger').innerHTML = msg;
//Effect.Appear('messenger',{duration: 0.25, queue: 'end'});
$('messenger').style.display = 'block';
Effect.Fade('messenger',{duration: 4, queue: 'end'});
}

function showDialog(e, options) {
  if (!e) e = window.event||window.Event;
  var popupBackground;
  
  if ($('popupBackground') == undefined) {
    popupBackground = document.createElement('div');
    popupBackground.id = 'popupBackground';
    popupBackground.style.display = 'none';
    var arrayPageSize = this.getTotalPageSize();
    popupBackground.style.width = arrayPageSize[0] + 'px';
    popupBackground.style.height = arrayPageSize[1] + 'px';
    document.body.appendChild(popupBackground);
  } else {
    popupBackground = $('popupBackground');
  }
  
  var dialog;
  if ($('popup') == undefined) {
    dialog = document.createElement('div');
    dialog.id = 'popup';
    dialog.style.display = 'none';
    document.body.appendChild(dialog);
    //document.getElementsByTagName('body')[0].appendChild(dialog);
    document.observe('keyup', function(e){
      if (e.keyCode == 27)
        hideDialog();
    });
    Element.addClassName(dialog, 'popup');
    //new Draggable('dialog', { zindex:4001 });
  } else {
    dialog = $('popup');
  }
  
  //dialog.setAttribute(className, options['className'] ? options['className'] : 'generic_dialog_popup');
  //dialog.setAttribute(className, 'popup');

  var okLabel = options['okLabel'] ? options['okLabel'] : _('Ok');
  var cancelLabel = options['cancelLabel'] ? options['cancelLabel'] : _('Cancel');

  var okButtonClass = (options['buttonClass'] ? options['buttonClass'] + " " : button_class);
  var cancelButtonClass = (options['buttonClass'] ? options['buttonClass'] + " " : "");
  
  var buttonsStyle = (options['buttonsStyle'] == 'formButtons' ? "style='padding-left: " + options['buttonsPadding'] + "px;'" : "style='text-align:center;'");

  var content = "\
    <div class='popupInner'>\
    <div id='popupTop' class='popupTop'>\
      <span id='popupTitle'>" + (options['title'] ? options['title'] : "") + "</span>\
      <a id='dialog_close_icon' href='#'><img src='/images/icons/supprimer-blanc.png' alt='" + _('Close')+ "' title='" + _('Close') + "'/></a>\
    </div>\
    <div class='popupContent'>\
      <div class='popupBody'>" + (options['body'] ? options['body'] : "") + "</div>\
      <div class='popupButtons' id='dialog_buttons' " + buttonsStyle + ">\
        <button id='dialog_btn_ok' name='dialog_btn_ok' type='submit' class='" + okButtonClass + "'><span>" + okLabel + "</span></button>\
        <a id='dialog_btn_cancel' href='#' class='cancel'>" + cancelLabel + "</a>\
      </div>\
    </div>\
    <div id='popupBottom' class='popupBottom'>&nbsp;</div>\
    </div>\
  ";

  dialog.innerHTML = content;

  var width = options['width'] ? options['width'] : 360;
  dialog.style.width = width + 'px';
  $('popupTop').style.width = (width - 30) + 'px';
  $('popupTitle').style.width = (width - 60) + 'px';
  $('popupBottom').style.backgroundPosition = (width - 292) + 'px' + ' 100%';
  
  dialog.okCallBack = options['ok'];
  
  var dialog_btn_ok = $('dialog_btn_ok');
  dialog_btn_ok.onclick = function() {
    if (options['ok']) {
      res = options['ok']();
    } else {
      res = false;
    }
    if (!options['OkDoNotClose']) {
      hideDialog();
      return false;
      //showSelectsIE6();
    }
    return res;
  }
  $('dialog_btn_cancel').onclick = function() {
    hideDialog();
    //showSelectsIE6();
    return false;
  }
  $('dialog_close_icon').onclick = function() {
    hideDialog();
    return false;
  }
  popupBackground.style.display = 'block';
  dialog.style.display = 'block';

  dialog.style.position = 'absolute';

  if (options['top'] && options['left']) {
    dialog.style.left = options['left'] + 'px';
    dialog.style.top = options['top'] + 'px';
  } else if (options['position'] && options['position'] == 'mouse') {
    dialog.style.left = mousePosX(e) - 52 + 'px';
    dialog.style.top = mousePosY(e) - 16 + 'px';
  } else {
    centerPopup(dialog);
  }

  if (Prototype.Browser.IE6) {
    SelectFix.repairFloatingElement($('popupBackground'));
    //SelectFix.repairFloatingElement($('dialog'));
  }
    //SelectFix.autoRepairFloatingElements(500);

  addPopupTooltips();
  if (options['focus']) {
    $(options['focus']).focus();
  } else {
    dialog_btn_ok.focus();
  }
  if (options['postDisplay']) {
      options['postDisplay']();
  }
  return false;
}

function hideDialog() {
  //$('popup').style.display = 'none';
  //$('popupBackground').style.display = 'none';

  Effect.Fade('popup', {
    duration: 0.2,
    afterFinish : function(effect) { 
      //$('popupBackground').style.display = 'none';
      Effect.Fade('popupBackground', { duration: 0.1 });
      } });

  //Effect.Fade('popup', { duration: 0.3 });
  //Effect.Fade('popupBackground', { duration: 0.2 });  
}

function addPopupTooltips() {
  var popup = $('popup');
	var inputs = popup.getElementsByTagName("input");
	for (var i=0; i<inputs.length; i++){
    addPopupHint(inputs[i]);
	}
	var selects = popup.getElementsByTagName("select");
	for (var k=0; k<selects.length; k++){
    addPopupHint(selects[k]);
  }
}

function addPopupHint(inputField) {
  var spans = inputField.parentNode.getElementsByTagName("span");
  for (var i=0; i<spans.length; i++){
    if (spans[i].className.indexOf("help")>-1) {
			inputField.onfocus = function () {
			  var _spans = this.parentNode.getElementsByTagName("span");
			  for (var j=0; j<_spans.length; j++){
			   if (_spans[j].className.indexOf("help")>-1) {
			     Element.addClassName(_spans[j], 'highlighted');
			   }
			  }
			}
			inputField.onblur = function () {
			  var _spans = this.parentNode.getElementsByTagName("span");
			  for (var j=0; j<_spans.length; j++){
			   if (_spans[j].className.indexOf("help")>-1) {
			     Element.removeClassName(_spans[j], 'highlighted');
			   }
			  }
			}
    }
  }
}

function showAlert(e, options) {
  if (!e) e = window.event||window.Event;

  var popupBackground;
  
  if ($('popupBackground') == undefined) {
    popupBackground = document.createElement('div');
    popupBackground.id = 'popupBackground';
    popupBackground.style.display = 'none';
    var arrayPageSize = this.getTotalPageSize();
    popupBackground.style.width = arrayPageSize[0] + 'px';
    popupBackground.style.height = arrayPageSize[1] + 'px';
    document.body.appendChild(popupBackground);
  } else {
    popupBackground = $('popupBackground');
  }
  var dialog;
  if ($('popup') == undefined) {

    dialog = document.createElement('div');
    dialog.id = 'popup';
    dialog.style.display = 'none';
    document.body.appendChild(dialog);
    //document.getElementsByTagName('body')[0].appendChild(dialog);
    document.observe('keyup', function(e){
      if (e.keyCode == 27)
        hideDialog();
    });
    Element.addClassName(dialog, 'popup');
    //new Draggable('dialog', { zindex:4001 });
  } else {
    dialog = $('popup');
  }
  
  //dialog.setAttribute(className, options['className'] ? options['className'] : 'generic_dialog_popup');
  //dialog.setAttribute(className, 'popup');

  var okLabel = options['okLabel'] ? options['okLabel'] : _('Ok');
  var okButtonClass = (options['buttonClass'] ? options['buttonClass'] + " " : button_class);

  var content = "\
    <div class='popupInner'>\
    <div id='popupTop' class='popupTop'>\
      <span id='popupTitle'>" + (options['title'] ? options['title'] : "") + "</span>\
      <a id='dialog_close_icon' href='#'><img src='/images/icons/supprimer-blanc.png' alt='" + _('Close')+ "' title='" + _('Close') + "'/></a>\
    </div>\
    <div class='popupContent'>\
      <div class='popupBody'>" + (options['body'] ? options['body'] : "") + "</div>\
      <div class='popupButtons' id='dialog_buttons' style='text-align:center;'>\
        <button id='dialog_btn_ok' name='dialog_btn_ok' type='submit' class='" + okButtonClass + "'><span>" + okLabel + "</span></button>\
      </div>\
    </div>\
    </div>\
  ";

  dialog.innerHTML = content;

  var width = options['width'] ? options['width'] : 360;
  dialog.style.width = width + 'px';
  $('popupTop').style.width = (width - 30) + 'px';
  $('popupTitle').style.width = (width - 60) + 'px';

  var dialog_btn_ok = $('dialog_btn_ok');
  dialog_btn_ok.onclick = function() {
    hideDialog();
    return false;
  }
  
  $('dialog_close_icon').onclick = function() {
    hideDialog();
    return false;
  }
  popupBackground.style.display = 'block';
  dialog.style.display = 'block';

  dialog.style.position = 'absolute';

  if (options['top'] && options['left']) {
    dialog.style.left = options['left'] + 'px';
    dialog.style.top = options['top'] + 'px';
  } else if (options['position'] && options['position'] == 'mouse') {
    dialog.style.left = mousePosX(e) - 52 + 'px';
    dialog.style.top = mousePosY(e) - 16 + 'px';
  } else {
    centerPopup(dialog);
  }
  if (Prototype.Browser.IE6) {
    SelectFix.repairFloatingElement($('popupBackground'));
    //SelectFix.repairFloatingElement($('dialog'));
  }

  dialog_btn_ok.focus();
  return false;
}

function getScrollTop() {
  return (window.pageYOffset)?window.pageYOffset:(document.documentElement && document.documentElement.scrollTop)?document.documentElement.scrollTop:document.body.scrollTop;
}

function centerPopup(element) {

	//dialog.style.top = /*-190 +*/ (dialog.parentNode.offsetHeight/2)-(dialog.offsetHeight/2)+ (dialog.parentNode.scrollTop | window.pageYOffset | document.documentElement.scrollTop) + 'px';
	//dialog.style.left =(dialog.parentNode.offsetWidth/2)-(dialog.offsetWidth/2)+ (dialog.parentNode.scrollLeft | window.pageXOffset | document.documentElement.scrollLeft) + 'px';

	//element.style.top=(element.parentNode.offsetHeight/2)-(element.offsetHeight/2)+element.parentNode.scrollTop+"px";
	//element.style.left=(element.parentNode.offsetWidth/2)-(element.offsetWidth/2)+element.parentNode.scrollLeft+"px";
/*
  var eltDims     = element.getDimensions();
  var browserDims = document.body.getDimensions();
  var x = (browserDims.width - eltDims.width) / 2;
  var y  = getScrollTop() + (browserDims.height - eltDims.height) / 2;
*/

/*
  var y = (document.compatMode && document.compatMode=='CSS1Compat') ? 
documentElement.scrollTop 
+(documentElement.clientHeight-element.clientHeight)/2
: document.body.scrollTop + (document.body.clientHeight-element.clientHeight)/2;
*/
/*
var y = (screen.height - element.clientHeight)/2;
//alert(y);
  var x = (document.compatMode && document.compatMode=='CSS1Compat') ? 
documentElement.scrollLeft + document.body.clientWidth /2
: document.body.scrollLeft + document.body.offsetWidth /2;
*/

/*    
    var arrayPageScroll = document.viewport.getScrollOffsets();
    var boxTop = arrayPageScroll[1] + document.viewport.getHeight()/2 - dialog.offsetHeight/2;
    var boxLeft = arrayPageScroll[0] + document.viewport.getWidth()/2 - dialog.offsetWidth/2;
    //alert(arrayPageScroll[1] + " + (" + document.viewport.getHeight() +  " - " + dialog.offsetHeight + ")/2 = " + boxLeft);
    dialog.style.top = boxTop;
    dialog.style.left = boxLeft;
*/    

    var arrayPageScroll = document.viewport.getScrollOffsets();
    var x = arrayPageScroll[1] + document.viewport.getHeight()/2 - element.offsetHeight/2;
    var y = arrayPageScroll[0] + document.viewport.getWidth()/2 - element.offsetWidth/2;
    
    if (Prototype.Browser.IE6) {
      element.style.top = x;
      element.style.left = y;
    } else {
      element.style.top = x + 'px';
      element.style.left = y + 'px';
    }
}

function checkAuthenticatedBefore(f) {
  
  new Ajax.Request(check_authentication_url, {method: 'get', onComplete: function (req) {
        var data = req.responseText;
        if (data.length == 0) {
          f();
        } else {
          var json = data.evalJSON(true);
          if (processErrors(json, true)) {
            f();
          }
        }
        
    }});

}

function replaceHtml(el, html) {
	var oldEl = typeof el === "string" ? document.getElementById(el) : el;
	var newEl = oldEl.cloneNode(false);
	newEl.innerHTML = html;
	oldEl.parentNode.replaceChild(newEl, oldEl);
	/* Since we just removed the old element from the DOM, return a reference
	to the new element, which can be used to restore variable references. */
	return newEl;
};

/*
// Initializes a new instance of the StringBuilder class
// and appends the given value if supplied
function StringBuilder(value)
{
    this.strings = new Array("");
    this.append(value);
}
// Appends the given value to the end of this instance.
StringBuilder.prototype.append = function (value)
{
    if (value)
    {
        this.strings.push(value);
    }
}
// Clears the string buffer
StringBuilder.prototype.clear = function ()
{
    this.strings.length = 1;
}
// Converts this instance to a String.
StringBuilder.prototype.toString = function ()
{
    return this.strings.join("");
}
*/

function sortKeys(h, sortBy) {
  var sortedKeys;
  if (sortBy == 'keys') {
    sortedKeys = h.keys().sort(function sortByNumericKeys(a, b){
      return a - b;
      });
  } else if (sortBy == 'values') {
    sortedKeys = h.keys().sort(function sortByValues(a, b){
      var A = h.get(a).toLowerCase();
      var B = h.get(b).toLowerCase();
      //if (h.get(b) == _('Other')) return -1;
      //if (h.get(a) == _('Other')) return 1;
      if (b == select_other_id) return -1;
      if (a == select_other_id) return 1;
      
      if (A < B) return -1;
      if (A > B) return 1;
      return 0;    
      });
  } else {
    sortedKeys = h.keys();
  }
  return sortedKeys;
}

function getSelectHtml(myList, listId, selectValue, className, emptyValue, listName, twoLevels, sortBy, noEmptyValue) {

var html = [];
var idx = 0;

if (className == undefined) {
  className = 'select_medium';
}

if (emptyValue == undefined) {
  emptyValue = '--- ' + _('Select in the list') + ' ---';
}
if (listName == undefined) {
  listName = listId;
}
/*
if (twoLevels) {
  className += ' two_levels';
}
*/

html[idx++] = '<select id="' + listId + '" name="' + listName + '" class="' + className + '">';
if (!noEmptyValue)
  //html[idx++] = '<option value="">' + emptyValue + '</option><option value=""></option>';
  html[idx++] = '<option value="">' + emptyValue + '</option>';

if (!twoLevels) {
/*
  myList.each(function(pair) {
    if (pair.key == selectValue) {
      html[idx++] = '<option value="' + pair.key + '" selected>' + pair.value + '</option>';
    } else {
      html[idx++] = '<option value="' + pair.key + '">' + pair.value + '</option>';
    }
  });
*/
  var sortedKeys = sortKeys(myList, sortBy);

  for (var i = 0; i < sortedKeys.length; i++) {
     if (sortedKeys[i] == selectValue) {
      html[idx++] = '<option value="' + sortedKeys[i] + '" selected>' + myList.get(sortedKeys[i]) + '</option>';
    } else {
      html[idx++] = '<option value="' + sortedKeys[i] + '">' + myList.get(sortedKeys[i]) + '</option>';
    }
  }

} else {
  myList.each(function(pair2) {
    html[idx++] = '<optgroup label="' + myaddslashes(pair2.key) + '" class="optgroup">';
    var subList = $H(pair2.value);
    var sortedKeys = sortKeys(subList, sortBy);
/*    
    $H(pair2.value).each(function(pair) {
      if (pair.key == selectValue) {
        html[idx++] = '<option value="' + pair.key + '" selected>' + pair.value + '</option>';
      } else {
        html[idx++] = '<option value="' + pair.key + '">' + pair.value + '</option>';
      }
    });
*/
    for (var i = 0; i < sortedKeys.length; i++) {
      if (sortedKeys[i] == selectValue) {
        html[idx++] = '<option value="' + sortedKeys[i] + '" selected>' + subList.get(sortedKeys[i]) + '</option>';
      } else {
        html[idx++] = '<option value="' + sortedKeys[i] + '">' + subList.get(sortedKeys[i]) + '</option>';
      }
    }
    
    html[idx++] = '</optgroup>';
  });
}

html[idx++] = '</select>';
//alert(html.join(""));
return html.join("");
}

function getYearList(id, name, defaultValue, className, emptyLabel, minYear, maxYear, reverseYears) {
  if (className == undefined) {
    className = 'select_medium';
  }
  if (emptyLabel == undefined) {
    emptyLabel = "--- " + _('Select in the list') + " ---";
  }
  var d = new Date();
  var curr_year = d.getFullYear();
  if (minYear == undefined) {
    minYear = curr_year - 120;
  }
  if (maxYear == undefined) {
    maxYear = curr_year;
  }
  if (reverseYears == undefined) {
    reverseYears = true;
  }
      
  var html = [];
  var idx = 0;
  
  html[idx++] = "<select id='" + id + "' name='" + name + "' class='" + className + "'><option value=''>" + emptyLabel + "</option><option value=''></option>";

  //var myList = Array();
  //var myList = new Hash();
  
  if (reverseYears) {
    for(var i = maxYear ; i >= minYear; i--)
    {
      //myList[i] = i;
      //myList.set(i, i);
      if (i == defaultValue) {
        html[idx++] = "<option value='" + i + "' selected>" + i + "</option>";
      } else {
        html[idx++] = "<option value='" + i + "'>" + i + "</option>";
      }
    }
  } else {
    for(var i = minYear ; i <= maxYear; i++)
    {
      //myList[i] = i;
      //myList.set(i, i);
      if (i == defaultValue) {
        html[idx++] = "<option value='" + i + "' selected>" + i + "</option>";
      } else {
        html[idx++] = "<option value='" + i + "'>" + i + "</option>";
      }
    }
  }

  html[idx++] = "</select>";
  
  return html.join("");
  //return getSelectHtml(myList, id, defaultValue, className, emptyLabel, name);
}

function getMonthList(id, name, defaultValue, className, emptyLabel) {
  var myList = new Hash({
  1 : _('January'),
  2 : _('February'),
  3 : _('March'),
  4 : _('April'),
  5 : _('May'),
  6 : _('June'),
  7 : _('July'),
  8 : _('August'),
  9 : _('September'),
  10 : _('October'),
  11 : _('November'),
  12 : _('December')
  });
  return getSelectHtml(myList, id, defaultValue, className, emptyLabel, name);
}

function getDayList(id, name, defaultValue, className, emptyLabel) {
/*
  var myList = new Hash();
  for(var i = 1 ; i <= 31; i++)
  {
    myList.set(i, i);
  }
  return getSelectHtml(myList, id, defaultValue, className, emptyLabel, name);
*/

  if (className == undefined) {
    className = 'select_medium';
  }
  if (emptyLabel == undefined) {
    emptyLabel = "--- " + _('Select in the list') + " ---";
  }
      
  var html = [];
  var idx = 0;
  
  html[idx++] = "<select id='" + id + "' name='" + name + "' class='" + className + "'><option value=''>" + emptyLabel + "</option><option value=''></option>";

  for(var i = 1 ; i <= 31; i++)
  {
    if (i == defaultValue) {
      html[idx++] = "<option value='" + i + "' selected>" + i + "</option>";
    } else {
      html[idx++] = "<option value='" + i + "'>" + i + "</option>";
    }
  }

  html[idx++] = "</select>";
  
  return html.join("");

}


/*
function getMultiSelectHtml_old(myList, listId, size, selectValues) {

var html = [];
var idx = 0;

html[idx++] = "<select id='" + listId + "' name='" + listId + "' multiple size='" + size + "' class='select_multiple'><option value=''>--- " + _('Select in the list') + " ---</option><option value=''></option>";
myList.each(function(pair) {
  if (selectValues.contains(pair.key)) {
    html[idx++] = "<option value='" + pair.key + "' selected>" + pair.value + "</option>";
  } else {
    html[idx++] = "<option value='" + pair.key + "'>" + pair.value + "</option>";
  }
});
html[idx++] = "</select>";

return html.join("");
}
*/

function getMultiSelectHtml(myList, listId, selectValues) {

var html = [];
var idx = 0;

html[idx++] = "<div class='multicheckbox'>";

myList.each(function(pair) {
  html[idx++] = "<div class='multicheckbox_row'>";
  if (selectValues != null && selectValues.contains(pair.key)) {
    html[idx++] = "<input type=\"checkbox\" id='" + listId + "_" + pair.key + "' " + "name='" + listId + "[]' value='" + pair.key + "' checked /> " + pair.value + " ";
  } else {
    html[idx++] = "<input type=\"checkbox\" id='" + listId + "_" + pair.key + "' " + "name='" + listId + "[]' value='" + pair.key + "' /> " + pair.value + " ";
  }
  html[idx++] = "</div>";

});
html[idx++] = "</div>";

return html.join("");
}

function getMultiSelectHtmlValue(listId) {

  var val = '';

  $$('input[name=\"' + listId + '[]\"]').each(function(item) {
    if (item.checked) {
      if (val != '') {
        val += ',';
      }
      val+=item.value;
    }
  
  });

  return val;
}

function getMultiSelectHtmlNumericValue(listId) {

  var val = 0;

  $$('input[name=\"' + listId + '[]\"]').each(function(item) {
    if (item.checked) {
      if (item.value >= 1) {
        val+=Math.pow(2,item.value-1);
      }
    }
  
  });

  return val;
}


function getMultiCheckBoxHtml(myList, listId, selectValues) {

var html = [];
var idx = 0;

//var n = myList.keys().length;
//var i = Math.floor(n/2);

//html[idx++] = "<select id='" + listId + "' name='" + listId + "'><option value=''>--- " + _('Select in the list') + " ---</option><option value=''></option>";
myList.each(function(pair) {

  if (selectValues != null && selectValues.contains(pair.key)) {
    html[idx++] = "<input type=\"checkbox\" id='" + listId + "_" + pair.key + "' " + "name='" + listId + "[]' value='" + pair.key + "' checked /> " + pair.value + " ";

  } else {
    html[idx++] = "<input type=\"checkbox\" id='" + listId + "_" + pair.key + "' " + "name='" + listId + "[]' value='" + pair.key + "' /> " + pair.value + " ";
  }

/*
  if (pair.key == selectValue) {
    html[idx++] = "<option value='" + pair.key + "' selected>" + pair.value + "</option>";
  } else {
    html[idx++] = "<option value='" + pair.key + "'>" + pair.value + "</option>";
  }
*/  
});
//html[idx++] = "</select>";

return html.join("");
}

function getSortableListHtml(list, id, name, defaultValue, className, hint) {
  if (defaultValue == undefined) {
    defaultValue = '';
  }
  if (className == undefined) {
    className = '';
  }
  if (hint == undefined) {
    hint = '';
  }
  var html = [];
  var idx = 0;
  var h = $H(list);
  var list_keys = h.keys();
  
  html[idx++] = "<div style='position: relative;'>\
      <table id='" + id + "_table'>\
        <tr><td rowspan='3'>\
        <select id='" + id + "_options' class='" + className + "' multiple size=" + list_keys.length + " style='overflow:hidden;'>";
  
  var keys;
  if (defaultValue == '') {
    keys = list_keys;
    defaultValue = keys.join(",");
  } else {
    keys = defaultValue.split(",");
    if (keys.length < list_keys.length) {
      keys = list_keys;
      defaultValue = keys.join(",");
    }
  }
  
  for (var i=0; i<keys.length; i++) {
    var key = keys[i];
    html[idx++] = "<option value='" + key + "'>" + stripslashes(h.get(key)) + "</option>";
  }
  
  html[idx++] = "</select></td><td height='11' valign=top style='vertical-align:top;height: 11px; max-height: 11px;'><img src='/images/icons/flechehaut.jpg' alt='" + _('Move Up') + "' title='" + _('Move Up') + "' onclick='moveOptionsUp(\"" + id + "\")'/>";
  
  if (hint.length) {
    html[idx++] = "<span class='questionmark' style='margin: 0px 0 0 10px;'><span class='tooltip'>" + hint + "<span class='tooltip-pointer'>&nbsp;</span></span></span>";
  }
  html[idx++] = "</td></tr><tr height=80%><td>&nbsp;</td></tr><tr><td height='11' valign=bottom style='vertical-align:bottom;'><img src='/images/icons/flechebas.jpg' alt='" + _('Move Down') + "' title='" + _('Move Down') + "' onclick='moveOptionsDown(\"" + id + "\")'/></td></tr></table>";  
  html[idx++] = "</div>\
			<input type='hidden' id='" + id + "' name='" + name + "' value='" + defaultValue + "'/>";
  //alert(html.join(""));
  return html.join("");
}

Array.prototype.contains = function (element) 
{
    for (var i = 0; i < this.length; i++) 
   {
      if (this[i] == element) 
      {
        return true;
      }
  }
  return false;
};

Array.prototype.toUrl = function (name) 
{
  var url = '';
   for (var i = 0; i < this.length; i++) 
   {
      if (url != '')
        url += '&';
      url += name + '[]=' + this[i];
  }
  return url;
};

function without(array,value) {
  var res = Array();
  for( var i = 0 ; i < array.length; i++)
  {
    if (array[i] != value) res.push(array[i]);
  }
  return res;
}

function without_key(array,key) {
  var res = Array();
  //alert(array.length + ' ' + key);
  for( var i = 0 ; i < array.length; i++)
  {
    if (i != key) res.push(array[i]);
  }
  return res;
}

function postForm(theform, url, custom_options) {

  new Ajax.Request(
    url,
    {
      method: 'post',
      parameters : theform.serialize(true),
      timeout    : req_timeout,
      onLoading : function(req) { /*showLoader();*/},
      onSuccess : function(req){
        hideLoader();
        var options = new Array();
        options['errorListDisplay'] = 'form';
        options['submitForm'] = false;
        options['successMessage'] = _('Your profile has been saved.');
        options['errorMessage'] =  _('The form contains errors. Please see above.');

        if (custom_options != undefined) {
          if (custom_options['successMessage'] != undefined) {
            options['successMessage'] = custom_options['successMessage'];
          }
          if (custom_options['disableAfterSubmit'] != undefined) {
            options['disableAfterSubmit'] = custom_options['disableAfterSubmit'];
          }
        }

        processResponseForm(req.responseText, theform, options);
       },
      onTimeout  : function(req){ alert('Error!\nThe request to the server timed out!\nStatus Text = '+req.statusText); },
      onError    : function(req){ alert('Error!\nStatus Text = '+req.statusText+'\nServer response = '+req.responseText);}
    }
  );
  return false;

}


//function processResponseForm(data, theform, errorList, errorStatus, message, popupDisplay, submitForm) {
function processResponseForm(data, theform, options) {

    if (options.errorListDisplay == 'form') {
      $("form_errors").innerHTML = "";
    }
    if (options.errorMessage != undefined) {
      $("form_status").innerHTML = "";
    }
    
    var json = data.evalJSON(true);
    
    if(typeof data == "error")
    {
        //console.warn("error!",args);
    }
    else
    {
        //var json = eval('(' + data + ')');
        var errors = $H(json.errors);
        
        errors.unset('REMOVE'); 
        if (errors.size() > 0) {
        
           if (options.errorListDisplay == 'form') {
            msg = '';
            msg += "<ul>";
            
            errors.each(function(pair) {
              msg += "<li>" + pair.value + "</li>";
            });
            msg += "</ul>";
            $("form_errors").innerHTML = msg;
            //$("form_status").innerHTML = '<p>' +  _('The registration form contains errors. See details above.') + '</p>';
          }
          else if (options.errorListDisplay == 'popup') {
            msg = '';
            errors.each(function(pair) {
              msg += pair.value + "<br/>";
            });
            //displayMessage(msg);
            alert(msg);
          }
        
          if (options.errorMessage != undefined) {
            $("form_status").innerHTML = '<p>' +  options['errorMessage'] + '</p>';
          }

        } else {
          if (options.submitForm == true) {
            theform.submit();
          } else {
          
            if (options.disableAfterSubmit == true) {
              theform.disable();
            }
            
            if (options.successMessage != undefined ) {
              $("form_status").innerHTML = '<p>' +  options['successMessage'] + '</p>';
            }
            
          }
        }
    }
}

function validateForm(formid, f, options) {
  if (options == undefined) {
    options = new Array();
  }
  var theform = $(formid);
  $$('#' + formid + ' span.error').each(function(elt) {
    elt.remove();
  });
/*
  var spans = theform.getElementsByTagName("span");
  for (var i = 0; i < spans.length; i++) {
    var span = spans[i];
    if (Element.hasClassName(span, "error")) {
      discardElement(span);
    }  
  }
*/  
  if ($('error_message') != undefined) {
    $('error_message').remove();
  }
  $$('#' + formid + ' li.buttons button').each(function(elt) {
    elt.writeAttribute('disabled', 'disabled');
  });
/*
  var lis = theform.getElementsByTagName("li");
  for (var i = 0; i < lis.length; i++) {
    var li = lis[i];
    if (Element.hasClassName(li, "buttons")) {
      var buttons = li.getElementsByTagName("button");
        for (var j = 0; j < buttons.length; j++) {
          buttons[j].disabled = true;
        }
    }  
  }
*/
  theform.request({
    timeout    : req_timeout,
    onComplete: function(req){
      var data = req.responseText;
      var json = data.evalJSON(true);
      if(typeof data == "error")
      {
        console.warn("error!",args);
      }
      else
      {
        var errors = $H(json.errors);
        errors.unset('REMOVE'); 
        if (errors.size() > 0) {
          //$$('#' + formid + ' ol.forms')[0].insert({top: '<li id="error_message" class="errormsg"><label>' + _('The form contains errors. See details below.') + '</label></li>'});
          //$(formid).insert({top: '<p id="error_message" class="errormsg">' + _('The form contains errors.') + '</p>'});
          if (options['displayErrorMessage'] == undefined) {
            options['displayErrorMessage'] = true;
          }
          if (options['displayErrorMessage']) {
            var error_message  = document.createElement('p');
            //error_message.setAttribute(className, 'errormsg');
            Element.addClassName(error_message, 'errormsg');
            error_message.setAttribute('id', 'error_message');
            error_message.innerHTML = _('The form contains errors.');
            theform.insertBefore(error_message,theform.firstChild);
          }
          
          errors.each(function(pair) {
            if (pair.value == _('Connection timeout')) {
              window.location=redirect_after_logout;
            }
            //$(pair.key).parentNode.insert({bottom: '<span class="error">' + pair.value + '</span>'});
            //$(pair.key).parentNode.innerHTML += '<span class="error">' + pair.value + '</span>';
            var error_span  = document.createElement('span');
            //error_span.setAttribute(className, 'error');
            Element.addClassName(error_span, 'error');
            error_span.innerHTML = pair.value;
            $(pair.key).parentNode.appendChild(error_span);
          });
          $$('#' + formid + ' li.buttons button').each(function(elt) {
            elt.removeAttribute('disabled');
          });
/*          
          var lis = theform.getElementsByTagName("li");
          for (var i = 0; i < lis.length; i++) {
            var li = lis[i];
            if (Element.hasClassName(li, "buttons")) {
              var buttons = li.getElementsByTagName("button");
                for (var j = 0; j < buttons.length; j++) {
                  buttons[j].disabled = false;
                }
            }  
          }
*/
        } else {
          if (!f) {
            theform.submit();
          } else {
            f(json);        
          }
        }
      }
    }
  });
}

function validateForm2(formid, pars, f) {
  var theform = $(formid);
  $$('#' + formid + ' span.error').each(function(elt) {
    elt.remove();
  });
  if ($('error_message') != undefined) {
    $('error_message').remove();
  }
  $$('#' + formid + ' li.buttons button').each(function(elt) {
    elt.writeAttribute('disabled', 'disabled');
  });

  if (!pars)
    pars = theform.serialize(true);
  new Ajax.Request(
    theform.action,
    {
      method: theform.method,
      parameters : pars,
      timeout    : req_timeout,
      onComplete: function(req){
        var data = req.responseText;
        var json = data.evalJSON(true);
        if(typeof data == "error")
        {
          console.warn("error!",args);
        }
        else
        {
          var errors = $H(json.errors);
          errors.unset('REMOVE'); 
          if (errors.size() > 0) {
            //$$('#' + formid + ' ol.forms')[0].insert({top: '<li id="error_message" class="errormsg"><label>' + _('The form contains errors. See details below.') + '</label></li>'});
            //$(formid).insert({top: '<p id="error_message" class="errormsg">' + _('The form contains errors.') + '</p>'});
            var error_message  = document.createElement('p');
            //error_message.setAttribute(className, 'errormsg');
            Element.addClassName(error_message, 'errormsg');
            error_message.setAttribute('id', 'error_message');
            error_message.innerHTML = _('The form contains errors.');
            theform.insertBefore(error_message,theform.firstChild);

            errors.each(function(pair) {
              if (pair.value == _('Connection timeout')) {
                window.location=redirect_after_logout;
              }
              //$(pair.key).parentNode.insert({bottom: '<span class="error">' + pair.value + '</span>'});
              //$(pair.key).parentNode.innerHTML += '<span class="error">' + pair.value + '</span>';
              var error_span  = document.createElement('span');
              //error_span.setAttribute(className, 'error');
              Element.addClassName(error_span, 'error');
              error_span.innerHTML = pair.value;
              $(pair.key).parentNode.appendChild(error_span);
            });
            $$('#' + formid + ' li.buttons button').each(function(elt) {
              elt.removeAttribute('disabled');
            });             
          } else {
            if (!f) {
              theform.submit();
            } else {
              f(json);        
            }
          }
        }
      }
    });
  //return false;
}

function discardElement(element) {
  var garbageBin = document.getElementById('IELeakGarbageBin');
  if (!garbageBin) {
    garbageBin = document.createElement('DIV');
    garbageBin.id = 'IELeakGarbageBin';
    garbageBin.style.display = 'none';
    document.body.appendChild(garbageBin);
  }
  // move the element to the garbage bin
  garbageBin.appendChild(element);
  garbageBin.innerHTML = '';
}

function preloadImages() {
	if (document.images) {
		for (var i = 0; i < preloadImages.arguments.length; i++) {
			(new Image()).src = preloadImages.arguments[i];
		}
	}
}

/*
  function mousePosX(e) {
  	var posx = 0;
  	if (!e) var e = window.event;
  	if (e.pageX) 	{
  		posx = e.pageX;
  	}
  	else if (e.clientX) 	{
  		posx = e.clientX + document.body.scrollLeft
  			+ document.documentElement.scrollLeft;
  	}
          return posx;
  }
  
  function mousePosY(e) {
  	var posy = 0;
  	if (!e) var e = window.event;
  	if (e.pageY) 	{
  		posy = e.pageY;
  	}
  	else if (e.clientY) 	{
  		posy = e.clientY + document.body.scrollTop
  			+ document.documentElement.scrollTop;
  	}
          return posy;
  }
*/

  function mousePosX(e) {
    if (!e) e = window.event||window.Event;
    var x = e.clientX + document.body.scrollLeft | e.pageX + window.pageXOffset | e.clientX + document.documentElement.scrollLeft;
/*
    var x = event.pageX || (event.clientX +
              ((document && document.documentElement && document.documentElement.scrollLeft)
                  || (document && document.body && document.body.scrollLeft)));
*/
	  //var x = (window.Event) ? e.pageX : e.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);

    return x;

  }

  function mousePosY(e) {
    if (!e) e = window.event||window.Event;
    var y = e.clientY + document.body.scrollTop  | e.pageY + window.pageYOffset | e.clientY + document.documentElement.scrollTop ;
    
/*
    var y = event.pageY || (event.clientY +
              ((document && document.documentElement && document.documentElement.scrollTop)
                  || (document && document.body && document.body.scrollTop)));
*/
  	//var y = (window.Event) ? e.pageY : e.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
    
    return y;  
  }

  function getTotalPageSize() {
  	        
  	     var xScroll, yScroll;
  		
  		if (window.innerHeight && window.scrollMaxY) {	
  			xScroll = window.innerWidth + window.scrollMaxX;
  			yScroll = window.innerHeight + window.scrollMaxY;
  		} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
  			xScroll = document.body.scrollWidth;
  			yScroll = document.body.scrollHeight;
  		} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
  			xScroll = document.body.offsetWidth;
  			yScroll = document.body.offsetHeight;
  		}
  		
  		var windowWidth, windowHeight;
  		
  		if (self.innerHeight) {	// all except Explorer
  			if(document.documentElement.clientWidth){
  				windowWidth = document.documentElement.clientWidth; 
  			} else {
  				windowWidth = self.innerWidth;
  			}
  			windowHeight = self.innerHeight;
  		} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
  			windowWidth = document.documentElement.clientWidth;
  			windowHeight = document.documentElement.clientHeight;
  		} else if (document.body) { // other Explorers
  			windowWidth = document.body.clientWidth;
  			windowHeight = document.body.clientHeight;
  		}	
  		
  		// for small pages with total height less then height of the viewport
  		if(yScroll < windowHeight){
  			pageHeight = windowHeight;
  		} else { 
  			pageHeight = yScroll;
  		}
  	
  		// for small pages with total width less then width of the viewport
  		if(xScroll < windowWidth){	
  			pageWidth = xScroll;		
  		} else {
  			pageWidth = windowWidth;
  		}
  
  		return [pageWidth,pageHeight];
  	}

	function showHide(id, styleDisplay, displayInline) {
		var node = document.getElementById(id);
		if(node) {
			if(styleDisplay) {
				node.style.display = styleDisplay;
			} else {
				if(node.style.display == 'none' || node.style.display == '') {
					node.style.display = (displayInline ? 'inline' : 'block'); 
				} else {
					node.style.display = 'none';
				}
			}	
		}
	}
	
function toggleDiv(id) {
  new Effect.toggle(id,'blind');
}	
	
	function swapCssClassName(eltNameArray, className1, className2) {
    for (var i = 0; i < eltNameArray.length; i++) {
      var elt = $(eltNameArray[i]);
      if (Element.hasClassName(elt, className1)) {
        Element.removeClassName(elt, className1);
        Element.addClassName(elt, className2);
      } else if (Element.hasClassName(elt, className2)) {
        Element.removeClassName(elt, className2);
        Element.addClassName(elt, className1);
      }
    }
  }

  function toogle_button(btn, src1, src2)
  {
    if (btn.src.indexOf(src1) > -1)
    {
      btn.src = src2;
    }
    else
    {
      btn.src = src1;
    }
  }


function processErrors(json, show_alert) {
  var errors = $H(json.errors);
  var connected = true;
  errors.unset('REMOVE');
  if (errors.size() > 0) {
      var msg = '';
      errors.each(function(pair) {
        if (pair.value == _('Connection timeout')) {
          window.location=redirect_after_logout;
          connected = false;
        }
        msg += pair.value + "\n";
      });
      if (connected) {
        if (!show_alert) {
          alert(msg);
        } else {
          showAlert(window.event, {'title': _('Error'), 'body': '<p class="error">' + msg + '</p>'});        
        }
      }
      return false;
  }
  return true;
}
/* Mailbox */
function checkUncheckAllMessages(cb, formid) {

  var checkbox_value = cb.checked ? 1 : 0;
  
  $$('#' + formid + ' input[type="checkbox"]').each(function(elt) {
    elt.checked = checkbox_value;
  });
}

function setSelRange(inputEl, selStart, selEnd) { 
 if (inputEl.setSelectionRange) { 
  inputEl.focus(); 
  inputEl.setSelectionRange(selStart, selEnd); 
 } else if (inputEl.createTextRange) { 
  var range = inputEl.createTextRange(); 
  range.collapse(true); 
  range.moveEnd('character', selEnd); 
  range.moveStart('character', selStart); 
  range.select(); 
 } 
}

function confirmDeleteMessage(id, mailbox) {
  showDialog(window.event,
  {'title': _('Delete message'),
  'body': _('Are you sure you want to delete this message?'),
  'ok' : function() {deleteMessage(id, mailbox);} 
  });
}

function confirmDeleteSelectedMessages(mailbox) {
  var nb_checked = 0;
  $$('#messages_form input[type="checkbox"]').each(function(elt) {
    if (elt.checked) {
      nb_checked += 1;
    }
  });

  if (nb_checked > 0) {
    showDialog(window.event,
    {'title': _('Delete selected message(s)'),
    'body': _('Are you sure you want to delete selected message(s)?'),
    'ok' : function() {deleteMessages(document.messages_form, mailbox);} 
    });
  } else {
    showAlert(window.event, {'title': _('Delete selected message(s)'), 'body': "<p class='error'>" + _('No message was selected.') + "</p>"});
  }
  return false;
}

function deleteMessage(id, mailbox) {
  var url = mailbox_root_url + mailbox + '.php';
	new Ajax.Request(url, {method: 'get', parameters: 'deletemessage=' + id,
   onComplete: function (req) {
    var data = req.responseText;
    var json = data.evalJSON(true);
    if (processErrors(json)) {
      var messageid = json.messageid;
      fadeOutTableRow(
        $('message_' + messageid),
        function() {
          formatTableRows($(mailbox), url);
        });
    }
  }});
}


function confirmDeleteMessageFromDetail(id, mailboxid, backurl) {
  showDialog(window.event,
  {'title': _('Delete message'),
  'body': _('Are you sure you want to delete this message?'),
  'ok' : function() {deleteMessageFromDetail(id, mailboxid, backurl);} 
  });
}

function deleteMessageFromDetail(id, mailboxid, backurl) {
  var mailbox = mailboxid == 1 ? 'inbox' : 'outbox';
  var url = mailbox_root_url + mailbox + '.php';
	new Ajax.Request(url, {method: 'get', parameters: 'deletemessage=' + id,
   onComplete: function (req) {
    var data = req.responseText;
    var json = data.evalJSON(true);
    if (processErrors(json)) {
      var messageid = json.messageid;
      window.location = backurl;
    }
  }});
}

function deleteMessages(theform, mailbox) {
  var url = mailbox_root_url + mailbox + '.php';
  theform.request({
    timeout    : req_timeout,
    onComplete: function(req){
      var data = req.responseText;
      var json = data.evalJSON(true);
      if (processErrors(json)) {
        var message_ids = json.message_ids;
        message_ids.each(function(messageid) {
          //fadeOutTableRow($('message_' + messageid), $(mailbox), url);
          fadeOutTableRow(
            $('message_' + messageid),
            function() {
              formatTableRows($(mailbox), url);
            });

        });
      }
    }
  });
}

function fadeOutElement(elt) {
  new Effect.Fade(elt, {
    duration : 0.3,
    afterFinish : function(effect) {
      //effect.element.remove();
      discardElement(effect.element);
    }
  });
}

function fadeOutTableRow(elt, f) {
  new Effect.Fade(elt, {
    duration : 0.3,
    afterFinish : function(effect) {
      effect.element.remove();
      if (f) {
        f();
      }
    }
  });
}

function formatTableRows(thetable, refresh_url) {
  var row_list = thetable.getElementsByTagName("tr");
/*  
  if (row_list.length == 1) {
    new Effect.Fade(thetable, {
      duration : 0.3,
      afterFinish : function(effect) {
        effect.element.remove();
      }
    });
  } else {
*/
  if (row_list) {
    if (row_list.length == 1) {
      if (refresh_url == undefined) {
        refresh_url = location.href;
      }
      window.location = refresh_url;
      return;
    }
  
      for (var i = 1; i < row_list.length; i++) {
        row = row_list[i];
        if ((i-1) % 2 == 1) {
          Element.addClassName(row, 'odd');
        } else {
          Element.removeClassName(row, 'odd');
        }
      }
  }
/*
  }
*/
}

/*
function fadeOutTableRow(elt, thetable, refresh_url) {
  new Effect.Fade(elt, {
    duration : 0.3,
    afterFinish : function(effect) {
      effect.element.remove();
      if (thetable != undefined) {
        formatTableRows(thetable, refresh_url);
      }
    }
  });
}
*/

function createMessage(to_ids, to_names, subject, body, bcc, no_send_resume_link) {
  //checkAuthenticatedBefore(function() {
  if (web_site == 1) {

  	new Ajax.Request(resume_actions_url, {method: 'get', parameters: 'action=get_user_resumes',
     onComplete: function (req) {
      var data = req.responseText;
      var json = data.evalJSON(true);
      if (processErrors(json, true)) {
        var resumes = $H(json.resumes);
        resumes.unset('REMOVE');
        
        showNewMessageForm(to_ids, to_names, subject, body, resumes, bcc, no_send_resume_link);
  
      }
    }});
  
  } else if (web_site == 2) {
      showNewMessageForm(to_ids, to_names, subject, body, undefined, bcc, no_send_resume_link);
  }
  
  //});

}

function showNewMessageForm(to_ids, to_names, subject, body, resumes, bcc, no_send_resume_link) {
      if (to_ids == undefined) {
        to_ids = '';
      }
      if (subject == undefined) {
        subject = '';
      }
      if (body == undefined) {
        body = '';
      }
      if (bcc == undefined) {
        bcc = '';
      }
      var attach_resume_html = '';
      if (resumes != undefined && resumes.keys().length > 0 && no_send_resume_link == undefined) {
        attach_resume_html = "<li class='no-background' style='padding: 0 0 20px 110px;'>\
          <a class='attachment' href='#' onclick='showHide(\"select-resume2\"); return false;' style='padding-top: 4px;'>" + _('Attach resume') + "</a>\
          <div id='select-resume2' style='display:none;margin-top: 5px;'>"
          + getSelectHtml(resumes, 'resume-list2', '', 'medium2', '--', 'resume-list2', false, 'values', false)
          + "&nbsp;&nbsp;<a href='#' onclick='attachResume($(\"resume-list2\").value, $(\"resume-list2\").options[$(\"resume-list2\").selectedIndex].innerHTML, $(\"body\")); return false;'>" + _('Attach') + "</a>\
          </div>\
      </li>";
      }
  
      showDialog(window.event,
      {'title': _('New message'),
      'width' : 700,
      'body' : "<div id='NewMessageForm'>\
      <ol class='forms'>\
      <input type='hidden' name='bcc' id='bcc' value='" + bcc + "'/>\
      <li class='no-background' style='position: relative;z-index: 1;'><label for='to_ids' class='formlabel' style='padding-top: 3px;'><span class='required'>*</span> " + _('To') + "</label>\
          <input type='text' name='to_ids' id='to_ids' value='" + to_ids + "' class='medium4'/>\
          <span id='to_ids_error' class='error'></span>\
      </li>\
      <li class='no-background'><label for='subject' class='formlabel'><span class='required'>*</span> " + _('Subject') + "</label>\
          <input type='text' name='subject' id='subject' value=\"" + myaddslashes(subject) + "\" maxlength='255' class='medium4'/>\
          <span id='subject_error' class='error'></span>\
      </li>\
      <li class='no-background'><label for='body' class='formlabel'><span class='required'>*</span> " + _('Message') + "</label>\
          <textarea name='body' id='body' class='medium4 short3'>" + myaddslashes(body) + "</textarea>\
          <span id='body_error' class='error'></span>\
      </li>"
      + attach_resume_html
      + "</ol>\
      </div>",
      'okLabel': _('Send'),
      'OkDoNotClose' : true,
      'cancelLabel': _('Cancel'),
      'buttonsStyle' : 'formButtons',
      'buttonsPadding' : 110,
      'postDisplay' : function() {createRecipientList(to_ids, to_names);},  
      'ok' : doCreateMessage,
      'focus' : 'to_ids'
      });

}

function createRecipientList(to_ids, to_names) {
    var options = {
			regexSearch: false,
			//feed: json_feed,
			//fetchFile: new_message_url + '?get_contacts',
			defaultMessage: _('Type and select contacts or type external emails (comma separated)'),
			sortResults: true,
      autoResize: true,
      encodeEntities: true,
      separator: ',',
      //inputMessage: _('Type and select recipients'),
      newValues: true,
      hideAddMessage: true,
      //onUserAdd: function(x){alert(x.caption);},
      encodeEntities: true
      //results: 5,
      //maxResults: 0,
    };
    if (to_ids == undefined || to_ids == '' || to_names == undefined || to_names == '') {
      options['fetchFile'] = new_message_url + '?get_contacts';
    } else {
      var recipients = Array();
      for (var i = 0; i < to_ids.length; i++) {
        var recipient = {"caption": to_names[i], "value": to_ids[i]};
        recipients.push(recipient);
      }
      //options['feed'] = ('[{"caption": "' + to_names + '" , "value": ' + to_ids + '}]').evalJSON(true);
      options['feed'] = recipients;
    }
    var control = new ProtoMultiSelect('to_ids', 'demo-autocomplete', options);
    //$('to_ids').focus();
}

function doCreateMessage() {
    $$('#popup span.error').each(function(elt) {
      elt.innerHTML = '';
    });
/*    
    pars = 'to_ids=' + $('to_ids').value
    + '&subject=' + escape($('subject').value)
    + '&body=' + escape($('body').value);
*/    
    pars = {
      to_ids : $('to_ids').value,
      subject : $('subject').value,
      body : $('body').value,
      bcc : $('bcc').value
    };
    
    new Ajax.Request(new_message_url, {method: 'post', parameters: pars, onComplete: function (req) {
          var data = req.responseText;
          var json = data.evalJSON(true);

          var errors = $H(json.errors);
          errors.unset('REMOVE');
          if (errors.size() > 0) {
              errors.each(function(pair) {
                if (pair.value == _('Connection timeout')) {
                  window.location=redirect_after_logout;
                }
                $(pair.key + '_error').innerHTML = json.errors[pair.key] ? json.errors[pair.key] : '';
              });
          } else {
            showAlert(window.event, {'title': _('New message'), 'body': _('Your message has been sent.')});
          }
        }});
}

/* End Mailbox */
/* Invitations */

function confirmAcceptInvitation(id, contactname) {
  showDialog(window.event,
  {'title': _('Accept invitation'),
  'body': _('Are you sure you want to accept invitation from %s?').replace('%s', contactname),
  'ok' : function() {updateInvitationStatus(id, contactname, 1);},
  'OkDoNotClose' : true 
  });
}

function confirmRefuseInvitation(id, contactname) {
  showDialog(window.event,
  {'title': _('Refuse invitation'),
  'body': _('Are you sure you want to refuse invitation from %s?').replace('%s', contactname),
  'ok' : function() {updateInvitationStatus(id, contactname, 2);},
  'OkDoNotClose' : true 
  });
}

function updateInvitationStatus(id, contactname, status) {
	new Ajax.Request(my_invitations_url, {method: 'get', parameters: 'update_invitation_status&id=' + id + '&status='+status,
   onComplete: function (req) {
    var data = req.responseText;
    var json = data.evalJSON(true);
    if (processErrors(json, true)) {

    if (json.result != 0) {

      if (parseInt(json.result) == 1) {

        showAlert(window.event, {
          'title': _('Invitation already accepted'),
          'body': '<p class="error">' + _('You already accepted this invitation.') + '</p>'
          });

      } else if (parseInt(json.result) == 2) {

        showAlert(window.event, {
          'title': _('Invitation already refused'),
          'body': '<p class="error">' + _('You already refused this invitation.') + '</p>'
          });

      }
    } else {

        if (status == 1) {
          if (json.contact_added) {
            showAlert(window.event, {
              'title': _('Invitation accepted'),
              'body': _('%s has been added to your contacts.').replace('%s', contactname)
              });
          }
        } else {
            showAlert(window.event, {
              'title': _('Invitation refused'),
              'body': _('%s\'s invitation has been refused.').replace('%s', contactname)
              });
        }
  
        if ($('received_invitation_' + id) != undefined) {
          fadeOutTableRow(
            $('received_invitation_' + id),
            function() {
              var thetable = $('received_invitation_table');
              var row_list = thetable.getElementsByTagName("div");
              if (!row_list.length) {
                //window.location = location.href;
                $('received_invitations_empty_msg').style.display = 'block';
              }
            });
        }
    }

    }
  }});
}


/* End Invitations */
/* Location */
function getRegions(countryid, multi_select) {
  if (multi_select == undefined)
    multi_select = true;

  showLoader();
 	new Ajax.Request(get_regions_url, {method: 'get', parameters: 'countryid=' + countryid,
   onLoading : function(req) {/*showLoader();*/},
   onComplete: function (req) {
    hideLoader();
    var data = req.responseText;
    var json = data.evalJSON(true);
    var region_list = $H(json.region_list);
    region_list.unset('REMOVE');
    var html = getSelectHtml(region_list, 'region', '', 'medium2', '', 'region', false, 'values');
    replaceHtml('region_container',html);
    //$('region').value='';
/*
    if ($('city_container') != undefined) {
      html = "<select id='city' name='city' class='medium2'><option value=''>" + '--' + "</option><option value=''></option></select>";
      replaceHtml('city_container',html);
      $('region').onchange = function() {getCities($('country').value, $('region').value);};
    }
*/
    if ($('department_container') != undefined) {
      html = "<select id='department' name='department' class='medium2'><option value=''>" + _('All departments') + "</option></select>";
      replaceHtml('department_container',html);
      $('region').onchange = function() {getDepartments($('country').value, $('region').value, multi_select);};
    }

  },
  onTimeout  : function(req){ hideLoader();},
  onError    : function(req){hideLoader();}
  });
}
/*
function getCities(countryid, regionid) {
  showLoader();
 	new Ajax.Request(get_cities_url, {method: 'get', parameters: 'countryid=' + countryid + '&regionid=' + regionid,
   onLoading : function(req) {
   //showLoader();
   },
   onComplete: function (req) {
    hideLoader();
    var data = req.responseText;
    var json = data.evalJSON(true);
    var city_list = $H(json.city_list);
    city_list.unset('REMOVE');
    var html = getSelectHtml(city_list, 'city', '', 'medium2', '--');
    replaceHtml('city_container',html);
  },
  onTimeout  : function(req){ hideLoader();},
  onError    : function(req){hideLoader();}
  });
}
*/

function getDepartments(countryid, regionid, multi_select) {
  showLoader();
 	new Ajax.Request(get_departments_url, {method: 'get', parameters: 'countryid=' + countryid + '&regionid=' + regionid,
   onLoading : function(req) {
   //showLoader();
   },
   onComplete: function (req) {
    hideLoader();
    var data = req.responseText;
    var json = data.evalJSON(true);
    var department_list = $H(json.department_list);
    department_list.unset('REMOVE');
    if (!multi_select) {
      var html = getSelectHtml(department_list, 'department', '', 'medium2', '', 'department', false, 'values');
      replaceHtml('department_container',html);
    } else {
      //var html = getSelectHtml(department_list, 'department', '', 'medium2', '--');
      var html = getMultiSelectCheckBoxHtml(department_list, 'department', '', 194, 196, 160, _('All departments'), _('department(s)'), false, 'values');
      replaceHtml('department_container',html);
      $('department_label').emptyLabel = _('All departments');
      $('department_label').selectedLabel = _('department(s)');

      if (Prototype.Browser.IE6) {
        $$('#department_optionsContainer .MCP_option').each(function(elt) {
          elt.onmouseover = function() {Element.addClassName(this,'hover');}
          elt.onmouseout = function() {Element.removeClassName(this,'hover');}
        });
      }
  }

  },
  onTimeout  : function(req){ hideLoader();},
  onError    : function(req){hideLoader();}
  });
}

function getRegionsAndDepartments(countryid, countryname) {
  showLoader();
 	new Ajax.Request(get_departments_url, {method: 'get', parameters: 'countryid=' + countryid,
   onLoading : function(req) {
   //showLoader();
   },
   onComplete: function (req) {
    hideLoader();
    var data = req.responseText;
    var json = data.evalJSON(true);
    var department_list = $H(json.department_list);
    department_list.unset('REMOVE');

    //var emptyLabel = _('All locations') + (countryname != undefined ? ' ' + _('in') + ' ' + countryname : '');
    var emptyLabel = countryname != undefined ?  _('All locations in') + ' ' + countryname : _('All locations');
    var html = getMultiSelectCheckBoxHtml(department_list, 'department', '', 194, 357, 160, emptyLabel, _('department(s)'), true, '');

    replaceHtml('department_container',html);
    $('department_label').emptyLabel = emptyLabel;
    $('department_label').selectedLabel = _('department(s)');

    if (Prototype.Browser.IE6) {
      $$('#department_optionsContainer .MCP_option').each(function(elt) {
        elt.onmouseover = function() {Element.addClassName(this,'hover');}
        elt.onmouseout = function() {Element.removeClassName(this,'hover');}
      });

  }

  },
  onTimeout  : function(req){ hideLoader();},
  onError    : function(req){hideLoader();}
  });
}
/* End Location */
/* Job functions */

function getJobFunctions(job_category_industry_id, job_function_field_name) {
  if (job_function_field_name == undefined)
    job_function_field_name = 'job_function';
  var categoryid, industryid;
  var tab = job_category_industry_id.split('-');
  if (tab.length < 2) {
    categoryid = undefined;
    industryid = undefined;
  }
  //return false;
  if (tab[0] == '1') {
    categoryid = parseInt(tab[1]);
    industryid = undefined;
  } else if (tab[0] == '2') {
    categoryid = undefined;
    industryid = parseInt(tab[1]);
  } else {
    categoryid = undefined;
    industryid = undefined;
    //return false;
  }
  
  showLoader();
 	new Ajax.Request(get_job_functions_url, {method: 'get', parameters: 'categoryid=' + categoryid + '&industryid=' + industryid,
   onLoading : function(req) {/*showLoader();*/},
   onComplete: function (req) {
    hideLoader();
    var data = req.responseText;
    var json = data.evalJSON(true);
    var job_function_list = $H(json.job_function_list);
    job_function_list.unset('REMOVE');
    var html = getSelectHtml(job_function_list, job_function_field_name, '', 'medium2', '', job_function_field_name, false, 'values');
    replaceHtml('job_function_container',html);

  },
  onTimeout  : function(req){ hideLoader();},
  onError    : function(req){hideLoader();}
  });
}

function getJobFunctionsByJobCategoryOrIndustry(categoryid, industryid, job_function_field_name) {
  if (job_function_field_name == undefined)
    job_function_field_name = 'job_function';
  showLoader();
  
 	new Ajax.Request(get_job_functions_url, {method: 'get', parameters: 'categoryid=' + categoryid + '&industryid=' + industryid + '&or=1',
   onLoading : function(req) {/*showLoader();*/},
   onComplete: function (req) {
    hideLoader();
    var data = req.responseText;
    var json = data.evalJSON(true);
    var job_function_list = $H(json.job_function_list);
    job_function_list.unset('REMOVE');
    var html = getSelectHtml(job_function_list, job_function_field_name, '', 'medium2', '', job_function_field_name, false, 'values');
    replaceHtml('job_function_container',html);

  },
  onTimeout  : function(req){ hideLoader();},
  onError    : function(req){hideLoader();}
  });
}

/* End Job functions */
/* Form field hints */
function prepareInputsForHints() {
	var inputs = document.getElementsByTagName("input");
	for (var i=0; i<inputs.length; i++){
    addHint(inputs[i]);
	}
	// repeat the same tests as above for selects
	var selects = document.getElementsByTagName("select");
	for (var k=0; k<selects.length; k++){
    addHint(selects[k]);
	}
}

function addHint(inputField) {
  var spans = inputField.parentNode.getElementsByTagName("span");
  for (var i=0; i<spans.length; i++){
    if (spans[i].className.indexOf("hint")>-1) {
			inputField.onfocus = function () {
			  var _spans = this.parentNode.getElementsByTagName("span");
			  for (var j=0; j<_spans.length; j++){
			   if (_spans[j].className.indexOf("hint")>-1) {
			     _spans[j].style.display = "inline";
			   }
			  }
			}
			inputField.onblur = function () {
			  var _spans = this.parentNode.getElementsByTagName("span");
			  for (var j=0; j<_spans.length; j++){
			   if (_spans[j].className.indexOf("hint")>-1) {
			     _spans[j].style.display = "none";
			   }
			  }
			}
    }
  }
}
/* End Form field hints */
/* Tooltips */
function addTooltips() {
  $$('span.questionmark').each(function(elt) {
    addTooltip(elt);
  });
}

function addTooltip(questionSpan) {
    var spans = questionSpan.getElementsByTagName("span");
    if (spans.length > 0) {
      tooltipSpan = spans[0];
      if (tooltipSpan.className.indexOf("tooltip")>-1) {
        questionSpan.onmouseover = function () {
          var _spans = this.getElementsByTagName("span");
  			  for (var j=0; j<_spans.length; j++){
  			   if (_spans[j].className.indexOf("tooltip")>-1) {
  			     _spans[j].style.display = "block";
  			   }
          }
        }
        questionSpan.onmouseout = function () {
          var _spans = this.getElementsByTagName("span");
  			  for (var j=0; j<_spans.length; j++){
  			   if (_spans[j].className.indexOf("tooltip")>-1) {
  			     _spans[j].style.display = "none";
  			   }
          }
        }
      }
    }
}

function addTooltipToField(inputField) {
  var spans = inputField.parentNode.getElementsByTagName("span");
  for (var i=0; i<spans.length; i++){
    if (spans[i].className.indexOf("questionmark")>-1) {
      addTooltip(spans[i]);
    }
  }
}
/* End Tooltips */
/* Multi select checkbox */
function initMSC() {
  if (Prototype.Browser.IE6) {
    $$('.toggle, .MCP_option').each(function(elt) {
      elt.onmouseover = function() {Element.addClassName(this,'hover');}
      elt.onmouseout = function() {Element.removeClassName(this,'hover');}
    });
  }
  window.currentMSC = null;
  Event.observe(document, "click", (hideMSCOnClick), true);
  //Event.observe(document, "keypress", (hideMSCOnKeyPress), true);
  Event.observe(document, "keydown", (hideMSCOnKeyPress), true);
}
function hideMSCOnClick(event) {
  var elt = Event.element(event);
  if (window.currentMSC != null) {
    if (!Element.descendantOf(elt, $(window.currentMSC + '_optionsContainer')) && !Element.descendantOf(elt, $(window.currentMSC + '_select'))) {
      //if (!$(window.currentMSC + '_optionsContainer')._s_clicked) {
        closeMSC(window.currentMSC);
      //}
      //$(window.currentMSC + '_optionsContainer')._s_clicked = false;      
    }
  }
}
function hideMSCOnKeyPress(event) {
  if (event.keyCode == Event.KEY_ESC) {
    if (window.currentMSC != null) {
      closeMSC(window.currentMSC);
    }
  }
}
function toggleMSC(id) {
	var node = document.getElementById(id + '_optionsContainer');
	if(node) {
		if(node.style.display == 'none' || node.style.display == '') {
			openMSC(id);
			if (Prototype.Browser.IE6) {
			 SelectFix.repairFloatingElement(node);
			}
		} else {
			closeMSC(id);
			//updateMSC(id);
		}
	}
}
function openMSC(id) {
  if (window.currentMSC != null) {
    closeMSC(window.currentMSC);
  }
  node = $(id + '_optionsContainer');
  node.style.display = 'block';
  //showMSCIframe(id);
  Element.addClassName($(id +'_select'), 'focus');
  window.currentMSC = id;
}

function showMSCIframe(id) {
  if (Prototype.Browser.IE6) {
  //alert($(id + '_optionsContainer').offsetHeight);
    $(id + '_iframehack').style.display = 'block';
    $(id + '_iframehack').style.height = $(id + '_optionsContainer').offsetHeight;
  }
}

function closeMSC(id) {
  node = $(id + '_optionsContainer');
  //if (Prototype.Browser.IE6) {
  //  $(id + '_iframehack').style.display = 'none';
  //}
  node.style.display = 'none';
  Element.removeClassName($(id +'_select'), 'focus');
  window.currentMSC = null;
  //updateMSC(id);
}
function updateMSC(id) {
  var optionsCollection = $(id + '_optionsContainer').getElementsByTagName('input');
  tmp = Array();
  selectedGroupList = Array();
  
	for (i=0; i<optionsCollection.length; i++)
	{
		var currentInput	= optionsCollection.item(i);
		if (currentInput.checked)
		{
			if (currentInput.getAttribute('value'))
			{
				tmp.push(currentInput.getAttribute('value'));
			}
		}
  }
	$(id).value	= tmp.join(',');
	label = $(id + '_label');
	if (tmp.length > 0) {
		label.innerHTML = tmp.length + ' ' + label.selectedLabel;
  } else {
		label.innerHTML = label.emptyLabel;
  }
  
  $$('#' + id + '_optionsContainer .MCP_group').each(function(groupItem) {
    var folderId = groupItem.id.replace('_group_', '_folder_');
    var selected = false;
    var groupCheckboxes = $(folderId).getElementsByTagName('input');
    for (i=0; i<groupCheckboxes.length; i++) {
  		var currentInput	= groupCheckboxes.item(i);
  		if (currentInput.checked)
  		{
  			if (currentInput.getAttribute('value'))
  			{
  				selected = true;
  				break;
  			}
  		}
    }
    if (selected) {
      if (!Element.hasClassName(groupItem, 'selected')) {
        Element.addClassName(groupItem, 'selected');
      }
    } else {
      if (Element.hasClassName(groupItem, 'selected')) {
        Element.removeClassName(groupItem, 'selected');
      }
    }
  });

}

function toggleMSCFolder(groupElt, id, folderId) {
  var folderElt = $(folderId);
  if (folderElt.style.display == undefined
    || folderElt.style.display == ''
    || folderElt.style.display == 'none') {
    folderElt.style.display = 'block';
    Element.removeClassName(groupElt, 'expand');
    Element.addClassName(groupElt, 'collapse');
  } else {
    folderElt.style.display = 'none';
    Element.removeClassName(groupElt, 'collapse');
    Element.addClassName(groupElt, 'expand');
  }
  //if (Prototype.Browser.IE6) {
  //  var ref_height = $(id + '_optionsContainer').offsetHeight;
  //  $(id + '_iframehack').style.height = $(id + '_optionsContainer').offsetHeight;
  //}
}

function getMultiSelectCheckBoxHtml(myList, name, selectValues, width, width2, height, emptyLabel, selectedLabel, two_levels, sortBy) {
  var html = [];
  var idx = 0;

    //$ie6_hover = 'onmouseover="Element.addClassName(this,\'hover\');" onmouseout="Element.removeClassName(this,\'hover\')" ';
  if (emptyLabel == undefined)
    emptyLabel = '';
  if (selectedLabel == undefined)
    selectedLabel = '';

    if (selectValues && selectValues.length) {
      label = selectValues.length + ' ' + selectedLabel;
      value = html.join(',');
    } else {
      label = emptyLabel;
      value = '';
    }

    html[idx++] = '<div class="MCP_control" style="width:' + width + 'px;" id="' + name + '_select" onmousedown="toggleMSC(\'' + name + '\');">'
				+ '<div class="toggle"></div>'
				+ '<div style="padding:1px 3px;"><label id="' + name + '_label">' + label + '</label></div>'
				+ '<div style="clear:both;"></div>'
				+ '</div>';

		if (width2 == undefined)
  		width2 = (two_levels ? width + 150 : width);
		if (height == undefined || height == 0)
  		height = 160;
  		
	  html[idx++] = '<div class="MCP_optionsContainer" id="' + name + '_optionsContainer" style="width:' + width2 + 'px; max-height:' + height + 'px; height: expression(this.scrollHeight > ' + height + ' ? "' + height + 'px" : "auto");">';

    var sortedKeys = sortKeys(myList, sortBy);

    if (!two_levels) {
/*
      myList.each(function(pair) {
        checked = (selectValues.length > 0 && selectValues.indexOf(pair.key) > -1);
        currentId		= name + '_' + pair.key;
  			html[idx++] = '<div class="MCP_option' + (two_levels ? ' second-level' : '') + '">'
  							+ '<input type="checkbox" id="' + currentId + '" value="' + pair.key + '" '
  							+  (checked ? ' checked="checked" ' : '')
  							+ ' />'
  							+ '<label style="width:' + (width2 - 47) + 'px;" '
  							+ 'onclick="$(\'' + currentId + '\').checked =!$(\'' + currentId + '\').checked; '
  							+ 'updateMSC(\'' + name + '\');">' + myaddslashes(pair.value) + '</label>'
  							+ '<div style="clear:both;"></div>'
  							+ '</div>';
      });
*/      
      for (var i = 0; i < sortedKeys.length; i++) {
        checked = (selectValues.length > 0 && selectValues.indexOf(sortedKeys[i]) > -1);
        currentId		= name + '_' + sortedKeys[i];
  			html[idx++] = '<div class="MCP_option' + (two_levels ? ' second-level' : '') + '">'
  							+ '<input type="checkbox" class="checkbox" id="' + currentId + '" value="' + sortedKeys[i] + '" '
  							+  (checked ? ' checked="checked" ' : '')
  							+ ' onclick="updateMSC(\'' + name + '\');"/>'
  							+ '<label style="width:' + (width2 - 47) + 'px;" '
  							+ 'onclick="$(\'' + currentId + '\').checked =!$(\'' + currentId + '\').checked; '
  							+ 'updateMSC(\'' + name + '\');">' + myaddslashes(myList.get(sortedKeys[i])) + '</label>'
  							+ '<div style="clear:both;"></div>'
  							+ '</div>';
      
      }
    
    } else {
      var groupCounter = 0;
      myList.each(function(group) {
        groupCounter += 1;
        var groupId		= name + '_group_' + groupCounter;
        var folderId		= name + '_folder_' + groupCounter;
        //html[idx++] = '<div class="MCP_group expand" id="' + groupId + '" onclick="toggleMSCFolder(this, \'' + name + '\',\'' + folderId + '\');">' + group.key + '</div><div class="MCP_folder" id="' + folderId + '">';
      
        var subList = $H(group.value);
        var sortedKeys = sortKeys(subList, sortBy);
/*
        $H(group.value).each(function(pair) {
          checked = (selectValues.length > 0 && selectValues.indexOf(pair.key) > -1);
          currentId		= name + '_' + pair.key;
    			html[idx++] = '<div class="MCP_option' + (two_levels ? ' second-level' : '') + '">'
    							+ '<input type="checkbox" id="' + currentId + '" value="' + pair.key + '" '
    							+  (checked ? ' checked="checked" ' : '')
    							+ ' />'
    							+ '<label style="width:' + (width2 - 47) + 'px;" '
    							+ 'onclick="$(\'' + currentId + '\').checked =!$(\'' + currentId + '\').checked; '
    							+ 'updateMSC(\'' + name + '\');">' + myaddslashes(pair.value) + '</label>'
    							+ '<div style="clear:both;"></div>'
    							+ '</div>';
        });
*/
        var html2 = [];
        var idx2 = 0;
        isSelected = false;
        for (var i = 0; i < sortedKeys.length; i++) {
          checked = (selectValues.length > 0 && selectValues.indexOf(sortedKeys[i]) > -1);
          if (checked) {
            isSelected = true;
          }
          currentId		= name + '_' + sortedKeys[i];
    			html2[idx2++] = '<div class="MCP_option' + (two_levels ? ' second-level' : '') + '">'
    							+ '<input type="checkbox" class="checkbox" id="' + currentId + '" value="' + sortedKeys[i] + '" '
    							+  (checked ? ' checked="checked" ' : '')
    							+ ' onclick="updateMSC(\'' + name + '\');"/>'
    							+ '<label style="width:' + (width2 - 47) + 'px;" '
    							+ 'onclick="$(\'' + currentId + '\').checked =!$(\'' + currentId + '\').checked; '
    							+ 'updateMSC(\'' + name + '\');">' + myaddslashes(subList.get(sortedKeys[i])) + '</label>'
    							+ '<div style="clear:both;"></div>'
    							+ '</div>';
        }
        html[idx++] = '<div class="MCP_group expand' + (isSelected ? ' selected' : '') + '" id="' + groupId + '" onclick="toggleMSCFolder(this, \'' + name + '\',\'' + folderId + '\');">' + group.key + '</div><div class="MCP_folder" id="' + folderId + '">';
        html[idx++] = html2.join(""); 
        html[idx++] = '</div>'; 
      });  
    }
		html[idx++] = '</div>';
		html[idx++] = '<div style="clear:both;"></div>';
		//html[idx++] = '<iframe id="' + name + '_iframehack" style="z-index: 9998; position: absolute; width: ' + (width2+2) + 'px; height: 160px; display: none;" frameborder="0"></iframe>';
		html[idx++] = '<input type="hidden" id="' + name + '" name="' + name + '" value="' + value + '" />';
		html[idx++] = '<script type="text/javascript">$("' + name + '_label").emptyLabel = "' + emptyLabel + '"; $("' + name + '_label").selectedLabel = "' + selectedLabel + '";</script>';
    return html.join("");
}


/* Multi select checkbox */
/* IE6 select z-index bug */
function hideSelectsIE6() {
  //$$('select').each(function(el) { Element.addClassName(el, 'hideselect');});  
}
function showSelectsIE6() {
  //$$('select').each(function(el) { Element.removeClassName(el, 'hideselect');});  
}
/* End IE6 select z-index bug */
/* Resume */
function createResume(event) {
  new Ajax.Request(resume_add_url, {method: 'get', parameters: 'get_nb_resumes', onComplete: function (req) {
        var data = req.responseText;
        var json = data.evalJSON(true);
        if (processErrors(json, true)) {
          var add_resume_allowed = json.add_resume_allowed;
          if (!add_resume_allowed) {
            showAlert(window.event, {'title': _('New resume'), 'body': '<p class="error">' + _('You reached the maximum number of resumes.') + '</p>'});
          } else {
            var language_list = $H(json.language_list);
            language_list.unset('REMOVE');
            enterResumeName(event, language_list);
          }
        }

    }});
}

function enterResumeName(event, language_list) {

  showDialog(event,
  {'title': _('Create new resume'),
  'width' : 700,
  'body' : "<div id='NewResume'><ol class='forms'>\
  <li class='no-background'><label for='name' class='formlabel'><span class='required'>*</span> " + _('Resume Name') + "</label>\
      <input type='text' name='resume_name' id='resume_name' value='' maxlength='64' class='medium2'/>\
      <span class='helpcontainer'><span class='help'>" + _('Choose a short name. The name will identify easily your resume in the site, in particular in the My resumes menu') + "</span></span>\
      <span id='name_error' class='error'></span>\
  </li>\
  <li class='no-background'><label for='language' class='formlabel'><span class='required'>*</span> " + _('Resume Language') + "</label>"
  + getSelectHtml(language_list, 'resume_language', '', 'medium2', '--', 'resume_language', false, 'values')
  + "<span id='language_error' class='error'></span>\
  </li>\
  <li class='no-background'><label for='title' class='formlabel'>" + _('Objective') + "</label>\
      <input type='text' name='resume_title' id='resume_title' value='' maxlength='200' class='medium2'/>\
      <span class='helpcontainer'><span class='help'>" + _('This description will appear on the top of your resume when displayed or printed') + "</span></span>\
      <span id='title_error' class='error'></span>\
  </li>\
  </ol></div>",
  'okLabel': _('Create'),
  'OkDoNotClose' : true,
  'cancelLabel': _('Cancel'),
  'buttonsStyle' : 'formButtons',
  'buttonsPadding' : 130,
  'ok' : doCreateResume,
  'focus' : 'resume_name'
  });
}

function doCreateResume() {
    $$('#popup span.error').each(function(elt) {
      elt.innerHTML = '';
    });
    pars = 'name=' + $('resume_name').value
    + '&language=' + $('resume_language').value
    + '&title=' + $('resume_title').value;
    new Ajax.Request(resume_add_url, {method: 'get', parameters: pars, onComplete: function (req) {
          var data = req.responseText;
          var json = data.evalJSON(true);

          var errors = $H(json.errors);
          errors.unset('REMOVE');
          if (errors.size() > 0) {
              errors.each(function(pair) {
                if (pair.value == _('Connection timeout')) {
                  window.location=redirect_after_logout;
                }
                $(pair.key + '_error').innerHTML = json.errors[pair.key] ? json.errors[pair.key] : '';
              });
          } else {
            window.location=resume_edit_url + '?id=' + json.resume_id;
          }
        }});
}

function sendResume(fullName, resumeUrl) {
  var subject = _('%s\'s resume').replace('%s', fullName);
  
  var body = _('%s just sent you his / her resume.').replace('%s', fullName) + "\n\n"
  + _('To view his / her resume, click this link:') + "\n\n"
  + "<a class='link' href='" + resumeUrl + "' target='_blank'>" + resumeUrl + "</a>\n\n";
  
  createMessage(undefined, undefined, subject, body, undefined, true);
}

/*
function sendResume(id) {

  showDialog(window.event,
  {'title': _('Send resume'),
  'width' : 420,
  'body' : "<ol class='forms'>\
  <li class='no-background'><label for='email' class='formlabel'><span class='required'>*</span> " + _('Enter email') + "</label>\
      <input type='text' name='email' id='email' value='' maxlength='64' class='medium2'/>\
      <span id='email_error' class='error'></span>\
  </li>\
  </ol>",
  'okLabel': _('Send'),
  'OkDoNotClose' : true,
  'cancelLabel': _('Cancel'),
  'buttonsStyle' : 'formButtons',
  'buttonsPadding' : 160,
  'ok' : function() {doSendResume(id);},
  'focus' : 'email'
  });
}
function doSendResume(id) {
    $$('#popup span.error').each(function(elt) {
      elt.innerHTML = '';
    });
    var pars = 'action=send_resume' + '&id=' + id + '&email=' + $('email').value;
    new Ajax.Request(edit_resume_url, {method: 'get', parameters: pars, onComplete: function (req) {
          var data = req.responseText;
          var json = data.evalJSON(true);

          var errors = $H(json.errors);
          errors.unset('REMOVE');
          if (errors.size() > 0) {
              errors.each(function(pair) {
                if (pair.value == _('Connection timeout')) {
                  window.location=redirect_after_logout;
                }
                $(pair.key + '_error').innerHTML = json.errors[pair.key] ? json.errors[pair.key] : '';
              });
          } else {
            showAlert(window.event, {'title': _('Send resume'), 'body': _('Your resume has been sent.')});
          }
        }});
}
*/
/* End Resume */
/* Tabs */
function selectTab(id, tab_name, section_name, tabs) {
  if (tabs == undefined)
    tabs = 'tabs';
  if (tab_name == undefined)
    tab_name = 'tab_';
  if (section_name == undefined)
    section_name = 'tabcontent_';
    
  var lilist = $(tabs).getElementsByTagName("li");
  if (lilist.length) {
    for (var i = 1; i<= lilist.length; i++) {
      if (i == id) {
        //$('tab_' + i).setAttribute(className,'active');
        Element.addClassName($(tab_name + i), 'active');
        Element.removeClassName($(tab_name + i), 'default');
        $(section_name + i).style.display = 'block';
      } else {
        //$('tab_' + i).removeAttribute(className,'active');
        Element.removeClassName($(tab_name + i), 'active');
        Element.addClassName($(tab_name + i), 'default');
        $(section_name + i).style.display = 'none';
      }
    }
  }
}
/* End Tabs */
/* Editable grid */
function makeRowEditable(id, edit_mode) {
  if (!edit_mode) {
    var editStyleDisplay = 'none';
    var viewStyleDisplay = 'block';
  } else {
    var editStyleDisplay = 'block';
    var viewStyleDisplay = 'none';
  }
  
  $$('#' + id + ' .editmode').each(function(elt) {
    elt.style.display = editStyleDisplay;
  });
  $$('#' + id + ' .editable').each(function(elt) {
    elt.style.display = viewStyleDisplay;
  });
  
/*
  var editmodeElts = getElementsByClassName('#' + id, 'editmode', undefined);
  for var (i = 0; i < editmodeElts; i++) {
    editmodeElts[i].style.display = editStyleDisplay;
  }
  var editableElts = getElementsByClassName('#' + id, 'editable', undefined);
  for var (i = 0; i < editableElts; i++) {
    editableElts[i].style.display = viewStyleDisplay;
  }
*/  
}
function editTableRow(id) {
  makeRowEditable(id, true);
  backupRowValues(id);
}
function cancelEditTableRow(id) {
  makeRowEditable(id, false);
  restoreRowValues(id);
}
function saveTableRow(id, f) {
  if (f)
    f();
  makeRowEditable(id, false);
}
function backupRowValues(id) {
  $(id).values = {}
  $$('#' + id + ' input.editmode', '#' + id + ' select.editmode').each(function(elt) {
    $(id).values[elt.id] = elt.value;
  });
}
function restoreRowValues(id) {
  $$('#' + id + ' input.editmode', '#' + id + ' select.editmode').each(function(elt) {
    if ($(id).values[elt.id])
      elt.value = $(id).values[elt.id];
  });
}
/* End Editable grid */
/* Editable form */
function showEditMenu(elt) {
  Element.addClassName(elt, 'hover');
/*
  $$('#' + elt.id + ' .actions').each(function(item) {
    item.style.display = 'block';
  });
*/
  for (var i=0; i<elt.childNodes.length; i++) {
    var node = elt.childNodes[i];
    if (node.className != undefined && node.className.indexOf("actions")>-1) {
      node.style.display = 'block';
    }
  }
}
function hideEditMenu(elt) {
  Element.removeClassName(elt, 'hover');
/*
  $$('#' + elt.id + ' .actions').each(function(item) {
    item.style.display = 'none';
  });
*/
  for (var i=0; i<elt.childNodes.length; i++) {
    var node = elt.childNodes[i];
    if (node.className != undefined && node.className.indexOf("actions")>-1) {
      node.style.display = 'none';
    }
  }
}
/* End editable form */
/* Fake drop-down */
function isElementInside(src, dest) {
    while (src != null) {
        if (src.id == dest.id) {
            return true;
        }
        src = src.parentNode;
    }
    return false;
}
function makeDropDown(link_id, menu_div_id) {
  if (!$(link_id))
    return;
  $(link_id).onclick = function() {
    showHide(menu_div_id);
    if (Prototype.Browser.IE6) {
      if ($(menu_div_id).style.display == 'block') {
        SelectFix.repairFloatingElement($(menu_div_id));
      }
    }
  }
  Event.observe(document, "click",
    function(event) {
      var elt = Event.element(event);
      if (!isElementInside(elt, $(menu_div_id)) && !isElementInside(elt, $(link_id))) {
        $(menu_div_id).style.display = 'none';
      }
    }, true);
  Event.observe(document, "keydown",
    function(event) {
      if (event.keyCode == Event.KEY_ESC) {
        $(menu_div_id).style.display = 'none';
      }
    }, true);
}
/* End Fake drop-down */
/* String utilities */
function addslashes( str ) {
    return (str+'').replace(/([\\"'])/g, "\\$1").replace(/\0/g, "\\0");
}
function myaddslashes(ch) {
ch = ch.replace(/\\/g,"\\\\")
//ch = ch.replace(/\'/g,"'")
ch = ch.replace(/\"/g,"'")
return ch;
}
function stripslashes( str ) {
  return (str+'').replace(/\0/g, '0').replace(/\\([\\'"])/g, '$1');
}
function removeslashes(str) {
  return str.replace('"', '').replace('\'', '');
}
function truncateText(str, len) {
  if (str.length > len) {
    return str.substring(0,len) + '...';
  }
  return str;
}
/* End String utilities */
/* Sorter */
function moveOptionsUp(id) {
 var selectList = document.getElementById(id + '_options');
 var selectOptions = selectList.getElementsByTagName('option');
 for (var i = 1; i < selectOptions.length; i++) {
  var opt = selectOptions[i];
  if (opt.selected) {
   selectList.removeChild(opt);
   selectList.insertBefore(opt, selectOptions[i - 1]);
  }
 }
  updateSorter(id);
}
function moveOptionsDown(id) {
 var selectList = document.getElementById(id + '_options');
 var selectOptions = selectList.getElementsByTagName('option');
 for (var i = selectOptions.length - 2; i >= 0; i--) {
  var opt = selectOptions[i];
  if (opt.selected) {
   var nextOpt = selectOptions[i + 1];
   opt = selectList.removeChild(opt);
   nextOpt = selectList.replaceChild(opt, nextOpt);
   selectList.insertBefore(nextOpt, opt);
  }
 }
  updateSorter(id);
}
function updateSorter(id)
{
  var selectList = document.getElementById(id + '_options');
  var value = '';
  for (var i=0; i< selectList.options.length;i++)
  {
    if (value != '')
      value += ','
    value += selectList.options[i].value;
  }
  document.getElementById(id).value = value;
}
/* End Sorter */
/* Company */
function createCompany(name, f) {
  new Ajax.Request(company_add_url, {method: 'get', parameters: 'get_company_creation_data', onComplete: function (req) {
        var data = req.responseText;
        var json = data.evalJSON(true);
        if (processErrors(json, true)) {
          var industry_list = $H(json.industry_list);
          industry_list.unset('REMOVE');
          var company_size_list = $H(json.company_size_list);
          company_size_list.unset('REMOVE');
          enterCompany(name, industry_list, company_size_list, f);
        }

    }});
}

function enterCompany(name, industry_list, company_size_list, f) {

  showDialog(window.event,
  {'title': _('Add new company'),
  'width' : 450,
  'body' : "<div id='NewResume'><ol class='forms'>\
  <li class='no-background'><label for='name' class='formlabel'><span class='required'>*</span> " + _('Company Name') + "</label>\
      <input type='text' name='company_name' id='company_name' value='" + (name ? name : "") + "' maxlength='64' class='medium2'/>\
      <span id='name_error' class='error'></span>\
  </li>\
  <li class='no-background'><label for='industry' class='formlabel'><span class='required'>*</span> " + _('Industry') + "</label>"
  + getSelectHtml(industry_list, 'company_industry', '', 'medium2', '--', 'company_industry', false, 'keys')
  + "<span id='industry_error' class='error'></span>\
  </li>\
  <li class='no-background'><label for='size' class='formlabel'><span class='required'>*</span> " + _('Size') + "</label>"
  + getSelectHtml(company_size_list, 'company_size', '', 'medium2', '--', 'company_size', false, 'keys')
  + "<span id='company_size_error' class='error'></span>\
  </li>\
  <li class='no-background'><label for='company_website' class='formlabel'>" + _('Website') + "</label>\
      <input type='text' name='company_website' id='company_website' value='' maxlength='200' class='medium2'/>\
      <span id='company_website_error' class='error'></span>\
  </li>\
  </ol></div>",
  'okLabel': _('Create'),
  'OkDoNotClose' : true,
  'cancelLabel': _('Cancel'),
  'buttonsStyle' : 'formButtons',
  'buttonsPadding' : 130,
  'ok' : function() {doCreateCompany(f);},
  'focus' : 'resume_name'
  });
}

function doCreateCompany(f) {
    $$('#popup span.error').each(function(elt) {
      elt.innerHTML = '';
    });
    pars = 'name=' + $('company_name').value
    + '&industry=' + $('company_industry').value
    + '&company_size=' + $('company_size').value
    + '&company_website=' + $('company_website').value;
    new Ajax.Request(company_add_url, {method: 'get', parameters: pars, onComplete: function (req) {
          var data = req.responseText;
          var json = data.evalJSON(true);

          var errors = $H(json.errors);
          errors.unset('REMOVE');
          if (errors.size() > 0) {
              errors.each(function(pair) {
                if (pair.value == _('Connection timeout')) {
                  window.location=redirect_after_logout;
                }
                $(pair.key + '_error').innerHTML = json.errors[pair.key] ? json.errors[pair.key] : '';
              });
          } else {

            if (!f) {
              hideDialog();
            } else {
              f(json);        
            }

          }
        }});
}
/* End Company */

function checkLength(textField, maxLength, displayCharsLeft) {
    var charsLeft;
    if (textField.value.length > maxLength) {
      textField.value = textField.value.substring(0,maxLength);
      charsLeft = 0;
    }
    else {
      charsLeft = maxLength - textField.value.length;
    }
    if (displayCharsLeft != undefined) {
      displayCharsLeft.innerHTML = ' (' + charsLeft + ' ' + _('characters left') + ')';
    }
}

function inviteUser(contactid, contactname, userfullname) {
  new Ajax.Request(contacts_search_url, {method: 'get', parameters: 'invitation_exists&contactid='+contactid, onComplete: function (req) {
        var data = req.responseText;
        var json = data.evalJSON(true);
        if (processErrors(json, true)) {
          var add_invitation_allowed = json.add_invitation_allowed;
          if (!add_invitation_allowed) {
            showAlert(window.event, {
              'title': _('Invite %s to connect').replace('%s', contactname),
              'body': '<p class="error_">' + _('Your invitation is waiting to be accepted by %s').replace('%s', contactname) + '</p>'
              });
          } else {
            writeInvitation(contactid, contactname, userfullname);
          }
        }
    }});
}

function writeInvitation(contactid, contactname, userfullname) {

    showDialog(window.event,
    {'title': _('Invite %s to connect').replace('%s', contactname),
    'width' : 700,
    'body' : "<div id='NewMessageForm'>\
    <ol class='forms'>\
    <li class='no-background'><label for='body' class='formlabel'>" + _('Personal note') + "</label>\
        <textarea name='invitation_msg' id='invitation_msg' class='medium4 short2'>"
        + _('I\'d like to add you to my network on tokkoro.\n\n- ') + userfullname
        + "</textarea>\
        <span id='body_error' class='error'></span>\
    </li>\
    </ol>\
    </div>",
    'okLabel': _('Send invitation'),
    'OkDoNotClose' : true,
    'cancelLabel': _('Cancel'),
    'buttonsStyle' : 'formButtons',
    'buttonsPadding' : 110,
    'ok' : function() {sendInvitation(contactid, contactname);},
    'focus' : 'body'
    });
}


function sendInvitation(contactid, contactname) {
    $$('#popup span.error').each(function(elt) {
      elt.innerHTML = '';
    });
    new Ajax.Request(contacts_search_url, {method: 'post', parameters: 'send_invitation&contactid='+contactid + '&invitation_message=' + $('invitation_msg').value, onComplete: function (req) {
          var data = req.responseText;
          var json = data.evalJSON(true);

          var errors = $H(json.errors);
          errors.unset('REMOVE');
          if (errors.size() > 0) {
              errors.each(function(pair) {
                if (pair.value == _('Connection timeout')) {
                  window.location=redirect_after_logout;
                }
                $(pair.key + '_error').innerHTML = json.errors[pair.key] ? json.errors[pair.key] : '';
              });
          } else {
            if (json.result == 2) {

              showAlert(window.event, {
                'title': _('Invite %s to connect').replace('%s', contactname),
                'body': _('As %s has already sent you an invitation, he / she has been added to your contacts.').replace('%s', contactname)
                });
            
            } else {
            
              showAlert(window.event, {
                'title': _('Invite %s to connect').replace('%s', contactname),
                'body': _('Your invitation has been sent to %s.').replace('%s', contactname)
                });
              if ($('btn_invite_'+contactid))
                $('btn_invite_'+contactid).style.display = 'none';
            
            }
          }
        }});
}

function clearSearchText(argElement, defaultText) {
  if (argElement.value == defaultText) {
    argElement.value = '';
    argElement.style.color = '#000000';
  }
}

function attachResume(link, name, textArea) {
  if (link != '') {
    textArea.value = '--- ' + _('Attachment') + '\n<a href="' + link + '" target="_blank">' + name + '</a>\n\n\n' + textArea.value;
    //setSelRange(textArea, textArea.value.length, textArea.value.length);
    //textArea.scrollTop = textArea.scrollHeight;
    setSelRange(textArea, 0, 0);
  }
}

function sendJobOffer(fullName, jobOfferUrl) {
  var subject = _('%s sent you a job offer').replace('%s', fullName);
  
  var body = _('%s just sent you a job offer.').replace('%s', fullName) + "\n\n"
  + _('To view this job offer, click this link:') + "\n\n"
  + "<a class='link' href='" + jobOfferUrl + "' target='_blank'>" + jobOfferUrl + "</a>\n\n";
  
  createMessage(undefined, undefined, subject, body);
}
/* Job Application */

function applyToJob(jobOfferId, jobOfferTitle) {

new Ajax.Request(resume_actions_url, {method: 'get', parameters: 'action=get_user_resumes_to_send',
   onComplete: function (req) {
    var data = req.responseText;
    var json = data.evalJSON(true);
    if (processErrors(json, true)) {
      var resumes = $H(json.resumes);
      resumes.unset('REMOVE');

      showDialog(window.event,
      {'title': _('Apply to job offer') + ' ' + jobOfferTitle,
      'width' : 700,
      'body' : "<div id='NewMessageForm'>\
      <ol class='forms'>\
      <li class='no-background'><label for='resume_id' class='formlabel'><span class='required'>*</span> " + _('Resume') + "</label>"
      + getSelectHtml(resumes, 'resume_id', '', 'medium2', '--', 'resume_id', false, 'values', false)
      + "<span id='resume_id_error' class='error'></span>\
      </li>\
      <li class='no-background'><label for='body' class='formlabel'><span class='required'>*</span> " + _('Application letter') + "</label>\
          <textarea name='motivation_letter' id='motivation_letter' class='medium4 short2'></textarea>\
          <span id='motivation_letter_error' class='error'></span>\
      </li>\
      </ol>\
      </div>",
      'okLabel': _('Send application'),
      'OkDoNotClose' : true,
      'cancelLabel': _('Cancel'),
      'buttonsStyle' : 'formButtons',
      'buttonsPadding' : 110,
      'ok' : function() {sendApplication(jobOfferId, jobOfferTitle);},
      'focus' : 'body'
      });

    }
   } 
  });

}


function sendApplication(jobOfferId, jobOfferTitle) {
    $$('#popup span.error').each(function(elt) {
      elt.innerHTML = '';
    });
/*
    pars = 'job_offer_id=' + jobOfferId
    + '&resume_id=' + $('resume_id').value
    + '&motivation_letter=' + escape($('motivation_letter').value);
*/    
    pars = {
      job_offer_id : jobOfferId,
      resume_id : $('resume_id').value,
      motivation_letter : $('motivation_letter').value
    };
    
    new Ajax.Request(jobapplications_add_url, {method: 'post', parameters: pars, onComplete: function (req) {
          var data = req.responseText;
          var json = data.evalJSON(true);

          var errors = $H(json.errors);
          errors.unset('REMOVE');
          if (errors.size() > 0) {
              errors.each(function(pair) {
                if (pair.value == _('Connection timeout')) {
                  window.location=redirect_after_logout;
                }
                $(pair.key + '_error').innerHTML = json.errors[pair.key] ? json.errors[pair.key] : '';
              });
          } else {
            
            showAlert(window.event, {
              //'width' : 400,
              'title': truncateText(_('Apply to job offer') + ' ' + jobOfferTitle, 40),
              'body': _('Your application has been sent.')
              });

          }
        }});
}
/* End Job Application */
/* Pagination */
/*
function setPager(elt, opts) {
  // Parameters
  opts = Object.extend({
    nb_pages:0,
    current_page:1,
    link_to:"#",
    num_display_entries:10,
    num_edge_entries:2,
    prev_text:_('Prev'),
    next_text:_('Next'),
    ellipse_text:'...',
    prev_show_always:true,
    next_show_always:true,
    callback:function(){return false;}
	},opts||{});

    // Calculate start and end point of pagination links depending on current_page and num_display_entries
    var nb_pages = opts.nb_pages;
    var current_page = opts.current_page;
		var ne_half = Math.ceil(opts.num_display_entries/2);
		var upper_limit = nb_pages - opts.num_display_entries;
		var start = current_page-1>ne_half?Math.max(Math.min(current_page-1-ne_half, upper_limit), 0):0;
		var end = current_page-1>ne_half?Math.min(current_page-1+ne_half, nb_pages):Math.min(opts.num_display_entries, nb_pages);
    
    //var html = [];
    //var idx = 0;
    //html[idx++] = '<div id="pagination" class="pagination">';
    Element.addClassName(elt, 'pagination');
    
    // Generate previous link
		if (opts.prev_text) {
      if(current_page > 1) {
  			//html[idx++] = '<a class="prev" href="' + opts.link_to.replace('page_id', (current_page - 1)) + '">' + opts.prev_text + '</a>';
  		  var a = new Element('a', { 'class': 'prev', href: opts.link_to.replace('page_id', (current_page - 1)) }).update(opts.prev_text);
        a.observe('click', function(page_id) {
				  opts.callback(page_id);
			   });
        elt.appendChild(a);
      } else {
  		  if (opts.prev_show_always) {
          html[idx++] = '<span class="prev disabled">' + opts.prev_text + '</span>';
        }
      }    
    }
    
    // Generate starting points
    if (start > 0 && opts.num_edge_entries > 0) {
      var end2 = Math.min(opts.num_edge_entries, start);

      for (var i=0; i<end2; i++) {
    		if (i == current_page-1) {
    			html[idx++] = '<span class="current">' + (i + 1) + '</span>';
    		} else {
    			html[idx++] = '<a href="' + opts.link_to.replace('page_id', (i + 1)) + '">' + (i + 1) + '</a>';
        }
      }

			if (opts.num_edge_entries < start) {
			  html[idx++] = '<span>' + opts.ellipse_text  + '</span>';
			}
    }
    

		// Generate interval links
    for (var i=start; i<end; i++) {
  		if (i == current_page-1){
  			html[idx++] = '<span class="current">' + (i + 1) + '</span>';
  		} else {
  			html[idx++] = '<a href="' + opts.link_to.replace('page_id', (i + 1)) + '">' + (i + 1) + '</a>';
      }
    }
    
    // Generate ending points
    if (end < nb_pages && opts.num_edge_entries > 0) {

			if (nb_pages - opts.num_edge_entries > end && opts.ellipse_text) {
			  html[idx++] = '<span>' + opts.ellipse_text + '</span>';
			}

      var begin = Math.max(nb_pages - opts.num_edge_entries, end);

      for (var i=begin; i<nb_pages; i++) {
    		if (i == current_page-1){
    			html[idx++] = '<span class="current">' + (i + 1) + '</span>';
    		} else {
    			html[idx++] = '<a href="' + opts.link_to.replace('page_id', (i + 1)) + '">' + (i + 1) + '</a>';
        }
      }
    } 

    // Generate next link
    if (opts.next_text) {
  		if (current_page < nb_pages) {
  			html[idx++] = '<a class="next" href="' + opts.link_to.replace('page_id', (current_page + 1)) + '">' + opts.next_text + '</a>';
  		} else {
  		  if (opts.next_show_always) {
          html[idx++] = '<span class="next disabled">' + opts.next_text + '</span>';
        }
      }    
    }

    html[idx++] = '</div>';
    return html.join("");
   
}
*/

/* End Pagination */

/* Scrolling */
    var scrolling = null;
 
    function scroll_up(scroller_id, up_arrow_id, down_arrow_id) {
        var d = document.getElementById(scroller_id);
        d.scrollTop = d.scrollTop - 5 < 0 ? 0 :  d.scrollTop - 5;
        show_hide_arrows(scroller_id, up_arrow_id, down_arrow_id);
        scrolling = window.setTimeout(function() {scroll_up(scroller_id, up_arrow_id, down_arrow_id);},60);
    }
 
    function scroll_down(scroller_id, up_arrow_id, down_arrow_id) {
        var d = document.getElementById(scroller_id);
        d.scrollTop = (d.scrollTop + 5) > d.scrollHeight - d.offsetHeight ? d.scrollHeight - d.offsetHeight : d.scrollTop + 5;
        show_hide_arrows(scroller_id, up_arrow_id, down_arrow_id);
        scrolling = window.setTimeout(function() {scroll_down(scroller_id, up_arrow_id, down_arrow_id);},60);
    }
 
    function stop_scroll(){
        window.clearTimeout(scrolling);
    }
    
    function show_hide_arrows(scroller_id, up_arrow_id, down_arrow_id) {
        var d = document.getElementById(scroller_id);
        if (d.scrollTop <= 0) {
          document.getElementById(up_arrow_id).style.display = 'none';
        } else {
          document.getElementById(up_arrow_id).style.display = 'block';
        }
        
        if (d.scrollTop >= d.scrollHeight - d.offsetHeight) {
          document.getElementById(down_arrow_id).style.display = 'none';
        } else {
          document.getElementById(down_arrow_id).style.display = 'block';
        }
      
    }
    
/* End Scrolling */

/* Press reviews */
function getPressReviews(year) {
  showLoader();
	new Ajax.Request(get_press_reviews_url, {method: 'get', parameters: 'year=' + year,
   onComplete: function (req) {
    hideLoader();
    var data = req.responseText;
    var json = data.evalJSON(true);
    if (processErrors(json)) {
      var press_review_years = json.press_review_years;
      var selected_year = json.year;
      var press_reviews = json.press_reviews;
      setPressReviewYearsHtml(press_review_years, selected_year);
      setPressReviewsHtml(press_reviews)
    }
  },
  onTimeout  : function(req){ hideLoader();},
  onError    : function(req){hideLoader();}

  });
}

function setPressReviewYearsHtml(press_review_years, selected_year) {
  var html = [];
  var idx = 0;
  if (press_review_years.length > 0) {
    for (var i=0;i<press_review_years.length;i++) {
      html[idx++] = "<li id='press_tab_" + (i+1) + "'" + (press_review_years[i] == selected_year ? " class='active'" : " class='default'") + ">";
      html[idx++] = "<a class='section-title' href='#' onclick='getPressReviews(\"" + press_review_years[i] + "\");return false;'>" + press_review_years[i] + "</a>";
      html[idx++] = "</li>";
    }
  }
  $('press_tabs').innerHTML = html.join("");
}

function setPressReviewsHtml(press_reviews) {
  var html = [];
  var idx = 0;
  if (press_reviews.length > 0) {
    for (var i=0;i<press_reviews.length;i++) {
      var press = press_reviews[i];
      html[idx++] = "<div class='press-review'>";
      html[idx++] = "<img class='press-review-img' src='" + press['image_url'] + "'/>";
      html[idx++] = "<div class='press-review-content'>";
      html[idx++] = "<span class='section-title'>" + press['media'] + "</span>";
      html[idx++] = "<span class='press-type'>" + press['media_type'] + ", " + _('edition of ') + press['date'] + "</span><br/>";
      html[idx++] = "<em>" + _('Title:') + " </em><span class='press-title'>" + press['title'] + "</span>";
      html[idx++] = "</div>";
      html[idx++] = "<div class='press-review-link'>";
      html[idx++] = press['article_url'] && press['article_url'].length && press['article_url'] != '#' ? "<a class='pdf' href='" + press['article_url'] + "' target='_blank'>" + _('Read article') + "</a>" : "";
      html[idx++] = "</div>";
      html[idx++] = "<div class='clear2'></div>";
      html[idx++] = "</div>";
    }
  }
  var press_review_list_elt = $('press-review-list');
  press_review_list_elt.innerHTML = html.join("");
  press_review_list_elt.scrollTop = 0;
  show_hide_arrows('press-review-list','press-review-up-arrow','press-review-down-arrow');
}


/* End Press reviews */

/* Funds */
function showHidePerformancesDetails(id) {

		$$('#fund-list .fund-details').each(function(elt) {
      if (elt.id == 'performances_details_' + id) {
        if (elt.style.display == 'block') {
          elt.style.display = 'none';  
        } else {
          elt.style.display = 'block';  
        } 
      } else {
        elt.style.display = 'none';
      }  
    });
    
    if (!$('performances_details_' + id)) {
      setPerformancesTabContent(id);  
    }   
}


function setPerformancesTabContent(id) {

  showLoader();
	new Ajax.Request(get_fund_stats_url, {method: 'get', parameters: 'id=' + id,
   onComplete: function (req) {
    hideLoader();
    var data = req.responseText;
    var json = data.evalJSON(true);
    if (processErrors(json)) {
      var stats = json.stats;
      setPerformancesTabContentHtml(id, stats);
    }
  },
  onTimeout  : function(req){ hideLoader();},
  onError    : function(req){hideLoader();}

  });  

}

var charts = new Array();
function setPerformancesTabContentHtml(id, stats) {

  var tab = $('performances_details_' + id);
  if (!tab) {
    tab = document.createElement('div');
    tab.setAttribute('id', 'performances_details_' + id);
    Element.addClassName(tab, 'fund-details');
    $('fund_table_' + id).appendChild(tab);
  }
  
  var html = [];
  var idx = 0;
    
  html[idx++] = "<div class='fund-peformances-tab'><a href='#' onclick='showHidePerformancesDetails(" + id + ");return false;' title='" + _('Performance') + "'><img src='../images/icons/btn-performances-open.jpg'/></a></div>";
  html[idx++] = "<div class='performance-stats'>";
  html[idx++] = "<div class='graph-title first'><strong>" + _('Statistics from fund inception') + "</strong><br/>" + _('from %1 to %2').replace('%1', stats.first_date).replace('%2', stats.last_date) + "</div>";
  html[idx++] = "<table border='0' cellspacing='0' cellpadding='0' style='margin:5px 0 5px 0;'>";
  html[idx++] = "<tr height='50'>";
  html[idx++] = "<td class='indicator' style='vertical-align:top;'>" + _('Cumulative performance') + "<br/><strong>" + formatPercentage(stats.cumulated_performance) + "</strong></td>";
  html[idx++] = "<td width='10'>&nbsp;</td>";
  html[idx++] = "<td class='indicator' style='vertical-align:top;'>" + _('Annualized performance') + "<br/><strong>" + formatPercentage(stats.annualized_performance) + "</strong></td>";
  html[idx++] = "<td width='10'>&nbsp;</td>";
  html[idx++] = "<td class='indicator' style='vertical-align:top;'>" + _('Annualized volatility') + "<br/><strong>" + formatPercentage(stats.annualized_volatility) + "</strong></td>";
  html[idx++] = "<td width='10'>&nbsp;</td>";
  //html[idx++] = "<td class='indicator' style='vertical-align:top;'>" + _('Tracking error') + "<br/><strong>" + formatNumber(stats.tracking_error,2,'%',' ') + "</strong></td>";
  html[idx++] = "</tr>";
  html[idx++] = "</table>";
  html[idx++] = "<div class='graph-title'><strong>" + _('Rolling performance') + "</strong><br/> " + _('as of') + " " + stats.last_date + "</div>";
  html[idx++] = "<table border='0' cellspacing='5' cellpadding='5' style='margin:5px 0 5px 0;'>";
  html[idx++] = "<tr height='38'>";
  html[idx++] = "<td class='indicator2' style='vertical-align:top;'>" + _('1 month') + "<br/><strong>" + formatPercentage(stats.m_1_performance) + "</strong></td>";
  html[idx++] = "<td class='indicator2' style='vertical-align:top;'>" + _('3 months') + "<br/><strong>" + formatPercentage(stats.m_3_performance) + "</strong></td>";
  html[idx++] = "<td class='indicator2' style='vertical-align:top;'>" + _('6 months') + "<br/><strong>" + formatPercentage(stats.m_6_performance) + "</strong></td>";
  html[idx++] = "<td class='indicator2' style='vertical-align:top;'>" + _('1 year') + "<br/><strong>" + formatPercentage(stats.y_1_performance) + "</strong></td>";
  html[idx++] = "<td class='indicator2' style='vertical-align:top;'>" + _('3 years') + "<br/><strong>" + formatPercentage(stats.y_3_performance) + "</strong></td>";
  html[idx++] = "<td class='indicator2' style='vertical-align:top;'>" + _('5 years') + "<br/><strong>" + formatPercentage(stats.y_5_performance) + "</strong></td>";
  html[idx++] = "</tr>";
  html[idx++] = "</table>";
  html[idx++] = "<div class='graph-title' style='margin-bottom:5px;'><strong>" + _('Statistics from date to date') + "</strong></div>";
  html[idx++] = "<label>" + _('From') + "</label>&nbsp;<input type='text' class='datepicker' id='start_date_" + id + "' name='start_date' size='10' value='' />";
  html[idx++] = " <label>" + _('to') + "</label>&nbsp;<input type='text' class='datepicker' id='end_date_" + id + "' name='end_date' size='10' value='' />";
  html[idx++] = "<button class='btn-calculate' onclick='computePerformance(" + id + ");return false;'>" + _('Compute') + "</button>";
  html[idx++] = "<button class='btn-clear' onclick='clearPerformanceTab(" + id + ");return false;'>" + _('Clear') + "</button>";
  html[idx++] = "<table border='0' cellspacing='0' cellpadding='0' style='margin:5px 0 5px 0;'>";
  html[idx++] = "<tr height='50'>";
  html[idx++] = "<td class='indicator' style='vertical-align:top;'>" + _('Cumulative performance') + "<br/><strong><span id='cumulated_performance_" + id + "'>&nbsp;</span></strong></td>";
  html[idx++] = "<td width='10'>&nbsp;</td>";
  html[idx++] = "<td class='indicator' style='vertical-align:top;'>" + _('Annualized performance') + "<br/><strong><span id='annualized_performance_" + id + "'>&nbsp;</span></strong></td>";
  html[idx++] = "<td width='10'>&nbsp;</td>";
  html[idx++] = "<td class='indicator' style='vertical-align:top;'>" + _('Annualized volatility') + "<br/><strong><span id='annualized_volatility_" + id + "'>&nbsp;</span></strong></td>";
  html[idx++] = "<td width='10'>&nbsp;</td>";
  //html[idx++] = "<td class='indicator' style='vertical-align:top;'>" + _('Tracking error') + "<br/><strong>&nbsp;</strong></td>";
  html[idx++] = "</tr>";
  html[idx++] = "</table>";
  html[idx++] = "</div>";
  html[idx++] = "<div class='graph-div'>";
  html[idx++] = "<div class='fund-details-title'>" + _('Performance') + "</div>";
  html[idx++] = "<div class='graph-title'><strong>" + _('Valuation evolution') + ' ' + _('as of') + " <span id='last_date_" + id +"'>" + stats.end_date + "</span></strong> (" + _('net') + ", " + _('base') + " 100 - <span id='first_date_" + id +"'>" + stats.first_date + "</span>)</div>";
  html[idx++] = "<div class='chart' id='chart_" + id + "' style='width:435px;height:210px;'></div>";
  html[idx++] = "</div>";
  html[idx++] = "<div class='clear' style='height:0px;'>&nbsp;</div>";

  tab.innerHTML = html.join("");
  tab.style.display = 'block';
  createPickers({
    locale: global_locale,
    icon: undefined,
    dateFormat: 'dd/MM/yyyy'
    });
  loadChart(id);
/*  
  swfobject.embedSWF(
    site_full_url + "flash/open-flash-chart.swf",
    "chart_" + id,
    "435",
    "210",
    "9.0.0",
    site_full_url + "js/expressInstall.swf",
    {"data-file":site_full_url + "funds/chart/" + id,"loading":_('Loading...')},
    {},
    { id: "chart_object_" + id,  name: "chart_object_" + id });
*/
  

}


function clearPerformanceTab(id) {
  setPerformancesTabContent(id);
}

function computePerformance(id) {
// Validate start_date and end_date not empty and start_date < end_date
  var start_date = $('start_date_' + id).value;
  var end_date = $('end_date_' + id).value;
  if (!start_date.length || !end_date.length) {
    alert(_('Please enter start and end date.'));
    return false;  
  }
  //var start_date_1 = Date.parse(start_date);
  //var end_date_1 = Date.parse(end_date);
  var start_date_1 = DateFormat.parseFormat(start_date, 'dd/MM/yyyy');
  var end_date_1 = DateFormat.parseFormat(end_date, 'dd/MM/yyyy');
  if (!start_date_1 || !end_date_1) {
    alert(_('Please enter dates in dd/MM/yyyy format.'));
    return false;  
  }
  if (start_date_1.getTime() >= end_date_1.getTime()) {
    alert(_('End date must be strictly greater than start date.'));
    return false;  
  }
  if (start_date_1.getDay() == 0 || start_date_1.getDay() == 6 || end_date_1.getDay() == 0 || end_date_1.getDay() == 6) {
    alert(_('Please select working days (from Monday to Friday).'));
    return false;  
  }
  var start_date_2 = start_date_1.format('yyyy-MM-dd');
  var end_date_2 = end_date_1.format('yyyy-MM-dd');
  
  loadChart(id, start_date_2, end_date_2);
  //alert('Compute performance');
  
  //showLoader();
	new Ajax.Request(get_fund_stats_url, {method: 'get', parameters: 'id=' + id + '&start=' + start_date_2 + '&end=' + end_date_2,
   onComplete: function (req) {
    //hideLoader();
    var data = req.responseText;
    var json = data.evalJSON(true);
    if (processErrors(json)) {
      var stats = json.stats;
      $('cumulated_performance_'+id).innerHTML = formatPercentage(stats.cumulated_performance);
      $('annualized_performance_'+id).innerHTML = formatPercentage(stats.annualized_performance);
      $('annualized_volatility_'+id).innerHTML = formatPercentage(stats.annualized_volatility);
      $('last_date_'+id).innerHTML = stats.end_date;
      $('first_date_'+id).innerHTML = stats.first_date;
    }
  },
  onTimeout  : function(req){ hideLoader();},
  onError    : function(req){hideLoader();}

  });  
 
}

function loadChart(id, start_date_2, end_date_2) {
/*
  var start_date = $('start_date_' + id).value;
  var end_date = $('end_date_' + id).value;
  var start_date_1 = DateFormat.parseFormat(start_date, 'dd/MM/yyyy');
  var end_date_1 = DateFormat.parseFormat(end_date, 'dd/MM/yyyy');
  var start_date_2 = start_date_1.format('yyyy-MM-dd');
  var end_date_2 = end_date_1.format('yyyy-MM-dd');
  swfobject.embedSWF(
    site_full_url + "flash/open-flash-chart.swf",
    "chart_" + id, "435", "210", "9.0.0",
    site_full_url + "js/expressInstall.swf",
    {"data-file":site_full_url + "funds/chart/" + id + "/" + start_date_2 + "/" + end_date_2,
    "loading":_('Loading...')} );
*/  
    var url = start_date_2 && end_date_2 ? site_full_url + "funds/chart/" + id + "/" + start_date_2 + "/" + end_date_2 : site_full_url + "funds/chart/" + id;
    
  	new Ajax.Request(url, {method: 'get', /*parameters: 'id=' + id + '&start=' + start_date_2 + '&end=' + end_date_2,*/
     onComplete: function (req) {
        var data = req.responseText;
        var json = data.evalJSON(true);

        if (charts[id]) {
          charts[id].destroy();
        }
        
        charts[id] = new Highcharts.Chart({
          chart: {
             renderTo: 'chart_' + id,
             type: 'line',
             marginLeft: 30,
             marginBottom: 20,
             plotShadow: false
          },
          title: {
             text: ''
          },
          subtitle: {
             text: ''   
          },
          xAxis: {
             type: 'datetime',
             dateTimeLabelFormats: {
                month: '%m/%Y',
                year: '%Y'
             },
             lineColor: '#b5b079',
             labels: {
               style: {
                  color: '#b5b079',
    	            fontWeight: 'normal'
               }
             }
          },
          yAxis: {
             title: {
                text: ''
             },
             min: 0,
             lineWidth: 1,
             lineColor: '#b5b079',
             labels: {
               style: {
                  color: '#b5b079',
    	            fontWeight: 'normal'
               }
             },
             gridLineWidth: 1,
             gridLineColor: '#eeeeee'
          },
          tooltip: {
             borderWidth: 1,
             borderColor: '#6E604F',
             shadow: false,
             formatter: function() {
              return '<span class="graph-tooltip-title" style="font-size: 9px; font-weight: bold; color: #978843;">' + Highcharts.dateFormat('%d/%m/%Y', this.x) + '</span><br/><span class="graph-tooltip-body" style="font-size: 9px; font-weight: bold; color: #333333;">' + formatNumber(this.y, 2) + '</span>';
             }
          },
          series: [{
             name: 'Evolution de la valorisation',
             data: json.history,
             marker : {
    						enabled : true,
    						radius : 1
    					},
    					tooltip : {
  							yDecimals : 2
  						}
          }],
          plotOptions: {
              series: {
                  shadow: false,
                  states: {
                      hover: {
                          enabled: false,
                          lineWidth: 1
                      }
                  }
              }
          },
          colors : ["#3c6396"],
          credits : {
            enabled : false
          },
          legend: {
            enabled: false
          }
              
       });
      },
      onTimeout  : function(req){ hideLoader();},
      onError    : function(req){hideLoader();}
  
    });  
}

function showHideRewardsDetails(id) {

		$$('#fund-list .fund-details').each(function(elt) {
      if (elt.id == 'rewards_details_' + id) {
        if (elt.style.display == 'block') {
          elt.style.display = 'none';  
        } else {
          elt.style.display = 'block';  
        } 
      } else {
        elt.style.display = 'none';
      }  
    });
    
    if (!$('rewards_details_' + id)) {
      setRewardsTabContent(id);  
    }   
}

function setRewardsTabContent(id) {

  var tab = document.createElement('div');
  tab.setAttribute('id', 'rewards_details_' + id);
  Element.addClassName(tab, 'fund-details');
  $('fund_table_' + id).appendChild(tab);

  var html = [];
  var idx = 0;

  html[idx++] = "<div class='fund-rewards-tab'><a href='#' onclick='showHideRewardsDetails(" + id + ");return false;' title='" + _('Awards') + "'><img src='../images/icons/btn-recompenses-open.jpg'/></a></div>";
  html[idx++] = "<div class='rewards-list' id='rewards_list_" + id + "'>";
  html[idx++] = "</div>";
  html[idx++] = "<div style='float_:left;width:135px;margin:0px 0 10px 30px;'>";
  html[idx++] = "<div class='fund-details-title'>" + _('Awards') + "</div>";
  //html[idx++] = "<ul class='fund-details-menu' id='rewards_tabs_" + id + "' style='width:135px;'>";
  //html[idx++] = "</ul>";
  html[idx++] = "</div>";
  html[idx++] = "<div class='clear' style='height:0px;'>&nbsp;</div>";
 
  tab.innerHTML = html.join("");
  tab.style.display = 'block';
  getRewards(id);
}

function getRewards(id, year) {
  
  showLoader();
	new Ajax.Request(get_funds_rewards_url, {method: 'get', parameters: 'id=' + id +'&year=' + year,
   onComplete: function (req) {
    hideLoader();
    var data = req.responseText;
    var json = data.evalJSON(true);
    if (processErrors(json)) {
      //var years = json.years;
      //var selected_year = json.year;
      var rewards = json.rewards;
      //setRewardsYearsHtml(id, years, selected_year);
      setRewardsHtml(id, rewards)
    }
  },
  onTimeout  : function(req){ hideLoader();},
  onError    : function(req){hideLoader();}

  });  
  
}

function setRewardsYearsHtml(id, years, selected_year) {
  var html = [];
  var idx = 0;
  if (years.length > 0) {
    for (var i=0;i<years.length;i++) {
      html[idx++] = "<li id='rewards_tabs_" + id + "_" + (i+1) + "'" + (years[i] == selected_year ? " class='active'" : "") + ">";
      html[idx++] = "<a class='section-title' href='#' onclick='getRewards(" + id + ",\"" + years[i] + "\");return false;'>" + years[i] + "</a>";
      html[idx++] = "</li>";
    }
  }
  $("rewards_tabs_" + id).innerHTML = html.join("");
}

function setRewardsHtml(id, rewards) {
  var html = [];
  var idx = 0;
  if (rewards.length > 0) {
    for (var i=0;i<rewards.length;i++) {
      var reward = rewards[i];
      html[idx++] = "<div class='rewards'>";
      html[idx++] = "<div class='rewards-img-container'><img class='rewards-img' src='" + reward['image_url'] + "'/></div>";
      html[idx++] = "<div class='rewards-content'>";
      html[idx++] = "<span class='rewards-date'>" + reward['date'] + "</span>";
      html[idx++] = "<div class='rewards-title'>" + reward['title'] + "<br/>";
      html[idx++] = reward['comment'] + "</div>";
      html[idx++] = "<em>" + _('Awarded by:') + " </em><span class='rewards-from'>" + reward['awarded_by'] + "</span>";
      html[idx++] = "</div>";
      html[idx++] = "<div class='clear2'></div>";
      html[idx++] = "</div>";
    }
  }
  $('rewards_list_' + id).innerHTML = html.join("");
}

function formatNumber(f, n, suffix, defaultValue) {
  if (!defaultValue)
    defaultValue = '';
  if (f) {
    return parseFloat("" + f).toFixed(n) + (suffix ? suffix : defaultValue);
  }
  return '';
}

function formatPercentage(f) {
  if (f == _('na') || f == 'na' || f == 'nd')
    return f;
  if (f.length)
    return f + '%';
  return ' ';
}
/* End Funds */

function openPopup(url, title, width, height, x, y) {
  mywindow = window.open(url,title,'width=' + width + ',height=' + height + ',scrollbars=yes,menubar=no,status=no,toolbar=no,location=no');
  if (mywindow)
    mywindow.moveTo(x,y);
}
