/**
* @version      $Id: mod_currency_exchange_informer.js v 1.0
* @package      Currency Exchange Informer
* @copyright    Copyright (C) 2009 FalsinSoft. All rights reserved.
* @license      GNU/GPL
* @website      http://www.falsinsoft.co.nr
* @email        falsinsoft@gmail.com
* 
*/

var CurrencyExchangeRate = 0;

function CreateXmlHttpReq() 
{
    var XMLHttp = false;
    
    if(window.XMLHttpRequest) 
    {
        XMLHttp = new XMLHttpRequest();
    } 
    else if(window.ActiveXObject) 
    {
        try 
        {
            XMLHttp = new ActiveXObject("Msxml2.XMLHTTP");
        } 
        catch(e) 
        {
            try 
            {
                XMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
            } 
            catch(e) 
            {
                XMLHttp = false;
            }
        }
    }
    
    return XMLHttp;
}

function RequestHandler(HttpReq, CurrencyBase, CurrencyConverted) 
{
    if(HttpReq.readyState == 4) 
    {
        if(HttpReq.status == 200 || HttpReq.status == 304)
        {
            var ExchangeRate = parseFloat(HttpReq.responseText);
            
            if(isNaN(ExchangeRate) == false && ExchangeRate > 0)
            {
                ShowModuleData(CurrencyBase, CurrencyConverted, ExchangeRate);
            }
            else
            {
                var ConvResDiv = document.getElementById("cei_currency_exchange_rate");
                
                if(ConvResDiv != null)
                {
                     ConvResDiv.innerHTML = "ERROR: loader failed! ("+HttpReq.responseText+")";
                } 
            }
        }
    }
}

function ShowModuleData(CurrencyBase, CurrencyConverted, ExchangeRate)
{
    var ConvResDiv   = document.getElementById("cei_currency_exchange_rate");
    var ConvBlockDiv = document.getElementById("cei_converter_block");
    
    if(ConvResDiv != null && ConvBlockDiv != null)
    {
        CurrencyExchangeRate = ExchangeRate;

        ConvResDiv.innerHTML = "1 "+CurrencyBase+" = <b>"+ExchangeRate+" "+CurrencyConverted+"</b>";
                
        ConvBlockDiv.style.display = "block";
    }
}

function ShowLoadingAnimation(RootPath)
{
    var LoadingElement = document.getElementById("cei_currency_exchange_rate")

    if(LoadingElement != null)
    {
        var LoadingAnimation = document.createElement("img");

        LoadingAnimation.setAttribute("src", RootPath+"modules/mod_currency_exchange_informer/currency_exchange_loader.gif");
        
        LoadingElement.appendChild(LoadingAnimation);
    }
}

function ShowCurrencyExchangeRate(CurrencyBase, CurrencyConverted, SessionExchangeRate, RootPath)
{
    if(CurrencyBase == CurrencyConverted)
    {
        var ConvResDiv = document.getElementById("cei_currency_exchange_rate");
                
        if(ConvResDiv != null)
        {
             ConvResDiv.innerHTML = "ERROR: same base and converted currency!";
        }
        
        return;
    }
    
    if(SessionExchangeRate != 0)
    {
        ShowModuleData(CurrencyBase, CurrencyConverted, SessionExchangeRate);
    }
    else
    {
        var HttpReq = CreateXmlHttpReq();
     
        if(HttpReq)
        {
            var LoaderURL = RootPath;

            ShowLoadingAnimation(RootPath);
            
            HttpReq.onreadystatechange = function() { RequestHandler(HttpReq, CurrencyBase, CurrencyConverted); };
            
            LoaderURL += "modules/mod_currency_exchange_informer/currency_exchange_loader.php";
            LoaderURL += "?base="+escape(CurrencyBase);
            LoaderURL += "&converted="+escape(CurrencyConverted);
            LoaderURL += "&rand="+escape(Math.random());
 
            HttpReq.open("GET", LoaderURL, true);
            HttpReq.send(null);
        }
    }
}

function ShowHideConverter(ShowConverterString, HideConverterString)
{
    var ConverterForm = document.getElementById("cei_converter_form");
    var ConverterLink  = document.getElementById("cei_show_hide_converter");
    
    if(ConverterForm != null && ConverterLink != null)
    {
        if(ConverterForm.style.display == "none")
        {
            ConverterForm.style.display = "block";
            ConverterLink.innerHTML = HideConverterString;
        }
        else
        {
            var ValueToConvert = document.getElementById("cei_value_to_convert");
            var ConvertedValue = document.getElementById("cei_converted_value");
            
            ConverterForm.style.display = "none";
            ConverterLink.innerHTML = ShowConverterString;
            
            if(ValueToConvert != null && ConvertedValue != null)
            {
                ValueToConvert.value = "";
                ConvertedValue.innerHTML = "";
            }
        }
    }
}

function SetNewConversionCurrencyBase(CurrencyBase)
{
    var ConversionCurrencyBase = document.getElementById("cei_conversion_currency_base");

    if(ConversionCurrencyBase != null)
    {
        ConversionCurrencyBase.innerHTML = CurrencyBase;
    }
}

function ConvertValue(CurrencyBase, CurrencyConverted, ErrorMessage)
{
    if(CurrencyExchangeRate > 0)
    {
        var ValueToConvert          = document.getElementById("cei_value_to_convert");
        var ConvertedValue          = document.getElementById("cei_converted_value");
        var SelectionBaseRadio      = document.getElementById("cei_selection_base_radio");
        var SelectionConvertedRadio = document.getElementById("cei_selection_converted_radio");
        
        if(ValueToConvert != null && ConvertedValue != null && SelectionBaseRadio != null && SelectionConvertedRadio != null)
        {
            var ConversionResult, ValueBase;

            if(ValueToConvert.value.trim() == "" || isNaN(ValueToConvert.value) == true || parseFloat(ValueToConvert.value) == 0)
            {
                ConvertedValue.innerHTML = ErrorMessage;
                return;
            }
            
            ValueBase = parseFloat(ValueToConvert.value);
            
            if(SelectionBaseRadio.checked == true)
            {
                ConversionResult = eval(ValueBase * CurrencyExchangeRate);
                ConvertedValue.innerHTML = ValueBase+" "+CurrencyBase+" = <b>"+RoundNumber(ConversionResult, 4)+" "+CurrencyConverted+"</b>";
            }
            else
            {
                ConversionResult = eval(ValueBase / CurrencyExchangeRate);
                ConvertedValue.innerHTML = ValueBase+" "+CurrencyConverted+" = <b>"+RoundNumber(ConversionResult, 4)+" "+CurrencyBase+"</b>";
            }
        }
    }
}

function RoundNumber(Number, MaxDecimals) 
{
    var StrNum, DotPos, Decimals, Exponent, RoundedNum, NumPos, NumChar;

    StrNum = Number.toString();
    
    DotPos = StrNum.indexOf(".");
    
    if(DotPos == -1) return Number;

    Decimals = (StrNum.length - DotPos - 1);

    if(Decimals > MaxDecimals) Decimals = MaxDecimals;

    Exponent = Math.pow(10, Decimals);

    RoundedNum = (Math.round(Number * Exponent) / Exponent);

    StrNum = RoundedNum.toString();

    DotPos = StrNum.indexOf(".");

    if(DotPos != -1)
    {
        for(NumPos = (StrNum.length - 1); NumPos > 0; NumPos--)
        {
            NumChar = StrNum.charAt(NumPos);
            
            if(NumChar != "0" || NumChar == ".") break;
            
            StrNum = StrNum.substr(0, NumPos);
        }
        
        RoundedNum = parseFloat(StrNum)
    }

    return RoundedNum;
}
