var QBO = false;
var clFolder="/gelive/ajaxright/currencyratesworld.do";

var cpList= "EURUSD,GBPUSD,USDJPY,USDCHF,AUDUSD,NZDUSD,USDCAD,EURJPY,XAUUSD,XAGUSD";
var save_mid = new Array(0,0,0,0,0,0,0,0,0,0);
var arrSpreads=new Array(0.0001,0.00015,0.01,0.00015,0.00015,0.00025,0.00020,0.02,0.30,0.0250);
var fPoints = new Array(4, 4, 2, 4, 4, 4, 4, 2, 2, 4);
var upInt=20000;
var timer;
var iu = new Image(9,5);
var id = new Image(9,5);

function gebi(el){return document.getElementById(el);}
function CookieVar(name){
    var index1 = document.cookie.indexOf(name + "=");
    if(index1 == -1) return "";
    var index2 = document.cookie.indexOf(";", index1);
    if(index2 != -1) return isPOpen = document.cookie.substring(index1 + name.length + 1 , index2);
    return isPOpen = document.cookie.substring(index1 + name.length + 1);
}

iu.src = "images/up.gif";
id.src = "images/down.gif";
var xmlDOM = null;
var tblQB = new Array();

for(var i = 0; i < 10; i++){
	tblQB[i] = new Array();
	tblQB[i][0] = gebi('bid' + i);
	tblQB[i][1] = gebi('ask' + i);
	tblQB[i][2] = gebi('qarrow' + i);
}
var tblQBO = new Array();
for(var i = 0; i < 10; i++){
	tblQBO[i] = new Array();
	tblQBO[i][0] = gebi('qbid' + i);
	tblQBO[i][1] = gebi('qask' + i);
	tblQBO[i][2] = gebi('qoarrow' + i);
	tblQBO[i][3] = gebi('change' + i);
	tblQBO[i][4] = gebi('high' + i);
	tblQBO[i][5] = gebi('low' + i);
	tblQBO[i][6] = gebi('prevhigh' + i);
	tblQBO[i][7] = gebi('prevlow' + i);
}

function pageOnLoad(){
	if(save_mid.length > 0){
		getQuotes();
		timer=setInterval(getQuotes, upInt);
	}
}

function getQuotes(){
   loadXMLDoc(clFolder + "?m=" + (QBO ? 2 : 1) + "&cp=" + cpList + "&prd=3&pt=0");
}

function loadXMLDoc(url){
	// code for IE
	if (window.ActiveXObject){
		if((xmlDOM = new ActiveXObject("Microsoft.XMLDOM")) != null){
			xmlDOM.onreadystatechange = processReqChange;
			xmlDOM.async = "false";
			xmlDOM.load(url);
		}
	}
	// code for Mozilla, etc.
	else if (window.XMLHttpRequest){
		xmlDOM= new XMLHttpRequest();
		xmlDOM.onreadystatechange=processReqChange;
		xmlDOM.open("GET",url,true);
		xmlDOM.send(null);
	}
}

function processReqChange(){

	if(xmlDOM){
		if(xmlDOM.readyState == 4){
			if (window.ActiveXObject){//IE
				if(xmlDOM.parseError.errorCode == 0)
				setQuotes(xmlDOM.documentElement.childNodes(0).text);
			} else if(window.XMLHttpRequest) {//Mozilla
				if (xmlDOM.status==200){
				//var xml = xmlDOM.responseXML.firstChild.firstChild.firstChild.data;
					var xml = xmlDOM.responseXML.documentElement.firstChild.firstChild.data;
					setQuotes(xml);
				}
			}
		}
	}
}

function setQuotes(resultStr){
    if(resultStr == null || resultStr == "null") return;
    var results = new Array()
    results = resultStr.split("|");

    // Client Mode - Quotes Box Closed
    if(results.length == 10) {
        for(i=0; i < 10; i++){
            updateQuote(i, results[i], arrSpreads[i]);
        }
    }
    // Client Mode - Quotes Box Open
    if(results.length == 60){
        for(i=0; i < 10; i++){
            var half_spr = arrSpreads[i]*1;
            var fp = fPoints[i];
            updateQuote(i, results[i*6], half_spr);

            tblQBO[i][3].innerHTML = '' + (results[i*6+3]*1 != 0 ? getFormatedNumber(results[i*6+3]*1, 2) : "0.00") + '&nbsp;%';
            if(results[i*6+3]*1 == 0) tblQBO[i][3].className = "black_value";
            else tblQBO[i][3].className = (results[i*6+3]*1 < 0 ? "red_value" : "green_value");

            tblQBO[i][4].innerHTML = '' + getFormatedNumber(results[i*6+1]*1 + half_spr, fp);
            tblQBO[i][5].innerHTML = '' + getFormatedNumber(results[i*6+2]*1 - half_spr, fp);
            tblQBO[i][6].innerHTML = '' + getFormatedNumber(results[i*6+4]*1 + half_spr, fp);
            tblQBO[i][7].innerHTML = '' + getFormatedNumber(results[i*6+5]*1 - half_spr, fp);
        }
        gebi("todayDate").innerHTML = getTodayDateTime();
        gebi("yesterdayDate").innerHTML = getYesterdayDateTime();
    }

    // Server Mode - Quotes Box Closed
    if(results.length == 20){
        for(i=0; i < 10; i++){
            updateQuoteInServerMode(i, arrSpreads[i*2], results[i*2]*1/*bid*/, results[i*2+1]*1/*ask*/);
        }
    }

    // Server Mode - Quotes Box Open
    if(results.length == 70) {
        for(i=0; i < 10; i++){
            var half_spr = arrSpreads[i]*1;
            var fp = fPoints[i];
            updateQuoteInServerMode(i, half_spr, results[i*7+5]*1 /*bid*/, results[i*7+6]*1 /*ask*/);

            tblQBO[i][3].innerHTML = '' + (results[i*7+2]*1 != 0 ? getFormatedNumber(results[i*7+2]*1, 2) : "0.00") + '&nbsp;%';
            if(results[i*7+2]*1 == 0) tblQBO[i][3].className = "black_value";
            else tblQBO[i][3].className = (results[i*7+2]*1 < 0 ? "red_value" : "green_value");

            tblQBO[i][4].innerHTML = '' + getFormatedNumber(results[i*7]*1 + half_spr, fp);
            tblQBO[i][5].innerHTML = '' + getFormatedNumber(results[i*7+1]*1 - half_spr, fp);
            tblQBO[i][6].innerHTML = '' + getFormatedNumber(results[i*7+3]*1 + half_spr, fp);
            tblQBO[i][7].innerHTML = '' + getFormatedNumber(results[i*7+4]*1 - half_spr, fp);
        }
        gebi("todayDate").innerHTML = getTodayDateTime();
        gebi("yesterdayDate").innerHTML = getYesterdayDateTime();
    }
}

function updateQuote(qindex, mid_rate, half_spr){
    var qbArr = (QBO ? tblQBO : tblQB);
    var md = save_mid[qindex] == 0;

    if(!md && save_mid[qindex]*1 > mid_rate*1) {qbArr[qindex][2].src=id.src; qbArr[qindex][0].className = qbArr[qindex][1].className = "red_value"; }
    if(!md && save_mid[qindex]*1 < mid_rate*1) {qbArr[qindex][2].src=iu.src; qbArr[qindex][0].className = qbArr[qindex][1].className = "green_value"; }
    if(md || save_mid[qindex]*1 == mid_rate*1){qbArr[qindex][0].className = qbArr[qindex][1].className = "black_value";}

    save_mid[qindex] = mid_rate*1;

    var bi = '' + getFormatedNumber(mid_rate*1 - half_spr*1, fPoints[qindex]*1);
    var ai = '' + getFormatedNumber(mid_rate*1 + half_spr*1, fPoints[qindex]*1);
    var biq = qbArr[qindex][0].innerHTML;
    var aiq = qbArr[qindex][1].innerHTML;

    if(biq != bi && aiq != ai) {
        qbArr[qindex][0].innerHTML = bi;
        qbArr[qindex][1].innerHTML = ai;
    }
}

// This function is a test function for testing the stream of quotes that are being calculated in the server
function updateQuoteInServerMode(qindex, half_spr, bidValue, askValue){
    // Calculating the midRate
    var newMid = (bidValue + askValue)/2;

    var qbArr = (QBO ? tblQBO : tblQB);
    var md = save_mid[qindex] == 0;

    if(!md && save_mid[qindex]*1 > newMid*1) {qbArr[qindex][2].src=id.src; qbArr[qindex][0].className = qbArr[qindex][1].className = "red_value"; }
    if(!md && save_mid[qindex]*1 < newMid*1) {qbArr[qindex][2].src=iu.src; qbArr[qindex][0].className = qbArr[qindex][1].className = "green_value";}
    if(md || save_mid[qindex]*1 == newMid*1){qbArr[qindex][0].className = qbArr[qindex][1].className = "black_value";}

    save_mid[qindex] = newMid*1;

    var biq = qbArr[qindex][0].innerHTML;
    var aiq = qbArr[qindex][1].innerHTML;

    if(biq != bidValue && aiq != askValue){
        qbArr[qindex][0].innerHTML = bidValue;
        qbArr[qindex][1].innerHTML = askValue;
    }
}

function getFormatedNumber(Num, FloatPoint){
	if(isNaN(Num) || isNaN(FloatPoint)) return;
	var ResNum = Num * 1;
	var NegFlag = false
	if(ResNum < 0) {ResNum *= -1; NegFlag = true;}
	FloatPoint *= 1;
	var BeforPointAfter = (ResNum + "").split(".");
	var BeforPoint = "";
	var AfterPoint = "";
	BeforPoint = BeforPointAfter[0];
	if(BeforPointAfter.length == 2) AfterPoint = BeforPointAfter[1];
	if(1*AfterPoint.length > 1*FloatPoint){
		var factor=0;
		if(1*AfterPoint.length > (1*FloatPoint+1))
		if((AfterPoint.charAt(1*FloatPoint+1) * 1) > 4) factor=1;
		if(1*AfterPoint.charAt(FloatPoint) > 4 || (1*AfterPoint.charAt(FloatPoint) + 1*factor) > 4){
			ResNum += (1 / Math.pow(10,FloatPoint));
			BeforPointAfter = (ResNum + "").split(".");
			BeforPoint = AfterPoint = "";
			BeforPoint = BeforPointAfter[0];
			if(BeforPointAfter.length == 2) AfterPoint = BeforPointAfter[1];
		}
		if(1*AfterPoint.length > 1*FloatPoint) AfterPoint = AfterPoint.substring(0,FloatPoint);
	}
	while(1*AfterPoint.length  < 1*FloatPoint) AfterPoint += '0';
	if(1*FloatPoint > 0) ResNum = BeforPoint + '.' + AfterPoint;
	else ResNum = BeforPoint;
	if(NegFlag && (ResNum * 1) != 0) ResNum = "-" + ResNum;
	return ResNum;
}

// get Today date (dd/MM/yyyy) GMT Time
function getTodayDateTime(){
	return getShortDate(new Date());
}
// get previous date (dd/MM/yyyy) GMT Time
function getYesterdayDateTime(){
	var d = new Date();
	d.setDate(d.getUTCDate()-1);
	return getShortDate(d);
}
function getShortDate(d){
	var ret_str = "";
	if(d.getUTCDate() < 10) ret_str = "0";
	ret_str += d.getUTCDate() + "/";
	if((d.getUTCMonth() + 1) < 10) ret_str += "0";
	ret_str += (d.getUTCMonth() + 1) + "/";
	ret_str += d.getUTCFullYear() + " ";
	return ret_str;
}
// get formated (dd/MM/yyyy hh:mm:ss) local DateTime
function getFormatedLocalDateTime(){
	var d = new Date();
	var ret_str = "";
	if(d.getDate() < 10) ret_str = "0";
	ret_str += d.getDate() + "/";
	if((d.getMonth() + 1) < 10) ret_str += "0";
	ret_str += (d.getMonth() + 1) + "/";
	ret_str += d.getFullYear() + " ";
	if(d.getHours() < 10) ret_str += "0";
	ret_str += d.getHours() + ":";
	if(d.getMinutes() < 10) ret_str += "0";
	ret_str += d.getMinutes() + ":";
	if(d.getSeconds() < 10) ret_str += "0";
	ret_str += d.getSeconds();
	return ret_str;
}

function expnd(div){
	var qBox = gebi('qC').style;
	var Expnd = gebi('Expnd').style;
	if (div == "Expnd"){
		Expnd.display = "block";
		qBox.display = "none";
		QBO = true;
		getQuotes();
	}else{
		qBox.display = "block";
		Expnd.display = "none";
		QBO = false;
		getQuotes();
	}
}
pageOnLoad();