var is_summ_changed_by_user = false;
var from_id  = 'summ_from', to_id  = 'summ_to';
var WMZ_CURRENCY_ID = 1;
var mainSelectsStruct = []; mainSelectsStruct['from_select'] = []; mainSelectsStruct['to_select'] = [];

jQuery.fn.outerHTML = function() {
    return $('<div>').append( this.eq(0).clone() ).html();
};

function loadMainSelectStruct () {
	var select0 = document.getElementById('from_select');
	var select1 = document.getElementById('to_select');
	var options_cnt = select0.length;
	for(var i=0; i<options_cnt; i++) { 
		mainSelectsStruct['from_select'].push($(select0.options[i]).outerHTML());
		mainSelectsStruct['to_select'].push($(select1.options[i]).outerHTML());
	}	
	//alert(mainSelectsStruct['to_select']);
}

// 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, first_select_index = 1;
	if (currentSelect.id == selectPairIds[0]) {
		select_index = 1;
		first_select_index = 0;	
	}
		
	var oppositeSelectId = selectPairIds[select_index];
	
	var oppositeSelectElem = document.getElementById(oppositeSelectId);
	var options_cnt = mainSelectsStruct['from_select'].length;
	var selectedCurrencyId = currentSelect.value;

	// restore selects structs
	//currentSelect.innerHTML = '';	
	oppositeSelectElem.innerHTML = '';
	for(var i=0; i<options_cnt; i++){
		//$(currentSelect).append(mainSelectsStruct[selectPairIds[first_select_index]][i]);
		$(oppositeSelectElem).append(mainSelectsStruct[selectPairIds[select_index]][i]);
	}	
	
	// if "back" button
	var oppositeSelectElemIndexUser = -1;
	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);
			//alert($('#currency_li_'+curr_id+'_'+select_index).outerHTML());
			if (document.getElementById('currency_li_'+curr_id+'_'+select_index).selected) {				
				oppositeSelectElemIndexUser = i;
				break;
			}
		}
	}	
	
	oppositeSelectElem.selectedIndex = -1;
	var sindexToRemove = [], numIndexToRemove = [];
	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) {			
			sindexToRemove.push('currency_li_'+curr_id+'_'+select_index);
			numIndexToRemove.push(i);
		} else {			
			if (oppositeSelectElemIndexUser == -1) {
				if (oppositeSelectElem.selectedIndex == -1) {					
					oppositeSelectElem.selectedIndex = i;
				} 
			} else {
				oppositeSelectElem.selectedIndex = oppositeSelectElemIndexUser;
			}
		}
	}
	var cnt = sindexToRemove.length;	
	var selIndex = oppositeSelectElem.selectedIndex;	
	//alert(oppositeSelectElem.innerHTML);
	//alert(selIndex + ' ' +oppositeSelectElemIndexUser);	
	for(var i=0; i<cnt; i++){
		//alert(sindexToRemove[i]);
		if (selIndex > numIndexToRemove[i] && selIndex > 0) {
			selIndex--;
		}
		//oppositeSelectElem.remove(sindexToRemove[i]);
		$('#'+sindexToRemove[i]).remove();
	}
	//alert(oppositeSelectElem.innerHTML);
	//alert(selIndex);
	oppositeSelectElem.selectedIndex = selIndex;	
	if (!is_summ_changed_by_user) {
		var pair_index = currentSelect.value+'_'+oppositeSelectElem.value;
		if (currencyPairsInfa[pair_index]) {
			var currencyPair = currencyPairsInfa[pair_index];
			if (document.getElementById(from_id).value == '0') {
				document.getElementById(from_id).value = removeDoubleZero(currencyPair['from'].def);
			}
		}
	}
}
function detWmzComm(val) {
	var com = parseFloat(val)*0.008;
	var all = parseFloat(val) + com;
	var curr_id = $('#from_select').val();
	if (curr_id == 1) {// wmz
		if(com > 50) {
			all = 50;
		}
	} else if (curr_id == 2) {// wmu
		if(com > 250) {
			all = 250;
		}
	} else if (curr_id == 3) {// wmr
		if(com > 1500) {
			all = 1500;
		}
	}
	//alert($('#from_select').val());
	return Math.round(all*100)/100;
}
// calculate sum and prove the result for reverses calculation
function calculateSumms(reversed)
{	
	if (document.getElementById(from_id)) {
		if (typeof reversed == 'undefined') {
			reversed = false;
		}
		var strcomma = document.getElementById(from_id).value;
		document.getElementById(from_id).value = strcomma.replace(',', '.');
		strcomma = document.getElementById(to_id).value;
		document.getElementById(to_id).value = strcomma.replace(',', '.');
		var val = 0;
		if (!reversed) {
			val =  parseFloat(document.getElementById(from_id).value);
		} else {
			val =  parseFloat(document.getElementById(to_id).value);
		}
		$('#sum_com').val(detWmzComm(document.getElementById(from_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;
		}			
		res = new Number(twoPoints(res, 2));		
		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) {
		//alert(selectFrom.value+'_'+selectTo.value);
		//return 1;
		pair_index = selectFrom.value+'_'+selectTo.value;
	} else if (document.getElementById('currency_from_id') && document.getElementById('currency_to_id')){		
		var currency_from_id = document.getElementById('currency_from_id').value;
		var currency_to_id = document.getElementById('currency_to_id').value;
		pair_index = currency_from_id+'_'+currency_to_id;
	}	
	var currencyPair = currencyPairsInfa[pair_index];
	if ((typeof(currencyPairsInfa) != "undefined")) {
		
		var rate = parseFloat(currencyPair.commission_my_1);
		var skidka = determinSkidki(val, currencyPair);
		//alert(skidka);
		if (reversed) {
			rate = 1/rate;
		}
		rate = (rate - rate*skidka/100)*100/100;
		
		if(document.getElementById('rate_id')) {
			document.getElementById('rate_id').value = Math.round(rate*10000)/10000;
		}
		if(document.getElementById('back_rate_id')) {
			document.getElementById('back_rate_id').value = Math.round((1/rate)*10000)/10000;
		}		
		
		var res = rate*val;
		
		return res;
	}
}
// chack reserv and site state
function checkAvailables(is_stoped, msg) {	
	if (is_stoped) {
		//alert(msg);
		//document.getElementById('noticeForm').style.display = 'block';
		//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);
		
		available_to = Math.round(available_to - 0.008*available_to);
		
		if (want_to > available_to) {
			alert (currencyPair.msg_available+' Резерв всего '+available_to);
			return false;
		} else {
			return true;
		}
	}
}
// removes end .00
function removeDoubleZero(val) {
	var r = new String(val);	
	return r.replace('.00', '');
}
function twoPoints(val, points) {
	var val = new String(val);
	if (val.indexOf('.') != -1) {		
		//alert(val);
		return val.substr(0, val.indexOf('.')+points+1);
	}  else {
		return val;
	}
}
// consider discount
function determinSkidki(value, pair) {
	var res = 0;
	// baks translation
	if (pair.currency_from_id == WMZ_CURRENCY_ID) {
		//alert('yo 1');
	} else if (pair.currency_to_id == WMZ_CURRENCY_ID) {		
		value = parseFloat(value*pair.commission_my_1);		
		//alert('yo 2 = '+value);
	} else {
		var basePair = currencyPairsInfa[pair.currency_from_id+'_'+WMZ_CURRENCY_ID];
		if (basePair) {
			value = parseFloat(value*basePair.commission_my_1);
		}
		//alert('yo 3 = '+value);
	}
	if (value < pair.summ_commission_my_1) {		
		res = 0;
	}
	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) {		
		//alert('yo 3 = '+value+' '+pair.summ_commission_my_2);
		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) {
		var rate = parseFloat(pair.commission_my_1);		
		//alert(skidka);
		rate = (rate - rate*res/100)*100/100;		
		document.getElementById('hdr_service_comm').innerHTML = rate;
	}
	return res;
}