// JavaScript Document

/* Odeslání XMLHttp požadavku
* @state_change Function funkce zajišťující obsluhu při změně stavu požadavku, dostane parametr s XMLHttp objektem
* @method string GET|POST|...
* @url string URL požadavku
* @mimetype očekávaný typ odpovědi ('text/plain', 'text/html', 'text/xml'...)
* @content string tělo zprávy
* @headers object předané hlavičky ve tvaru { 'hlavička': 'obsah' }
* @return boolean true v případě úspěchu, false jinak
*/
function send_xmlhttprequest(state_change, method, url, mimetype, content, headers)
{
    var xmlhttp = getXMLHttpRequest(mimetype);
    if (!xmlhttp) {
        return false;
    }
    xmlhttp.open(method, url);
    xmlhttp.onreadystatechange = function () {
        state_change(xmlhttp);
    };
    headers = headers || {};
    headers['X-Requested-With'] |= 'XMLHttpRequest';
	if (method.toLowerCase() == 'post') {
	    headers['Content-type'] = headers['Content-type'] || 'application/x-www-form-urlencoded';
	    headers['Content-length'] = headers['Content-length'] || content.length.toString();
	    headers['Connection'] = headers['Connection'] || 'close';
	}
    for (var key in headers) {
        xmlhttp.setRequestHeader(key, headers[key]);
    }
    xmlhttp.send(content);
    return true;
}

function objGet2(d,x)
{
	d = (d==null ? document : d);
	return (d.getElementById ? d.getElementById(x) : d.all ? d.all[x] : d.layers ? d.layers[x] : null);
}

function getXMLHttpRequest(mimetype)
{
	var xmlHttp = null;
	if (window.XMLHttpRequest)
	{
		xmlHttp = new window.XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
		try {
			xmlHttp = new ActiveXObject("MSXML2.XMLHTTP.3.0");
		}
		catch(e) {
			try {
            	xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
         	} catch (e) {
            	try {
               		xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
            	} catch (e) {}
			}
		}
	}
	if (xmlHttp && mimetype && xmlHttp.overrideMimeType) xmlHttp.overrideMimeType(mimetype);
	return xmlHttp;
}

function loadContent(id, sideFlags, actMenuId, actSideId)
{
	if (!send_xmlhttprequest(contentLoaded, 'GET', 'content/default.php?id=' + id, 'text/html'))
		return false;
	
	var calcHeader = objGet2(document, 'calcHeader');
	var calculator = objGet2(document, 'calculator');
	if (calculator)
	{
		calculator.style.display = 'none';
		if (calcHeader) calcHeader.style.display = 'none';
		var calcType = objGet2(document, 'calcType');
		var calculatorConditions = objGet2(document, 'calculatorConditions');
		var calculatorResults = objGet2(document, 'calculatorResults');
		if (calculatorConditions) calculatorConditions.style.display = '';
		if (calculatorResults) calculatorResults.style.display = 'none';

		if (calcType) calcType.value = ((sideFlags & 0x01) ? 'valuta' : (sideFlags & 0x02) ? 'deviza' : '');
	}
	
	var decoImages = objGet2(document, 'decoImages');
	if (decoImages){
		decoImages.style.display = (sideFlags & 0x04 ? '' : 'none');
	}
	
	var topmenu = objGet2(document, 'topmenu');
	if (topmenu) topmenu.className = actMenuId;
	initAutoRefresh();
	
	var sideIds = new Array('icon_valuta', 'icon_deviza', 'icon_compare', 'icon_history', 'icon_email', 'deviza_cond', 'frame_contr', 'indiv_rates', 'free_paymnt', 'vip_cond', 'vip_coupon', 'vip_rates', 'vip_card', 'extra_tips', 'currencies', 'glossary');
	for (var key in sideIds)
	{
		var id = sideIds[key];
		var obj = objGet2(document, id);
		if (obj) obj.className = (id == actSideId ? 'item active' : 'item');
	}
	
	return true;
}

function contentLoaded(xmlhttp)
{
	if (xmlhttp.readyState != 4) return;
	
	var content = objGet2(document, 'content');
	if (!content) return false;
	
	if (xmlhttp.status != 200)
	{
		content.innerHTML = '<div class="error">Při zpracování požadavku nastala neočekávaná chyba.</div>';
		return;
	}
	
	content.innerHTML = xmlhttp.responseText;
	if (document.documentElement) document.documentElement.scrollTop = 0;
	
	var calcHeader = objGet2(document, 'calcHeader');
	var calculator = objGet2(document, 'calculator');
	var calcType = objGet2(document, 'calcType');
	if (calculator && calcType)
	{
		calculator.style.display = (calcType.value ? '' : 'none');
		if (calcHeader) calcHeader.style.display = (calcType.value ? '' : 'none');
	}
}

var autoRefreshIntervalID = null;
function initAutoRefresh()
{
	stopAutoRefresh();

	var topmenu = objGet2(document, 'topmenu');
	if (topmenu)
	{
		switch (topmenu.className) {
			case 'menuValuta':
				// refresh cash rates every 30 minutes
				autoRefreshIntervalID = window.setInterval('refreshValutaRatelist();', 1800000);
				break;
			case 'menuDeviza':
				// refresh forex rates every 30 seconds
				autoRefreshIntervalID = window.setInterval('refreshDevizaRatelist();', 30000);
				break;
		}
	}
}
function stopAutoRefresh()
{
	if (autoRefreshIntervalID != null)
	{
		window.clearInterval(autoRefreshIntervalID);
		autoRefreshIntervalID = null;
	}
}

function refreshValutaRatelist()
{
	send_xmlhttprequest(valutaRatelistLoaded, 'GET', '/ratelist/valuta_refresh.php', 'text/xml');
}

function refreshDevizaRatelist()
{
	send_xmlhttprequest(devizaRatelistLoaded, 'GET', '/ratelist/deviza_refresh.php', 'text/xml');
}

function valutaRatelistLoaded(xmlhttp)
{
	if (xmlhttp.readyState != 4 || xmlhttp.status != 200) return;
	
	var xmlDoc = xmlhttp.responseXML;
	if (!xmlDoc) return;
	xmlDoc = xmlDoc.getElementsByTagName("valuta");
	if (!xmlDoc || !xmlDoc.length) return;
	xmlDoc = xmlDoc.item(0);
	
	var valuta_validity = objGet2(document, 'valuta_validity');
	var valuta = objGet2(document, 'valuta');
	if (valuta_validity) valuta_validity.innerHTML = xmlDoc.getAttribute('validity');
	if (valuta) valuta.innerHTML = xmlDoc.firstChild.nodeValue;
	else stopAutoRefresh(); 
}

function devizaRatelistLoaded(xmlhttp)
{
	if (xmlhttp.readyState != 4 || xmlhttp.status != 200) return;
	
	var xmlDoc = xmlhttp.responseXML;
	if (!xmlDoc) return;
	xmlDoc = xmlDoc.getElementsByTagName("deviza");
	if (!xmlDoc || !xmlDoc.length) return;
	xmlDoc = xmlDoc.item(0);
	
	var deviza_validity = objGet2(document, 'deviza_validity');
	var deviza = objGet2(document, 'deviza');
	if (deviza_validity) deviza_validity.innerHTML = xmlDoc.getAttribute('validity');
	if (deviza) deviza.innerHTML = xmlDoc.firstChild.nodeValue;
	else stopAutoRefresh(); 
}

function objShowHide(d, objToShow, objToHide)
{
	var obj1 = objGet2(d, objToShow);
	var obj2 = objGet2(d, objToHide);
	if (obj1 && obj2)
	{
		obj1.style.display = '';
		obj2.style.display = 'none';
		return true;
	}
	return false;
}
