var usdSale;
var rurSale;
var eurSale;

var usdPurch;
var usdPurch;
var usdPurch;

var in0;
var in10;
var in50;
var in100;
var in500;

var out0;
var out100;

function loadSaleRates(usd, rur, eur){
    usdSale = usd;
    rurSale = rur;
    eurSale = eur;
}

function loadPurchaseRates(usd, rur, eur){
    usdPurch = usd;
    rurPurch = rur;
    eurPurch = eur;
}

function loadInputRates(in0, in10, in50, in100, in500){
    this.in0    = in0;
    this.in10   = in10;
    this.in50   = in50;
    this.in100  = in100;
    this.in500  = in500;
}

function loadOutRates(out0, out100){
    this.out0   = out0;
    this.out100 = out100;
}

function calculate(val, srcCurInit, rezCur, back){
    var srcCur = getCurrency(srcCurInit);
    rezCur = getCurrency(rezCur);
    if (!back){
        var percent = getPercentForOperation(val, srcCurInit);
        val -= percent;
    }
    
    if (srcCur != rezCur){
        if (!back){
            var uahVal = getUAHVal(val, srcCur, false);
            val = getCurValFromUAH(uahVal, rezCur, false);
        } else {
            val = getCurValFromUAH(val, rezCur, true);
            val = getUAHVal(val, srcCur, true);
        }
    }
    
    if (back){
        var percent = getPercentForOperation(val, srcCurInit);
        val = parseFloat(val) + percent;
    }
    return roundRez(val);
}

function getPercentForOperation(val, srcCur){
    
    var srcCurMain = getCurrency(srcCur);
    
    if ((srcCur == "USD") || (srcCur == "RUR") || (srcCur == "EUR") || (srcCur == "UAH")){
        return getPercentForInput(val, srcCurMain);
    } else{
        return getPercentForOutput(val, srcCurMain);
    }
}

function getPercentForInput(val, srcCur){
    var usdVal = getUSDVal(val, srcCur, false);
    if (usdVal > 500){
        return val * in500;
    }else if (usdVal > 100 ){
        return val * in100;
    }else if (usdVal > 50){
        return val * in50;
    }else if (usdVal > 10){
        return val * in10;
    }else{
        return val * in0;
    }
}

function getPercentForOutput(val, srcCur){
    var usdVal = getUSDVal(val, srcCur, false);
	if (usdVal > 100){
        return val * out100;
    }else{
        return val * out0;
    }

}

function getUSDVal(val, cur){
    if (cur == "USD"){
        return val;
    } else{
        val = getUAHVal(val, cur, false);
        return val / usdPurch;
    }
}

function getCurrency(cur){
    if (cur == "WMZ"){
        return "USD";
    } else if (cur == "WMR") {
        return "RUR";
    } else if (cur == "WME"){
        return "EUR";
    } else if (cur == "WMU"){
        return "UAH";
    } else {
        return cur;
    }
}

function getUAHVal(val, cur, back){
    if (cur == "UAH"){
        return val;
    }else if (cur == "RUR"){
        if (!back){
            return val * rurPurch;
        } else {
            return val / rurPurch;
        }
    } else if (cur == "EUR"){
        if (!back){
            return val * eurPurch;
        } else {
            return val / eurPurch;
        }
    } else if (cur == "USD"){
        if (!back){
            return val * usdPurch;
        } else {
            return val / usdPurch;
        }
    }
}

function getCurValFromUAH(uahVal, rezCur, back){
    if (rezCur == "UAH"){
        return uahVal;
    } else if (rezCur == "USD"){
        if (!back){
            return uahVal / usdSale;
        } else {
            return uahVal * usdSale;
        }
    } else if (rezCur == "RUR"){
        if (!back){
            return uahVal / rurSale;
        } else {
            return uahVal * rurSale;
        }
    } else if (rezCur == "EUR"){
        if (!back){
            return uahVal / eurSale;
        } else {
            return uahVal * eurSale;   
        }
    }
}

function roundRez(val){
    return Math.round(val*100)/100
}

function changeSel(sellSel, receive, back){
            var val = sellSel.value;
            if ((val=="WMZ") || (val=="WME") || (val=="WMU") || (val=="WMR")){
                receive.length = 2;
                receive.options[0].text = "Грн.";
                receive.options[0].value = "UAH"
                receive.options[1].text = "USD";
                receive.options[1].value = "USD";
            } else {
                receive.length = 4;
                receive.options[0].text = "WMZ";
                receive.options[0].value = "WMZ";
                receive.options[1].text = "WME";
                receive.options[1].value = "WME";
                receive.options[2].text = "WMU";
                receive.options[2].value = "WMU";
                receive.options[3].text = "WMR";
                receive.options[3].value = "WMR";
            }
}
       
       function calcRez(srcVal, srcCur, rezVal, rezCur, back){
        if (!back){
            rezVal.value = calculate(srcVal.value, srcCur.value, rezCur.value, back);
        } else {
            srcVal.value = calculate(rezVal.value, srcCur.value, rezCur.value, back);
        }
       }
       
       function changeItem(back){
        var srcVal  = document.getElementById('sellInput');
        var srcCur  = document.getElementById('sellSel');
        var rezVar  = document.getElementById('receiveInput');
        var rezCur  = document.getElementById('receiveSel');
        
        if (!back){
            if (srcVal.value == ""){
                rezVar.value = "";
                return;
            }
            if (isNaN(parseInt(srcVal.value))){
                srcVal.value = "";
                rezVar.value = "";
                return;
            }
        } else {
           if (rezVar.value == ""){
                srcVal.value = "";
                return;
            }
            if (isNaN(parseInt(rezVar.value))){
                srcVal.value = "";
                rezVar.value = "";
                return;
            }
        }
        
        calcRez(srcVal, srcCur, rezVar, rezCur, back);
       }
       
       function changeItemOrder(back){
        var srcVal  = document.getElementById('sellInputForm');
        var srcCur  = document.getElementById('sellSelForm');
        var rezVar  = document.getElementById('receiveInputForm');
        var rezCur  = document.getElementById('receiveSelForm');
        
        if (!back){
            if (srcVal.value == ""){
                rezVar.value = "";
                return;
            }
            if (isNaN(parseInt(srcVal.value))){
                srcVal.value = "";
                rezVar.value = "";
                return;
            }
        } else {
           if (rezVar.value == ""){
                srcVal.value = "";
                return;
            }
            if (isNaN(parseInt(rezVar.value))){
                srcVal.value = "";
                rezVar.value = "";
                return;
            }
        }
        
        calcRez(srcVal, srcCur, rezVar, rezCur, back);
       }
       
       function changeCurrencyList(back){
            changeSel(document.getElementById("sellSel"), document.getElementById("receiveSel"), back);    
       }
       
       function changeCurrencyListOrder(back){
            changeSel(document.getElementById("sellSelForm"), document.getElementById("receiveSelForm"), back);    
       }