/******************************************************************************
 * general functions                                                          *
 ******************************************************************************/
var disclLangChanged = false;
var timerX=0;
var timerX2=0;
var GblCnt=5;

function initAutoComplete(field,namef,code,asset,subasset)
{
	if(typeof(isset('autoCompleteInit')))
	{
	  try {
		initAutoComplete2(field,namef,code,asset,subasset);
	  } catch(err) {
	    //err
	    //alert(variable + "\r\n\r\n" + url);
	  }
	}
}

function isset(varname)
{
if(typeof( window[ varname ] ) != "undefined") return true;
else return false;
}

function consoleLog(message) {
  if (!(typeof(console) === 'undefined') && !(console==null) && !(typeof(console.log) === 'undefined') && !(console.log == null)) {
    console.log(message);
  }
}
 
function setSelectedDD(selectObject, valueString) {
  for ( var i = 0; i < selectObject.options.length; i++ ) {
    if ( selectObject.options[i].value == valueString ) {
      selectObject.options[i].selected = true;
      return;
    }
  }
}

function getQueryVariable(url, variable) {
  //function to get a querystring variable, from an url given as param
  try {
    var query = url.split("?")[1];
    var vars = query.split("&");
    for (var i=0;i<vars.length;i++) {
      var pair = vars[i].split("=");
      if (pair[0] == variable) {
        return pair[1];
      }
    }
  } catch(err) {
    //err
    //alert(variable + "\r\n\r\n" + url);
  }
}

function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}

function loadDocument(element) {
  var canFollow = true;
if(element.className!="document") {
    canFollow = confirm(confirmPro);
  }
  return canFollow;
}


function getXmlHttpRequest() {
  //return a xmlHTTPRequest object
  var xhr;
  try {
    // Firefox, Opera 8.0+, Safari
    xhr=new XMLHttpRequest();
  }
  catch (ex){
    // Internet Explorer
    try {
      xhr=new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (ex){
      try {
        xhr=new ActiveXObject("Microsoft.XMLHTTP");
      }
      catch (ex) {
        alert("Your browser does not support AJAX!");
        return false;
      }
    }
  }
  return xhr;
}

/**
 * This function scrolls the page to the bottom
 */
function scrollToTheBottomOfThePage(){
  if (document.body.scrollHeight > document.body.offsetHeight){
     window.scrollTo(0,document.body.scrollHeight);
  }
  else{
     window.scrollTo(0,document.body.offsetHeight);
  }

}


Array.prototype.containsBoolean = function (sElement) {
  //Check whether a certain value (element) exists within an array.
  //usage: someArray.contains("some value");
  //returns: true in case the value is present, false if not.
  
  for (var i = 0; i < this.length; i++) {
    if (this[i] == sElement) {
      return true; //if it is in the array
    }
  }
  return false; //it's not in the array
}

Array.prototype.containsPosition = function (sElement) {
  //Check whether a certain value (element) exists within an array.
  //usage: someArray.contains("some value");
  //returns: the position in case the value is present, false if not.
  
  for (var i = 0; i < this.length; i++) {
    if (this[i] == sElement) {
      return i; //if it is in the array return the position
    }
  }
  return false; //it's not in the array
}

function elementExists(elementID) {
  if (document.getElementById(elementID)) {
    return true;
  } else {
    return false;
  }
}

function setCookie(name, content, days){
  writeCookie(name, content, days*24*60*60, "/");
}

function setNewCookie(name, content, hours){
  writeCookie(name, content, hours*60*60, "/");
}

function encodeCookieValue(value) {
  /* Do not encode more than strictly neccessary. A normal encodeURIComponent() will not do for cookie
   * value encoding! To read an encoded cookie value, you can just use the decodeURIComponent() function.
   */
  var encodedValue = value
    .replace(/ /g,"%20")
    .replace(/\(/g,"%28")
    .replace(/\)/g,"%29")
    .replace(/\[/g,"%5B")
    .replace(/\]/g,"%5D")
    .replace(/\{/g,"%7B")
    .replace(/\}/g,"%7D")
    .replace(/=/g,"%3D")
    .replace(/,/g,"%2C")
    .replace(/;/g,"%3B")
    .replace(/:/g,"%3A")
    .replace(/\"/g,"%22")
    .replace(/\\/g,"%5C")
    .replace(/\//g,"%2F")
    .replace(/\?/g,"%3F")
    .replace(/@/g,"%40");
  return encodedValue;
}

function writeCookie(name, value, seconds, path) {
  var nameStr = name;
  var valueStr = encodeCookieValue(value);
  var expStr = "";
  var pathStr = path || "/";
  if (seconds != "session") {
    seconds = seconds || 2592000; // default = 30 days
    var now = new Date();
    var exp = new Date(now.getTime() + seconds*1000);
    expStr = "; expires=" + exp.toUTCString();
  }
  var MAX_COOKIE_SIZE = 4000;
  var numberOfCookies = Math.floor(valueStr.length/MAX_COOKIE_SIZE)+1;
  if (numberOfCookies>1) {
    /* if a cookie value is too long: split it up into several smaller cookies!
     * The first cookie will have the normal name, all subsequent cookies
     * will have '--' and a number (two digits, starting at 00) appended to
     * their name.
     * e.g.: 'cookieName', 'cookieName--00', 'cookieName--01', etc.
     * 
     * If they're split this way, the java code will autimatically merge all
     * parts together again, when using the mathod getCookies() in the package
     * bnpip.ww.cm.utilities.LiveSite to read the cookies.
     */
    for (var i=0; i<numberOfCookies; i++) {
      var cookieSuffix = "";
      if (i != 0) {
        // for all cookies except the first one: add suffix to name
        var index = i-1;
        cookieSuffix = (index<10 ? "--0" : "--") + index;
      }
      var partlyValueStr = valueStr.substring(i*MAX_COOKIE_SIZE, (i+1)*MAX_COOKIE_SIZE);
      document.cookie = nameStr + cookieSuffix + "=" + partlyValueStr + expStr + "; path=" + pathStr;
    }
  } else {
    /* if not, just create a single cookie */
    document.cookie = nameStr + "=" + valueStr + expStr + "; path=" + pathStr;
  }
}

function simpleWriteCookie(name, value, seconds) {
  var nameStr = encodeURIComponent(name);
  var valueStr = encodeURIComponent(value);
  var expStr = "";
  seconds = seconds || 2592000; // default = 30 days
  var now = new Date();
  var exp = new Date(now.getTime() + seconds*1000);
  expStr = "; expires=" + exp.toUTCString();
  document.cookie = nameStr + "=" + valueStr + expStr + "; path=/";
}

function cookieExists(name) {
  if(document.cookie.length > 0){
    var pos = document.cookie.indexOf(name + "=");
    if(pos != -1){
      return true;
    }
  }
  return false;
}

function nextCookieInSeries(name) {
  var result;
  if (name.match("^\\S*--\\d{2}$")) {
    /* read the number after '--' and increase it by 1 */
    var number = name.substring(name.lastIndexOf("--") + 2);
    result = name.substring(0, name.lastIndexOf("--")) + (++number<10 ? "--0" : "--") + number;
  } else {
    result = name + "--00";
  }
  return result;
}

function deleteCookie(name){
  var partName = name;
  do {
    simpleWriteCookie(partName, "", -1);
    partName = nextCookieInSeries(partName);
  } while (cookieExists(partName));
}

function readCookie(name){
  var result = "";
  var partName = name;
  do {
    result += simpleReadCookie(partName);
    partName = nextCookieInSeries(partName);
  } while (cookieExists(partName));
  return result;
}

function simpleReadCookie(name){
  var cookieValue = "";
  var search = name + "=";
  if(document.cookie.length > 0){
    var pos = document.cookie.indexOf(search);
    if(pos != -1){
      pos += search.length;
      var end = document.cookie.indexOf(";", pos);
      if(end == -1){
        end = document.cookie.length;
      }
      cookieValue += decodeURIComponent(document.cookie.substring(pos, end));
    }
  }
  return cookieValue;
}

function wait(msecs) {
  var start = new Date().getTime();
  var cur = start
  while(cur - start < msecs) {
    cur = new Date().getTime();
  }
}

function collectionToArray(collection) {
  var ary = [];
  for(var i=0, len = collection.length; i < len; i++) {
    ary.push(collection[i]);
  }
  return ary;
}

function trim(s) {
  s = s.replace(/(^\s*)|(\s*jQuery)/gi,"");
  s = s.replace(/[ ]{2,}/gi," ");
  s = s.replace(/\n /,"\n");
  return s;
}

function mailtoFunc() {
  window.location = 'mailto:?body='+window.location;
}

function printPage(sID, sTarget) {
  if (sID && sTarget) {
    //get resources
    var sHeadInHTML = document.getElementsByTagName("head")[0].innerHTML;
    var sResources = sHeadInHTML.substring(sHeadInHTML.indexOf("<!--ls:begin[stylesheet]-->"), sHeadInHTML.indexOf("<!--ls:begin[favicon]-->"));
    //sResources += "<link rel='stylesheet' href='/resources/css/"+sTarget+"/print.css' type='text/css' media='print'/>";
    
    //get div html
    var sHtml = document.getElementById(sID).innerHTML;
    
    //create JS to change print button
    var cpbHtml = '<script type="text/javascript">';
    cpbHtml += '  var pb = document.getElementById("printButton");';
    cpbHtml += '  if(pb) {';
    cpbHtml += '    pb.onclick=function(){';
    cpbHtml += '      window.print(); return false;';
    cpbHtml += '    }';
    cpbHtml += '  }';
    cpbHtml += '</script>';

    //build popup
    var sInHTML = "";
        sInHTML += '<html>';
        sInHTML += '  <head>';
        sInHTML += sResources;
        sInHTML += '  </head>';
        sInHTML += '  <body>';
        sInHTML += '    <div id="printart">'; //add print button and related html
        sInHTML += '      <div id="basicont">';
        sInHTML += '      <div class="printart"><a href="#" onclick="printPage(\'\');return false;">Print</a></div>';
        sInHTML +=          sHtml;        
        sInHTML += '      </div>';
        sInHTML += '    </div>';
        sInHTML += cpbHtml;
        sInHTML += '  </body>';
        sInHTML += '</html>';

    // open popup
    newWindow = window.open('','print','height=800,width=600,resizable=yes,scrollbars=yes,location=no,status=no,toolbar=no');
    var itsHTML = newWindow.document;
    itsHTML.write(sInHTML);
    itsHTML.close();
  } else {
    window.print();
  }
}

function addToFavorites() {
  sTitle = document.title;
  sUrl = window.location.href;

  if (window.sidebar) { // Mozilla Firefox Bookmark
    window.sidebar.addPanel(sTitle, sUrl,"");
  } else if (window.external) { // IE Favorite
    window.external.AddFavorite(sUrl, sTitle);
  } else if (window.opera && window.print) { // Opera Hotlist
    return true;
  }
}

function addRSS (label, url) {
  var headID = document.getElementsByTagName("head")[0];

  var rssNode = document.createElement('link');
  rssNode.type = 'application/rss+xml';
  rssNode.rel = 'alternate';
  rssNode.href = url;
  rssNode.title = label;

  headID.appendChild (rssNode);
}

function IEversion() {
  sVersion = "";
  
  var ua = navigator.userAgent;
  var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
  if (re.exec(ua) != null) {
    sVersion = parseFloat( RegExp.$1 );
  }
  sVersion = sVersion + 0;
  
  return sVersion;
}

function replaceTarget() {
  for (var i=0; i<document.links.length; i++) {
    if (document.links[i].getAttribute("onclick") == null) {
      if (document.links[i].getAttribute("val") == null) {
        //for all hrefs
        document.links[i].href = document.links[i].href.replace(/\/[A-Z]{2}_[A-Z]{2}-[A-Z]{3}\//g, "/");
      } else {
        //specifically for colorbox links in the fundsheet
        document.links[i].setAttribute("val", document.links[i].getAttribute("val").replace(/\/[A-Z]{2}_[A-Z]{2}-[A-Z]{3}\//g, "/"));
      }
    }
  }
}
addLoadEvent(replaceTarget);


/******************************************************************************
 * header component                                                           *
 ******************************************************************************/

function checkPage() {
  var sLocation = "";
  var sVpath = "";
  try{
    sLocation = decodeURI(window.top.frames['iw_vpreview_toolbar_iframe'].document.location);
  } catch(err) {
    //err
  }
  sVpath = getQueryVariable(sLocation, "vpath");
  
  if (sVpath != "" && sVpath != undefined) {
    var server = location.host;
    var url = "http://" + server + ":8680/exist/xquery/woodstock/checkPage.xql?vpath=" + sVpath;
    var popUpWin = window.open(url,'pageCheck','width=800,height=600,scrollbars=yes,toolbar=yes,location=yes,status=yes');
  }
}

function hidePreviewToolbar() {
  //hide the preview toolbar if the browser is FF
  if (navigator.appName == "Netscape") {
    var ptb = document.getElementById("iw_vpreview_toolbar");
    if (ptb) {
      ptb.style.display = "none";
    }
  }
}
addLoadEvent(hidePreviewToolbar);

function changePreviewCookies(context, cookieValue, cookieType) {
  if (cookieType == "lang") {
    setCookie(context+"_PreviewLang", cookieValue, 365);
  } else {
    setCookie(context+"_PreviewTarget", cookieValue, 365);
  }
  window.location.reload();
}

function langSwitch(sLang) {
  if (sLang) {
    window.location = replaceQueryString(""+window.location, "l", sLang)
  }
}


/******************************************************************************
 * disclaimeracceptance component                                             *
 ******************************************************************************/

function acceptDisclaimer(siteName) {
  var errorMsgElement = document.getElementById("cookie_msg");
  var errorMsg = "ERROR: Your browser does not accept cookies!";
  if (errorMsgElement && errorMsgElement.value) {
    errorMsg = errorMsgElement.value;
  }

  setCookie("disclaimer", siteName, 1);
  if (!readCookie("disclaimer")) {
    alert(errorMsg);
    return false;
  } else {
    return true;
  }
}

function acceptNewDisclaimer(siteName,expires) {
  var errorMsgElement = document.getElementById("cookie_msg");
  var errorMsg = "ERROR: Your browser does not accept cookies!";
  if (errorMsgElement && errorMsgElement.value) {
    errorMsg = errorMsgElement.value;
  }
  setNewCookie("disclaimer", siteName, expires);
  if (!readCookie("disclaimer")) {
    alert(errorMsg);
  } else {
    jQuery.fancybox.close();
    if(disclLangChanged) {
		var newPageUrl = "http://"+window.location.host+window.location.pathname+window.location.search;
		newPageUrl = replaceQueryString(newPageUrl, "l", disclLang);
		window.location = newPageUrl;
	}
  }
  return false;
}

function changeFancyDisclaimerLanguage(newLanguage){
  var disclUrl = "http://"+window.location.host+"/fancyDisclaimer.page"+window.location.search;
  disclLangChanged = true;
  disclLang = newLanguage;
  disclUrl = replaceQueryString(disclUrl, "l", newLanguage);
  jQuery.fancybox.showActivity();
  jQuery.ajax({
		type	: "GET",
		cache	: false,
		url		: disclUrl,
		data	: jQuery(this).serializeArray(),
		success : function(data) {
			jQuery.fancybox({'modal' : true, 'width': 820, 'height': 620, 'content': data});
		}
	});
}

function changeLanguage(newLanguage) {
  var currentUrl = window.location + "";
  currentUrl = replaceQueryString(currentUrl, "l", newLanguage);
  window.location = currentUrl;
}

function replaceQueryString(url, param, value) {
  var re = new RegExp("([?|&])" + param + "=.*?(&|$)","i");
  var result = "";
  if (url.match(re)) {
    result = url.replace(re,'$1' + param + "=" + value + '$2');
  } else {
    if (url.indexOf("?") > -1) {
      result = url + '&';
    } else {
      result = url + '?';
    }
    result += param + "=" + value;
  }
  return result;
}

function disclaimerLoaded() {
  var oLink = document.getElementById("acceptDisclaimer");
  var sHash = window.location.hash;
  if (sHash.length != 0) {
    if (sHash.length != 1) {
      if (oLink) {
        oLink.href += sHash;
      }
    }
  }

  if (oLink) {
    var aLink = (oLink.href).split("#");
    var sLink = "";
    if ((window.location.search).substring((window.location.search).length-1, (window.location.search).length) == "&" && aLink[0].substring(aLink[0].length-1,aLink[0].length) == "&") {
      sLink = aLink[0].substring(0,aLink[0].length-1);
    } else if ((window.location.search).substring((window.location.search).length-1, (window.location.search).length) != "&" && aLink[0].substring(aLink[0].length-1,aLink[0].length) != "&") {
      sLink = aLink[0] + "&";
    } else {
      sLink = aLink[0];
    }

    if (aLink.length != 1) {
      sLink += "#" + aLink[1];
    }
    oLink.href = sLink;
  }
}


/******************************************************************************
 * export component                                                           *
 ******************************************************************************/

function updateHrefWirhFormat(oLink, dateChooserId, datesRequired) {
  var oStart = document.getElementById(dateChooserId + "_start");
  var oEnd = document.getElementById(dateChooserId + "_end");
  var oMsg = document.getElementById(dateChooserId + "_msg");
  var sNewhref = "";
  
  if (datesRequired == "true" && (!(oStart.value) || !(oEnd.value))) {
    if (oMsg) {
      if (oMsg.value) {
        alert(oMsg.value);
      }
    }
    return false;
  } else {
    if (oStart && oEnd && oLink) {
      //first check the dates are valid
      changeFormat(dateChooserId + "_start", 'Y-m-d');
      changeFormat(dateChooserId + "_end", 'Y-m-d');
      
      var reDateMask = /^\d{4}\-\d{1,2}\-\d{1,2}$/;
      var sStartValue = oStart.value;
      var sEndValue = oEnd.value;
      var bStartValid = validateDate(sStartValue, reDateMask);
      var bEndValid = validateDate(sEndValue, reDateMask);
      
      if (!(bStartValid) || !(bEndValid) ) {
        //either of the dates are invalid, stop it
        if (oMsg) {
          if (oMsg.value) {
            alert(oMsg.value);
          }
        }
        return false;
      } else {
        if (sStartValue && sEndValue && dateToInt(sStartValue) > dateToInt(sEndValue)) {
          // if both dates are filled in, check if start date <= end date
          if (oMsg) {
            if (oMsg.value) {
              alert(oMsg.value);
            }
          }
          return false;
        }
      }
      
      sNewhref = oLink.href;
      
      //remove the (possibly) previous QS-vars, and add the current dates (if not empty)
      sNewhref = removeQSvar(sNewhref, "start");
      if (oStart.value) {
        sNewhref += "&start=" + oStart.value;
      }
      
      sNewhref = removeQSvar(sNewhref, "end");
      if (oEnd.value) {
        sNewhref += "&end=" + oEnd.value;
      }
      
      //remove the target from the link.
      sNewhref = sNewhref.replace(/\/[A-Z]{2}_[A-Z]{2}-[A-Z]{3}\//g, "/");
      
      //update the link
      oLink.href = sNewhref;
    }
  }
  return true;
}


function updateHref(oLink, dateChooserId, datesRequired) {
  var oStart = document.getElementById(dateChooserId + "_start");
  var oEnd = document.getElementById(dateChooserId + "_end");
  var oMsg = document.getElementById(dateChooserId + "_msg");
  if(oStart.DateChooser !== undefined && oEnd.DateChooser !== undefined) {
    var oStartFormat = oStart.DateChooser._format;
    var oEndFormat   = oEnd.DateChooser._format;
  }
  var sNewhref = "";
  
  if (datesRequired == "true" && (!(oStart.value) || !(oEnd.value))) {
    if (oMsg) {
      if (oMsg.value) {
        alert(oMsg.value);
      }
    }
    return false;
  } else {
    if (oStart && oEnd && oLink) {
	  if(oStart.DateChooser !== undefined && oEnd.DateChooser !== undefined) {
		if(typeof changeFormat  == 'function') {
	      changeFormat(dateChooserId + "_start", 'Y-m-d');
          changeFormat(dateChooserId + "_end", 'Y-m-d');
	    }
	  }
      //first check the dates are valid
      var reDateMask = /^\d{4}\-\d{1,2}\-\d{1,2}$/;
      var sStartValue = oStart.value;
      var sEndValue = oEnd.value;
      var bStartValid = validateDate(sStartValue, reDateMask);
      var bEndValid = validateDate(sEndValue, reDateMask);
      
      if (!(bStartValid) || !(bEndValid) ) {
	  
        //either of the dates are invalid, stop it
        if (oMsg) {
          if (oMsg.value) {
            alert(oMsg.value);
          }
        }
        return false;
      } else {
        if (sStartValue && sEndValue && dateToInt(sStartValue) > dateToInt(sEndValue)) {
          // if both dates are filled in, check if start date <= end date
          if (oMsg) {
            if (oMsg.value) {
              alert(oMsg.value);
            }
          }
          return false;
        }
      }
     
      sNewhref = oLink.href;
      
      //remove the (possibly) previous QS-vars, and add the current dates (if not empty)
      sNewhref = removeQSvar(sNewhref, "start");
      if (oStart.value) {
        sNewhref += "&start=" + oStart.value;
      }
      
      sNewhref = removeQSvar(sNewhref, "end");
      if (oEnd.value) {
        sNewhref += "&end=" + oEnd.value;
      }
	  if(oStart.DateChooser !== undefined && oEnd.DateChooser !== undefined) {
		if(typeof changeFormat  == 'function') {
          changeFormat(dateChooserId + "_start", oStartFormat);
          changeFormat(dateChooserId + "_end", oEndFormat);
	    }
	  }
      //remove the target from the link.
      sNewhref = sNewhref.replace(/\/[A-Z]{2}_[A-Z]{2}-[A-Z]{3}\//g, "/");
      
      //update the link
      oLink.href = sNewhref;
    }
  }
  return true;
}

function validateDate(sDate, sMask) {
  if(!(sDate) && !sDate.match(sMask)) {
    return false;
  }
  return true;
}

function dateToInt(sDate) {
  return sDate.substr(0,4) + sDate.substr(5,2) + sDate.substr(8,2);
}

function removeQSvar(sURL, sQSid) {
  //function to remove a QS var from an url
  if (sURL && sQSid) {
    var sNewURL = sURL.split("?")[0]
    var sHash = sURL.split("#")[1]
    var sQuery = sURL.split("?")[1];
    var aVars = sQuery.split("&");
    var sQS = "";
    for (var i=0;i<aVars.length;i++) {
      var aPair = aVars[i].split("=");
      if (aPair[0] != sQSid) {
        if (sQS) {
          sQS += "&";
        }
        sQS += aPair[0] + "=" + aPair[1];
      }
    }
    
    if (sQS) {
      sNewURL += "?" + sQS;
    }
    if (sHash) {
      sNewURL += "#" + sHash;
    }
    
    return sNewURL;
  } else {
    return sURL;
  }
}


/******************************************************************************
 * fundsheet-header component                                                 *
 ******************************************************************************/

function getFundSheetTab(sID) {
  var oCurrTab = document.getElementById("currtab");
  var oNewTab = "";
  var url_request = "";
  
  if (sID == undefined) {
    //if no id has been passed (first load) => check whether a tab in the hash is present, otherwise load 1
    var nTab = getQueryVariable("?"+window.location.hash.substring(1), "tab");
    
    if (nTab) {
      sID = "tab"+nTab;
    } else {
      sID = "tab1";
    }
  }
  
  if (oCurrTab && sID != undefined) {
    if (sID == "sharetype" || sID == "currency") {
      //the item initiating this function is the currency or sharetypeDD => complete page-reload
      var oInitiated = document.getElementById(sID);
      var sIdentifierQS = (sID == "sharetype") ? "shareId" : "currency";
      
      if (oInitiated && sIdentifierQS) {
        var url = ""; //start creating the new url
        url += location.protocol + "//" + window.location.host;
        url += window.location.pathname + "?";
        
        var sNewSearch = "";
        var sSearch = (window.location.search).substring(1);
        var aSearch = sSearch.split("&");
        for (var i=0; i<aSearch.length; i++) {
          var aItem = (aSearch[i]).split("=");
          if (aItem[0] == sIdentifierQS) {
            //this is the qs-var that needs to change
            sNewSearch += "&" + aItem[0] + "=" + oInitiated.value;
          } else {
            sNewSearch += "&" + aItem[0] + "=" + aItem[1];
          }
        }
        url += sNewSearch.substring(1);
        
        url += window.location.hash;
        
        window.location = url; //go to the new url
      } else {
        //err: not found
      }
    } else {
      //the item inititating this is a onclick-tab
      oCurrTab.value = sID;
      
      var oNewTab = document.getElementById(sID);
      
      if (oNewTab) {
        setTabSelection();
        setLoading("fundsheet_content");
        
        var page_request = getXmlHttpRequest();
        
        page_request.onreadystatechange = function(){
          fetchedFundSheetTab(page_request, sID);
        }
        
        url_request = oNewTab.value;
        url_request += "&timestamp=" + new Date().getTime();
        
        page_request.open('GET', url_request, true);
        page_request.send(null);
      } else {
        //alert("hidden field with tab url not found: " + sID);
      }
    }
  }
}

function fetchedFundSheetTab(page_request, sTab) {
  var oContainer = document.getElementById("fundsheet_content");
  var oPageNotFound = document.getElementById("pagenotfound");
  var oCurrTab = document.getElementById("currtab");
  var oWidth = document.getElementById("cbWidth");
  var oHeight = document.getElementById("cbHeight");
  var sWidth = "";
  var sHeight = "";
  if (oWidth) {
    sWidth = oWidth.value;
  }
  if (oHeight) {
    sHeight = oHeight.value;
  }
  
  if (page_request.readyState == 4 && page_request.status == 200 && sTab == getTabNumber()) {
    //if the page is loaded properly and the fetched tab is the currently selected: display
    if (oContainer) {
      var rspText = page_request.responseText;
      var nStart = rspText.indexOf("<!--ls:begin[body]-->") + 21;
      var nEnd = rspText.indexOf("<!--ls:end[body]-->");
      var rspBody = rspText.substring(nStart, nEnd);
      rspBody+="<div class=\"clear\"><!--0--></div>";
      
      // if tab content is disclaimer page: refresh whole page
      if (rspBody.indexOf("<!--disclaimer_validation-->") > 0) {
        window.location.reload();
      } else {
        oContainer.innerHTML = rspBody;
        
        if (oCurrTab) {
          //set tab in hash, for deeplinking
          window.location.hash = "#tab="+(oCurrTab.value).substring(3);
        }
        
        //set the document links to be opened in a lightbox
        jQuery(".document").click(function(){
		  var sURL = jQuery(this).attr('val');
		  var isPro = jQuery(this).attr('isPro');
		  if(isPro != null)  {
            if(isPro == 'true')		  
		    if(confirm(confirmPro)) {
//              jQuery.fn.colorbox({href:sURL, width:sWidth, height:sHeight, iframe:true});
        window.open(sURL,'','');
		    }
		} else {
//		  jQuery.fn.colorbox({href:sURL, width:sWidth, height:sHeight, iframe:true});
        window.open(sURL,'','');
		}
          return false;
        });
        
        //replace the targets from links
//        replaceTarget();

        //remove fixed height from content outermost div - See QC 586
        var fs_result = document.getElementById('fundsheet_content');
        var components = fs_result.getElementsByTagName('div');
        for (var cctr=0;cctr<components.length;++cctr){
          if ( components[cctr].className.indexOf("iw_component",0) != -1 ){
            components[cctr].style.height="auto";
          }
        }
      }
    }
  } else if (page_request.readyState == 4 && page_request.status != 200) {
    if (oContainer && oPageNotFound) {
      oContainer.innerHTML = oPageNotFound.value;
    }
  }
}

function setLoading(sContainer) {
  //function to set a loading image
  var oContainer = document.getElementById(sContainer);
  
  if (oContainer) {
    oContainer.innerHTML = "<div style='width: 100%; text-align: center;'><img src='/resources/images/loading.gif'/></div>";
  }
}

function setTabSelection() {
  //function to change higlighting of tabs
  //clear selections
  var counter = 1;
  while (document.getElementById("tablink"+counter) != null) {
    var oTab = document.getElementById("tablink"+counter);
    var sTmp = "";
    if (oTab.className != undefined) {
      sTmp += oTab.className;
    }
    if (oTab) {
      var cssClass = (sTmp).replace(" selected", ""); //trim " selected" from the classes
      oTab.className = cssClass;
      //workaround for DD_roundies
      oTab.focus();
      oTab.blur();
    }
    counter++;
  }
  
  //set current selected
  var oCurrTab = document.getElementById("currtab");
  if (oCurrTab) {
    var oTabLinkID = (oCurrTab.value).replace("tab", "tablink");
    var oTabLink = document.getElementById(oTabLinkID);
    
    if (oTabLink) {
      //set highlighting
      var cssClass = oTabLink.className + " selected"; //add " selected" to the classes
      oTabLink.className = cssClass;
    }
  }
}

function openToolbar(sID,sTitle) {
  //function to open the toolbar-links in a new window.
  var oWidth = document.getElementById("cbWidth");
  var oHeight = document.getElementById("cbHeight");
  var sWidth = "";
  var sHeight = "";
  if (oWidth) {
    sWidth = oWidth.value;
  }
  if (oHeight) {
    sHeight = oHeight.value;
  }
  
  if (sID && sTitle) {
    var oHidden = document.getElementById("source_"+sID);
    if (oHidden) {
      //the hidden div containing the article/articlelist exists
      var oSingleItem = document.getElementById("singleArticle_"+sID);
      
      if (oSingleItem) {
        //if the hidden field exists
        if (oSingleItem.value) {
          //and has a value, open it
          window.open(oSingleItem.value, '', '');
        }
      } else {
        //else it is a list of items or a text. => open lightbox
//        jQuery.fn.colorbox({width:sWidth, height:sHeight, inline:true, href:("#source_"+sID)});
        var sInHTML = oHidden.innerHTML;
        
        var sHeadInHTML = document.getElementsByTagName("head")[0].innerHTML;
        var sResources = sHeadInHTML.substring(sHeadInHTML.indexOf("<!--ls:begin[stylesheet]-->"), sHeadInHTML.indexOf("<!--ls:begin[favicon]-->"));
        
        newWindow = window.open('','','');
        
        //store window object so that it can be accessed by the timer at the end of function
        oHidden.toolbarWindow = newWindow;

        var itsHTML = newWindow.document;
        itsHTML.write('<html><head><title>'+sTitle+'</title>');
        itsHTML.write(sResources);
        itsHTML.write('</head><body>');
        itsHTML.write(sInHTML);
        itsHTML.write('</body></html>');

        //this is a workaround for IE bug that crashes the browser when there is no delay between
        // setting html and  closing the document object.
        setTimeout("document.getElementById('source_"+sID+"').toolbarWindow.document.close();",1500);

        //itsHTML.close();
      }
    }
  }
}


/******************************************************************************
 * fundsearch                                                                 *
 ******************************************************************************/

var sHighPDFIcon = "/resources/images/pictos/fundsearch/pdf.png";
var sGrayPDFIcon = "/resources/images/pictos/fundsearch/pdf_grey.png";
var sHoverPDFIcon = "/resources/images/pictos/fundsearch/pdf_hover.png";
var sSelectPDFIcon = "/resources/images/pictos/fundsearch/pdf_selected.png";

/*  global vars  */
gv_autnLang    = "";
gv_autnCountry = "";
gv_autnTarget  = "";

function initFundfinderVars(initFundfinderVarsArray) {
  gv_autnLang    = initFundfinderVarsArray[0];
  gv_autnCountry = initFundfinderVarsArray[1];
  gv_autnTarget  = initFundfinderVarsArray[2];
}

function getFundSearchTab(sID) {
  var oContainer = document.getElementById("fundsearch_result");
  var oMandatoryMessage = document.getElementById("mandatoryLabel");
  var oCurrTab = document.getElementById("currtab");
  var hiddenFieldShares = document.getElementById("selectedShares");
  var hiddenFieldDocuments = document.getElementById("selectedDocuments");
  var oNewTab = "";
  var url_request = "";
  
  if (sID == undefined) {
    //if no id has been passed (first load) => check whether a tab in the hash is present, otherwise load 1
    var nTab = getQueryVariable("?"+window.location.hash.substring(1), "tab");
    
    if (nTab) {
      sID = "tab"+nTab;
    } else {
      sID = "tab1";
    }
  }
  
  if (oCurrTab && sID != undefined) {
    //the item inititating this is a onclick-tab
    oCurrTab.value = sID;
    
    var oNewTab = document.getElementById(sID);
    
    if (!(getMandatoryState())) {
      //is there a filter mandatory and not filled in
      if (oMandatoryMessage) {
        if (oMandatoryMessage.value) {
          oContainer.innerHTML = oMandatoryMessage.value;
        }
      }
      setSearchExportButton(false, "searchExportButton");
      setSearchExportButton(false, "searchPrintButton");
      setTradedMessage(false);
      setResultTitle(false);
    } else if (oNewTab) {
      //if there are no mandatory filters, or they are filled in
      setLoading("fundsearch_result");
      setTabSelection();
      setFilters(sID);
      setSearchExportButton(true, "searchExportButton");
      setSearchExportButton(true, "searchPrintButton");
      setTradedMessage(true);
      setResultTitle(true);
      
      var page_request = getXmlHttpRequest();
      
      page_request.onreadystatechange = function(){
        fetchedFundSearchTab(page_request, sID);
      }
      
      url_request = oNewTab.value;
      url_request += "&filter=" + encodeURIComponent(getQueryString());
      url_request += "&page=" + getPageNumber();
      url_request += "&results=" + getResultsNumber();
      url_request += "&searchType=" + getSearchType();
      if(getSearchType() !='TF')
      {
	      url_request += "&ExecuteStatements=false";
      }
      else
      {
	      		var tempURIq=encodeURIComponent(getQueryString());
	      		var startLen=tempURIq.indexOf("MATCH");
	      		var tempCountry=tempURIq.substr(startLen+8,3);
	      	      url_request += "&FM_COUNTRY="+tempCountry;
      }
      
      var aSort = getSort();
      if (aSort.length == 2) {
        url_request += "&sortOn=" + aSort[0];
        url_request += "&sortOrder=" + aSort[1];
      }
      
      if (hiddenFieldShares) {
        if (hiddenFieldShares.value) {
          url_request += "&selectedShares=" + hiddenFieldShares.value;
        }
      }
      if (hiddenFieldDocuments) {
        if (hiddenFieldDocuments.value) {
          url_request += "&selectedDocuments=" + hiddenFieldDocuments.value;
        }
      }
      
      url_request += "&timestamp=" + new Date().getTime();
      
      page_request.open('GET', url_request, true);
      page_request.send(null);
    } else {
      //non existing tab?
      setTabNumber("1");
      getFundSearchTab(getTabNumber());
    }
  } 
}

function fetchedFundSearchTab(page_request, sTab) {
  var oContainer = document.getElementById("fundsearch_result");
  var oPageNotFound = document.getElementById("pagenotfound");
  
  if (page_request.readyState == 4 && page_request.status == 200 && sTab == getTabNumber()) {
    //if the page is loaded properly and the fetched tab is the currently selected: display
    if (oContainer) {
      var rspText = page_request.responseText;
      var nStart = rspText.indexOf("<!--ls:begin[body]-->") + 21;
      var nEnd = rspText.indexOf("<!--ls:end[body]-->");
      var rspBody = rspText.substring(nStart, nEnd);
      
      if (rspBody.indexOf("<!--disclaimer_validation-->") > 0) {
        window.location.reload();
      } else {
        oContainer.innerHTML = rspBody;
        
        if (getSearchType() == "FS") {
          setHash();                                              //set the hash for deeplinking
          setHits();                                              //set the total hits number
          loadSelected('selectedShares','shareCheckbox');         //re-set the checked boxes
          loadSelected('selectedDocuments','documentCheckbox');   //re-set the checked boxes
          setIcons();                                             //set the pdf icons highlighting
          saveFilter('FSSF');                                     //save the current filter in a sessioncookie
        }
        
        //redirect in case one result returned
        var oOneHitRedirect = document.getElementById("oneHitRedirect");
        if (oOneHitRedirect) {
          if (oOneHitRedirect.value) {
            clearFundSearch(); //clear textfields & dropdowns.
            window.location.hash = ""; //clear hash to avoid deeplinking
            deleteCookie('FSSF'); //delete to avoid an infinite loop.
            eval(oOneHitRedirect.value);
          }
        }
        
        //reload to page one if current tab has no hits
        var oTotal = document.getElementById("total");
        var oNumber = document.getElementById("number");
        if (oTotal && oNumber) {
          if (oTotal.value != "0" && oNumber.value == "0") {
            //reload
            resetPageNumber();
            getFundSearchTab(getTabNumber());
          }
        }
        
        if (getSearchType() != "TF")
        {
	        hideColls();                //hide the columns which are too wide for the div (carousel)
		}
        replaceTarget();            //replace the targets in the links

        //remove fixed height from content outermost div - See QC 586
        var fs_result = document.getElementById('fundsearch_result');
        var components = fs_result.getElementsByTagName('div');
        for (var cctr=0;cctr<components.length;++cctr){
          if ( components[cctr].className.indexOf("iw_component",0) != -1 ){
            components[cctr].style.height="auto";
          }
        }
      }
    }
  } else if (page_request.readyState == 4 && page_request.status != 200) {
    if (oContainer && oPageNotFound) {
      oContainer.innerHTML = oPageNotFound.value;
    }
  }
}

function setHash() {
  var sHash = "#" + getFilterString();
  window.location.hash = sHash;
}

function saveFilter(cookieName) {
  var sFilter = getFilterString();
  deleteCookie(cookieName);
  setCookie(cookieName, sFilter, "session");
}

function initFilter(sFilterEsc, cookieName) {
  var sFilter = ""
  if (sFilterEsc) {
    sFilter = decodeURIComponent(sFilterEsc);
  } else {
    sFilter = readCookie(cookieName);
  }
  
  var aFilters = sFilter.split('&');
  
  for (var i=0; i<aFilters.length; i++) {
    var aFilter = aFilters[i].split('=');
    if (aFilter[0] == "tab") {
      setTabNumber(aFilter[1]);
      setFilters(aFilter[1]);
    } else if (aFilter[0] == "page") {
      setPageNumber(aFilter[1]);
    } else if (aFilter[0] == "sortOn") {
      setSort(aFilter[1], "");
    } else if (aFilter[0] == "sortOrder") {
      setSort("", aFilter[1]);
    } else if (aFilter[0] == "results") {
      setResultsNumber(aFilter[1])
    } else {
      var oMainContainer = document.getElementById("filters_main");
      var oTabContainer = document.getElementById("filters_" + getTabNumber());
      
      var aMainContainerElements = [];
      var aTabContainerElements = [];
      
      try {
        aMainContainerElements = collectionToArray(oMainContainer.getElementsByTagName('*'));
      } catch (err) {
        //err
      }
      
      try {
        aTabContainerElements = collectionToArray(oTabContainer.getElementsByTagName('*'));
      } catch (err) {
        //err
      }
      
      var aAllElements = aMainContainerElements.concat(aTabContainerElements);
      
      for (var j=0; j<aAllElements.length; j++) {
        if (aAllElements[j].id == aFilter[0]) {
          var oFilter = aAllElements[j];
          if (oFilter) {
            // the filter has been found => do sth with it
            aFilter[1] = decodeURIComponent(aFilter[1]);
            if (oFilter.type == "text") {
              //filter is a textfield
              oFilter.value = aFilter[1];
            } else if (oFilter.type == "checkbox") {
              //filter is a checkbox
              if (aFilter[1] == "true") {
                oFilter.checked = true;
              } else {
                oFilter.checked = false;
              }
            } else if (oFilter.type == "select-one") {
              //filter is a dropdown
              oFilter.value = aFilter[1];
              //if it has an onchange-event, init it.
              if (typeof(oFilter.onchange) == "function") {
                //we'd like to execute the onchange (without initiating the search at this point)
                try {
                  var sFunc = "" + oFilter.onchange;
                  sFunc = sFunc.replace("function () {", "");
                  sFunc = sFunc.replace("fundSearch();", "");
                  sFunc = sFunc.replace("}", "");
                  sFunc = sFunc.replace(/\"/gi, "'");
                  sFunc = trim(sFunc);
                  eval(sFunc);
                } catch (err) {
                  //err
                }
              }
              //check whether the value has been selected
              if (oFilter.value != aFilter[1]) {
                a = "try { document.getElementById('"+oFilter.id+"').value='"+aFilter[1]+"'; } catch(errr){ }";
//                setTimeout("eval(a);",800);
if (oFilter.value != aFilter[1])
{
waitUpdate2(oFilter.id,aFilter[1],a,5);
}
timerX2=0;
              }
            } else {
              //it is not a textfield, check, dropdown... so it is an option from a flag-dropdown.
              oFilter.selected = true
            }
          } else {
            // the filter hasnt been found => WHAA!!
            alert("filter not found: " + aFilter[0] + " = " + aFilter[1]);
          }
        }
      }
    }
  }
  if (getSearchType() != "") {
    //setTimeout("getFundSearchTab(getTabNumber());", 2500); // do NOT execute the search automatically!
  } else {
    setTimeout("getPriceSearchTab(getTabNumber());", 2500);
  }
}
function initFilterAuto(sFilterEsc, cookieName,autosearch) {
var testFound=false;  
var sFilter = ""
  if (sFilterEsc) {
    sFilter = decodeURIComponent(sFilterEsc);
  } else {
    sFilter = readCookie(cookieName);
  }
  
  var aFilters = sFilter.split('&');
  
  for (var i=0; i<aFilters.length; i++) {
    var aFilter = aFilters[i].split('=');
    if (aFilter[0] == "tab") {
      setTabNumber(aFilter[1]);
      setFilters(aFilter[1]);
    } else if (aFilter[0] == "page") {
      setPageNumber(aFilter[1]);
    } else if (aFilter[0] == "sortOn") {
      setSort(aFilter[1], "");
    } else if (aFilter[0] == "sortOrder") {
      setSort("", aFilter[1]);
    } else if (aFilter[0] == "results") {
      setResultsNumber(aFilter[1])
    } else {
      var oMainContainer = document.getElementById("filters_main");
      var oTabContainer = document.getElementById("filters_" + getTabNumber());
      
      var aMainContainerElements = [];
      var aTabContainerElements = [];
      
      try {
        aMainContainerElements = collectionToArray(oMainContainer.getElementsByTagName('*'));
      } catch (err) {
        //err
      }
      
      try {
        aTabContainerElements = collectionToArray(oTabContainer.getElementsByTagName('*'));
      } catch (err) {
        //err
      }
      
      var aAllElements = aMainContainerElements.concat(aTabContainerElements);
      
      for (var j=0; j<aAllElements.length; j++) {
        if (aAllElements[j].id == aFilter[0]) {
          var oFilter = aAllElements[j];
          if (oFilter) {
            // the filter has been found => do sth with it
            aFilter[1] = decodeURIComponent(aFilter[1]);
            if (oFilter.type == "text") {
              //filter is a textfield
              oFilter.value = aFilter[1];
if(aFilter[1] != '')
{
testFound=true;
}
            } else if (oFilter.type == "checkbox") {
              //filter is a checkbox
              if (aFilter[1] == "true") {
                oFilter.checked = true;
              } else {
                oFilter.checked = false;
              }
            } else if (oFilter.type == "select-one") {
              //filter is a dropdown
              oFilter.value = aFilter[1];
if(aFilter[1] != '')
{
testFound=true;
}
              //if it has an onchange-event, init it.
              if (typeof(oFilter.onchange) == "function") {
                //we'd like to execute the onchange (without initiating the search at this point)
                try {
                  var sFunc = "" + oFilter.onchange;
                  sFunc = sFunc.replace("function () {", "");
                  sFunc = sFunc.replace("fundSearch();", "");
                  sFunc = sFunc.replace("}", "");
                  sFunc = sFunc.replace(/\"/gi, "'");
                  sFunc = trim(sFunc);
                  eval(sFunc);
                } catch (err) {
                  //err
                }
              }
              //check whether the value has been selected
              if (oFilter.value != aFilter[1]) {
                a = "try { document.getElementById('"+oFilter.id+"').value='"+aFilter[1]+"'; } catch(errr){ }";
//                setTimeout("eval(a);",800);
if (oFilter.value != aFilter[1])
{
waitUpdate2(oFilter.id,aFilter[1],a,5);
}
timerX2=0;
              }
            } else {
              //it is not a textfield, check, dropdown... so it is an option from a flag-dropdown.
              oFilter.selected = true
            }
          } else {
            // the filter hasnt been found => WHAA!!
            alert("filter not found: " + aFilter[0] + " = " + aFilter[1]);
          }
        }
      }
    }
  }
  if (getSearchType() != "" && (testFound==false || autosearch == 'true')) {
    setTimeout("getFundSearchTab(getTabNumber());", 2500); // do NOT execute the search automatically!
  } else if(testFound ==false || autosearch == 'true') {
    setTimeout("getPriceSearchTab(getTabNumber());", 2500);
  }
}

function getFilterString() {
  var sFilter = "";
  
  //some fixed fields
  sFilter += "tab="+(getTabNumber()).substring(3);
  sFilter += "&page=" + getPageNumber();
  var aSort = getSort();
  if (aSort.length == 2) {
    sFilter += "&sortOn=" + aSort[0];
    sFilter += "&sortOrder=" + aSort[1];
  }
  sFilter += "&results=" + getResultsNumber();
  
  //filters (including current tab filters)
  var oMainContainer = document.getElementById("filters_main");
  var oTabContainer = document.getElementById("filters_" + getTabNumber());
  
  if (oMainContainer) {
    //if the main container exists
    var aMainInputs = oMainContainer.getElementsByTagName("input");
    var aMainSelects = oMainContainer.getElementsByTagName("select");
    sFilter += getFilterStringHelper(aMainInputs);
    sFilter += getFilterStringHelper(aMainSelects);
  }
  if (oTabContainer) {
    //if the tab container exists
    var aTabInputs = oTabContainer.getElementsByTagName("input");
    var aTabSelects = oTabContainer.getElementsByTagName("select");
    sFilter += getFilterStringHelper(aTabInputs);
    sFilter += getFilterStringHelper(aTabSelects);
  }
  
  return sFilter;
}
var y;
function waitUpdate2(objK,valC,a,cptLoop)
{
	var zVal;
	eval(a);
	var z = "try { zVal=document.getElementById('"+objK+"').value; } catch(errr){ }";
	eval(z);
//	alert(zVal + ' x ' + valC);
	if(cptLoop == 0)
	{
		clearTimeout(y);
	}
	else if(zVal != valC)
	{
		//alert('ici' + objK.value + ' ' + valC);
		var cptTemp = cptLoop -1;
		clearTimeout(y);
		y=setTimeout(function(){waitUpdate2(objK,valC,a,cptTemp)},1900);
	}
	else
	{
		clearTimeout(y);
return;
	}
return;
}
var z;
function waitUpdate(cptLoop)
{
	if (timerX == 1 || cptLoop == 0)
	{
		clearTimeout(z);
		return 1;
	}
	else
	{
		var cptTemp = cptLoop -1;
		clearTimeout(z);
		z=setTimeout(function(){waitUpdate(cptTemp)},300);
//		setTimeout("waitUpdate",300);
	}
}

function getFilterStringHelper(aFilters) {
  var sHelper = "";
  for (var i=0; i<aFilters.length; i++) {
    if (aFilters[i].type == "text" && aFilters[i].value.length >= 2) {
      //filter is a textfield and its length is greater/eq to two
      sHelper += "&" +aFilters[i].id+"="+ encodeURIComponent(aFilters[i].value);
    } else if (aFilters[i].type == "checkbox") {
      //filter is a checkbox => for grouping call the helper
      sHelper += "&" +aFilters[i].id+"="+ aFilters[i].checked;
    } else if (aFilters[i].type == "select-one") {
      //filter is a dropdown
      var sTempId = "";
      if (aFilters[i].id) {
        //if the id is present, use it
        sTempId = aFilters[i].id;
      } else {
        //otherwise it's a flag filter, get the selected option's id
        sTempId = aFilters[i].options[aFilters[i].selectedIndex].id;
      }
      if (sTempId) {
        sHelper += "&" +sTempId+"="+ encodeURIComponent(aFilters[i].value);
      }
    }
  }
  return sHelper;
}

function getMandatoryState() {
  var bOK = true;
  var aMainContainerElements = [];
  var aTabContainerElements = [];
  
  var oMainContainer = document.getElementById("filters_main");
  var oTabContainer = document.getElementById("filters_" + getTabNumber());
  
  try {
    aMainContainerElements = collectionToArray(oMainContainer.getElementsByTagName('*'));
  } catch (err) {
    //err
  }
  
  try {
    aTabContainerElements = collectionToArray(oTabContainer.getElementsByTagName('*'));
  } catch (err) {
    //err
  }
  
  var aAllElements = aMainContainerElements.concat(aTabContainerElements);
  
  for (var i=0; i<aAllElements.length; i++) {
    var oFilter = aAllElements[i];
    if (oFilter) {
      if (oFilter.getAttribute("mandatory") == "true" && oFilter.value == "") {
        bOK = false;
        break;
      }
    }
  }
  
  return bOK;
}

function getQueryString() {
  //function to get the filter string
  //drops empty fields or not-selected checkboxes (except promoted flag)
  var sQuery = "";
  var sTab = "filters_" + getTabNumber();
  
  var oMainContainer = document.getElementById("filters_main");
  var oTabContainer = document.getElementById(sTab);
  
  if (oMainContainer) {
    //if the main container exists
    var aMainInputs = oMainContainer.getElementsByTagName("input");
    var aMainSelects = oMainContainer.getElementsByTagName("select");
    sQuery += getQueryStringHelper(aMainInputs, "filters_main");
    sQuery += getQueryStringHelper(aMainSelects, "filters_main");
  }
  if (oTabContainer) {
    //if the current tab container exists
    var aTabInputs = oTabContainer.getElementsByTagName("input");
    var aTabSelects = oTabContainer.getElementsByTagName("select");
    sQuery += getQueryStringHelper(aTabInputs, sTab);
    sQuery += getQueryStringHelper(aTabSelects, sTab);
  }
  if (getSearchType() == "FS") {
    //only for fundsearch
    var oPromoted = document.getElementById("FM_IS_PROMOTED");
    if (oPromoted) {
      //only add this filter if promoted list is requested
      if ((oPromoted.value=="Y" && oPromoted.checked) || (oPromoted.value=="N" && !(oPromoted.checked))) {
        sQuery += " AND MATCH{Y}:FM_IS_PROMOTED";
      }
    }
  }
var tt=getClassif2();
if(tt!= '' && tt!= undefined && sQuery.indexOf('CLASSIF2') == -1) 
{
var ttTemp = 'none';
a = "try { ttTemp = document.getElementById('FM_ASSET_CLASSIF2').value; } catch(err){ ttTemp='error';}";
eval(a);
if(ttTemp=='error')
{
//        sQuery += " AND MATCH{" + encodeURIComponent(tt) + "}:FM_ASSET_CLASSIF2" ;
}
}
  
  return sQuery;
}
function getClassif2()
{
var sUrl = window.location.hash;
var pointX='';
pointX=sUrl.indexOf("CLASSIF2",0);
var point2=sUrl.indexOf("&",pointX);
var diff = point2-(pointX+9);
if(diff>0)
{
	return(sUrl.substr(pointX+9,diff));
}
else
{
return;
}
}
function getQueryStringHelper(aFilters, sContainer) {
  var sHelper = "";
  var aCheckboxGroups = [];
  for (var i=0; i<aFilters.length; i++) {
    if (aFilters[i].value != "") {
      if (aFilters[i].type == "text" && aFilters[i].value.length >= 2) {
        //filter is a textfield and its length is greater/eq to two
        sHelper += " AND WILD{*" + encodeURIComponent(aFilters[i].value) + "*}:" + aFilters[i].id;
      } else if (aFilters[i].type == "checkbox" && !(aCheckboxGroups.containsBoolean(aFilters[i].getAttribute("name"))) && aFilters[i].id != "FM_IS_PROMOTED") {
        //filter is a checkbox => for grouping call the helper (exclude promoted => handled seperately)
        var sCheckedItems = getQueryStringHelperCheckbox(aFilters[i].getAttribute("name"), sContainer);
        sHelper += " AND MATCH{" + encodeURIComponent(sCheckedItems) + "}:" + aFilters[i].getAttribute("name");
        aCheckboxGroups.push(aFilters[i].getAttribute("name"));
      } else if (aFilters[i].type == "select-one") {
        //filter is a dropdown
        var sTempId = "";
        if (aFilters[i].id) {
          //if the id is present, use it
          sTempId = aFilters[i].id;
        } else {
          //otherwise it's a flag filter, get the selected option's id
          sTempId = aFilters[i].options[aFilters[i].selectedIndex].id;
        }
        sHelper += " AND MATCH{" + encodeURIComponent(aFilters[i].value) + "}:" + sTempId;
      }
    }
  }
  return sHelper;
}

function getQueryStringHelperCheckbox(sGroupname, sContainer) {
  var oContainer = document.getElementById(sContainer);
  var aInputs = oContainer.getElementsByTagName("input");
  var sCheckboxOptions = "";
  for(var i=0;i<aInputs.length;i++){
    if(aInputs[i].getAttribute("name") == sGroupname && aInputs[i].checked == true){
      sCheckboxOptions += aInputs[i].value + ",";
    }
  }
  return sCheckboxOptions.substring(0,sCheckboxOptions.length-1);
}

function setFilters(sID) {
  if (sID) {
    var counter = 1;
    while (document.getElementById("container_tab"+counter) != null) {
      document.getElementById("container_tab"+counter).style.display = "none";
      counter++;
    }
    
    var oContainer = document.getElementById("container_"+sID);
    if (oContainer) {
      oContainer.style.display = "";
    }
  }
}

function fundSearchFormChanged() {
  //reset the page
  resetPageNumber();
  
  //clear the fund-selection (only, not doc-selection)
  var hiddenFieldShares = document.getElementById("selectedShares");
  if (hiddenFieldShares) {
    hiddenFieldShares.value = "";
    loadSelected('selectedShares','shareCheckbox');
    loadSelected('selectedDocuments','documentCheckbox');
    setIcons();
  }
}

function fundSearch() {
  fundSearchFormChanged();
  getFundSearchTab(getTabNumber());
}

var keycount = 0;
function delayedFundSearch(oField) {
  keycount = keycount+1;
  setTimeout("delayedFundSearchGo("+keycount+", '"+oField.id+"')",800);
}

function delayedFundSearchGo(currCount, sField) {
  var oField = document.getElementById(sField);
  if(currCount == keycount && oField) {
    keycount = 0;
    if (oField.value.length >= 2 || oField.value.length == 0) {
      //start search only from 2chars, or erase of field
      fundSearchFormChanged();
      getFundSearchTab(getTabNumber());
    }
  }
}

function getPageNumber() {
  var oField = document.getElementById("pagenumber");
  var sPage = "";
  if (oField) {
    sPage = oField.value;
  }
  return sPage;
}

function setPageNumber(sNum) {
  var oField = document.getElementById("pagenumber");
  if (oField) {
    oField.value = sNum;
  }
}

function resetPageNumber() {
  var oField = document.getElementById("pagenumber");
  if (oField) {
    oField.value = "1";
  }
}

function goToPage(sNum) {
  var oField = document.getElementById("pagenumber");
  if (oField) {
    oField.value = sNum;
    getFundSearchTab(getTabNumber());
  }
}

function getResultsNumber() {
  var oField = document.getElementById("numitem");
  var sResults = "";
  if (oField) {
    sResults = oField.value;
  }
  return sResults;
}

function setResultsNumber(sResults) {
  var oField = document.getElementById("numitem");
  if (oField) {
    oField.value = sResults;
  }
}

function getSearchType() {
  var oField = document.getElementById("searchType");
  var sResults = "";
  if (oField) {
    sResults = oField.value;
  }
  return sResults;
}

function getTabNumber() {
  var oField = document.getElementById("currtab");
  var sTab = "";
  if (oField) {
    sTab = oField.value;
  }
  return sTab;
}

function setTabNumber(sNum) {
  var oField = document.getElementById("currtab");
  if (oField) {
    oField.value = "tab"+sNum;
  }
}

function getSearchPriceCurrentPageNumber() {
  var oField = document.getElementById("search_price_curpage");
  var pageNumber = 1;
  if (oField) {
    pageNumber = parseInt(oField.value);
  }
  return pageNumber;
}

function setSearchPriceCurrentPageNumber(pageNumber) {
  var oField = document.getElementById("search_price_curpage");
  if (oField) {
    oField.value = pageNumber;
  }
}

function getSearchPriceSortIdentifier() {
  var oField = document.getElementById("search_price_sort_identifier");
  var sortIdentifier = "";
  if (oField) {
    sortIdentifier = oField.value;
  }
  return sortIdentifier;
}

function setSearchPriceSortIdentifier(sortIdentifier) {
  var oField = document.getElementById("search_price_sort_identifier");
  if (oField) {
    oField.value = sortIdentifier;
  }
}

function getSearchPriceCachedRowCount() {
  var oField = document.getElementById("search_price_cached_rowcount");
  var cachedRowCount = "";
  if (oField) {
    cachedRowCount = oField.value;
  }
  return cachedRowCount;
}

function setSearchPriceCachedRowCount(cachedRowCount) {
  var oField = document.getElementById("search_price_cached_rowcount");
  if (oField) {
    oField.value = cachedRowCount;
  }
}

function setHits() {
  var oTotalField = document.getElementById("total");
  var oTotalSpan = document.getElementById("totalResults");
  
  if (oTotalField && oTotalSpan) {
    oTotalSpan.innerHTML = oTotalField.value;
  }
}

function expandCompartmentRow(oLink, sCompartmentID) {
  //expand a compartment & change image
  if (oLink && sCompartmentID) {
    var oImage = oLink.childNodes[0];
    if (oImage) {
      //switch image
      var sImg = oImage.getAttribute("src");
      var sNewImg = "";
      
      if(sImg.indexOf("display_arrow_on.png") != -1) {
        sNewImg = sImg.replace("display_arrow_on.png", "display_arrow.png");

      } else {
        sNewImg = sImg.replace("display_arrow.png", "display_arrow_on.png");
      }
      
      oImage.setAttribute("src", sNewImg);
    }
    
    var oContainer = document.getElementById("fundsearch_result");
    var oRows = oContainer.getElementsByTagName("tr");
    
    for(var i=0;i<oRows.length;i++){
      if (oRows[i].getAttribute("name") == sCompartmentID) {
        if (oRows[i].style.display == "none") {
          oRows[i].style.display = "";
        } else {
          oRows[i].style.display = "none";
        }
      }
    }
  }
}

function doRedirect(sCurr, sUmbrellaID, sCompartmentID, sShareID, sTab) {
  //redirect to the fundsheet page
  var oPageLink = document.getElementById("fundsheetpage");
  var sPath = "";
  var sToken = getQueryVariable(window.location.search, "DAT");
  
  if (oPageLink && sCurr && sUmbrellaID && sCompartmentID && sShareID) {
    sPath = location.protocol + "//" + window.location.host + oPageLink.value;
    sPath += "&shareId=" + sShareID;
    sPath += "&compartmentId=" + sCompartmentID;
    sPath += "&umbrellaId=" + sUmbrellaID;
    sPath += "&currency=" + sCurr;
    if (sToken) {
      sPath += "&DAT=" + sToken;
    }
    if (sTab) {
      sPath += "#tab=" + sTab;
    }
    window.location = sPath;
  }
}

function changeDependantFilter(sDependantID, sFilterID, sInitFrom, sLabel, sClass) {
  var oDependantOn = document.getElementById(sDependantID);
  var oFilter = document.getElementById(sFilterID);
  var oDDPage = document.getElementById("dropdownpage");
  var url_request = "";
  
  if (oDependantOn && oFilter && oDDPage && sInitFrom && sLabel) {
    //if all the necessary items/vars are present
    
    if (oDependantOn.value != "") {
      var page_request = getXmlHttpRequest();
      
      page_request.onreadystatechange = function(){
        fetchedDropdown(page_request, sFilterID);
      }
      
      url_request = oDDPage.value;
      url_request += "&field=" + sFilterID;
      url_request += "&filterfield=" + sDependantID;
      url_request += "&filtervalue=" + encodeURIComponent(oDependantOn.value);
      url_request += "&init=" + sInitFrom;
      url_request += "&label=" + sLabel;
      url_request += "&class=" + sClass;
      url_request += "&timestamp=" + new Date().getTime();
      
      page_request.open('GET', encodeURI(url_request), true);
      page_request.send(null);
    } else {
      oFilter.selectedIndex = 0;
      oFilter.setAttribute("disabled", "disabled");
    }
  }
}

function fetchedDropdown(page_request, sFilterID) {
  if (page_request.readyState == 4 && page_request.status == 200) {
    var oFilterContainer = document.getElementById("dependant_"+sFilterID);
    if (oFilterContainer) {
      var rspText = page_request.responseText;
      var nStart = rspText.indexOf("<select ");
      var nEnd = rspText.indexOf("</select>") + 9;
      oFilterContainer.innerHTML = rspText.substring(nStart, nEnd);
    }
  } else if (page_request.readyState == 4 && page_request.status != 200) {
    //alert("error in page");
  }
}

function sortSearch(sSortOn, sSortOrder) {
  setSort(sSortOn, sSortOrder);
  fundSearch();
}

function getSort () {
  var oSortOn = document.getElementById("sortOn");
  var oSortOrder = document.getElementById("sortOrder");
  var aSort = [];
  
  if (oSortOn && oSortOrder) {
    if (oSortOn.value) {
      aSort.push(""+oSortOn.value);
    }
    
    if (oSortOrder.value) {
      aSort.push(""+oSortOrder.value);
    }
  }
  return aSort;
}

function setSort (sSortOn, sSortOrder) {
  var oSortOn = document.getElementById("sortOn");
  var oSortOrder = document.getElementById("sortOrder");
  
  if (oSortOn && sSortOn) {
    oSortOn.value = sSortOn;
  }
  
  if (oSortOrder && sSortOrder) {
    oSortOrder.value = sSortOrder;
  }
}

function setIcons() {
  var aInputs = document.getElementsByTagName("input");
  var oLang = document.getElementById("downloadLang");
  
  //firstly clear previous states
  clearIcons();
  
  if (oLang) {
    for (var j = 0; j < aInputs.length; j++) {
      if (aInputs[j] != undefined) {
        if (aInputs[j].id != undefined) {
          if ((aInputs[j].id).indexOf("cnt-") == 0) {
            //we have an input for a document count => set the link visible
            var sInputId = aInputs[j].id;
            var aInputId = (sInputId).split("-");
            var sLang = aInputId[aInputId.length-1];
            
            var sLinkId = "link";
            var sImgId = "img";
            
            for (var i=1; i<aInputId.length-1; i++) {
              sLinkId += "-" + aInputId[i];
              sImgId += "-" + aInputId[i];
            }
            
            var oLink = document.getElementById(sLinkId);
            var oImg = document.getElementById(sImgId);
            
            var nThisLangCount = parseInt((aInputs[j].value).split(":")[0]);
            var nOtherLangCount = parseInt((aInputs[j].value).split(":")[1]) - nThisLangCount;
            
            if (nThisLangCount > 0 || nOtherLangCount > 0) {
              //is there any doc?
              if (oLink) {
                //set the link & image visible
                oLink.style.display = "";
              }
              if (oImg) {
                //set the correct pdf icon
                var imgSrc = oImg.getAttribute("src");
                if (imgSrc.substr(imgSrc.indexOf('resources/')) == sGrayPDFIcon.substr(sGrayPDFIcon.indexOf('resources/')) && nThisLangCount > 0 && oLang.value == sLang) {
                  //it is not highlighted, but needs to be => set it highlighted
                  oImg.setAttribute("src", sHighPDFIcon);
                }
                imgSrc = oImg.getAttribute("src");
                if (imgSrc.substr(imgSrc.indexOf('resources/')) == sHighPDFIcon.substr(sHighPDFIcon.indexOf('resources/')) && checkSelectedState(oImg.id)) {
                  //check whether it should be marked as selected
                  oImg.setAttribute("src", sSelectPDFIcon);
                }
              }
            }
          }
        }
      }
    }
  }
}

function checkSelectedState(sImgID) {
  var oCols = document.getElementById("selectedDocuments");
  var oRows = document.getElementById("selectedShares");
  
  if (oCols && oRows && sImgID) {
    var aCols = (oCols.value).split(";");
    var aRows = (oRows.value).split(";");
    var aImgId = sImgID.split("-");
    var sImgCol = aImgId[5];
    var sImgCheck = "cb-" + aImgId[1] + "-" + aImgId[2] + "-" + aImgId[3] + "-" + aImgId[4];
    
    var bColSelected = aCols.containsBoolean(sImgCol);
    var bRowSelected = aRows.containsBoolean(sImgCheck);
    
    if (bColSelected && bRowSelected) {
      return true;
    } else {
      return false;
    }
  }
}

function clearIcons() {
  var aImgs = document.getElementsByTagName("img");
  var aLinks = document.getElementsByTagName("a");
  
  for (var i = 0; i < aImgs.length; i++) {
    if (aImgs[i]) {
      if (aImgs[i].name == "PDFIcon") {
        aImgs[i].setAttribute("src", sGrayPDFIcon);
      }
    }
  }
  
  for (var i = 0; i < aLinks.length; i++) {
    if (aLinks[i]) {
      if (aLinks[i].name == "PDFLink") {
        aLinks[i].style.display = "none";
      }
    }
  }
}

function changeDocLang() {
  var oShares = document.getElementById("selectedShares");
  var oDocs = document.getElementById("selectedDocuments");
  
  var oLang = document.getElementById("downloadLang");
  var oPrevLang = document.getElementById("previousDownloadLang");
  
  var oMsg = document.getElementById("resetDocuments");
  var boolErase = false;
  
  if (oShares && oDocs && oLang  && oPrevLang && oMsg) {
    if (oShares.value != '' || oDocs.value != '') {
      var answer = confirm(oMsg.value);
      if (answer) {
        boolErase = true;
      } else {
        boolErase = false;
      }
    } else {
      boolErase = true;
    }
    
    if (boolErase) {
      //user accepted reset of shares & docs
      clearSelected();
      saveFilter('FSSF');
      saveDocLang(oLang.value);
    } else {
      //user cancelled reset of shares & docs => reset previous lang
      oLang.selectedIndex = oPrevLang.value;
      return false;
    }
  }
}

function saveDocLang(sLang) {
  var sCookieName = gv_autnTarget + "_DocLang";
  setCookie(sCookieName, sLang, "365");
}

function clearSelected() {
  //when changing filters or reset filter, clear all the checkboxes

  var hiddenFieldShares = document.getElementById("selectedShares");
  var hiddenFieldDocuments = document.getElementById("selectedDocuments");
  
  if (hiddenFieldShares && hiddenFieldDocuments) {
    hiddenFieldShares.value = "";
    hiddenFieldDocuments.value = "";
    loadSelected('selectedShares','shareCheckbox');
    loadSelected('selectedDocuments','documentCheckbox');
    setIcons();
  }
}

function loadSelected(hiddenFieldName, nameOfCheckBoxes) {
  //when changing pages in de fundfinder, re-select the earlier selected boxes (shares or documents)
  var hiddenField = document.getElementById(hiddenFieldName);
  var currentPageInputs = document.getElementsByTagName("input");
  
  if (hiddenField) {
    var hiddenFieldValue = hiddenField.value;
    var hiddenFieldValues = hiddenFieldValue.split(';');
    var allSelected = true;
    
    for (var i = 0; i < currentPageInputs.length; i++) {
      if (currentPageInputs[i].name == nameOfCheckBoxes) { //loop over all the checkboxes of this page
        var thisInput = document.getElementById(currentPageInputs[i].id);
        var alreadyInSelectedField = hiddenFieldValues.containsPosition(thisInput.id);
        
        if (alreadyInSelectedField != false) {
          //the current checkbox is in the hidden field => set it selected
          thisInput.checked = true;
        } else {
          //the current checkbox is not in the hidden field => force it disabled
          thisInput.checked = false;
          allSelected = false;
        }
      }
    }
    
    if (allSelected && nameOfCheckBoxes == 'shareCheckbox') {
      //if all of the shareCheckboxes on this page are selected, reselect the 'select all'
      elementExists("checkAll") ? document.getElementById("checkAll").checked = true : "" ;
    } else if (!allSelected && nameOfCheckBoxes == 'shareCheckbox') {
      //else force disabled
      elementExists("checkAll") ? document.getElementById("checkAll").checked = false : "" ;
    }
  }
}

function copySelected(hiddenField, nameOfCheckBoxes) {
  //to make sure the selected funds/documents in the fundfinder are 'saved' when using the FF-paging, save it to a hidden field
  var hiddenField = document.getElementById(hiddenField);
  var currentPageInputs = document.getElementsByTagName("input");
  
  if (hiddenField) {
    var hiddenFieldValue = hiddenField.value;
    var hiddenFieldValues = hiddenFieldValue.split(';');
    var newHiddenFieldValue = "";
    var allSelected = true;
    
    for (var i = 0; i < currentPageInputs.length; i++) {
      if (currentPageInputs[i].name == nameOfCheckBoxes) { //loop over all the checkboxes of this page
        var thisInput = currentPageInputs[i];
        if (thisInput) {
          var alreadyInSelectedField = hiddenFieldValues.containsPosition(thisInput.id);
          
          if (alreadyInSelectedField != false && thisInput.checked == false) {
            //if the current checkbox is in the hidden field AND NOT checked => remove from hiddenfield
            hiddenFieldValues.splice(alreadyInSelectedField,1);
          } else if (alreadyInSelectedField == false && thisInput.checked == true) {
            //if the current checkbox is NOT in the array, but IS selected => add it to the hiddenfield
            hiddenFieldValues.push(thisInput.id);
          }
          
          if (thisInput.checked == false) {
            allSelected = false;
          }
        }
      }
    }
    
    for (var i = 0; i < hiddenFieldValues.length; i++) {
      newHiddenFieldValue += hiddenFieldValues[i];
      if (i != (hiddenFieldValues.length-1)) {
        newHiddenFieldValue += ";";
      }
    }
    
    hiddenField.value = newHiddenFieldValue;
    
    if (allSelected && nameOfCheckBoxes == 'shareCheckbox') {
      //if all of the shareCheckboxes on this page are selected, reselect the 'select all'
      elementExists("checkAll") ? document.getElementById("checkAll").checked = true : "" ;
    } else if (!allSelected && nameOfCheckBoxes == 'shareCheckbox') {
      //else force disabled
      elementExists("checkAll") ? document.getElementById("checkAll").checked = false : "" ;
    }
  }
  
  setIcons();
}

var prevHoverImg = "";
function hoverIcon(oImg, bHover) {
  if (oImg) {
    if (bHover) {
      prevHoverImg = oImg.getAttribute("src");
      oImg.setAttribute("src", sHoverPDFIcon);
    } else {
      oImg.setAttribute("src", prevHoverImg);
    }
  }
}

function viewthispdf(sIdentifier) {
  var oSelectedLang = document.getElementById('downloadLang');
  var oDocNotAvailable = document.getElementById('docNotAvailable');
  var oDocPopupURL = document.getElementById('documentpage');
  var oWidth = document.getElementById("cbWidth");
  var oHeight = document.getElementById("cbHeight");
  var sWidth = "";
  var sHeight = "";
  if (oWidth) {
    sWidth = oWidth.value;
  }
  if (oHeight) {
    sHeight = oHeight.value;
  }
  
  if (sIdentifier && oSelectedLang && oDocNotAvailable && oDocPopupURL) {
    var sLang = oSelectedLang.value;
    //build the count field id
    var sCountId = sIdentifier.replace("url", "cnt") + "-" + sLang;
    
    var oCount = document.getElementById(sCountId);
    
    if (oCount) {
      //the current language count field is found
      
      var nThisLangCount = parseInt((oCount.value).split(":")[0]);
//      var nThisLangCount = parseInt((oCount.value).split(":")[1]);
      
      if (nThisLangCount == 1) {
        //the current language has only one doc for this compartment-shares & doctype
        var aHidden = document.getElementsByTagName("input");
        var sName = "url-" + sIdentifier.split('-')[3];
        for (var i=0; i<aHidden.length-1; i++) {
          if (aHidden[i]) {
            if (aHidden[i].name != undefined) {
              if (aHidden[i].name == sName && (aHidden[i].id).indexOf(sLang) != -1 && (aHidden[i].id).indexOf(sIdentifier) != -1) {
                //is the url-input-name the same as the one clicked? and the language the one currently viewing? and the document type the correct one?
                if (aHidden[i].value) {
                  window.open(aHidden[i].value, '', '');
                  break;
                }
              }
            }
          }
        }
      } else if (nThisLangCount > 1) {
        //the current language has multiple docs for this compartment-shares & doctype
        if (oDocPopupURL.value) {
          var sPopupURL = oDocPopupURL.value;
          sPopupURL += "&umbrellaId=" + sIdentifier.split('-')[2];
          sPopupURL += "&compartmentId=" + sIdentifier.split('-')[3];
          sPopupURL += "&shareId=" + sIdentifier.split('-')[4];
          sPopupURL += "&docType=";
          if (sIdentifier.split("-").length == 7) {
            sPopupURL += "&docSubType=" + sIdentifier.split('-')[5] + "-" + sIdentifier.split('-')[6];
          } else {
            sPopupURL += "&docSubType=" + sIdentifier.split('-')[5];
          }
          sPopupURL += "&docLang=" + sLang;
          sPopupURL += "&otherDoc=Y";
          
//          jQuery.fn.colorbox({href:sPopupURL, width:sWidth, height:sHeight, iframe:true});
window.open(sPopupURL,'','');
        }
      } else if (oDocNotAvailable.value != '') {
        //the current language has no docs
        alert(oDocNotAvailable.value);
      }
    } else if (oDocNotAvailable.value != '') {
      //the current language has no docs
      alert(oDocNotAvailable.value);
    }
  }
}

function selectAll() {
  //select all the checkboxes on a current fundfinder page
  var isChecked = document.getElementById('checkAll').checked;
  var inputs = document.getElementsByTagName("input");
  for (var i = 0; i < inputs.length; i++) {
    if (inputs[i].name == "shareCheckbox") {
      document.getElementById(inputs[i].id).checked = isChecked;
    }
  } 
}

function downloadDocuments() {
  //function to call the JSP page which zips & sends the selected documents
  var hiddenFieldShares = document.getElementById("selectedShares");
  var hiddenFieldDocuments = document.getElementById("selectedDocuments");
  var selectedLanguage = document.getElementById("downloadLang");
  var noDocsSelected = document.getElementById("noDocsSelected");
  var noFundsSelected = document.getElementById("noFundsSelected");
  var noFundsOrDocsSelected = document.getElementById("noFundsOrDocsSelected");
  var oDocZipPage = document.getElementById("docZipPage");
  
  var openURL = "";
  
  if (hiddenFieldShares && hiddenFieldDocuments && selectedLanguage && noDocsSelected && noFundsSelected && noFundsOrDocsSelected && oDocZipPage) {
    if (oDocZipPage.value != "") {
      //only do sth if there is a JSP
      
      if (hiddenFieldShares.value == "" && hiddenFieldDocuments.value == "" && noFundsOrDocsSelected.value != "") {
        //no funds or docs selected => alert
        alert(noFundsOrDocsSelected.value);
        
      } else if (hiddenFieldDocuments.value == "" && noDocsSelected.value != "") {
        //if only no documents have been selected => alert
        alert(noDocsSelected.value);
        
      } else if (hiddenFieldShares.value == "" && noFundsSelected.value != "") {
        //if only no funds have been selected => alert
        alert(noFundsSelected.value);
        
      } else if (hiddenFieldShares.value != "" && hiddenFieldDocuments.value != "") {
        //only invoke JSP if there are documents & funds selected
        var sCountry = (gv_autnTarget.split("_")[1]).split("-")[0];
        
        openURL += oDocZipPage.value;
        
        openURL += "?target=" + gv_autnTarget;
        openURL += "&language=" + selectedLanguage.value;
        openURL += "&ids=" + hiddenFieldShares.value;
        openURL += "&documents=" + hiddenFieldDocuments.value;
        openURL += "&l=" + getQueryVariable(window.location.search, "l");
        openURL += "&c=" + sCountry;
        
        window.open(openURL,'','');
      }
    }
  }
}

function doDivExport(sCurr, sUmbrellaID, sCompartmentID, sShareID) {
  var oExportPage = document.getElementById("divExportPage");
  
  if (oExportPage) {
    var sExportPage = (oExportPage.value).replace(/&amp;/gi, "&");
    
    if(sCurr && sUmbrellaID && sCompartmentID && sShareID && sExportPage) {
      var sURL = sExportPage+"&umbrellaId="+sUmbrellaID+"&compartmentId="+sCompartmentID+"&shareId="+sShareID+"&currency="+sCurr;
      window.location = sURL;
    }
  }
}

function doSearchExport(sType) {
  var oServerPage = document.getElementById("searchExportPage");
  var oTabExportPage = document.getElementById(getTabNumber() + "_export");
  
  if (oServerPage && oTabExportPage) {
    if (oServerPage.value && oTabExportPage.value) {
      
      //get the helper page
      var aHelper = (oTabExportPage.value.split(".page")[0]).split("/");
      var sHelper = "";
      for (var i = 1; i < aHelper.length; i++) {
        sHelper += "/" + aHelper[i];
      }
      sHelper = sHelper.substr(1);
      
      //construct the export-url
      var sURL = oServerPage.value + "&page=" + sHelper;
      sURL += "&ExecuteStatements=false";
      sURL += "&filter=" + encodeURIComponent(getQueryString());
      sURL += "&" + getFilterString();
      sURL += "&transformto=" + sType;
      
      window.location = sURL;
    }
  }
}

function doSearchExportTF(sType) {
  var oServerPage = document.getElementById("searchExportPage");
  var oTabExportPage = document.getElementById(getTabNumber() + "_export");
  
  if (oServerPage && oTabExportPage) {
    if (oServerPage.value && oTabExportPage.value) {
      
      //get the helper page
      var aHelper = (oTabExportPage.value.split(".page")[0]).split("/");
      var sHelper = "";
      for (var i = 1; i < aHelper.length; i++) {
        sHelper += "/" + aHelper[i]
      }
      sHelper = sHelper.substr(1);
      
      //construct the export-url
      var sURL = oServerPage.value + "&searchType=TF&page=" + sHelper;
      sURL += "&filter=" + encodeURIComponent(getQueryString());
      sURL += "&" + getFilterString();
      sURL += "&transformto=" + sType;
	  var tempURIq=encodeURIComponent(getQueryString());
	  var startLen=tempURIq.indexOf("MATCH");
	  var tempCountry=tempURIq.substr(startLen+8,3);
//      sURL += "&FM_COUNTRY="+tempCountry;      
      window.location = sURL;
    }
  }
}
function setSearchExportButton(bAllowed, sObject) {
  var oExportHidden = document.getElementById(getTabNumber() + "_export");
  var oExportButton = document.getElementById(sObject);
  
  if (oExportHidden && oExportButton) {
    if (oExportHidden.value && bAllowed) {
      //the current tab has an export page => set visible
      oExportButton.style.display = "";
    } else {
      //the current tab has no export page => set hidden
      oExportButton.style.display = "none";
    }
  }
}

function setTradedMessage(bState) {
  var oTradresul = document.getElementById("tradresul");
  var oTradresulCountry = document.getElementById("tradresul_country");
  var oCountry = document.getElementById("FM_DOMICILE_COUNTRY");
  
  if (oTradresul && oTradresulCountry && oCountry) {
    if (bState) {
      //set visible & get current country
      oTradresul.style.display = "";
      oTradresulCountry.innerHTML = oCountry.options[oCountry.selectedIndex].text;
    } else {
      oTradresul.style.display = "none";
    }
  }
}

function setResultTitle(bState) {
  var oTitle = document.getElementById("result_title");
  
  if (oTitle) {
    if (bState) {
      oTitle.style.display = "";
    } else {
      oTitle.style.display = "none";
    }
  }
}

function clearFundSearch() {
  var aMainContainerElements = [];
  var aTabContainerElements = [];
  
  var oMainContainer = document.getElementById("filters_main");
  var oTabContainer = document.getElementById("filters_" + getTabNumber());
  
  try {
    aMainContainerElements = collectionToArray(oMainContainer.getElementsByTagName('*'));
  } catch (err) {
    //err
  }
  
  try {
    aTabContainerElements = collectionToArray(oTabContainer.getElementsByTagName('*'));
  } catch (err) {
    //err
  }
  
  var aAllElements = aMainContainerElements.concat(aTabContainerElements);
  
  for (var i=0; i<aAllElements.length; i++) {
    var oFilter = aAllElements[i];
    if (oFilter) {
      if (oFilter.type == "text") {
        //clear
        oFilter.value = "";
      } else if (oFilter.type == "checkbox") {
        //set to default status
        var sDefault = oFilter.getAttribute("default");
        if (sDefault != undefined) {
          if (sDefault == "true") {
            oFilter.checked = true;
          } else {
            oFilter.checked = false;
          }
        }
      } else if (oFilter.type == "select-one") {
        //set first
        oFilter.selectedIndex = 0;
		if (oFilter.onchange) oFilter.onchange()
      }
    }
  }
}

function resetFilter() {
  //clearSelected();           // clear selected funds
  clearFundSearch();         // clear textfields & dropdowns.
  window.location.hash = ""; // clear hash to avoid deeplinking
  deleteCookie('FSSF');      // delete to avoid an infinite loop.
  fundSearch();              // execute search
}

function searchOnEnter(e) {
  if (!e) var e = window.event;
  if (e.keyCode) code = e.keyCode;
  else if (e.which) code = e.which;
  
  if (code==13) {
    //user pressed enter, execute search
    fundSearch();
  }
} 


/******************************************************************************
 * window component                                                           *
 ******************************************************************************/

function toggleWindow(toOpen, toClose) {
  var oOpen = document.getElementById(toOpen);
  var oClose = document.getElementById(toClose);
  
  if (oOpen && oClose) {
    oOpen.style.display = "";
    oClose.style.display = "none";
  }
}


/******************************************************************************
 * fundMatrixRange component                                                  *
 ******************************************************************************/

function getFundMatrixTable(sCategory, sSubCat, sType, sFirstLevel, sSecondLevel, sDomCountry) {
  var oPage = document.getElementById("fmrdatapage");
  var url_request = "";
  var bIsExpanded = false;

  if(oPage && sCategory && sSubCat && sType && sFirstLevel && sDomCountry) {
    //all except 2nd level = obligated.

    var oCatDiv = document.getElementById(sCategory + "_" + sSubCat);
    if (oCatDiv) {
      if ((oCatDiv.className).indexOf("_selected") != -1) {
        //check whether the currently clicked is already expanded
        bIsExpanded = true;

        //clear the containerdiv & clear select-states
        clearContainersFMR();
        setHighlightedFMR("", "");
      }
    }
    
    
    var sPageName = oPage.value;
    
    if (sPageName && !(bIsExpanded)) {
      var page_request = getXmlHttpRequest();
          
      page_request.onreadystatechange = function(){
        fetchedMatrixTable(page_request, sCategory, sSubCat);
      }
      
      url_request = sPageName;
      url_request += "&type=" + sType;
      url_request += "&first=" + sFirstLevel;
      url_request += "&second=" + sSecondLevel;
      url_request += "&dom=" + sDomCountry;
      url_request += "&timestamp=" + new Date().getTime();
      
      page_request.open('GET', url_request, true);
      page_request.send(null);
    }
  }
}

function fetchedMatrixTable(page_request, sCategory, sSubCat) {
  var oContainer = document.getElementById(sCategory + "_container");
  
  if (page_request.readyState == 4 && page_request.status == 200) {
    clearContainersFMR();
    if (oContainer) {
      var rspText = page_request.responseText;
      var nStart = rspText.indexOf("<!--ls:begin[body]-->") + 21;
      var nEnd = rspText.indexOf("<!--ls:end[body]-->");
      oContainer.innerHTML = rspText.substring(nStart, nEnd);
      oContainer.style.display="block";
      
      setHighlightedFMR(sCategory, sSubCat);
      replaceTarget(); //replace the targets in the links

      //remove fixed height from content outermost div - See QC 586
      var components = oContainer.getElementsByTagName('div');
      for (var cctr=0;cctr<components.length;++cctr){
        if ( components[cctr].className.indexOf("iw_component",0) != -1 ){
          components[cctr].style.height="auto";
        }
      }
    }
  }
}

function clearContainersFMR() {
  //clear containers
  //var oComp = document.getElementById("fundMatrixRange");
  //search in document instead of oComp due to getElementsByTagName not working properly in IE
  var aDivs = document.getElementsByTagName("div");
  for (i=0; i<aDivs.length; i++) {
    if (aDivs[i].getAttribute("id") != undefined) {
      if ((aDivs[i].getAttribute("id")).indexOf("_container") != -1) {
        aDivs[i].innerHTML = "<!--0-->";
        aDivs[i].style.display="none";
      }
    }
  }
}

function setHighlightedFMR(sCategory, sSubCat) {
  //clear highlighted states
  var oComp = document.getElementById("fumara");
  var aDivs = oComp.getElementsByTagName("div");
  for (i=0; i<aDivs.length; i++) {
    if (aDivs[i].className != undefined) {
      if ((aDivs[i].className).indexOf("_selected") != -1) {
        var cssClass = (aDivs[i].className).replace("_selected", ""); //trim "_selected" from the class
        aDivs[i].className = cssClass;
      }
    }
  }
  
  if (sCategory && sSubCat) {
    //set first div highlighted
    var oDivOne = document.getElementById(sCategory);
    oDivOne.className = (oDivOne.className + "_selected");
    
    //set second div highlighted
    var oDivTwo = document.getElementById(sCategory + "_" + sSubCat);
    oDivTwo.className = (oDivTwo.className + "_selected");
  }
}


/******************************************************************************
 * itemsList component                                                        *
 ******************************************************************************/

function doItemsList(oSelect, sTarget) {
  if (oSelect && sTarget) {
    var sURL = oSelect.value;
    if (sURL) {
      if (sTarget == "_blank") {
        window.open(sURL, '', '');
      } else if (sTarget == "_self") {
        window.location = sURL;
      }
    }
  }
}


/******************************************************************************
 * quickFundFinder component                                                  *
 ******************************************************************************/

function doQuickFundFinder(sCodeID, sNameID, sAssetID, sSubAssetID) {
  var oFSPage = document.getElementById("fundsearchpage");
  var oCode = document.getElementById(sCodeID);
  var oName = document.getElementById(sNameID);
  var oAsset = document.getElementById(sAssetID);
  var oSubAsset = document.getElementById(sSubAssetID);
  
  if (oFSPage && oCode && oName && oAsset && oSubAsset) {
    var sURL = oFSPage.value + "#";
    var sHash = sCodeID + "=" + encodeURIComponent(oCode.value);
    sHash += "&" + sNameID + "=" + encodeURIComponent(oName.value);
    sHash += "&" + sAssetID + "=" + encodeURIComponent(oAsset.value);
    sHash += "&" + sSubAssetID + "=" + encodeURIComponent(oSubAsset.value);
    sHash += "&FM_RATING_---=true&FM_RATING_1=true&FM_RATING_2=true&FM_RATING_3=true&FM_RATING_4=true&FM_RATING_5=true"; //nasty
    
    sURL += encodeURIComponent(sHash);

    window.location = sURL;
  }
}
function doQuickFundFinderNewFSDirect(DataPage,sCodeID, sNameID, sAssetID, sSubAssetID) {
  var oFSPage = document.getElementById("fundsearchpage");
  var oFundSPage = document.getElementById("fundsheetpage");
  var oCode = document.getElementById(sCodeID);
  var oName = document.getElementById(sNameID);
  var oAsset = document.getElementById(sAssetID);
  var oSubAsset = document.getElementById(sSubAssetID);
  
//  if (oFSPage && oCode && oName && oAsset && oSubAsset) {
    var sURLFS = oFSPage.value + "#";
var sURL=DataPage;

    var sHash = sCodeID + "=" + encodeURIComponent(oCode.value);
    sHash += "&" + sNameID + "=" + encodeURIComponent(oName.value);
    sHash += "&" + sAssetID + "=" + encodeURIComponent(oAsset.value);
    sHash += "&" + sSubAssetID + "=" + encodeURIComponent(oSubAsset.value);
    sHash += "&FM_RATING_---=true&FM_RATING_1=true&FM_RATING_2=true&FM_RATING_3=true&FM_RATING_4=true&FM_RATING_5=true"; //nasty
    sURLFS += encodeURIComponent(sHash);

	sURL+="&filter=";	
	var filterTo=" AND MATCH{Y}:FM_IS_PROMOTED";
	if(oCode != undefined && oCode.value !='')
	{
		filterTo += " AND WILD{*"+oCode.value+"*}:FM_ISIN_CODE";
	}
	if(oName != undefined && oName.value !='')
	{
		filterTo += " AND WILD{*"+oName.value+"*}:FM_COMP_LEGAL_NAME";
	}
	if(oAsset != undefined && oAsset.value !='')
	{
		filterTo += " AND MATCH{"+oAsset.value+"}:FM_ASSET_CLASSIF1";
	}
	if(oSubAsset != undefined && oSubAsset.value !='')
	{
		filterTo += " AND MATCH{"+oSubAsset.value+"}:FM_ASSET_CLASSIF2";
	}
    sURL += encodeURIComponent(filterTo);

	  var page_request = getXmlHttpRequest();
	  
	  page_request.onreadystatechange = function(){
	    QuickFundFindercheckNumberElem(page_request,sURLFS,oFundSPage.value);
  	  }
      var url_request = sURL;
//      url_request += sFilterStr;
//      url_request += "&timestamp=" + new Date().getTime();
      
      page_request.open('GET', url_request, true);
      page_request.send(null);
//    alert(sURL);
//    window.location = sURL;
//  }
}
function QuickFundFindercheckNumberElem(page_request,oFSPage,oFundSPage)
{
	  var currentResult = 0;
	  if (page_request.readyState == 4 && page_request.status == 200)
	  {
      	var rspText = page_request.responseText;
      	var nStart = rspText.indexOf("StartResults") + 12;
      	var nEnd = rspText.indexOf("EndResults");
      	currentResult = rspText.substring(nStart, nEnd);
      	if(currentResult == 1)
      	{
	      	var nStartFSElem1 = rspText.indexOf("StartFSParam1") + 13;
    	  	var nEndFSElem1 = rspText.indexOf("EndFSParam1");
	      	var paramFS1 = rspText.substring(nStartFSElem1, nEndFSElem1);
	      	var nStartFSElem2 = rspText.indexOf("StartFSParam2") + 13;
    	  	var nEndFSElem2 = rspText.indexOf("EndFSParam2");
	      	var paramFS2 = rspText.substring(nStartFSElem2, nEndFSElem2);
	      	var nStartFSElem3 = rspText.indexOf("StartFSParam3") + 13;
    	  	var nEndFSElem3 = rspText.indexOf("EndFSParam3");
	      	var paramFS3 = rspText.substring(nStartFSElem3, nEndFSElem3);
	      	var nStartFSElem4 = rspText.indexOf("StartFSParam4") + 13;
    	  	var nEndFSElem4 = rspText.indexOf("EndFSParam4");
	      	var paramFS4 = rspText.substring(nStartFSElem4, nEndFSElem4);
	      	var FSUrl = oFundSPage + '&' + paramFS1+ '&' + paramFS2+ '&' + paramFS3+ '&' + paramFS4;
		    window.location = FSUrl;
      	}
      	else
      	{
		    window.location = oFSPage;
      	}
	  }
	  else if (page_request.readyState == 4 && page_request.status != 200)
	  {
		  //go to the FS if problem or other...
		    window.location = oFSPage;
      }
      
//alert(currentResult);
}


/******************************************************************************
 * searchSharePrice components                                                *
 ******************************************************************************/

function getPriceSearchTab(sID, fetch_count) {
  var oContainer = document.getElementById("fundsearch_result");
  var oMandatoryMessage = document.getElementById("mandatoryLabel");
  var oCurrTab = document.getElementById("currtab");
  var oNewTab = "";
  var url_request = "";
  
  if (sID == undefined) {
    //if no id has been passed (first load) => check whether a tab in the hash is present, otherwise load 1
    var nTab = getQueryVariable("?"+window.location.hash.substring(1), "tab");
    
    if (nTab) {
      sID = "tab"+nTab;
    } else {
      sID = "tab1";
    }
  }

  if (fetch_count == undefined) {
    fetch_count = true;
  }
  
  if (oCurrTab && sID != undefined) {
    //the item inititating this is a onclick-tab
    oCurrTab.value = sID;
    
    var oNewTab = document.getElementById(sID);
    
    setPriceSearchExportButton(false, "searchExportButton");
    setPriceSearchExportButton(false, "searchPrintButton");
    setResultTitle(false);
    
    if (!(getMandatoryState())) {
      //is there a filter mandatory and not filled in
      if (oMandatoryMessage) {
        if (oMandatoryMessage.value) {
          oContainer.innerHTML = oMandatoryMessage.value;
        }
      }
    } else if (oNewTab) {
      //if there are no mandatory filters, or they are filled in
      setLoading("fundsearch_result");
      jQuery('#exportForm').attr("action", jQuery('#exportAction').val()); //set the export form action attribute
      jQuery('#printForm').attr("action", jQuery('#printAction').val());   //set the print form action attribute
      
      var page_request = getXmlHttpRequest();
      
      page_request.onreadystatechange = function(){
        fetchedPriceSearchTab(page_request, sID);
      }
      
      var sFilterStr = replaceQueryString(("&" + getFilterString()), "promoted", getSearchPricePromotedValue());
      sFilterStr = replaceQueryString("?" + sFilterStr, "first_record", (getSearchPriceCurrentPageNumber()-1)*parseInt(getResultsNumber())+1).substr(1);
      sFilterStr = replaceQueryString("?" + sFilterStr, "last_record", getSearchPriceCurrentPageNumber()*parseInt(getResultsNumber())).substr(1);;
      sFilterStr = replaceQueryString("?" + sFilterStr, "sort_identifier", getSearchPriceSortIdentifier()).substr(1);;
      sFilterStr = replaceQueryString("?" + sFilterStr, "fetch_count", fetch_count ? 1 : 0).substr(1);;
      
      url_request = oNewTab.value;
      url_request += sFilterStr;
      url_request += "&timestamp=" + new Date().getTime();
      
      page_request.open('GET', url_request, true);
      page_request.send(null);
    } else {
      //non existing tab?
      setTabNumber("1");
      getPriceSearchTab(getTabNumber());
    }
  } 
}

//promoted value should be Y or N
function getSearchPricePromotedValue() {
  var sPromotedVal = "";
  var oPromoted = document.getElementById("promoted");
  if (oPromoted) {
    if (oPromoted.checked) {
      sPromotedVal = "Y";
    } else {
      sPromotedVal = "N";
    }
  }
  return sPromotedVal;
}

function fetchedPriceSearchTab(page_request, sTab) {
  var oContainer = document.getElementById("fundsearch_result");
  var oPageNotFound = document.getElementById("pagenotfound");
  
  if (page_request.readyState == 4 && page_request.status == 200 && sTab == getTabNumber()) {
    //if the page is loaded properly and the fetched tab is the currently selected: display
    if (oContainer) {
      var rspText = page_request.responseText;
      var nStart = rspText.indexOf("<!--ls:begin[body]-->") + 21;
      var nEnd = rspText.indexOf("<!--ls:end[body]-->");
      oContainer.innerHTML = rspText.substring(nStart, nEnd);
      
      setHash();  //set the hash for deeplinking
      setHits();  //set the total hits number
      evalGrid(); //start the grid function
      replaceTarget(); //replace the targets from the links
    }
  } else if (page_request.readyState == 4 && page_request.status != 200) {
    if (oContainer && oPageNotFound) {
      oContainer.innerHTML = oPageNotFound.value;
    }
  }
}

function setPriceSearchExportButton(bAllowed, sObject) {
  var oExportButton = document.getElementById(sObject);
  
  if (oExportButton) {
    if (bAllowed) {
      //the current tab has an export page => set visible
      oExportButton.style.display = "";
    } else {
      //the current tab has no export page => set hidden
      oExportButton.style.display = "none";
    }
  }
}

function priceSearch() {
  getPriceSearchTab(getTabNumber());
}

var keycount = 0;
function delayedPriceSearch(oField) {
  keycount = keycount+1;
  setTimeout("delayedPriceSearchGo("+keycount+", '"+oField.id+"')",800);
}

function delayedPriceSearchGo(currCount, sField) {
  var oField = document.getElementById(sField);
  if(currCount == keycount && oField) {
    keycount = 0;
    if (oField.value.length >= 2 || oField.value.length == 0) {
      //start search only from 2chars, or erase of field
      getPriceSearchTab(getTabNumber());
    }
  }
}

function evalGrid () {
  var oSrc = document.getElementById("jscrpt");
  
  if (oSrc) {
    var sSrc = (oSrc.innerHTML).replace(/\&amp;/g, "&");
    
    if (sSrc) {
      try {
        eval(sSrc);
        startGrid();                                               //start the visible jqGrid
        setPriceSearchExportButton(true, "searchExportButton");
        setPriceSearchExportButton(true, "searchPrintButton");
        setResultTitle(true);
        setPriceSeachPager(getPriceSearchMaxPage());
      } catch(err) {
        consoleLog(err);
      }
    }
  }
}

function sortMethodCalled(index, iCol, sortorder) {
  var newSortIdentifier = [index, '_', sortorder].join('');
  setSearchPriceSortIdentifier(newSortIdentifier);
  getPriceSearchTab(getTabNumber());
  return 'stop';
}

function goToPriceSearchPage(pageNumber) {
  setSearchPriceCurrentPageNumber(pageNumber);
  getPriceSearchTab(getTabNumber(), false);
}

function setPriceSeachPager(countFromServer) {
  var cur = getSearchPriceCurrentPageNumber();
  var totalCount = countFromServer;
  if (totalCount == -1)
    totalCount = getSearchPriceCachedRowCount();
  setSearchPriceCachedRowCount(totalCount);
  var rpp = parseInt(getResultsNumber());
  var pagerHtml = [
    '<table class="pagebar" align="center"><tbody><tr><td>',
    (cur==1 || totalCount==0) ? '<span class="nosel">' : '<a onclick="goToPriceSearchPage(1); return false;" href="#" class="selimg">',
    '<img src="/resources/images/pictos/fundsearch/beginning.gif" class="aspimg" align="top">',
    (cur==1 || totalCount==0) ? '</span>' : '</a>',
    (cur==1 || totalCount==0) ? '<span class="nosel">' : '<a onclick="goToPriceSearchPage('+(cur-1)+'); return false;" href="#" class="selimg">',
    '<img src="/resources/images/pictos/fundsearch/previous.gif" class="aspimg" align="top">',
    (cur==1 || totalCount==0) ? '</span>' : '</a>',
    '<span class="nosel">&nbsp;</span>'
  ];

  var iter=0;
  var counter=0;
  while(iter<totalCount){
    ++counter;
    iter = iter + rpp;
  }
  
  pagerHtml[pagerHtml.length] = [
      (cur == 1) ? '<span class="pagok">' : '<a onclick="goToPriceSearchPage(1); return false;" href="#" class="selpag">',
      '1',
      (cur == 1) ? '</span>' : '</a>'
    ].join('');

  // all except first and last. if there are too many of items, show only 8: 3 before and 3 after current
  var start = 2;
  var end = counter-1;
  if (counter>10) {
    start = cur>5 ? cur-3 : 2;
    end = counter-cur+1>5 ? cur+3 : counter-1;
  }
  
  if (start != 2) {
    pagerHtml[pagerHtml.length] = '<span class="nosel">-&nbsp;...&nbsp;</span>';
  }
  for (iter=start;iter<=end;iter++) {
    pagerHtml[pagerHtml.length] = '<span class="nosel">-</span>';
    pagerHtml[pagerHtml.length] = [
      (cur == iter) ? '<span class="pagok">' : '<a onclick="goToPriceSearchPage('+iter+'); return false;" href="#" class="selpag">',
      iter,
      (cur == iter) ? '</span>' : '</a>'
    ].join('');
  }
  if (end != counter-1) {
    pagerHtml[pagerHtml.length] = '<span class="nosel">-&nbsp;...&nbsp;</span>';
  }

  if (counter>2) {
    pagerHtml[pagerHtml.length] = '<span class="nosel">-</span>';
    pagerHtml[pagerHtml.length] = [
      (cur == counter) ? '<span class="pagok">' : '<a onclick="goToPriceSearchPage('+counter+'); return false;" href="#" class="selpag">',
      counter,
      (cur == counter) ? '</span>' : '</a>'
    ].join('');
  }  

  var pagerHtmlFooter = [
    '<span class="nosel">&nbsp;</span>',
    (cur==counter || totalCount==0) ? '<span class="nosel">' : '<a onclick="goToPriceSearchPage('+(cur+1)+'); return false;" href="#" class="selimg">',
    '<img src="/resources/images/pictos/fundsearch/next.gif" class="aspimg" align="top"></a>',
    (cur==counter || totalCount==0) ? '</span>' : '</a>',
    (cur==counter || totalCount==0) ? '<span class="nosel">' : '<a onclick="goToPriceSearchPage('+counter+'); return false;" href="#" class="selimg">',
    '<img src="/resources/images/pictos/fundsearch/end.gif" class="aspimg" align="top"></a>',
    (cur==counter || totalCount==0) ? '</span>' : '</a>',
    '</td></tr></tbody></table>'];
    
  jQuery("#pager").html(pagerHtml.join('')+pagerHtmlFooter.join(''));
}


// format of sort_identifier: <columnname>_<sortorder>
function getCurrentSortIdentifierOrder() {
  var sortIdentifier = getSearchPriceSortIdentifier();
  return sortIdentifier.substr(sortIdentifier.lastIndexOf('_')+1);
}

function getCurrentSortIdentifierColumn() {
  var sortIdentifier = getSearchPriceSortIdentifier();
  return sortIdentifier.substr(0,sortIdentifier.lastIndexOf('_'));
}

function currencyFmatter(cellvalue, options, rowObject) {
  if (cellvalue && !isNaN(cellvalue)) {
    return jQuery.fn.fmatter.number(cellvalue,options) + " " + rowObject.hvc;
  }
  return true;
}

function doSearchPriceExport(sType) {
  var oServerPage = document.getElementById("exportAction");
  var oTabExportPage = document.getElementById("exportImplementationPage");
  
  if (oServerPage && oTabExportPage) {
    if (oServerPage.value && oTabExportPage.value) {
      
      //get the helper page
      var aHelper = (oTabExportPage.value.split(".page")[0]).split("/");
      var sHelper = "";
      for (var i = 1; i < aHelper.length; i++) {
        if (aHelper[i])
          sHelper += "/" + aHelper[i];
      }
      sHelper = sHelper.substr(1);
      
      //construct the export-url
      var targetExportUrl = getFilterString();

      targetExportUrl = replaceQueryString("?"+targetExportUrl, "page", sHelper).substr(1);
      targetExportUrl = replaceQueryString("?"+targetExportUrl, "first_record", "1").substr(1);
      targetExportUrl = replaceQueryString("?"+targetExportUrl, "last_record", "100000").substr(1);
      targetExportUrl = replaceQueryString("?"+targetExportUrl, "fetch_count", "0").substr(1);
      targetExportUrl = replaceQueryString("?"+targetExportUrl, "subassetclassTitle", encodeURI(jQuery('#subassetclass option:selected').text())).substr(1);
      targetExportUrl = replaceQueryString("?"+targetExportUrl, "promoted", getSearchPricePromotedValue()).substr(1);

      window.location = oServerPage.value + "&" + targetExportUrl;
    }
  }
}

/******************************************************************************
 * contactform component                                                      *
 ******************************************************************************/

function submitContact(sFormID) {
  if (sFormID) {
    var oForm = document.forms[(""+sFormID)];
    if (oForm) {
      var bManIsEmpty = false;
      var bMailIsValid = true;
      var formVals = "";
      
      //hide errmsgs
      var oEr = document.getElementById("mandatoryError");
      if (oEr) {
        oEr.style.display = "none";
      }
      var oErM = document.getElementById("mailError");
      if (oErM) {
        oErM.style.display = "none";
      }
      
      for (var n=0; n < oForm.elements.length; n++) {
        if (checkMandatoryField(oForm.elements[n])) {
          //passed validation => is not mandatory or is filled in
          var oErr = document.getElementById(oForm.elements[n].id + "_mandatoryError");
          if (oErr) {
            oErr.style.display = "none";
          }
        } else {
          //is mandatory and not filled in
          bManIsEmpty = true;
          var oErr = document.getElementById(oForm.elements[n].id + "_mandatoryError");
          if (oErr) {
            oErr.style.display = "";
          }
          
          var oErrr = document.getElementById("mandatoryError");
          if (oErrr) {
            oErrr.style.display = "";
          }
        }
        
        //check email valid
        if (oForm.elements[n].getAttribute("email") == "true") {
          oForm.elements[n].value = (oForm.elements[n].value).replace(/ /gi, "");
          
          if ((oForm.elements[n].value).indexOf(",") != -1) {
            //it contains a comma => make it semicolon
            oForm.elements[n].value = (oForm.elements[n].value).replace(/,/gi, ";");
          }
          if ((oForm.elements[n].value).indexOf(";") != -1) {
            var aVal = (oForm.elements[n].value).split(";");
            for (i=0; i<aVal.length; i++) {
              if (checkmail(oForm.elements[n].id, aVal[i]) == false) {
                bMailIsValid = false;
              }
            }
          } else {
            if (checkmail(oForm.elements[n].id, oForm.elements[n].value) == false) {
              bMailIsValid = false;
            }
          }
        }
        
        
        //build the str
        if (oForm.elements[n].type == "checkbox" || oForm.elements[n].type == "radio") {
          if (oForm.elements[n].checked) {
            formVals += oForm.elements[n].id + "=" + oForm.elements[n].value + "|";
          }
        } else {
          formVals += oForm.elements[n].id + "=" + rplPipeEqual(oForm.elements[n].value) + "|";
        }
      }
	  
	 if (!(bManIsEmpty == true || bMailIsValid == false)) {
       
	   var aDiv = document.getElementById('full_content');
	   var newForm = document.createElement("form");
	   
	   
	   newForm.name = "JSForm";
	   newForm.method = "POST";
	     var newURL = document.location.href;
         if(newURL.indexOf('#') >0) 
         {
           newURL = newURL.substring(0,newURL.indexOf('#'));
         }
		 
	   newForm.action = newURL;
	   
	   var formData = document.createElement('input');
	   formData.setAttribute('type','hidden');
	   formData.setAttribute('name','formData');
	   formData.setAttribute('value',encodeURIComponent(formVals));
	   newForm.appendChild(formData);
	   
	   var oCC = document.getElementById("mailCC");
	   if (oCC) {
	       var mailCC = document.createElement('input');
	       mailCC.setAttribute('type','hidden');
	       mailCC.setAttribute('name','mailCC');
	       mailCC.setAttribute('value',encodeURIComponent(oCC.value));
	       newForm.appendChild(mailCC);
	   }
	  
	   aDiv.appendChild(newForm);
       newForm.submit();
	  }
      
	  /*
      if (!(bManIsEmpty == true || bMailIsValid == false)) {
        var qs = "&formData=" + encodeURIComponent(formVals);
        
        var oCC = document.getElementById("mailCC");
        if (oCC) {
          qs += "&mailCC=" + encodeURIComponent(oCC.value);
        }

         var newURL = window.location.href;

         if(newURL.indexOf('#') >0) /*
         {
           newURL = newURL.substring(0,newURL.indexOf('#'));
         }
         newURL += qs;
        
        window.location = newURL;
      }
	  */
    }
  }
}

function rplPipeEqual(sIn) {
  var sOut = "";
  if (sIn) {
    sOut = (sIn.replace(/\|/g, "||")).replace(/\=/g, "==");
  }
  return sOut;
}

function checkmail(inId, inStr) {
  bMailIsValid = true;
  if (!(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(inStr)) && inStr != ""){
    bMailIsValid = false;
    var oErrM = document.getElementById(inId + "_mailError");
    if (oErrM) {
      oErrM.style.display = "";
    }
    
    var oErrrM = document.getElementById("mailError");
    if (oErrrM) {
      oErrrM.style.display = "";
    }
  } else {
    var oErrM = document.getElementById(inId + "_mailError");
    if (oErrM) {
      oErrM.style.display = "none";
    }
  }
  return bMailIsValid;
}


/******************************************************************************
 * Online Survey                                                              *
 ******************************************************************************/

function submitSurvey(sFormID,surveyID) {
  if (sFormID) {
    var oForm = document.forms[(""+sFormID)];
    if (oForm) {
      var bManIsEmpty = false;
      var bMailIsValid = true;
      var formVals = "";
      var formLabels = "";
      
      //hide errmsgs
      var oEr = document.getElementById("mandatoryError");
      if (oEr) {
        oEr.style.display = "none";
      }
      var oErM = document.getElementById("mailError");
      if (oErM) {
        oErM.style.display = "none";
      }
      
      for (var n=0; n < oForm.elements.length; n++) {
        //check mandatory state
        if (checkMandatoryField(oForm.elements[n])) {
          //passed validation => is not mandatory or is filled in
          var oErr = document.getElementById(oForm.elements[n].id + "_mandatoryError");
          if (oErr) {
            oErr.style.display = "none";
          }
        } else {
          //is mandatory and not filled in
          bManIsEmpty = true;
          var oErr = document.getElementById(oForm.elements[n].id + "_mandatoryError");
          if (oErr) {
            oErr.style.display = "";
          }
          
          var oErrr = document.getElementById("mandatoryError");
          if (oErrr) {
            oErrr.style.display = "";
          }
        }
        
        //check email valid
        if (oForm.elements[n].getAttribute("email") == "true") {
          oForm.elements[n].value = (oForm.elements[n].value).replace(/ /gi, "");
          
          if ((oForm.elements[n].value).indexOf(",") != -1) {
            //it contains a comma => make it semicolon
            oForm.elements[n].value = (oForm.elements[n].value).replace(/,/gi, ";");
          }
          if ((oForm.elements[n].value).indexOf(";") != -1) {
            var aVal = (oForm.elements[n].value).split(";");
            for (i=0; i<aVal.length; i++) {
              if (checkmail(oForm.elements[n].id, aVal[i]) == false) {
                bMailIsValid = false;
              }
            }
          } else {
            if (checkmail(oForm.elements[n].id, oForm.elements[n].value) == false) {
              bMailIsValid = false;
            }
          }
        }
        
        
        //build the str
        if (oForm.elements[n].type == "checkbox" || oForm.elements[n].type == "radio") {
          if (oForm.elements[n].checked) {
            formVals += oForm.elements[n].id + "=" + oForm.elements[n].value + "|";
          }
        } else {
          formVals += oForm.elements[n].id + "=" + rplPipeEqual(oForm.elements[n].value) + "|";
        }
        
        var spanWithLabel = document.getElementById(oForm.elements[n].id+'_label');
        if (spanWithLabel!== null){
          var label =spanWithLabel.firstChild.nodeValue;
          formLabels += oForm.elements[n].id + "=" + rplPipeEqual(label)+"|";
        }
      }
      
      if (!(bManIsEmpty == true || bMailIsValid == false)) {
       
	   var aDiv = document.getElementById('full_content');
	   var newForm = document.createElement("form");
	   
	   
	   newForm.name = "JSForm";
	   newForm.method = "POST";
	     var newURL = document.location.href;
         if(newURL.indexOf('#') >0) 
         {
           newURL = newURL.substring(0,newURL.indexOf('#'));
         }
		 
	   newForm.action = newURL;
	   
	   var formData = document.createElement('input');
	   formData.setAttribute('type','hidden');
	   formData.setAttribute('name','formData');
	   formData.setAttribute('value',encodeURIComponent(formVals));
	   newForm.appendChild(formData);
	   
	   var formLabs = document.createElement('input');
	   formLabs.setAttribute('type','hidden');
	   formLabs.setAttribute('name','formLabels');
	   formLabs.setAttribute('value',encodeURIComponent(formLabels));
	   newForm.appendChild(formLabs);
	   
	   var survID = document.createElement('input');
	   survID.setAttribute('type','hidden');
	   survID.setAttribute('name','surveyID');
	   survID.setAttribute('value',encodeURIComponent(surveyID));
	   newForm.appendChild(survID);
	   
	   var oCC = document.getElementById("mailCC");
	   if (oCC) {
	       var mailCC = document.createElement('input');
	       mailCC.setAttribute('type','hidden');
	       mailCC.setAttribute('name','mailTo');
	       mailCC.setAttribute('value',encodeURIComponent(oCC.value));
	       newForm.appendChild(mailCC);
	   }
	  
	   aDiv.appendChild(newForm);
       newForm.submit();
	  }
    }
  }
}

function clearTextarea() {
  var aList = document.getElementsByTagName("textarea");
  for (var i=0; i < aList.length; i++) {
    aList[i].value = (aList[i].value).replace(/ /gi, "");
  }
}

function checkMandatoryField(oElement) {
  //check whether a field is mandatory & filled in.
  var bValidated = true;
  if (oElement) {
    if (oElement.getAttribute("mandatory") == "true") {
      if (oElement.type == "checkbox" || oElement.type == "radio") {
        bValidated = checkMandatoryFieldhelper(oElement);
      } else if (oElement.value == ""){
        bValidated = false;
      }
    }
  }
  return bValidated;
}

function checkMandatoryFieldhelper(oElement) {
  //determine whether at least one of the radio's/checkboxes are selected
  var aList = document.getElementsByTagName("input");
  var bOneSelected = false;
  
  for (var i=0; i < aList.length; i++) {
    if (aList[i].getAttribute("name") == oElement.getAttribute("name") && aList[i].checked) {
      bOneSelected = true;
    }
  }
  return bOneSelected;
}


/******************************************************************************
 * reportingbooklet components                                                *
 ******************************************************************************/

function rbSelectFund() {
  move("rb_av-funds", "rb_sel-funds");
}


function rbDeselectFund() {
  move("rb_sel-funds", "rb_av-funds");
}

function rbSubmitForm(oLink, sWidth, sHeight) {
  var oLang = document.getElementById("rb_lang");
  var oFmLang = document.getElementById("fm_lang");
  var oSelFunds = document.getElementById("rb_sel-funds");
  var oAssetClasses = document.getElementById("rb_assetclasses");
  var oDomiciles = document.getElementById("rb_domiciles");
  var oCompanies = document.getElementById("rb_companies");
  var oListPage = document.getElementById("listPage");
  var oManWarn = document.getElementById("mandatory_warning");
  
  if (oLang && oFmLang && oSelFunds && oAssetClasses && oDomiciles && oCompanies && oListPage) {
    if (oLang.value && rbMultipleSelect(oSelFunds, true) && rbMultipleSelect(oAssetClasses, false) && rbMultipleSelect(oDomiciles, false) && rbMultipleSelect(oCompanies, false) && oListPage.value) {
      //all fields are mandatory
      var url = location.protocol + "//" + window.location.host;
      url += oListPage.value;
      var path = oListPage.value.split('?')[0];
      url += "&fmLang=" + oFmLang.value;
      url += "&ts=" + new Date().getTime();
      //url += "&rbLang=" + oLang.value;
      writeCookie("rbLang", oLang.value, 30, path);
      //url += "&rbFunds=" + rbMultipleSelect(oSelFunds, true);
      writeCookie("rbFunds", rbMultipleSelect(oSelFunds, true), 30, path);
      //url += "&rbAssetClasses=" + rbMultipleSelect(oAssetClasses, false);
      writeCookie("rbAssetClasses", rbMultipleSelect(oAssetClasses, false), 30, path);
      //url += "&rbDomiciles=" + rbMultipleSelect(oDomiciles, false);
      writeCookie("rbDomiciles", rbMultipleSelect(oDomiciles, false), 30, path);
      //url += "&rbCompanies=" + rbMultipleSelect(oCompanies, false);
      writeCookie("rbCompanies", rbMultipleSelect(oCompanies, false), 30, path);

      jQuery.fn.colorbox({href:url, width:sWidth, height:sHeight, iframe:true}); //show a colorbox
    } else if (oManWarn) {
      jQuery.fn.colorbox({inline:true, href:"#mandatory_warning", width:sWidth, height:sHeight}); //show a colorbox
    }
  }
}

function rbMultipleSelect(oSelect, bAll) {
  var SEPARATOR = "|";
  var vals = SEPARATOR;
  if (oSelect) {
    for (var i=0; i<oSelect.options.length; i++) {
      if (oSelect.options[i].selected || bAll) {
        vals += oSelect.options[i].value + SEPARATOR;
      }
    }
  }
  if (vals.length == 1) {
    vals = "";
  }
  return vals;
}

function rbSubmitList() {
  var oShares = document.getElementById("shareList");
  var oLang = document.getElementById("language");
  var oFmLang = document.getElementById("fmLang");
  var oCountries = document.getElementById("countries");
  var oCategory = document.getElementById("category");
  var oProfile = document.getElementById("profile");

  if (oShares && oLang && oFmLang && oCountries && oCategory && oProfile) {
    if (oShares.value.split('|').length > 102) {
      var errorMsgElement = document.getElementById("doc_max_exceeded_error");
      var errorMsg = "ERROR: You can't select more than 100 documents at once!";
      if (errorMsgElement && errorMsgElement.value) {
        errorMsg = errorMsgElement.value;
      }
      alert(errorMsg);
    } else {
      //set loading
      var oRLC = document.getElementById("resultListContainer");
      if (oRLC) {
        oRLC.style.display = "none";
      }
      var oLC = document.getElementById("loadingContainer");
      if (oLC) {
        oLC.style.display = "";
      }

      var page_request = getXmlHttpRequest();

      page_request.onreadystatechange = function(){
        rbFetchMerge(page_request);
      }

      url_request = location.protocol + "//"+window.location.host+"/serverpages/documents/mergeDocuments.jsp?";
      url_request += "language=" + oLang.value;
      url_request += "fmLang=" + oFmLang.value;
      url_request += "&countries=" + oCountries.value;
      url_request += "&shareList=" + oShares.value;
      url_request += "&category=" + oCategory.value;
      url_request += "&profile=" + oProfile.value;
      url_request += "&timestamp=" + new Date().getTime();

      page_request.open('GET', url_request, true);
      page_request.send(null);
    }
  }
}

function rbFetchMerge(page_request) {
  if (page_request.readyState == 4 && page_request.status == 200) {
    var rspText = page_request.responseText;
    var rspObject = eval('(' + rspText + ')');
    
    if(!(rspObject.error)) {
      //possibly set warning
      if (typeof rspObject.ignoredFiles === "object") {
        //there are ignored files
        var oFiles = document.getElementById("ignoredFiles");
        if (oFiles) {
          var sInHTML = "";
          for(i=0;i<rspObject.ignoredFiles.length;i++) {
            sInHTML += rspObject.ignoredFiles[i] + "<br/>";
          }
          oFiles.innerHTML = sInHTML;
          
          //don't set it visible (leave it for debugging)
//          var oWarning = document.getElementById("download_warning");
//          if (oWarning) {
//            oWarning.style.display = "";
//          }
        }
      }
      
      //set table visible
      var oTable = document.getElementById("download_table");
      if (oTable) {
        oTable.style.display = "";
      }
      
      //set docsize
      var oDS = document.getElementById("docsize");
      if (oDS) {
        var fs = Math.round((parseInt(rspObject.resultFileSize, 10) / 1000000)*100)/100;
        oDS.innerHTML = fs+" MB";
      }
      
      //set downtime
      var oDT = document.getElementById("downtime");
      if (oDT) {
        var t = parseInt(rspObject.downloadEstimate2M,10);
        var h = parseInt(t / (1000*60*60), 10);
        var m = parseInt((t % (1000*60*60)) / (1000*60), 10);
        var s = parseInt(((t % (1000*60*60)) % (1000*60)) / 1000, 10);
        var time = "";
        if (h > 0) time += h + "h ";
        if (m > 0 || h > 0) time += m + "m ";
        time += s + "s";
        oDT.innerHTML = time;
      }
      
      //set downlink
      var oDL = document.getElementById("downlink");
      if (oDL) {
        oDL.href = location.protocol + "//"+window.location.host+"/serverpages/documents/downloadDocument.jsp?file="+rspObject.resultFile;
      }
    } else {
      var oDE = document.getElementById("download_error");
      if (oDE) {
        oDE.style.display = "";
      }
      
      var oDEC = document.getElementById("download_error_cause");
      if (oDEC) {
        oDEC.innerHTML = rspObject.error;
      }
    }
    
    //set download visible
    var oLC = document.getElementById("loadingContainer");
    if (oLC) {
      oLC.style.display = "none";
    }
    var oDC = document.getElementById("downloadContainer");
    if (oDC) {
      oDC.style.display = "";
    }
  }
}

function rbCancelDownload() {
  //undo download
  var oDC = document.getElementById("downloadContainer");
  if (oDC) {
    oDC.style.display = "none";
  }
  var oRLC = document.getElementById("resultListContainer");
  if (oRLC) {
    oRLC.style.display = "";
  }
}

function rbChangeAllCheckBox(bState) {
  //function to manage the ALL checkboxes
  if ((""+bState) != "") {
    var col = document.getElementsByTagName("input");
    
    for (var i=0; i < col.length; i++) { 
      if (col[i].type == "checkbox" && col[i].getAttribute("source") == "rbList") {
        col[i].checked = bState;
      }
    }
    rbUpdateSelection();
  }
}

function rbSelect(sID, bState) {
  //function to manage the checkboxes
  if (sID && (""+bState) != "") {
    var aID = sID.split('-');
    if (sID.indexOf('c-') != -1) {
      //initiated by a compartment checkbox
      var col = document.getElementsByTagName("input");
      for (var i=0; i < col.length; i++) { 
        if (col[i].type == "checkbox" && col[i].getAttribute("source") == "rbList" && (col[i].id).indexOf("s-"+aID[1]+"-") != -1) {
          col[i].checked = bState;
        }
      }
    } else {
      //initiated by a share checkbox
      if (bState) {
        //if enabled, all share within comp enabled?
        var bAllShares = true;
        var col = document.getElementsByTagName("input");
        for (var i=0; i < col.length; i++) { 
          if (col[i].type == "checkbox" && col[i].getAttribute("source") == "rbList" && (col[i].id).indexOf("s-"+aID[1]+"-") != -1 && !(col[i].checked)) {
            bAllShares = false;
          }
        }
        document.getElementById("c-"+sID.split("-")[1]).checked = bAllShares;
      } else {
        //if disabled, disable comp box
        document.getElementById("c-"+sID.split("-")[1]).checked = bState;
      }
    }
    
    //manage the "ALL" boxes
    var bAll = true;
    var col = document.getElementsByTagName("input");
    for (var i=0; i < col.length; i++) { 
      if (col[i].type == "checkbox" && col[i].getAttribute("source") == "rbList" && (col[i].id).split("-").length > 2 && !(col[i].checked)) {
        bAll = false;
      }
    }
    document.getElementById("all_1").checked = bAll;
    document.getElementById("all_2").checked = bAll;
    
    rbUpdateSelection();
  }
}

function rbUpdateSelection() {
  //function to update the "selected" shares hidden field.
  var oHidden = document.getElementById("shareList");
  
  if (oHidden) {
    var sShares = "|"
    var col = document.getElementsByTagName("input");
      
    for (var i=0; i < col.length; i++) { 
      if (col[i].type == "checkbox" && col[i].getAttribute("source") == "rbList" && col[i].checked && (col[i].id).split("-").length > 2) {
        sShares += (col[i].id).split("-")[2] + "|";
      }
    }
    
    oHidden.value = sShares;
  }
}


/******************************************************************************
 * navsubscription components (also used by reporting booklet)                *
 ******************************************************************************/

function move(fromID, toID) {
  var from = document.getElementById(fromID);
  var to = document.getElementById(toID);
  
  if (from, to) {
    for (var i = 0; i < from.options.length; i++) {
      if (from.options[i].selected) {
        to.options.add(new Option(from.options[i].text,from.options[i].value))
        from.remove(i--);
      }
    }
    
    sortSelect(fromID,false);
    sortSelect(toID,false);
  }
}

function moveALL(fromID, toID) {
  var from = document.getElementById(fromID);
  var to = document.getElementById(toID);
  
  if (from, to) {
    var testChk = document.getElementById('moveAll');
    if(!testChk.checked) {
      var temp = to;
      to=from;
      from=temp;
    }
    
    for (var i = 0; i < from.options.length; i++) {
      to.options.add(new Option(from.options[i].text,from.options[i].value))
      from.remove(i--);
    }
    
    sortSelect(fromID,false);
    sortSelect(toID,false);
  }
}

function sortSelect(selectId,preserveFirst) {
  var oSelect = document.getElementById(selectId);
  var presOpt = null;
  if (oSelect) {
    var preservedOption = null;
    if (oSelect.options.length > 0 && preserveFirst) {
      //preservedOption = new Option(oSelect.options[0].text ,oSelect.options[0].value);
      //preservedOption.selected = oSelect.options[0].selected;
	  presOpt = new Array();
	  presOpt.push(oSelect.options[0].text);
	  presOpt.push(oSelect.options[0].value);
	  presOpt.push(oSelect.options[0].selected);
    }
    
    var tmparray = new Array();
    var i = 0;
    if (preserveFirst){
      i = 1;
    }
    
    for (;i<oSelect.options.length;++i) {
      var entry = new Array();
      entry.push(oSelect.options[i].text);
      entry.push(oSelect.options[i].value);
      entry.push(oSelect.options[i].selected);
      tmparray.push(entry);
    }
    
    tmparray.sort(function(x,y) {
      var a = String(x).toUpperCase();
      var b = String(y).toUpperCase();
      if (a > b)
      return 1
      if (a < b)
      return -1
      return 0;
    });
    
    while (oSelect.length > 0) {
      oSelect.remove(0);
    }
    
    //ie6 hack
    var oldStyle;
    if (IEversion() == 6) {
      oSelect.style['display']="none";
    }
    // restore preserved first element
    if (preserveFirst) {
	  tmparray.unshift(presOpt);
    }
    
    //restore remaining elements
    for (var j =0;j<tmparray.length;++j) {
      var newOption = new Option(tmparray[j][0],tmparray[j][1],tmparray[j][2],tmparray[j][2]); //standards-compliant, teoretically should work in all browsers
      newOption.selected = tmparray[j][2]; //sometimes firefox needs additional setting of selected
      try {
        oSelect.add(newOption,null);
      } catch (ex) {
        // to deal with standard ignoring IE
		var selectedIdx = oSelect.options.length;
        oSelect.options[selectedIdx] = newOption; 
		oSelect.options[selectedIdx].selected = tmparray[j][2]; //to be sure that the option is selected correctly in ie6
      }
    }
    
    if (IEversion() == 6){
      oSelect.style['display']="";
    }
  }
}


/******************************************************************************
 * XML Helper functions                                                       *
 ******************************************************************************/
var APOS = "'";
var QUOTE = '"';
var ESCAPED_QUOTE = {  };
ESCAPED_QUOTE[QUOTE] = "&quot;";
ESCAPED_QUOTE[APOS] = "&apos;";

/* XML writer with attributes and smart attribute quote escaping */
function element(name,content,attributes){
  var att_str = "";
  if (attributes) { // tests false if this arg is missing!
    att_str = formatAttributes(attributes);
  }
  var xml;
  if (!content) {
    xml="<" + name + att_str + "/>";
  } else {
    xml="<" + name + att_str + ">" + content + "</"+name+">";
  }
  return xml;
}

/* Format a dictionary of attributes into a string suitable
   for inserting into the start tag of an element.  Be smart
   about escaping embedded quotes in the attribute values. */
function formatAttributes(attributes) {
  var att_value;
  var apos_pos, quot_pos;
  var use_quote, escape, quote_to_escape;
  var att_str;
  var re;
  var result = "";

  for (var att in attributes) {
    att_value = attributes[att];

    // Find first quote marks if any
    apos_pos = att_value.indexOf(APOS);
    quot_pos = att_value.indexOf(QUOTE);

    // Determine which quote type to use around
    // the attribute value
    if (apos_pos == -1 && quot_pos == -1) {
      att_str = " " + att + '="' + att_value +  '"';
      result += att_str;
      continue;
    }

    // Prefer the single quote unless forced to use double
    if (quot_pos != -1 && quot_pos < apos_pos) {
      use_quote = APOS;
    } else {
      use_quote = QUOTE;
    }

    // Figure out which kind of quote to escape
    // Use nice dictionary instead of yucky if-else nests
    escape = ESCAPED_QUOTE[use_quote];

    // Escape only the right kind of quote
    re = new RegExp(use_quote,"g");
    att_str = " " + att + "=" + use_quote + att_value.replace(re, escape) + use_quote;
    result += att_str;
  }
  return result;
}

function xmlEscape(inStr) {
  var outStr = "";
  if (inStr) {
    outStr = inStr.replace(/\&/g, "&amp;").replace(/\</g, "&lt;").replace(/\>/g, "&gt;").replace(/\"/g, "&quot;")
  }
  return outStr;
}

function openToolbarDistrib(sID,sTitle) {
  //function to open the toolbar-links in a new window.
  if (sID && sTitle) {
    var oHidden = document.getElementById("source_"+sID);
    if (oHidden) {
      //the hidden div containing the article/articlelist exists
      var oSingleItem = document.getElementById("singleFile_"+sID);
      
      if (oSingleItem) {
        //if the hidden field exists
        if (oSingleItem.value) {
          //and has a value, open it
          window.open(oSingleItem.value, '', '');
        }
      } else {
        //else it is a list of items or a text.
        var sInHTML = oHidden.innerHTML;
        var sHeadInHTML = document.getElementsByTagName("head")[0].innerHTML;
        var sResources = sHeadInHTML.substring(sHeadInHTML.indexOf("<!--ls:begin[stylesheet]-->"), sHeadInHTML.indexOf("<!--ls:begin[favicon]-->"));
        var text = '<html><head><title>'+sTitle+'</title>'+sResources+'</head><body>'+sInHTML+'</body></html>';
        var ret;
        ret = eval("window.open('about:blank','', '');");
        ret.document.write(text);
        ret.document.close();
      }
    }
  }
}

