// data loading object

//document.domain = "webfund5.finexprestel.com"

function dataObject() {
  this.reloadf = (Math.random().toString()).substring(2);
  this.load = dataLoad;
  this.frameLoad = frameLoad;
  this.s_host = window.location.hostname;
  this.s_navigator = window.navigator.appName+" "+window.navigator.appVersion;
  this.s_referrer = window.document.referrer;
  this.dataLoadString = dataLoadString;
}



function dataLoadString() {
  var dwr = '<'+'SCRIPT type="text/javascript" src="http://webfund5.financialexpress.net/prestel/datacorner.asp?';
  var sep = '';
  var strQuery = '';
  for(var p in this){
	if (p.charAt(0) == '_' || typeof this[p] == 'function') continue
	strQuery += sep + p + '=' + escape(this[p]) 
	sep = '&'
  }
  dwr = dwr + strQuery + "\"></SCRIPT>\n";  
  this.dl = strQuery;
  return dwr;
}


function dataLoad() {
  document.write(this.dataLoadString());
}





function frameLoad(framename, callback) {
  var frwin
  this.datacorner = callback

  if (document.getElementById) {
    frwin = document.getElementById(framename)
  }
  else if (document.all) {
    frwin = document.all[framename]
  }
  else if (document.layers) {
    frwin = document.layers[framename];
  }
  else {
    alert("This is a datacorner incompatible browser!");
    return;
  }

  var sep = ''
  var strQuery = ''
  for(var p in this){
	if (p.charAt(0) == '_' || typeof this[p] == 'function') continue
	strQuery += sep + p + '=' + escape(this[p]) 
	sep = '&'
  }

  frwin.src = "http://webfund5.finexprestel.com/prestel/datacorner.asp?" + strQuery
}






// document.write shortcut
function dw (str) {
  document.write(str)
}












////////////////////////////
// string manipulation


// get query paramaters in a named array

function getQueryParams() {
  var qparams = new Array();
  var remaining =  window.location.search;
  if (window.location.hostname == "") {
    remaining = unescape(remaining);
  }
  var qpos = remaining.indexOf("?")
  if (qpos >= 0) {
    remaining = remaining.substring(qpos+1,remaining.length)
  }
  else {
    remaining = "";
  }
//  remaining = remaining.substring(1, remaining.length);
  while (remaining != "") {
    var epos = remaining.indexOf("=")
    if (epos >= 0) {
      var pname = remaining.substring(0, epos);
      var apos = remaining.indexOf("&",epos)
      if (apos >= 0) {
        var pvalue = remaining.substring(epos+1, apos);
        remaining = remaining.substring(apos+1,remaining.length);
      }
      else {
        var pvalue = remaining.substring(epos+1, remaining.length);
        remaining = "";
      }
      qparams[pname.toLowerCase()] = unescape(pvalue);
    }
    else {
      remaining = "";
    }
  }
  return qparams;
}






// generate an HTML string based on a row of data, and a format string

function genHTML(dataArr,formatStr) {
  for (var p in dataArr) {
    var pos =-1
    var arrFormat = formatStr.split("%"+p+"%")
    if (arrFormat.length > 1) {
      formatStr = arrFormat[0]
      for (var i = 1; i < arrFormat.length; i++) {
        var strPart = arrFormat[i];
        var endf = 0
	endf = strPart.indexOf("}")
	if (strPart.indexOf("[") == 0 && endf >= 0) {
	    // apply custom formatting shortcut notation
            var fieldfmt = strPart.substring(1,endf)
            formatStr += customFormat(dataArr[p],fieldfmt) + strPart.substring(endf+1)
        }
        else {
            formatStr += dataArr[p] + strPart
        }        
      }
    }
    
  }

  // now look for embedded function calls
  var fncall = null
  do {
    fncall = parseFor(formatStr,"[=","=]")
    if (fncall) {
      formatStr = fncall[0]+ eval(fncall[1])+fncall[2]
    }
  } while (fncall)
  
	//now clean up any stranded tokens
	var re = new RegExp("%[a-z]+%");
	while (formatStr.match(re) != null){
		formatStr = formatStr.replace(re,displayIfNull);
	}
	
  return formatStr;
}




function listFields(dtArr) {
  var dataArr
  if (typeof dtArr != "object") {
    alert(typeof dtArr)
    return
  }

  var strout = ""

  if (typeof dtArr[0] == "object") {
      // user has passed entire recordset
      for (var p in dtArr[0]) {
        strout = strout+p+"\x09"+dtArr[0][p]+"\n";
      }
  }
  else {
      // user has passed a single row
      for (var p in dtArr) {
        strout = strout+p+"\n\x09"+dtArr[p]+"\n\n";
      }
  }
  if (strout == "") {
    strout = "the array was empty"
  }

  alert (strout)
  return strout
}




// call function
function customFormat(strVal, fname) {
  if (typeof ("window."+fname) != "undefined") {
    var fn = eval ("window."+fname)
    return fn(strVal)
  }
  else {
    return strVal
  }
}


// split strSearch in to an array of 3 if successful delimitted by strStart and strEnd
function parseFor(strSearch, strStart, strEnd) {
  var retValue = new Array();
  var iStart = strSearch.indexOf(strStart);
  if (iStart < 0) {
    return null;
  }
  var iEnd = strSearch.indexOf(strEnd,iStart);
  if (iEnd < 0) {
    return null;    
  }
  
  return new Array( strSearch.substring(0,iStart), 
                    strSearch.substring(iStart + strStart.length,iEnd),
                    strSearch.substring(iEnd + strEnd.length)
	)
}




///////////////////////////////////////////
// string and formatting functions
//
function strReplace(strString, strSearch, strReplace) {
  var arrString = strString.split(strSearch)
  if (arrString.length == 1) {
    return strString
  }
  strString = arrString[0]
  for (var i = 1; i < arrString.length; i++) {
    strString+=strReplace + arrString[i]
  }
  return strString
}


// leading zeros
function lz(num,digits) {
  var strNum = num + ""
  while (strNum.length < digits) {
    strNum = "0" + strNum
  }
  return strNum
}


// strip zeros and convert to int (j/s on ie fails just using parseInt("08"))
function sz(num) {
  var strNum = num + ""
  while (strNum.length > 1 && strNum[strNum.length-1] == "0") {
    strNum = strNum.substring(0,strNum.length-1)
  }
  return parseInt(strNum)
}




// formatting functions



// reformat the date based on the format string 
// eg dd/MM/yyyy hh:mm:ss is the current format
// yy - two digit year
// yyyy - four digit year
// MM - month
// dd - day
// hh - 24 clock hour
// ss - seconds
function fmtDate(strDate, fmtString) {
  var year,month,day,hour,minute,second
  if (strDate.length < 8) {
    return fmtString
  }
  hour = 0
  minute = 0
  second = 0
  year = sz(strDate.substring(6,10))
  month = sz(strDate.substring(3,5))
  day = sz(strDate.substring(0,2))
  if (strDate.length >= 19) {
    hour = sz(strDate.substring(11,13))
    minute = sz(strDate.substring(14,16))
    second = sz(strDate.substring(17,19))
  }
  fmtString = strReplace(fmtString,"yyyy",lz(year,4))
  fmtString = strReplace(fmtString,"yy",(lz(year,4)).substring(2,4))
  fmtString = strReplace(fmtString,"MM",lz(month,2))
  fmtString = strReplace(fmtString,"dd",lz(day,2))
  fmtString = strReplace(fmtString,"hh",lz(hour,2))
  fmtString = strReplace(fmtString,"mm",lz(minute,2))
  fmtString = strReplace(fmtString,"ss",lz(second,2))
  fmtString = strReplace(fmtString,"M",month,2)
  fmtString = strReplace(fmtString,"d",day,2)


  return fmtString;
}




function fmtPrice(price,ccy,dp,nullValue,thSepFlag,plusMinusFlag) {
  if (nullValue == 'undefined') nullValue = ""

  if (price == "" || price == nullValue) {
    return nullValue;
  }
  var iPrice = parseInt(parseFloat(price) * Math.pow(10,dp))
  if (dp == 'undefined') dp = 2
  if (thSepFlag == 'undefined') thSepFlasg = 0
  if (plusMinusFlag == 'undefined') plusMinusFlag = 0
  
  var strPlusMinus = ""
  if ( iPrice < 0 ) {
    strPlusMinus = "-"
  }
  else if (iPrice > 0 && plusMinusFlag) {
    strPlusMinus = "+"
  }

  var strPrice = "" + iPrice
  var strInt = strPrice.substring(0,strPrice.length-dp)
  var strDp = strPrice.substring(strPrice.length-dp)
  if (thSepFlag) {
    var commapos = strInt.length - 3
    while (commapos > 0) {
      strInt = strInt.substring(0,commapos) + "," + strInt.substring(commapos)
      commapos = commapos - 3
    }
  }
  
  strPrice = strInt
  if (strDp.length > 0) {
    strPrice+="."+strDp
  }
  return strPlusMinus + ccyPref(ccy) + strPrice + ccySuf(ccy)
}





function ccyPref(ccy) {
  switch (ccy) {
    case "GBP":
      return "&pound;";
    case "EUR":
      return "&euro;";
    case "USD":
      return "$";
    case "%":
      return "%";
  }
  return "";
}


function ccySuf(ccy) {
  switch (ccy) {
    case "GBX":
      return "p";
    case "EUX":
      return "c";
    case "USX":
      return "c";
  }
  return "";
}


