jQuery.fn.changeVal = function(val, callback) {
	return this.each(function() {
	
		var self = this;
		var changeValInterval = setInterval(function() {
			if (self["changeVal_" + val] == undefined) {
				callback.call(self, self[val]);
				self["changeVal_" + val] = self[val];
			}
			
			if (self["changeVal_" + val] != self[val]) {
				callback.call(self, self[val]);
				self["changeVal_" + val] = self[val];
			}
		}, 10);
	});
};

function get2object () {
	var object = new Object();
	
	
	var get = document.location.href.split("?");
	if ( get[1] ) {
		get = get[1].split("&");
			if ( get ) {
				var getLength = get.length;
				for ( var i=0; i<getLength; i++ ) {
					var getVal = get[i].split("=");
					
					object[ getVal[0] ] = getVal[1] || "";
					
				}
			}	
	}
	return object;
}

$(function() {
	var selectTarif = $("select[name=tarif]").val() == "Выберите тариф";
	
	var tarifsPositions = new Array(0, 75, 300, 510);
	$("#tarifs li").each(function(i) {
		this.tarifsPos = i;
	}).mouseover(function() {
		$(this).siblings().removeClass("active");
		$(this).addClass("active");
		
		var self = this;
		
		if (this.tarifsPos > 0) {
			$("#arrow-bar").stop(true, true).fadeIn("fast");
			$("#tarifs .info").stop(true).animate({
				height: "160px"
			}, 300);
			$("#arrow").stop(true).animate({
				left: tarifsPositions[(this.tarifsPos)]
			}, 500, function() {
				$(this).css("opacity", "1");
			});
			
			$("#tarifs .info .mbit:visible").fadeOut("fast");
			$("#tarifs .info .mbit").eq(self.tarifsPos - 1).stop(true, true).fadeIn("fast");
		}
		else {
			$("#tarifs .info").stop(true).animate({
				height: "42px"
			}, 300);
			$("#arrow-bar").stop(true, true).fadeOut("fast");
			$("#tarifs .info .mbit").stop(true, true).fadeOut("fast");
			
		}
		if (!selectTarif) { // если уже что-то выбирали из списка — блокируем выбор сверху
			$("select[name=tarif] option").get(this.tarifsPos+1).selected = true;
		}
	});
	
	// при выборе пункта из select'а меняется выбор тарифа сверху
		$("select[name=tarif] option").each(function(i){
			this.posNum = i;
		});
		$("select[name=tarif]").change(function(){
			var self = this;
			$(this).find("option").each(function(){
				if ( self.value == this.value ) {
					$("#tarifs li").eq(this.posNum-1).mouseover();
					selectTarif = true;
					return false;
				}
			});
		});
	
	
	// Кнопка «Изменить»
	$("#reduced .ajax").click (function(){
		$("#reduced").slideUp("fast");
		$("#select-tarif .hide").slideDown("fast", function() {
			$(this).removeClass("hide");
		});
		
		return false;
	});
	
	$("input").each(function() {
		this.oldVal = this.value;
	}).click(function() {
		this.value = this.value == this.oldVal ? "" : this.value;
	}).blur(function() {
		this.value = (this.value == this.oldVal || !this.value.length) ? this.oldVal : this.value;
		checkRequiredFields();
	}).bind("change keyup", function() {
		checkRequiredFields();
	});
	$("select").change(function(){
		checkRequiredFields();
	});
	
	$(".submit").changeVal("disabled", function(disabled) {
		if (disabled) {
			$(this).addClass("disabled");
		}
		else {
			$(this).removeClass("disabled");
		}
	});
	
	
	
	
	
	
	
	street = $("[name=street]").get(0);
	build = $("[name=build]").get(0);
	flat = $("[name=flat]").get(0);
	contact = $("[name=contact]").get(0);
	submit = $(".submit").get(0);
	fio = $("[name=fio]").get(0);
	
	
	//Выбор дома в зависимости от выбора улицы
	
	if (submit != undefined) {
	
		$(street).change(function() {
			var firstChild = build.firstChild.nodeType != 1 ? build.firstChild.nextSibling : build.firstChild; //Исключаем option «Выберите улицу»
			while (firstChild.nextSibling) {
				build.removeChild(firstChild.nextSibling); //Удаляем option'ы
			}
			var i = 0;
			var baseItem;
			while (baseItem = base[i]) {
				if (baseItem.street == this.value) {
					var element = document.createElement('option');
					
					element.value = baseItem.build;
					element.appendChild(document.createTextNode(baseItem.build));
					
					build.appendChild(element);
				}
				i++;
			}
		});
		
		
		$(contact).keyup(function() {
			refreshForm(this);
		});
		$(contact).blur(function() {
			contactFormat(this);
			checkRequiredFields();
		});
		
		
		
		
		function rejectForm(obj) {
			if (!/error/.test(obj.className)) {
				return obj.className += " error";
			}
			return false;
		}
		function refreshForm(obj) {
			return obj.className = obj.className.replace("error", "");
		}
		function contactCheck(obj) { //Проверка номера телефона или e-mail'а
			if (obj.value.indexOf("@") < 0) { //Это же не e-mail?
				var digit = obj.value.replace(/[^0-9]/g, "");
				if (digit.length == 11) { //Если мобильный
					var num1 = digit.slice(0, 1);
					var num2 = digit.slice(1, 4);
					var num3 = digit.slice(4, 7);
					var num4 = digit.slice(7, 9);
					var num5 = digit.slice(9, digit.length);
					if (num1 == "8") {
						num1 = "7";
					}
					return "+" + num1 + " " + num2 + " " + num3 + "-" + num4 + "-" + num5;
				}
				else 
					if (digit.length == 7) { //Если домашний
						var num1 = digit.slice(0, 3);
						var num2 = digit.slice(3, 5);
						var num3 = digit.slice(5, digit.length);
						return num1 + "-" + num2 + "-" + num3;
					}
					else 
						if (digit.length == 10) {
							var firstNum = digit.slice(0, 1);
							
							if (firstNum != "8" && firstNum != "7") {
								var num2 = digit.slice(0, 3);
								var num3 = digit.slice(3, 6);
								var num4 = digit.slice(6, 8);
								var num5 = digit.slice(8, digit.length);
								return "+7" + " " + num2 + " " + num3 + "-" + num4 + "-" + num5;
							}
							return false;
						}
				//Фигню какую-то набрал
				return false;
			}
			else { //Да, это e-mail
				obj.value = obj.value.toLowerCase().replace(" ", ""); //Без пробелов и в нижнем регистре
				if (!/^[0-9a-z][a-z0-9_.\-]*@[0-9a-z][0-9a-z_.\-]*[.]([a-z]{2,4}$)/i.test(obj.value)) { //А сейчас мы тебя проверим!
					//Какой-то странный e-mail
					return false;
				}
				return true; //Сочный e-mail
			}
		}
		function contactFormat(obj) { //Форматирование номера телефона или e-mail'а
			var check = contactCheck(obj);
			if (!check) {
				rejectForm(obj);
			}
			if (typeof(check) == "string") {
				obj.value = check;
			}
		}
		function checkRequiredFields() {
			if (parseInt(street.value) != 0 && parseInt(build.value) != 0 && contactCheck(contact)) {
				submit.disabled = false;
			}
			else {
				submit.disabled = true;
			}
		}
		
		checkRequiredFields(); //Проверка на заполненность всех полей
	}
});
