var currentTab=0;
var strIndicators = '';
var strHolidays = '';
var timer;
var verH = -1;
var verI = -1;
var prevResponseI;
var prevResponseH;

function selectTab(tabNum)
{
	currentTab=tabNum;
	//Cleaning Tabs
	for(a=0; a<document.all.tabTxt.length; a++)
	{
		document.all.tabTxt[a].style.backgroundColor=defTabBgColor;
		document.all.tabTxt[a].style.borderTopColor=defTabBorderTopColor;
		document.all.tabTxt[a].style.borderBottomColor=defTabBorderBottomColor;
		if (a<1) document.all.sepImg[a].src=tabImg3;
	}
	document.all.sepImg[1].src=tabImg4;
	
	//Selecting Tab
	document.all.tabTxt[tabNum].style.backgroundColor=selTabBgColor;
	document.all.tabTxt[tabNum].style.borderTopColor=selTabBorderTopColor;
	document.all.tabTxt[tabNum].style.borderBottomColor=selTabBorderBottomColor;
	if (tabNum>0) document.all.sepImg[tabNum-1].src=tabImg1;
	if (tabNum<1) document.all.sepImg[tabNum].src=tabImg2;
	else document.all.sepImg[tabNum].src=tabImg5;

	document.all.cal.innerHTML = loadingMsg;
	getData();		
}

function Doc_onload()
{
	window.focus();
	getData();
}

function getData()
{
	if(currentTab == 0)
		loadXMLDoc("Services/Forex.FC.aspx?v=" + verI + "&g=I");
	else if(currentTab == 1)
		loadXMLDoc("Services/Forex.FC.aspx?v=" + verH + "&g=H");
		
	clearTimeout(timer);
	timer = setTimeout(getData,(this._UpdateIntervals ? this._UpdateIntervals.financialCalendar : 30000));
}

var xmlDOM;
function loadXMLDoc(url)
{
	xmlDOM = new ActiveXObject("Microsoft.XMLDOM");
	if (xmlDOM)
	{
		xmlDOM.onreadystatechange = processReqChange;
		xmlDOM.async = "false";
		xmlDOM.load(url);
	}
}

function processReqChange() 
{
	// only if req shows "complete"
	if (xmlDOM.readyState == 4)
	{
		if(xmlDOM.documentElement == null)
		{
			if(currentTab == 0)
				processIndicators(prevResponseI);
			else if(currentTab == 1)
				processHolidays(prevResponseH);
			return;
		}
		var response = xmlDOM.documentElement;
		if(response.nodeName == "indicators")
		{
			processIndicators(response);
		}
		else if(response.nodeName == "holidays")
		{
			processHolidays(response);
		}
	}
}

function processIndicators(response)
{
	if(response != null)
	{
		var HTML;
		var nodes = response.childNodes;
		if(nodes.length > 0)
		{
			HTML = indTblHeader;
			for (i=0 ; i<nodes.length ; i++)
			{
				var strData = nodes(i).text;
				var arrData = strData.split('|**|');

				// ------- calc local time -------
				var utcArr = arrData[0].split(' ')[0].split('/');
				var utcDate = new Date(utcArr[1] + '/' + utcArr[0] + '/20' + utcArr[2] + ' ' + arrData[0].split(' ')[1]);
				var utcMill = utcDate.getTime();
				var offsetMill = (utcDate.getTimezoneOffset())*60*1000;
				var localMill = utcMill - offsetMill;
				var localDate = new Date(localMill);
				
				// ---------- str ----------
				var y = localDate.getFullYear();
				var m = localDate.getMonth();
				var d = localDate.getDate();
				m = m + 1;
				strM = m.toString();
				if(strM.length == 1) { strM = '0' + strM; }
				strD = d.toString();
				if(strD.length == 1) { strD = '0' + strD; }
				var date = strD + "/" + strM + "/" + y.toString();
				
				var h = localDate.getHours();
				var M = localDate.getMinutes();
				strH = h.toString();
				if(strH.length == 1) { strH = '0' + strH; }
				strMM = M.toString();
				if(strMM.length == 1) { strMM = '0' + strMM; }
				var time = strH + ":" + strMM;
								
				var loc = arrData[1];
				var name = arrData[2];
				var period = arrData[3];
				var symbol = arrData[7];
				var forecast = arrData[5];
				var previous = arrData[4];
				var isRevised = arrData[8];
				var actual = arrData[6];
				
				var arrDate = response.attributes[0].nodeValue.split(' ')[0].split('/');
				var serverDate = new Date(arrDate[1] + '/' + arrDate[0] + '/20' + arrDate[2] + ' ' + response.attributes[0].nodeValue.split(' ')[1]);
				
				var updDate = nodes(i).getAttribute("UPD");
				var arrUpdDt = updDate.split(' ')[0].split('/');
				var tmpUpdDate = new Date(arrUpdDt[1] + '/' + arrUpdDt[0] + '/20' + arrUpdDt[2] + ' ' + updDate.split(' ')[1]);
				var mins = minutesDiff(serverDate, tmpUpdDate);

				HTML += indTblBody1 + date +
						indTblBody2 + time +
						indTblBody3 + loc +
						indTblBody4 + name +
						indTblBody5 + period +
						indTblBody6 + symbol +
						indTblBody7 + forecast +
						indTblBody8 + previous + (isRevised == "1" ? "R" : "") +
						indTblBody9 + (mins <= 5 ? indTblBodyActual1 + actual + indTblBodyActual2 : actual) +
						indTblBody10;
			}
			HTML += indTblFooter;
		}
		else
		{
			HTML = indTblEmpty;
		}
		document.all.cal.innerHTML = HTML;
		verI = response.attributes[1].nodeValue;
		prevResponseI = response;
	}
	else
	{
		document.all.cal.innerHTML = indTblEmpty;
	}
}

function processHolidays(response)
{
	if(response != null)
	{
		var HTML = holTbl;
		var nodes = response.childNodes;
		if(nodes.length > 0)
		{
			var prevDT = "";
			for (i=0 ; i<nodes.length ; i++)
			{
				var DT = nodes(i).getAttribute("DT");
				if(prevDT != DT)
				{
					if(prevDT != "")
						HTML += holTblSpacer;
					HTML += holTblHeader1 + DT + holTblHeader2;
					HTML += holTblHeader3;
					HTML += holTblHeader4;
				}
				prevDT = DT;
				
				var strData = nodes(i).text;
				var arrData = strData.split('|**|');
				var date = arrData[0].split(' ')[0];
				HTML += holTblBody1 + date + 
						holTblBody2 + arrData[1] + 
						holTblBody3 + arrData[2] + 
						holTblBody4;
			}
		}
		else
		{
			HTML += holTblEmpty1;
		}
		document.all.cal.innerHTML = HTML;
		verH = response.attributes[0].nodeValue;
		prevResponseH = response;
	}
	else
	{
		document.all.cal.innerHTML = holTblEmpty2;
	}
}

function minutesDiff(date1, date2)
{
	var diff  = new Date();
	diff.setTime(Math.abs(date1.getTime() - date2.getTime()));
	timediff = diff.getTime();

	var totalMins = Math.floor(timediff / (1000 * 60));
	return totalMins;
}
	
function pageOnUnLoad()
{
	clearTimeout(timer);
	timer=null;
}
