function Calculator()
{
	//массив где ключем являеться имя элемента, а значением - значение элемента
	this.elements_values = new Array();
	this.elements_price	 = new Array();
	
	//массив содержащий ссылки на картинки с домом
	this.home_pictures = new Array();
	
	//Признак корректности введенных данных
	this.isCorrect = true;
	
	//Массив содержит признаки включен/выключен для каждого блока
	this.divOn = new Array();
	this.divOn['main']			= true;
	this.divOn['winelements']	= false;
	this.divOn['uglelements']	= false;
	this.divOn['montaj']		= false;
	
	//Метод выбирает форму и вешает события на элементы формы
	this.init = function(formname)
	{
		//ссылка на объект Calculator()
		var self = this;
		
		//ссылка на текущую форму
		this.form = document.forms[formname];
		
		//Вешаем событие на кнопку "Посчитать"
		this.form.elements["calculate"].onclick = function()
		{
			self.isCorrect=true; 
			self.parseForm(); 
			self.calculate();
		}
		
		//Вешаем событие на флажок включения выбора монтажа
		this.form.elements["chk_montaj"].onclick=function()
		{
			self.divSwitch('montaj');
		}
		//Вешаем событие на флажок оконных элементов
		this.form.elements["chk_winelements"].onclick=function()
		{
			self.divSwitch('winelements');
		}
		//Вешаем событие на флажок угловых элементов
		this.form.elements["chk_uglelements"].onclick=function()
		{
			self.divSwitch('uglelements');
		}	
		//Получаем из html картинки
		this.getHomePictures();
		//Вешаем события на поля ввода
		this.addEventsToInput();
		
	}
	//Метод разбирает форму на пары имя+значение и заносит их в массив elements_values
	this.parseForm = function()
	{	
		try
		{
			//Перебираем элементы формы
			for(i=0; i<this.form.elements.length; i++)
			{
				//Определяем тип елемента
				//Если это выбранный элемент radio либо поле ввода заносим его имя и значение в массив
				if(this.form.elements[i].type=="radio" && this.form.elements[i].checked)
				{
					this.elements_values[this.form.elements[i].name] = this.form.elements[i].value;
					
					if(this.form.elements[i].getAttribute('price'))
						this.elements_price[this.form.elements[i].name] = this.form.elements[i].getAttribute('price');
				}
				//Если это checkbox
				else if(this.form.elements[i].type=="checkbox")
				{
					if(this.form.elements[i].checked)
					{ 
						this.elements_values[this.form.elements[i].name] = true;			
					}	
					else
						this.elements_values[this.form.elements[i].name] = false;
				}					
				//Если это поле ввода сначала проверяем value  потом заносим в массив
				else if(this.form.elements[i].type=="text")
				{
					//если блок включен и поле не заполнено
					if(this.divOn[this.form.elements[i].getAttribute('divname')] && !this.form.elements[i].value)
					{
						this.form.elements[i].className="form_invalid";
						this.isCorrect=false;
						//alert("Поле " + this.form.elements[i].name + " не заполнено!");
					}
					//если заполнено
					else
					{
						this.form.elements[i].className="form_valid";
						this.elements_values[this.form.elements[i].name]=this.form.elements[i].value;
					}
				} 
			}
		}
		catch(e)
		{
			alert(e);
		}
	}
	//Метод выполняет калькуляцию формы	
	this.calculate = function()
	{
		if(this.isCorrect)
		{
			var panel = this.elements_values["panel"];
			var panelPrice = this.elements_price["panel"];
			var Sc = this.elements_values["Sc"];
			var So = this.elements_values["So"];	
			var materialCost = 0;
			var totalCost = 0;	
			var montPrice = 0;		
			
			//Назначаем цены и коэффициенты для видов плитки
			if(panel == "metlach")
			{
				var k1=1.2;
				var k2=0.6;
				var k3=1.04;
				var k4=1.06;
				var k5=1;
			}
			else if(panel == "glazker")
			{
				var k1=1.2;
				var k2=0.6;
				var k3=1.04;
				var k4=1.06;
				var k5=0.8;
			}
			else if(panel == "ceramogranit")
			{
				var k1=1.2;
				var k2=0.6;
				var k3=1.04;
				var k4=1.06;
				var k5=1;
			}
			else if(panel == "clinker")
			{
				var k1=1.2;
				var k2=0.6;
				var k3=1.04;
				var k4=1.07;
				var k5=0.96;
			}
			
			//Расчет потребности в оконных элементах
			if(this.divOn['winelements'])
			{
				alert();
				var No = parseInt(this.elements_values["No"]);
				var Po = parseInt(this.elements_values["Po"]);
				var Ld = parseInt(this.elements_values["Ld"]);
				var Nd = parseInt(this.elements_values["Nd"]);
				
				//(((No * k1 + Po) + (Nd * k2 + Ld)) * 1.1 ) / (k3 + 0.4);
				winElementsCount = (((No * k1 + Po) + (Nd * k2 + Ld)) * 1.1 ) / k3 + 0.4;
				winElementsM2 = winElementsCount * k3;
				winElementsCost = winElementsM2 * panelPrice;
				
				materialCost = materialCost + winElementsCost;
				
				document.getElementById('winElementsCount').value = Math.ceil(winElementsCount);
				document.getElementById('winElementsM2').value = Math.ceil(winElementsM2);
				document.getElementById('winElementsCost').value = Math.ceil(winElementsCost);			
			} 
			
			//Расчет потребности в угловых элементах
			if(this.divOn['uglelements'])
			{				
				var Ly=parseInt(this.elements_values["Ly"]);
			
				uglElementsCount = (Ly * 1.1 ) / k3;	
				uglElementsM2 = uglElementsCount * k3;
				uglElementsCost = uglElementsM2 * panelPrice;	
				
				materialCost = materialCost + uglElementsCost;
				
				document.getElementById('uglElementsCount').value = Math.ceil(uglElementsCount);
				document.getElementById('uglElementsM2').value = Math.ceil(uglElementsM2);
				document.getElementById('uglElementsCost').value = Math.ceil(uglElementsCost);	
			}
			
			//Расчет стоимости монтажа
			if(this.divOn['montaj'])
			{
				var montaj_price = (this.elements_values["montaj_price"]);
				var Pc = (this.elements_values["Pc"]);
				var Wo = (this.elements_values["W"]);
				
				montPrice = (Sc * montaj_price) + Pc * 500 + Wo * 350;
				
				totalCost = totalCost + montPrice;
				
				document.getElementById('montPrice').value = Math.ceil(montPrice);
			}
			
			//Расчет термопанелей
			var thermopanelCount = (Sc - So) * k4 / k5;
			var thermopanelM2 	 = thermopanelCount * k5;
			var thermopanelCost  = thermopanelM2 * panelPrice;	
			 
			var materialCost = materialCost + thermopanelCost;
			 
			document.getElementById('thermopanelCount').value = Math.ceil(thermopanelCount);
			document.getElementById('thermopanelM2').value = Math.ceil(thermopanelM2);
			document.getElementById('thermopanelCost').value = Math.ceil(thermopanelCost);
			 
			document.getElementById('materialCost').value = Math.ceil(materialCost);
			document.getElementById('totalCost').value = Math.ceil(materialCost+montPrice);		
			
		}
		else
		{
			//document.getElementById('result').value=' ';
			alert("Одно или несколько полей не заполнены !!!");
		}
	}
	//Метод выврдит/скрывает блок <div> по имени (название флажка и блока должны совпадать)
	this.divSwitch = function(divName)
	{
		var div = document.getElementById(divName);
		var chk = (this.form.elements['chk_' + divName].checked) ? true : false;
		
		//меняем класс
		div.className = (chk) ? 'show' : 'hidden';
		
		//меняем признак
		this.divOn[divName] = chk;
	} 
	
	//Метод заполняет массив home_pictures
	this.getHomePictures = function()
	{
		try
		{
			//Массив картинок
			this.house_img = new Array();
			this.house_img = document.getElementById('home').getElementsByTagName('img');
			
			for(var i=0; i<this.house_img.length; i++)
			{
				//заполняем ассоциативный массив
				this.home_pictures[this.house_img[i].getAttribute('name')]=this.house_img[i];									
			}
		}
		catch(e)
		{
			alert(e);
		}
	}
	
	//Метод добавляет события к полям ввода (переключение картинок)
	this.addEventsToInput = function()
	{
		var self = this;
		try
		{
			//Перебираем элементы формы
			for(i=0; i<this.form.elements.length; i++)
			{
				//Если это поле ввода и существует картинка с таким же именем
				if(this.form.elements[i].type=="text" && typeof(this.home_pictures[this.form.elements[i].name]) != "undefined")
				{
					//Добавляем событие для получения фокуса элементом
					this.form.elements[i].onfocus = function()
					{
						self.switchPicture(this.name);
					}
					//Добавляем событие для потери фокуса элементом
					this.form.elements[i].onblur = function()
					{
						//self.hiddenAll();
						self.switchPicture('blank');
					}
				}
			}
		}
		catch(e)
		{
			alert(e);
		}
	}
	//Метод делает видимой выбранную картинку а остальные скрывает
	this.switchPicture = function(pictureName)
	{
		//сначала скрываем все
		this.hiddenAll();
		//потом показываем нужную
		try
		{
			this.home_pictures[pictureName].className = 'show';		
		}
		catch (e)
		{
			this.home_pictures['blank'].className = 'show';
		}
	}
	//Метод скрывает все картинки
	this.hiddenAll=function()
	{
		for(var i=0; i<this.house_img.length; i++)
		{
			this.house_img[i].className = 'hidden';
		}	
	}
}

function CalculatorQuick()
{
	//массив где ключем являеться имя элемента, а значением - значение элемента
	this.elements_values=new Array();
	
	//Признак корректности введенных данных
	this.isCorrect=true;
	
	//Метод выбирает форму и вешает события на элементы формы
	this.init=function(formname)
	{
		//ссылка на объект Calculator()
		var self = this;
		
		//ссылка на текущую форму
		this.form = document.forms[formname];
		
		//Вешаем событие на кнопку "Посчитать"
		this.form.elements["calculate"].onclick = function()
		{
			self.isCorrect=true; 
			self.parseForm(); 
			self.calculate();
		}
		
		//Вешаем событие на флажок включения выбора монтажа
		this.form.elements["montaj"].onclick=function()
		{
			self.switch_montaj();
		}
		
	}
	//Метод разбирает форму на пары имя+значение и заносит их в массив elements_values
	this.parseForm = function()
	{	
		try
		{
			//Перебираем элементы формы
			for(i=0; i<this.form.elements.length; i++)
			{
				//Определяем тип елемента
				//Если это выбранный элемент radio либо поле ввода заносим его имя и значение в массив
				if(this.form.elements[i].type == "radio" && this.form.elements[i].checked)
				{
					this.elements_values[this.form.elements[i].name] = this.form.elements[i].value;
				}
				//Если это checkbox
				else if(this.form.elements[i].type == "checkbox")
				{
					if(this.form.elements[i].checked)
					{ 
						this.elements_values[this.form.elements[i].name] = true;			
					}	
					else 
					{
						this.elements_values[this.form.elements[i].name] = false;
					}
				}					
				//Если это поле ввода сначала проверяем value  потом заносим в массив
				else if(this.form.elements[i].type=="text")
				{
					//если поле не заполнено
					if(!this.form.elements[i].value)
					{
						this.form.elements[i].className="form_invalid";
						this.isCorrect=false;
						//alert("Поле " + this.form.elements[i].name + " не заполнено!");
					}
					//если заполнено
					else
					{
						this.form.elements[i].className="form_valid";
						this.elements_values[this.form.elements[i].name]=this.form.elements[i].value;
					}
				} 
			}
		}
		catch(e)
		{
			alert(e);
		}
	}
	
	//Метод выполняет калькуляцию формы	
	this.calculate=function()
	{
		if(this.isCorrect)
		{
			var koefficient = (this.elements_values["C1"]) ? '1.55' : '1.1';
			var panelPrice = this.elements_values["price"] * this.elements_values["m2"] * koefficient;
			var m2montPrice = (this.elements_values["montaj"]) ? this.elements_values["montaj_price"] : '0';
			var montPrice = m2montPrice*this.elements_values["m2"];
			var fullPrice = parseInt(panelPrice+montPrice);
			
			document.getElementById('result').value = fullPrice;
		}
		else
		{
			document.getElementById('result').value=' ';
			alert("Одно или несколько полей не заполнены !!!");
		}
	}
	
	//Метод выводит/скрывает выбор вида монтажа
	this.switch_montaj = function()
	{
		document.getElementById('montaj_div').className = (this.form.elements['montaj'].checked) ? 'show' : 'hidden';
	}
}

function Start()
{
	var calc = new Calculator();
		calc.init("calculator");
	
	var self;
		
	$('#ScTrackbar').trackbar({	
		onMove : function()
		{
			self = this;
			document.getElementById('I1').value = this.leftValue;
		},
		dual : false, // two intervals
		width : 200, // px
		leftLimit : 20, // unit of value
		leftValue : 20, // unit of value
		rightLimit : 700, // unit of value
		rightValue : 20, // unit of value
		roundUp : 1,	
		showBigTicksText: false,
		showSmallTicks: false,
		showBigTicks: false,
		tickRoundUp: 5,	
		createHiddenInputs: false,
		id : "ScTrackbar"
	});
		
	//Связываем поле с бегунком
	document.getElementById('I1').onkeyup = function()
	{	
		self.updateLeftValue(this.value);
	}
	
	document.getElementById('I1').onblur = function()
	{
		var v = parseInt(this.value);
		
		if(isNaN(v))
			v = 20;
		
		if(v > 700)
			v = 700;
		else if(v < 20)
			v=20;
		
		this.value = v;				
		self.updateLeftValue(v);
	}
	
	document.getElementById('ScTrackbar').onmouseover = function()
	{
		calc.switchPicture('Sc');
	}
	document.getElementById('ScTrackbar').onmouseout = function()
	{
		calc.switchPicture('blank');
	}
}

function StartQuick()
{
	var calc = new CalculatorQuick();
		calc.init("calculator_quick");
	
	var self;
		
	$('#ScTrackbar').trackbar({	
		onMove : function()
		{
			self = this;
			document.getElementById('I1').value = this.leftValue;
		},
		dual : false, // two intervals
		width : 200, // px
		leftLimit : 20, // unit of value
		leftValue : 20, // unit of value
		rightLimit : 700, // unit of value
		rightValue : 20, // unit of value
		roundUp : 1,	
		showBigTicksText: false,
		showSmallTicks: false,
		showBigTicks: false,
		tickRoundUp: 5,	
		createHiddenInputs: false,
		id : "ScTrackbar"
	});
	
	//Связываем поле с бегунком
	document.getElementById('I1').onkeyup = function()
	{	
		self.updateLeftValue(this.value);
	}
	
	document.getElementById('I1').onblur = function()
	{
		var v = parseInt(this.value);
		
		if(isNaN(v))
			v = 20;
		
		if(v > 700)
			v = 700;
		else if(v < 20)
			v=20;
		
		this.value = v;				
		self.updateLeftValue(v);
	}
}