var is_summ_changed_by_user = false;
var from_id  = 'summ_from', to_id  = 'summ_to';
var operation_type_in = 1, operation_type_out = 2, operation_type_tranzit = 3;

// for save input value
function matchUser(){
	is_summ_changed_by_user = true;
}
// on select change
function selectCurrency(currentSelect){
	if (typeof currentSelect == 'undefined'){
		currentSelect = document.getElementById('from_select');
	}
	var selectPairIds = ['from_select', 'to_select'];
	var select_index = 0;
	if (currentSelect.id == selectPairIds[0]) {
		select_index = 1;
	}
	var oppositeSelectId = selectPairIds[select_index];
	
	var oppositeSelectElem = document.getElementById(oppositeSelectId);
	var options_cnt = oppositeSelectElem.length;
	var selectedCurrencyId = currentSelect.value;
	oppositeSelectElem.selectedIndex = 0;
	for(var i=0; i<options_cnt; i++){
		var curr_id = oppositeSelectElem.options[i].value;
		var provodka = selectedCurrencyId+'->'+curr_id+'.';		
		if (curr_pairs.indexOf(provodka) == -1) {
			//alert('currency_li_'+curr_id+'_'+select_index);
			document.getElementById('currency_li_'+curr_id+'_'+select_index).style.display = 'none';
		} else {
			document.getElementById('currency_li_'+curr_id+'_'+select_index).style.display = 'block';
			if (oppositeSelectElem.selectedIndex == 0) {
				oppositeSelectElem.selectedIndex = i;
			}
		}
	}	
	if (!is_summ_changed_by_user) {
		var pair_index = currentSelect.value+'_'+oppositeSelectElem.value;
		if (currencyPairsInfa[pair_index]) {
			var currencyPair = currencyPairsInfa[pair_index];
			document.getElementById(from_id).value = removeDoubleZero(currencyPair['from'].def);
		}
	}
	var oppositeSelectElemVal = 0;
	for(var i=0; i<options_cnt; i++){
		if(oppositeSelectElem.options[i].selected) {
			oppositeSelectElemVal = oppositeSelectElem.options[i].value;
			break;			
		}		
	}
	//alert(oppositeSelectElemVal);			
	selectMe (oppositeSelectElemVal, select_index);
}
// calculate sum and prove the result for reverses calculation
function calculateSumms(reversed)
{
	if (document.getElementById(from_id)) {
		if (typeof reversed == 'undefined') {
			reversed = false;
		}
		var val = 0;
		if (!reversed) {
			val =  parseFloat(document.getElementById(from_id).value);
		} else {
			val =  parseFloat(document.getElementById(to_id).value);
		}
		if(isNaN(val)){
			document.getElementById(from_id).value = '';
			document.getElementById(to_id).value = '';
			return false;
		}
		var elem_id = to_id;		
		if (reversed) {
			sign = -1;
			elem_id = from_id;
		}
		var res = 0;
		if (!reversed) {
			res = calculateSummsNumerical(val);
		} else {
			var maybe = 0, maybe_prev =0, tmp =0, tmp_prev =0, 
			step =0.1, sign = false, sycles=0;
			maybe = calculateSummsNumerical(val, true);
			maybe = parseFloat(maybe);
			tmp = calculateSummsNumerical(maybe);
			sign = tmp > val;
			while (Math.abs(tmp.toFixed(2)-val.toFixed(2)) > 0.001 && sycles < 1000) {	
				maybe_prev = maybe;		
				tmp_prev = tmp;
				if (tmp > val) {
					maybe = maybe - step;
				} else {
					maybe = maybe + step;
				}			
				tmp = calculateSummsNumerical(maybe);
				if (sign != tmp > val ) {
					step = step/2;
					tmp = tmp_prev;
					maybe = maybe_prev;
				}
				sycles++;
			}
			res = maybe;
		}
		document.getElementById(elem_id).value = removeDoubleZero(res.toFixed(2));
	}
}
// main calculate function
function calculateSummsNumerical(val, reversed)
{
	if (typeof reversed == 'undefined') {
		reversed = false;
	}
	var selectFrom = document.getElementById('from_select');
	var selectTo = document.getElementById('to_select');
	var pair_index = null;
	if (selectFrom && selectTo) {
		pair_index = selectFrom.value+'_'+selectTo.value;
	}	
	if ((typeof(currencyPairsInfa) != "undefined") || typeof(currencyPairGlobal) != "undefined") {
		var currencyPair = typeof(currencyPairsInfa) != "undefined" ? currencyPairsInfa[pair_index] : currencyPairGlobal;
		
		var commision_my = parseFloat(currencyPair.commission_my_1);
		var commision_my_min = parseFloat(currencyPair.commission_my_min);
		
		var comission_system = [], comission_system_min = [], rate =[], available = [];
		
		comission_system['from'] = parseFloat(currencyPair.from.commision_system);
		comission_system_min['from'] = parseFloat(currencyPair.from.commision_system_min);		
		available['from'] = parseFloat(currencyPair.from.available);
		comission_system['to'] = parseFloat(currencyPair.to.commision_system);
		comission_system_min['to'] = parseFloat(currencyPair.to.commision_system_min);		
		available['to'] = parseFloat(currencyPair.to.available);		
		var baseCurrencyDollalRate =0;
		switch(parseInt(currencyPair.operation_type)){
			case operation_type_in:			
				rate['to'] = parseFloat(currencyPair.to.rate_in);
				rate['from'] = parseFloat(currencyPair.from.rate_in);
				baseCurrencyDollalRate = baseCurrencyDollal.rate_in;
			break;
			case operation_type_out:			
				rate['to'] = parseFloat(currencyPair.to.rate_out);
				rate['from'] = parseFloat(currencyPair.from.rate_out);
				baseCurrencyDollalRate = baseCurrencyDollal.rate_out;
			break;
			case operation_type_tranzit:
				rate['to'] = parseFloat(currencyPair.to.rate_nbu);
				rate['from'] = parseFloat(currencyPair.from.rate_nbu);
				baseCurrencyDollalRate = baseCurrencyDollal.rate_nbu;
			break;
		}		
		var k_rate = 0;
		if (!reversed) {
			k_rate = new Number(rate['from']/rate['to']);			
		} else {
			k_rate = new Number(rate['to']/rate['from']);
		}
		// translate from dollars
		commision_my_min = commision_my_min*(baseCurrencyDollalRate/rate['from']);
		if (currencyPair.from.rate_nbu == currencyPair.to.rate_nbu) {
			baseCurrencyDollalRate = baseCurrencyDollal.rate_nbu;
		}
		//alert(baseCurrencyDollal.rate_nbu);
		commision_my = determinMyComm(val, currencyPair, baseCurrencyDollalRate);		
		var comm_my = calcCommision(k_rate*val, commision_my, commision_my_min*k_rate);
		
		var comm_bank = [];
		comm_bank['to'] = calcCommision(k_rate*val, comission_system['to'], comission_system_min['to']*k_rate);
		comm_bank = comm_bank['to'];		
		
		var res = new Number(0);
		
		var sign = 1;		
		if (reversed) {
			sign = -1;			
		}
		
		res = k_rate*val - sign*(comm_my + comm_bank);
		
		return res;
	}
}
// chack reserv and site state
function checkAvailables(is_stoped, msg) {	
	if (is_stoped) {
		alert(msg);
		return false;
	}
	var selectFrom = document.getElementById('from_select');
	var selectTo = document.getElementById('to_select');
	var pair_index = selectFrom.value+'_'+selectTo.value;
	
	if (currencyPairsInfa[pair_index]) {
		var currencyPair = currencyPairsInfa[pair_index];
		var available_to = parseFloat(currencyPair.to.available);
		var want_to = parseFloat(document.getElementById(to_id).value);
		if (want_to > available_to) {
			alert (currencyPair.msg_available+' Резерв всего '+available_to);
			return false;
		} else {
			return true;
		}
	}
}
// considers minimal commission
function calcCommision (value, commission, commission_min) {
	if (commission != 0) {
		comm = new Number(value*commission/100);		
		if (commission_min > comm) {
			comm = commission_min;			
		}
	} else {
		comm = 0;
	}
	
	return comm;
}
// removes end .00
function removeDoubleZero(val) {
	var r = new String(val);	
	return r.replace('.00', '');
}
// consider discount
function determinMyComm(value, pair, baseCurrencyDollalRate) {
	var res = false;
	// baks translation
	//value = value*(pair.from.rate_nbu/baseCurrencyDollal.rate_nbu);
	value = value*(pair.from.rate_nbu/baseCurrencyDollalRate);
	
	if (value < pair.summ_commission_my_1) {		
		res = pair.commission_my_1;
	}
	else if (value >= pair.summ_commission_my_1 && value < pair.summ_commission_my_2) {
		res = pair.commission_my_2;
	}
	else if (value >= pair.summ_commission_my_2 && value < pair.summ_commission_my_3) {		
		res = pair.commission_my_3;
	}
	else if (value >= pair.summ_commission_my_3) {		
		res = pair.commission_my_4;
	}
	if (document.getElementById('hdr_service_comm') && res) {
		document.getElementById('hdr_service_comm').innerHTML = res;
	}
	return res;
}
//check the form
function validOrder(){
	// check rezervs
	var want = parseFloat(document.getElementById('summ_to').value);		
	var reserve = 0; 	
	reserve = parseFloat(currencyPairGlobal.to.available);
	if(want>reserve){
		var msg = 'На данный момент в резерве нет такой суммы!';//  указанной валюты.
		alert(msg);
		return false;
	} 
	// check purse num
	if(document.getElementById('purcenum')){
		var purse = document.getElementById('purcenum').value;
		/*var wmReg=/^[ZURE].*$/;
		var WM=purse.match(wmReg);
		var go_to = false;
		if (WM!=null) {
			// webmoney			
			wmReg=/^[ZURE]\d{12}$/;
			if(purse.match(wmReg))
				go_to = true;		
		}*/
		if (purse == '') {
			alert('Не верно введен номер Вашего кошелька.');
			return false;
		}
	}
	// check wmid
	if (document.getElementById('wmid')) {
		var wmid = document.getElementById('wmid').value;
		var filter = /^[0-9]{12}$/ ;
		if (!wmid.match(filter)) {			
			alert('Не верно введен Ваш WMID.');
			return false;
		}
	}	
	// check card num
	if(document.getElementById('cardnum')){
		var purse = document.getElementById('cardnum').value;
		if (purse == '') {
			alert('Не верно введен номер Вашей карты/счота.');
			return false;
		}
	}	
	// check name
	if (document.getElementById('fname')) {
		var phone = document.getElementById('fname').value;
		if (phone == '') {
			alert('Введите Ваше имя.');
			return false;
		}
	}
	// check name
	if (document.getElementById('sname')) {
		var phone = document.getElementById('sname').value;
		if (phone == '') {
			alert('Введите Вашу фамилию.');
			return false;
		}
	}
	// check name
	if (document.getElementById('pname')) {
		var phone = document.getElementById('pname').value;
		if (phone == '') {
			alert('Введите Ваше отчество.');
			return false;
		}
	}		
	// check email
	if(document.getElementById('email')){
		var email = document.getElementById('email').value;
		var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/ ;
		if (!email.match(filter)) {
			alert("Не верно указан Ваш email.");
			return false;
		}
	}
	//check rule
	if(document.getElementById('agree')){
		if(!document.getElementById('agree').checked){
			alert("Вы должны согласится с правилами и условиями сервиса.");
			return false;
		}
	}
	
	return true;
}

function selectMe (selectedVal, select_index) {
	var selectPairIds = ['from_select', 'to_select'];
	$('#'+selectPairIds[select_index]).getSetSSValue(selectedVal);
	//alert(oppositeSelectId +' '+selectedIndex +' '+ select_index);
}
//selecting me
/*function selectMe(selectFieldId,linkNo,selectNo) {
	
	$('#'+oppositeSelectId).getSetSSValue(selectedIndex);
	
	selectField = selects[selectNo];
	for(var k = 0; k < selectField.options.length; k++) {
		if(k==linkNo) {
			selectField.options[k].selected = true;
		}
		else {
			selectField.options[k].selected = false;
		}
	}
	
	//show selected option
	textVar = document.getElementById("mySelectText"+selectNo);
	var newText = document.createTextNode(selectField.options[linkNo].text);
	textVar.replaceChild(newText, textVar.childNodes[0]);
	if (selectField.onchange && all_selects)
			{
				eval(selectField.onchange());
			}
}*/
