function int(num){
	//parseFloat(num)
	return ( isNaN(parseFloat(num)) ? 0 : parseFloat(num) );
}
function var_dump(obj){
	calcQuantity();
	if ( !debug ) return;
	if (!d.getElementById('configurator')) return;
	var str = "";
	for ( var i in obj ){
		str += i+"="+obj[i]+"<br>";
		if ( typeof(obj[i]) == "object" ) {
			for ( var j in obj[i] ){
				str += "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"+j+"="+obj[i][j]+"<br>";
			}
		}
	}
	d.getElementById('configurator').style.display = 'block';
	d.getElementById('configurator').innerHTML = str;
}

function before_change_hardware(elem){
	server.tmp = int(elem.selectedIndex);
}
function after_change_hardware(elem){
	error = "";
	tmp = elem.name.split("_");
	hardware_type_id = int(tmp[2]);
	if ( elem.tagName == "INPUT" ){
		if ( elem.checked ){
			val = elem.value;
			tval = false;
		} else {
			val = false;
			tval = elem.value;
		}
		server.tmp = !elem.checked;
	} else {
		val = elem.value;
		tval = ( false !== server.tmp && elem[server.tmp] ? elem[server.tmp].value : false );
		//if (tval==52329) alert(server.tmp + "|" +elem[server.tmp].value)
	}

	// проверка на совместимость замены или добавления железа
	if ( hardware_type_id == 5 ){
	// платформа
		check_hardware( "korpus_size", hardware_type_id, tval, val );
		check_hardware( "hdd_size", hardware_type_id, tval, val );
		check_hardware( "cpu_size", hardware_type_id, tval, val );
		check_hardware( "memory_size", hardware_type_id, tval, val );
		check_hardware( "memory_limit", hardware_type_id, tval, val );
		check_hardware( "pci_size", hardware_type_id, tval, val );
		check_hardware( "pcie4_size", hardware_type_id, tval, val );
		check_hardware( "pcie8_size", hardware_type_id, tval, val );
		check_hardware( "pcie16_size", hardware_type_id, tval, val );
		check_hardware( "pcix_size", hardware_type_id, tval, val );
		check_hardware( "ide_size", hardware_type_id, tval, val );
		check_hardware( "sata_size", hardware_type_id, tval, val );
		check_hardware( "sas_size", hardware_type_id, tval, val );
		check_hardware( "scsi_size", hardware_type_id, tval, val );
	}else if ( hardware_type_id == 10 ){
	// корпус
		check_hardware( "korpus_size", hardware_type_id, tval, val );
		check_hardware( "hdd_size", hardware_type_id, tval, val );
	}else if ( hardware_type_id == 21 ){
	// акссессуары для корпуса
		check_hardware( "pci_size", hardware_type_id, tval, val );
		check_hardware( "pcie4_size", hardware_type_id , tval, val );
		check_hardware( "pcie8_size", hardware_type_id , tval, val );
		check_hardware( "pcie16_size", hardware_type_id , tval, val );
		check_hardware( "pcix_size", hardware_type_id , tval, val );
		check_hardware( "sas_size", hardware_type_id, tval, val );
		check_hardware( "hdd_size", hardware_type_id, tval, val );
	}else if ( hardware_type_id == 30 ){
		// мамка
		check_hardware( "cpu_size", hardware_type_id, tval, val );
		check_hardware( "memory_size", hardware_type_id, tval, val );
		check_hardware( "memory_limit", hardware_type_id, tval, val );
		check_hardware( "pci_size", hardware_type_id, tval, val );
		check_hardware( "pcie4_size", hardware_type_id, tval, val );
		check_hardware( "pcie8_size", hardware_type_id, tval, val );
		check_hardware( "pcie16_size", hardware_type_id, tval, val );
		check_hardware( "pcix_size", hardware_type_id, tval, val );
		check_hardware( "ide_size", hardware_type_id, tval, val );
		check_hardware( "sata_size", hardware_type_id, tval, val );
		check_hardware( "sas_size", hardware_type_id, tval, val );
		check_hardware( "scsi_size", hardware_type_id, tval, val );
	}else if ( hardware_type_id == 40 ){
		// опции для мамки
		check_hardware( "pci_size", hardware_type_id, tval, val );
		check_hardware( "pcie4_size", hardware_type_id, tval, val );
		check_hardware( "pcie8_size", hardware_type_id, tval, val );
		check_hardware( "pcie16_size", hardware_type_id, tval, val );
		check_hardware( "pcix_size", hardware_type_id, tval, val );
		check_hardware( "ide_size", hardware_type_id, tval, val );
		check_hardware( "sata_size", hardware_type_id, tval, val );
		check_hardware( "sas_size", hardware_type_id, tval, val );
		check_hardware( "scsi_size", hardware_type_id, tval, val );
	}else if ( hardware_type_id == 45 ){
		// процессоры
		check_hardware( "cpu_size", hardware_type_id, tval, val );
	}else if ( hardware_type_id == 46 ){
		// память
		check_hardware( "memory_size", hardware_type_id, tval, val );
		check_hardware( "memory_limit", hardware_type_id, tval, val );
		if ( !error && server.memory_size > 0 && server.memory_limit > 0 ){
			// если нет ошибки то вывести еще поле для добавления памяти
			select_div = elem.innerHTML;
			select_div = select_div.replace(" selected=\"selected\"", "").replace(" selected", "");
			if ( -1 == select_div.indexOf("Вы можете добавить еще памяти") ){
				select_div = " <option value='' selected>Вы можете добавить еще памяти</option>"+select_div;
			}
			/*
				copy/past для подключения дополнительных планок памяти
			*/
			var h = false;
			if ( elem.name == "hardware_type_46" )		h = d.getElementById("hardware_type_46_2");
			if ( elem.name == "hardware_type_46_2" ) 	h = d.getElementById("hardware_type_46_3");
			if ( elem.name == "hardware_type_46_3" ) 	h = d.getElementById("hardware_type_46_4");
			if ( elem.name == "hardware_type_46_4" ) 	h = d.getElementById("hardware_type_46_5");
			if ( elem.name == "hardware_type_46_5" ) 	h = d.getElementById("hardware_type_46_6");
			if ( elem.name == "hardware_type_46_6" ) 	h = d.getElementById("hardware_type_46_7");
			if ( elem.name == "hardware_type_46_7" ) 	h = d.getElementById("hardware_type_46_8");
			if ( h && h.style.display != "block" ){
				//h.innerHTML = select_div;
				h.style.display = "block";
			}
		}
	}else if ( hardware_type_id == 50 ){
		// RAID котроллеры
		check_hardware( "pci_size", hardware_type_id, tval, val );
		check_hardware( "pcie4_size", hardware_type_id, tval, val );
		check_hardware( "pcie8_size", hardware_type_id, tval, val );
		check_hardware( "pcie16_size", hardware_type_id, tval, val );
		check_hardware( "pcix_size", hardware_type_id, tval, val );
		check_hardware( "ide_size", hardware_type_id, tval, val );
		check_hardware( "sata_size", hardware_type_id, tval, val );
		check_hardware( "sas_size", hardware_type_id, tval, val );
		check_hardware( "scsi_size", hardware_type_id, tval, val );
	}else if ( hardware_type_id == 95 ){
		// HDD
		check_hardware( "ide_size", hardware_type_id, tval, val );
		check_hardware( "scsi_size", hardware_type_id, tval, val );
		check_hardware( "sata_size", hardware_type_id, tval, val );
		check_hardware( "sas_size", hardware_type_id, tval, val );
		check_hardware( "hdd_size", hardware_type_id, tval, val );
		if ( !error && server.hdd_size > 0 ){
			// если нет ошибки то вывести еще полея для добавления харда
			select_div = elem.innerHTML;
			select_div = select_div.replace(" selected=\"selected\"", "");
			select_div = select_div.replace("<option value=\"\">Выберите комплектующие</option>", "");
			if ( -1 == select_div.indexOf("Вы можете добавить еще hdd") ){
				select_div = "<option value='' selected>Вы можете добавить еще hdd</option>"+select_div;
			}
			/*
				copy/past для подключения дополнительных hdd
			*/
			var h = false;
			if ( elem.name == "hardware_type_95" )		h = d.getElementById("hardware_type_95_2");
			if ( elem.name == "hardware_type_95_2" ) 	h = d.getElementById("hardware_type_95_3");
			if ( elem.name == "hardware_type_95_3" ) 	h = d.getElementById("hardware_type_95_4");
			if ( elem.name == "hardware_type_95_4" ) 	h = d.getElementById("hardware_type_95_5");
			if ( elem.name == "hardware_type_95_5" ) 	h = d.getElementById("hardware_type_95_6");
			if ( elem.name == "hardware_type_95_6" ) 	h = d.getElementById("hardware_type_95_7");
			if ( elem.name == "hardware_type_95_7" ) 	h = d.getElementById("hardware_type_95_8");
			if ( elem.name == "hardware_type_95_8" ) 	h = d.getElementById("hardware_type_95_9");
			if ( elem.name == "hardware_type_95_9" ) 	h = d.getElementById("hardware_type_95_10");
			if ( h && h.style.display != "block" ){
				//h.innerHTML = select_div;
				h.style.display = "block";
			}
		}
	}else if ( hardware_type_id == 100 ){
		// сетевые карты
		check_hardware( "pci_size", hardware_type_id, tval, val );
		check_hardware( "pcie4_size", hardware_type_id, tval, val );
		check_hardware( "pcie8_size", hardware_type_id, tval, val );
		check_hardware( "pcie16_size", hardware_type_id, tval, val );
		check_hardware( "pcix_size", hardware_type_id, tval, val );
	}else if ( hardware_type_id == 80 ){
		// основная HDD корзина
		check_hardware( "ide_size", hardware_type_id, tval, val );
		check_hardware( "scsi_size", hardware_type_id, tval, val );
		check_hardware( "sata_size", hardware_type_id, tval, val );
		check_hardware( "sas_size", hardware_type_id, tval, val );
		check_hardware( "hdd_size", hardware_type_id, tval, val );
		check_hardware( "sassata_size", hardware_type_id, tval, val );
	}else if ( hardware_type_id == 90 ){
		// дополнительная HDD корзина
		check_hardware( "ide_size", hardware_type_id, tval, val );
		check_hardware( "scsi_size", hardware_type_id, tval, val );
		check_hardware( "sata_size", hardware_type_id, tval, val );
		check_hardware( "sas_size", hardware_type_id, tval, val );
		check_hardware( "hdd_size", hardware_type_id, tval, val );
		check_hardware( "sassata_size", hardware_type_id, tval, val );
	}else if ( hardware_type_id == 110 ){
		// CD  / Floppy
		check_hardware( "ide_size", hardware_type_id, tval, val );
		check_hardware( "scsi_size", hardware_type_id, tval, val );
		check_hardware( "sata_size", hardware_type_id, tval, val );
		check_hardware( "sas_size", hardware_type_id, tval, val );
	}

	// если после замены возник конфликт, то необходимо вернуть старое железо на место
	if ( error ) {
		if ( elem.tagName == "INPUT" ){
			elem.checked = server.tmp;
		} else {
			elem.selectedIndex = server.tmp;
		}
		alert(error);
		var_dump(server);
		return;
	}
	server.price -= int( ( data[tval] ? data[tval].price : 0 ) )*1.15;
	server.price += int( ( data[val] ? data[val].price : 0 ) )*1.15;

	// если после всех проверок, все ок - то фиксируем изменения
	if ( elem.tagName == "INPUT" ){
		server.tmp = !elem.checked;
	} else {
		server.tmp = elem.selectedIndex;
	}
	var_dump(server);
}
function check_hardware( server_val, hardware_type_id, tval, val ){
	if ( error ) return;
//if ( server_val == 'sas_size') alert(tval+"|"+val)

	if ( (hardware_type_id == 80 || hardware_type_id == 90) ) {
	// корзины для hdd, необходимы дополнительные проверки
		if ( ( sval = check_value2( server_val, tval, val ) ) >= 0 ) {
			//if ( hardware_type_id==80 && server.cart_type == "SAS" ){
				//eval("server.sas_size="+sval+";");
				//eval("server.sassata_size=" + " - " + ( data[tval] ? int(data[tval].sassata_size) : " 0 " ) + " + " + ( data[val] ? int(data[val].sassata_size) : " 0 " ) + ";");
			//}
			if ( hardware_type_id == 80 && server_val == "sassata_size" ){
				eval("server.sassata_size = server.sassata_size " + " + " + ( data[tval] ? int(data[tval].sassata_size) : " 0 " ) + " - " + ( data[val] ? int(data[val].sassata_size) : " 0 " ) + ";");
			} else if ( hardware_type_id == 90 && server_val == "sassata_size" ){
				eval("server.sassata_size2 = server.sassata_size2 " + " + " + ( data[tval] ? int(data[tval].sassata_size) : " 0 " ) + " - " + ( data[val] ? int(data[val].sassata_size) : " 0 " ) + ";");
			} else {
				eval("server."+server_val+"="+sval+";");
			}

		} else {
			error = set_error(server_val);
		}
	} else if ( (hardware_type_id==95 || hardware_type_id==110) && server_val == "sata_size" ) {
	// hdd & CD, SATA можно подключить к SAS (в этом случае SAS кредитуется и должен быть возвращен после отключения SATA диска)
		if ( ( sval = check_value4( server_val, tval, val ) ) >= 0 ){
			if (server.sas_credit){
				eval("server.sas_size="+sval+";");
				server.sas_credit--;
			}else{
				eval("server."+server_val+"="+sval+";");
			}
		} else{
			error = set_error(server_val);
		}
		if (error) {
			var error_tmp = error;
			error = "";
			if ( ( sval = check_value3( server_val, tval, val ) ) >= 0 ){
				eval("server.sas_size="+sval+";");
				server.sas_credit++;
			} else {
				error = set_error(server_val);
			}
			if ( error ) error = error_tmp;
		}
	} else {
		// стандартная проверка на ресурсы железа
		( ( sval = check_value( server_val, tval, val ) ) >= 0 ? eval("server."+server_val+"="+sval+";") : error = set_error(server_val) );
	}
}
function check_value( server_val, tval, val ){
	var sum = 0;
	eval( "sum = int( server." + server_val + " - int(" + ( data[tval] ? "data['" + tval + "']." + server_val : " 0 " ) + ") + int(" + ( data[val] ? "data['" + val + "']." + server_val : " 0 " )  + ") )" );
	return int(sum);
}
function check_value2( server_val, tval, val ){
	var sum = 0;
	var cart_size_sas = 0;
	var cart_size_sata = 0;
	if ( server_val == "sassata_size" ){
		// проверка на потребление каналов другой корзиной
		if ( hardware_type_id == 80 && server.cart2_type == "SAS" && server.sassata_size2 ){
			cart_size_sas = server.sassata_size2;
		} else if ( hardware_type_id == 80 && server.cart2_type == "SATA" && server.sassata_size2 ){
			cart_size_sata = server.sassata_size2;
		} else if ( hardware_type_id == 90 && server.cart_type == "SAS" && server.sassata_size ){
			cart_size_sas = server.sassata_size;
		} else if ( hardware_type_id == 90 && server.cart_type == "SATA" && server.sassata_size ){
			cart_size_sata = server.sassata_size;
		}
		
		// вернуть потребление, потом вычесть плюс и вычесть новое потребление
		eval( "sum = int( server.sas_size - " + cart_size_sas + " - int(" + ( data[tval] ? "data['" + tval + "']." + server_val : " 0 " ) + ") -  int(" + ( data[tval] ? "data['" + tval + "']." + server_val + "2" : " 0 " ) + ") + int(" + ( data[val] ? "data['" + val + "']." + server_val : " 0 " )  + ") )" );
		if ( sum >= 0 ) {
			// если смена железа возможна, то добавляем еще и новый плюс
			eval( "sum = int( server.sas_size - " + cart_size_sas + " - int(" + ( data[tval] ? "data['" + tval + "']." + server_val : " 0 " ) + ") -  int(" + ( data[tval] ? "data['" + tval + "']." + server_val + "2" : " 0 " ) + ") + int(" + ( data[val] ? "data['" + val + "']." + server_val : " 0 " )  + ") + int(" + ( data[val] ? "data['" + val + "']." + server_val + "2": " 0 " )  + ") )" );
			if ( hardware_type_id == 80 ) server.cart_type = "SAS";
			if ( hardware_type_id == 90 ) server.cart2_type = "SAS";
		} else {
			eval( "sum = int( server.sata_size - " + cart_size_sata + " - int(" + ( data[tval] ? "data['" + tval + "']." + server_val : " 0 " ) + ") -  int(" + ( data[tval] ? "data['" + tval + "']." + server_val + "2" : " 0 " ) + ") + int(" + ( data[val] ? "data['" + val + "']." + server_val : " 0 " )  + ") )" );
			if ( sum >= 0 ) {
				// если смена железа возможна, то добавляем еще и новый плюс
				eval( "sum = int( server.sata_size - " + cart_size_sata + " - int(" + ( data[tval] ? "data['" + tval + "']." + server_val : " 0 " ) + ") -  int(" + ( data[tval] ? "data['" + tval + "']." + server_val + "2" : " 0 " ) + ") + int(" + ( data[val] ? "data['" + val + "']." + server_val : " 0 " )  + ") + int(" + ( data[val] ? "data['" + val + "']." + server_val + "2": " 0 " )  + ") )" );
				if ( hardware_type_id == 80 ) server.cart_type = "SATA";
				if ( hardware_type_id == 90 ) server.cart2_type = "SATA";
			} else {
				//alert(sum);
			}
		}
	} else {
		// вернуть потребление, потом вычесть плюс и вычесть новое потребление
		eval( "sum = int( server." + server_val + " - int(" + ( data[tval] ? "data['" + tval + "']." + server_val : " 0 " ) + ") -  int(" + ( data[tval] ? "data['" + tval + "']." + server_val + "2" : " 0 " ) + ") + int(" + ( data[val] ? "data['" + val + "']." + server_val : " 0 " )  + ") )" );
		if ( sum < 0 ) return sum;
		// если смена железа возможна, то добавляем еще и новый плюс
		eval( "sum = int( server." + server_val + " - int(" + ( data[tval] ? "data['" + tval + "']." + server_val : " 0 " ) + ") -  int(" + ( data[tval] ? "data['" + tval + "']." + server_val + "2" : " 0 " ) + ") + int(" + ( data[val] ? "data['" + val + "']." + server_val : " 0 " )  + ") + int(" + ( data[val] ? "data['" + val + "']." + server_val + "2": " 0 " )  + ") )" );
	}
	return sum;
}
function check_value3( server_val, tval, val ){
	var sum = 0;
	// кредитование SAS канала для SATA диска
	eval( "sum = int( server.sas_size - int(" + ( data[tval] ? "data['" + tval + "'].sas_size" : " 0 " ) + ")  - int(" + ( data[tval] ? "data['" + tval + "']." + server_val : " 0 " ) + ") + int(" + ( data[val] ? "data['" + val + "']." + server_val : " 0 " )  + ") )" );
	return int(sum);
}
function check_value4( server_val, tval, val ){
	var sum = 0;
	// возвращение кредита SAS канала для SATA диска
	if (server.sas_credit){
		eval( "sum = int( server.sas_size - int(" + ( data[tval] ? "data['" + tval + "']." + server_val : " 0 " ) + ") + int(" + ( data[val] ? "data['" + val + "']." + server_val : " 0 " )  + ") )" );
	} else {
		eval( "sum = int( server." + server_val + " - int(" + ( data[tval] ? "data['" + tval + "']." + server_val : " 0 " ) + ") + int(" + ( data[val] ? "data['" + val + "']." + server_val : " 0 " )  + ") )" );
	}
	return int(sum);
}
function set_error(error_num){
	return "Невозможно использовать выбранное комплектующее, из-за нехватки параметра '" + error_array[error_num] + "'. \n\nОставлен предыдущий вариант.";
}

var server = new Object();
server.tmp = false;
server.sas_credit = 0;
server.price = 0;
server.total_price = 0;

var data = new Array();
var d = document;
var error = "";

	
// массив описания ошибок при нехватке ресурса
var error_array = new Array();
	error_array["korpus_size"] 	= "размер корпуса";
	error_array["cpu_size"] 		= "количество процессоров";
	error_array["memory_size"] 	= "количество свободных слотов для памяти";
	error_array["memory_limit"] = "максимальный размер памяти";
	error_array["pci_size"] 		= "количество свободных слотов PCI";
	error_array["pcie4_size"] 	= "количество свободных слотов PCI-Ex4";
	error_array["pcie8_size"] 	= "количество свободных слотов PCI-Ex8";
	error_array["pcie16_size"] 	= "количество свободных слотов PCI-Ex16";
	error_array["pcix_size"] 		= "количество свободных слотов PCI-X";
	error_array["ide_size"] 		= "количество свободных каналов IDE";
	error_array["sas_size"] 		= "количество свободных каналов SAS";
	error_array["sata_size"] 		= "количество свободных каналов SATA";
	error_array["scsi_size"] 		= "количество свободных каналов SCSI";
	error_array["hdd_size"] 		= "количество свободных мест для HDD";
	error_array["sassata_size"] = "количество свободных каналов SAS/SATA";


var iID=0,load;
function qty_change(delta) {
	var qty = document.calculator.quantity;
	if (
		qty.value > 1 && qty.value < 9999 ||
		delta == 1 && qty.value == 1 ||
		delta == -1 && qty.value == 9999
	)
	{
		qty.value = int(qty.value) + delta;
   //document.calculator.total.value = calc_total();
		calcQuantity();
		iID = window.setTimeout("qty_change(" + String(delta) + ")", 200);
	}
}

function change_on(delta){
	if(iID == 0)
		qty_change(delta);
}
function change_off(){
	if(iID != 0)	{
		window.clearTimeout(iID);
		iID = 0;
	}
}
function calcQuantity(){
//alert('calc');
		if (!load) return;
    var element = document.calculator["quantity"];
    var qty = int(element.value);
    if (isNaN(qty)) {
        if (element.value != "")
            element.value = 1;
    } else {
		if(qty > 9999)
			qty = 9999;
		else if(qty < 1)
			qty = 1;
        element.value = qty;
    }
    var sum1, sum2;
    sum1 = server.price;
    sum2 = Math.floor(server.price/100)*100;
    server.total_price = ( sum1 - sum2 < 49 ? sum2 + 49 : sum2 + 99 );
    element.form.total.value = server.total_price*qty;
    element.form.cost.value = server.total_price;
}

function _addItem2Cart(id, price){
//	alert('name: '+name+'  id: '+id+'  price: '+price);
    var element = document.calculator["quantity"];
    var qty = int(element.value);
    if (isNaN(qty)) {
        if (element.value != "")
            element.value = 1;
    } else {
		if(qty > 9999)
			qty = 9999;
		else if(qty < 1)
			qty = 1;
    }
    
  var quantity = qty;
	var it_cart = GetCookieValueByName('it_cart');
	
	if(it_cart.search(new RegExp('(?:^|;)'+id+',\\d+,\\d+(?:\\.\\d+)?;'))!=-1){
 		//updateItemQuantity(id, quantity, price);
 		it_cart = it_cart.replace(new RegExp('(^|;)'+id+',\\d+,\\d+(?:\\.\\d+)?;'), '$1' + id + ',' + quantity + ',' + price + ';');

	} 
 
	SetCookieForNDays('it_cart',it_cart + id + ',' + quantity + ',' + price + ';',1, '/');
}