currencyConverterHost = "currency-converter.php";

function symbolToAcr(string) {
    var EURRegExp = new RegExp("€");
    var newString = string.replace(EURRegExp, "EUR");
    var USDRegExp = new RegExp("\\$");
    newString = newString.replace(USDRegExp, "USD");
    var GBPRegExp = new RegExp("£");
    newString = newString.replace(GBPRegExp, "GBP");
    var JPYRegExp = new RegExp("¥");
    newString = newString.replace(JPYRegExp, "JPY");
    var CZKRegExp = new RegExp("Kč");
    newString = newString.replace(CZKRegExp, "CZK");

    // TODO: zjistit co je to za měnu
    // XXXRegExp = new RegExp("¢");
    // newString = string.replace(XXXRegExp, "XXX");

    return newString;
}

function acrToSymbol(string) {
    var EURRegExp = new RegExp("EUR");
    var newString = string.replace(EURRegExp, "&euro;");
    var USDRegExp = new RegExp("USD");
    newString = newString.replace(USDRegExp, "&#36;");
    var GBPRegExp = new RegExp("GBP");
    newString = newString.replace(GBPRegExp, "&pound;");
    var JPYRegExp = new RegExp("JPY");
    newString = newString.replace(JPYRegExp, "&yen;");
    var CZKRegExp = new RegExp("CZK");
    newString = newString.replace(CZKRegExp, "Kč");

    // TODO: zjistit co je to za měnu
    // XXXRegExp = new RegExp("¢");
    // newString = string.replace(XXXRegExp, "XXX");

    return newString;
}

function getAmount(string) {
    amountStr = string.replace("&nbsp;", " ");
    /*
	var myRegExp = new RegExp("[^0-9\\.]+");
    var amountStr = amountStr.replace(myRegExp, "");
    var amount = parseFloat(amountStr);
	*/
	var myRegExp = new RegExp("[0-9\\.]+");
    var amountStr = amountStr.match(myRegExp);
    var amount = parseFloat(amountStr);
    return amount;
}

function getFrom(string) {
    var from = string.replace("&nbsp;", " ");
	/*
	var myRegExp = new RegExp("[0-9\\s\\W]+");
    from = from.replace(myRegExp, "");
    */
	//cast = from.split("<span>");
	//from = cast[1].substr(0,3);
	var myRegExp = new RegExp("[A-Z]{3}");
    from = from.match(myRegExp);
	return from;
}

function roundAmount(string) {
    var myRegExp = new RegExp("[^0-9\\.]+");
    var amountStr = string.replace(myRegExp, "");
    var amount = parseFloat(amountStr);
    amount = Math.round(amount);
    myRegExp = new RegExp("[0-9\\s\\W]+");
    var newString  = string.replace(myRegExp, amount+"&nbsp;");
    return newString;
}

var justGettingRate = false;

function getExchangeRate(req_from, req_to) {
    if (req_from == req_to) {
        return 1;
    }
    var FROM_TO = ''+req_from+'_'+req_to+'';
    if (jQuery.cookie(FROM_TO) != null) {
        return jQuery.cookie(FROM_TO);
    } else {
        if (justGettingRate == false) {
            justGettingRate = true;
            jQuery("select[name='exchange']").attr("disabled","disabled");
            jQuery.get(currencyConverterHost, { amount: 1, from: req_from, to: req_to }, function (data, textStatus) {
                justGettingRate = false;
                jQuery("select[name='exchange']").removeAttr("disabled","disabled");
                var amount = getAmount(data);
                jQuery.cookie(FROM_TO, amount, { path: '/', expires: 30 });
                exchange(req_to);
            });
        }
        return null;
    }
}

function exchange(req_to) {
    if (req_to == "hotel_currency") {
        cancelAutoExchange();
        return;
    }

    jQuery.cookie('exchangeTo', req_to, { path: '/', expires: 30 });

    var poleCen = jQuery(".cena");
    jQuery.each(poleCen, function(index, value) {
        var innerValue = value.innerHTML;
        // převod symbolů na zkratky (€ -> EUR)...
        innerValue = symbolToAcr(innerValue);
        req_to = symbolToAcr(req_to);
        // zjištění současné hodnoty
        var req_amount = getAmount(innerValue);
        if (isNaN(req_amount)) return;
        // zjištění současné měny
		var req_from = getFrom(innerValue);
        // zjištění převodního kurzu
        var exchangeRate = getExchangeRate(req_from, req_to);
        if (exchangeRate == null || exchangeRate == 1) {
            // pokud kurz byl 1, nedělat nic
            // pokud kurz nebyl uložen spustí se převod znovu
            return;
        }
        // výpočet nové hodnoty
        var newAmount = exchangeRate * req_amount;
        newAmount = Math.round(newAmount);
        // převod zkratky na symbol (EUR -> €)...
        var req_toSymbol = acrToSymbol(req_to);
        // výpis nové hodnoty a nové měny
        //value.innerHTML = innerValue.split("<span>")[0]+" <span>"+req_toSymbol+"&nbsp;"+newAmount+"</span>";
        innerValue = innerValue.replace(req_from,req_toSymbol);
        innerValue = innerValue.replace(req_amount,newAmount);
		value.innerHTML = innerValue;
    });

    var poleCen = jQuery(".cena1");
    jQuery.each(poleCen, function(index, value) {
        var innerValue = value.innerHTML;
        // převod symbolů na zkratky (€ -> EUR)...
        innerValue = symbolToAcr(innerValue);
        req_to = symbolToAcr(req_to);
        // zjištění současné hodnoty
        var req_amount = getAmount(innerValue);
        if (isNaN(req_amount)) return;
        // zjištění současné měny
		var req_from = getFrom(innerValue);
        // zjištění převodního kurzu
        var exchangeRate = getExchangeRate(req_from, req_to);
        if (exchangeRate == null || exchangeRate == 1) {
            // pokud kurz byl 1, nedělat nic
            // pokud kurz nebyl uložen spustí se převod znovu
            return;
        }
        // výpočet nové hodnoty
        var newAmount = exchangeRate * req_amount;
        newAmount = Math.round(newAmount);
        // převod zkratky na symbol (EUR -> €)...
        var req_toSymbol = acrToSymbol(req_to);
        // výpis nové hodnoty a nové měny
        //value.innerHTML = innerValue.split("<span>")[0]+" <span>"+req_toSymbol+"&nbsp;"+newAmount+"</span>";
        innerValue = innerValue.replace(req_from,req_toSymbol);
        innerValue = innerValue.replace(req_amount,newAmount);
		value.innerHTML = innerValue;
    });

    var poleCen = jQuery(".puvodni");
    jQuery.each(poleCen, function(index, value) {
        var innerValue = value.innerHTML;
        // převod symbolů na zkratky (€ -> EUR)...
        innerValue = symbolToAcr(innerValue);
        req_to = symbolToAcr(req_to);
        // zjištění současné hodnoty
        var req_amount = getAmount(innerValue);
        if (isNaN(req_amount)) return;
        // zjištění současné měny
		var req_from = getFrom(innerValue);
        // zjištění převodního kurzu
        var exchangeRate = getExchangeRate(req_from, req_to);
        if (exchangeRate == null || exchangeRate == 1) {
            // pokud kurz byl 1, nedělat nic
            // pokud kurz nebyl uložen spustí se převod znovu
            return;
        }
        // výpočet nové hodnoty
        var newAmount = exchangeRate * req_amount;
        newAmount = Math.round(newAmount);
        // převod zkratky na symbol (EUR -> €)...
        var req_toSymbol = acrToSymbol(req_to);
        // výpis nové hodnoty a nové měny
        //value.innerHTML = innerValue.split("<span>")[0]+" <span>"+req_toSymbol+"&nbsp;"+newAmount+"</span>";
        innerValue = innerValue.replace(req_from,req_toSymbol);
        innerValue = innerValue.replace(req_amount,newAmount);
		value.innerHTML = innerValue;
    });

    var poleCen = jQuery(".akcni");
    jQuery.each(poleCen, function(index, value) {
        var innerValue = value.innerHTML;
        // převod symbolů na zkratky (€ -> EUR)...
        innerValue = symbolToAcr(innerValue);
        req_to = symbolToAcr(req_to);
        // zjištění současné hodnoty
        var req_amount = getAmount(innerValue);
        if (isNaN(req_amount)) return;
        // zjištění současné měny
		var req_from = getFrom(innerValue);
        // zjištění převodního kurzu
        var exchangeRate = getExchangeRate(req_from, req_to);
        if (exchangeRate == null || exchangeRate == 1) {
            // pokud kurz byl 1, nedělat nic
            // pokud kurz nebyl uložen spustí se převod znovu
            return;
        }
        // výpočet nové hodnoty
        var newAmount = exchangeRate * req_amount;
        newAmount = Math.round(newAmount);
        // převod zkratky na symbol (EUR -> €)...
        var req_toSymbol = acrToSymbol(req_to);
        // výpis nové hodnoty a nové měny
        //value.innerHTML = innerValue.split("<span>")[0]+" <span>"+req_toSymbol+"&nbsp;"+newAmount+"</span>";
        innerValue = innerValue.replace(req_from,req_toSymbol);
        innerValue = innerValue.replace(req_amount,newAmount);
		value.innerHTML = innerValue;
    });

    var poleCen = jQuery(".akcni2");
    jQuery.each(poleCen, function(index, value) {
        var innerValue = value.innerHTML;
        // převod symbolů na zkratky (€ -> EUR)...
        innerValue = symbolToAcr(innerValue);
        req_to = symbolToAcr(req_to);
        // zjištění současné hodnoty
        var req_amount = getAmount(innerValue);
        if (isNaN(req_amount)) return;
        // zjištění současné měny
		var req_from = getFrom(innerValue);
        // zjištění převodního kurzu
        var exchangeRate = getExchangeRate(req_from, req_to);
        if (exchangeRate == null || exchangeRate == 1) {
            // pokud kurz byl 1, nedělat nic
            // pokud kurz nebyl uložen spustí se převod znovu
            return;
        }
        // výpočet nové hodnoty
        var newAmount = exchangeRate * req_amount;
        newAmount = Math.round(newAmount);
        // převod zkratky na symbol (EUR -> €)...
        var req_toSymbol = acrToSymbol(req_to);
        // výpis nové hodnoty a nové měny
        //value.innerHTML = innerValue.split("<span>")[0]+" <span>"+req_toSymbol+"&nbsp;"+newAmount+"</span>";
        innerValue = innerValue.replace(req_from,req_toSymbol);
        innerValue = innerValue.replace(req_amount,newAmount);
		value.innerHTML = innerValue;
    });

    var poleOpt = jQuery(".pocet option");
    jQuery.each(poleOpt, function(index, value) {
        var oldInnerValue = value.innerHTML;
        var innerValue = value.innerHTML;

        // zpracovat pouze vnitřek závorek
        var innerValue_left = innerValue.split("(");
        if (innerValue_left[1] == undefined) return;
        var innerValue_right = innerValue_left[1].split(")");
        if (innerValue_right[0] == undefined) return;

        // převod symbolů na zkratky (€ -> EUR)...
        innerValue = symbolToAcr(innerValue_right[0]);
        req_to = symbolToAcr(req_to);
        // zjištění současné hodnoty
        var req_amount = getAmount(innerValue);
        if (isNaN(req_amount)) return;
        // zjištění současné měny
        var req_from = getFrom(innerValue);
        // zjištění převodního kurzu
        var exchangeRate = getExchangeRate(req_from, req_to);
        if (exchangeRate == null || exchangeRate == 1) {
            // pokud kurz byl 1, nedělat nic
            // pokud kurz nebyl uložen spustí se převod znovu
            return;
        }
        // výpočet nové hodnoty
        var newAmount = exchangeRate * req_amount;
        newAmount = Math.round(newAmount);
        // převod zkratky na symbol (EUR -> €)...
        var req_toSymbol = acrToSymbol(req_to);
        // výpis nové hodnoty a nové měny
        var myRegExp = new RegExp("\\([^\\)]+\\)");
        //alert(" \nreq_to="+req_to+" \nreq_toSymbol="+req_toSymbol+" \nnewAmount="+newAmount);
        value.innerHTML  = oldInnerValue.replace(myRegExp, "("+req_toSymbol+"&nbsp;"+newAmount+")");

    });

}
function exchangeOLD(req_to) {
    // zjistit FROM
    // existuje záznam FROM-TO v cookie
    //      pokud ne, zjistit kurz a uložit do cookie jako FROM-TO s platností 1 den
    // přepočítat AMOUNT podle kurzu

    jQuery.cookie('exchangeTo', req_to, { path: '/', expires: 30 });

    var poleCena = jQuery(".cena");
    jQuery.each(poleCena, function(index, value) {
        var innerValue = value.innerHTML;

        innerValue = symbolToAcr(innerValue);

        var req_amount = getAmount(innerValue);
        if (isNaN(req_amount)) return;

        var req_from = getFrom(innerValue);

//        alert("req_amount_pre="+req_amount_pre+"\nreq_amount="+req_amount+"\nreq_from="+req_from+"\nreq_to="+req_to);

        jQuery.get(currencyConverterHost, { amount: req_amount, from: req_from, to: req_to }, function (data, textStatus) {
            value.innerHTML = roundAmount(data);
        }
        );
    });

    var poleOpt = jQuery(".pocet option");
    jQuery.each(poleOpt, function(index, value) {
        var oldInnerValue = value.innerHTML;
        var innerValue = value.innerHTML;

        var innerValue_left = innerValue.split("(");
        if (innerValue_left[1] == undefined) return;
        var innerValue_right = innerValue_left[1].split(")");
        if (innerValue_right[0] == undefined) return;

        innerValue = symbolToAcr(innerValue_right[0]);

        var req_amount = getAmount(innerValue);
        if (isNaN(req_amount)) return;

        var req_from = getFrom(innerValue);

//        alert("req_amount_pre="+req_amount_pre+"\nreq_amount="+req_amount+"\nreq_from="+req_from+"\nreq_to="+req_to);

        jQuery.get(currencyConverterHost, { amount: req_amount, from: req_from, to: req_to }, function (data, textStatus) {
            data = roundAmount(data);
            myRegExp = new RegExp("\\([^\\)]+\\)");
            value.innerHTML  = oldInnerValue.replace(myRegExp, "("+data+")");
        }
    );
    });

}

function autoExchange() {
    if (jQuery.cookie('exchangeTo') != null) {
        var req_to = jQuery.cookie('exchangeTo');
        jQuery("select[name='exchange']").val(req_to);
        exchange(req_to);
    }

    jQuery("select[name='exchange']").removeAttr("disabled","disabled");
}

function cancelAutoExchange() {
    jQuery.cookie('exchangeTo', null, { path: '/', expires: 30 });
    jQuery("select[name='exchange']").val("hotel_currency");
    window.location.reload();
}
