var area = 0;
var data = new Array();
var texts = new Array();
var values = new Array();
var prices = new Array(0,0,0,0,0,0);
var step = 0;

function validateArea(el){
	//alert(el.value + '\n' + el.value.match(/^[\d]+$/g));
	if(el.value.match(/^[\d]+$/g)){
		document.getElementById('buttonNext').disabled=false;
		area = document.getElementById('area').value;
		for(i in values){
			document.getElementById('field' + i).disabled = false;
		}
		recalculate();
	}
	else{
		el.value='';
		document.getElementById('buttonNext').disabled=true;
		for(i in values){
			document.getElementById('field' + i).disabled = true;
		}
	}
}

function doStep(iter){
	step = step + iter;
	//deba(step);
	var url='requests.php?do=calculator&step=' + step;
	//deba(url);
	ajax.getData(url,calculatorCallback);
}

function fillValues(){
	var url='requests.php?do=calculator&act=allsteps';
	ajax.getData(url,calculatorBigCallback);
}

function calculatorCallback(xmlhttp){
	if(xmlhttp.status==200){
		//deba(xmlhttp.responseText);
		//deba(eval(xmlhttp.responseText));
		eval(xmlhttp.responseText);
		buildInterface();
	}
	else{
		alert('ГРЕШКА:\n' + xmlhttp.responseText);
	}
}

function calculatorBigCallback(xmlhttp){
	if(xmlhttp.status==200){
		//deba(xmlhttp.responseText);
		//deba(eval(xmlhttp.responseText));
		eval(xmlhttp.responseText);
		buildBigInterface();
	}
	else{
		alert('ГРЕШКА:\n' + xmlhttp.responseText);
	}
}


function computeStep(value){
/*
	if(value.length<1){
		alert('Моля, изберете материал!');
		return false;
	}
*/
	//deba(value);
	var totalMat = area * value[5];
	var totalUnits = Math.round( totalMat / value[3] );
	if(totalMat / value[3] - totalUnits > 0){
		totalUnits++;
	}
	var totalPrice = totalUnits * value[4];
	
	data[step-1] = new Array(value[1],totalMat,value[3] + ' ' + value[2],totalUnits,totalPrice);
	
	buildTable();
}

function buildInterface(){

//	deba(texts);
//	deba(options);

	document.getElementById('legend').innerHTML = texts[0];
	document.getElementById('text').innerHTML = texts[1];
	document.getElementById('fieldname').innerHTML = texts[2];
	
	var sel = document.getElementById('field');
	for (var i = sel.options.length; i > 0; i--){
		sel.options[i] = null;
	}
	for(var i=0;i<values.length;i++){
//		deba(options[i]);
		var opt = new Option(values[i][1], i);
		sel.options[sel.options.length] = opt;
	}

}

function buildBigInterface(){
	for(var i=1;i<=values.length;i++){
		var sel = document.getElementById('field'+i);
		for (var j = sel.options.length; j > 0; j--){
			sel.options[j] = null;
		}
		//alert(i);
		deba(values[i]);
		for(var j=0;j<values[i].length;j++){
			var opt = new Option(values[i][j][1], values[i][j][0]);
			sel.options[sel.options.length] = opt;
		}
	}
}


function buildTable(){
	
	var table = document.getElementById('data');

	for(var i=0;i<table.childNodes.length;i++){
		table.removeChild(table.childNodes[i]);
	}
	
	for(var i=0;i<data.length;i++){
		var tr = document.createElement('tr');
		var row = data[i];
		for(var j=0;j<row.length;j++){
			var td = document.createElement('td');
			td.appendChild(document.createTextNode(row[j]));
			tr.appendChild(td);
		}
		table.appendChild(tr);
	}
	
}


function compute(el,group){
	if (el.value>0){
		var value = values[group][el.options[el.selectedIndex].value];
	/*
		if(value.length<1){
			alert('Моля, изберете материал!');
			return false;
		}
	*/
		//deba(el.options[el.selectedIndex]);
		//deba(new Array(group,el.value));
		var totalMat = Math.round(area * value[5] * 100)/100;
		var totalUnits = Math.round( totalMat / value[3] );
		if(totalMat / value[3] - totalUnits > 0){
			totalUnits++;
		}
		var price = Math.round(totalUnits * value[4] * 100)/100;
		
		//deba(el.parentNode);
		
		el.parentNode.nextSibling.innerHTML = format(totalMat,2) + ' ' + value[2];
		el.parentNode.nextSibling.nextSibling.innerHTML = totalUnits + 'x' + value[3] + value[2];
		el.parentNode.nextSibling.nextSibling.nextSibling.innerHTML = format(price,2);
		
		prices[group-1] = price;
		
		var totalPrice = 0;
		for (i=0;i<prices.length;i++){
			totalPrice = totalPrice + prices[i];
		}
		
		document.getElementById('totalPrice').innerHTML = format(totalPrice,2);
		document.getElementById('pricePerMeter').innerHTML = format(totalPrice/area,2);
	}
	else{
		el.parentNode.nextSibling.innerHTML = format(0,2);
		el.parentNode.nextSibling.nextSibling.innerHTML = 0;
		el.parentNode.nextSibling.nextSibling.nextSibling.innerHTML = format(0,2);

		prices[group-1] = 0;
		
		var totalPrice = 0;
		for (i=0;i<prices.length;i++){
			totalPrice = totalPrice + prices[i];
		}
		
		document.getElementById('totalPrice').innerHTML = format(totalPrice,2);
		document.getElementById('pricePerMeter').innerHTML = format(totalPrice/area,2);
	}
}

function recalculate(){
	for (i in values){
		compute(document.getElementById('field' + i),i);
	}
}

function calculateFinal(){
	var maz = document.forms[0].maz.value;
	var type = document.forms[0].type.value;
	var color = document.forms[0].color.value;
	var area = document.getElementById('area').value;
	if(maz!='' && type!=0 && color!=0){
		var url='requests.php?do=calculator&maz=' + maz + '&type=' + type + '&color=' + color + '&area=' + area;
		ajax.getData(url,calculateFinalCallback);
	}
}

function calculateFinalCallback(xmlhttp){
	if(xmlhttp.status==200){
		//deba(xmlhttp.responseText);
		//deba(eval(xmlhttp.responseText));
		eval(xmlhttp.responseText);
		buildFinalInterface();
	}
	else{
		alert('ГРЕШКА:\n' + xmlhttp.responseText);
	}
}

function buildFinalInterface(){

//	deba(texts);
//	deba(options);

	document.getElementById('needed').innerHTML = format(values[0],2) + ' kg';
	document.getElementById('quantity').innerHTML = values[1] + 'x25kg';
	document.getElementById('price').innerHTML = format(values[2],0);
	
	var totalPrice = parseFloat(document.getElementById('subTotal').innerHTML) + values[2];
	var area = document.getElementById('area').value;
	document.getElementById('totalPrice').innerHTML = format(totalPrice,2);
	document.getElementById('pricePerMeter').innerHTML = format(totalPrice/area,2);
}



function format(number,decimals) {
  var i,d;

  // set default values
  if(number=="") number=parseInt("0");
  if(decimals=="") decimals=parseInt("2");

  // round number to specified number of decimals
  number=""+Math.round(number*Math.pow(10,decimals))*Math.pow(10,-decimals);

  // find index of decimal point
  d=number.indexOf(".");

  // if no decimal point, number is an integer
  // pad number with trailing zeros
  if(d==-1) {
    number=number+".";
    for(i=0;i<decimals;i++)
      number=number+"0";
    return number;
  }

  // if decimal point is first index
  // pad number with leading zero
  if(d==0) {
    number="0"+number;
    d++;
  }

  // if first index is negative sign
  // pad number with leading zero
  if(d==1 && number.substring(0,1)=="-") {
    number="-0" + number.substring(1,number.length);
    d++;
  }

  // truncate number to desired length
  number=number.substring(0,d+decimals+1);

  // if number is shorter than desired length
  // pad number with trailing zeros
  while(number.length<=d+decimals)
    number=number+"0";
  return number;
}
