addLoadEvent(photoGalleryInit); // Запускает функции при загрузки страницы
addLoadEvent(searchFocus);
addLoadEvent(sellFormFocus);
addLoadEvent(viewSubActione);
addLoadEvent(rememberInit);
var ie = !!window.ActiveXObject; // Определяет тип браузера
var ieNew = ie && document.documentMode > 7;
var carModel = new Object();
function localHelp(header){ // Показывает и скрывает подсказки
	var header = header;
	var headerQuestions = "Есть вопросы?";
	var headerNotQuestions = "Нет вопросов!";
	var questions = header.parentNode.parentNode;
	if(questions.className == "local-help-view"){
		questions.className = "";
		header.innerHTML = headerQuestions;
	}else{
		questions.className = "local-help-view";
		header.innerHTML = headerNotQuestions;
	}
	return false;
}
function selectFirm(firm){ // Загружает список моделей для выбранной фирмы
	carModel.node = firm;
	carModel.firm = getOptionSelected(firm).value;
	carModel.subtype = firm.id.substring(6,firm.id.length);
	var AJAX_URL = "/ajax/models.php?firm="+carModel.firm+"&subtype="+carModel.subtype+"&buy";
	if(carModel.firm == 0 && carModel.node.parentNode.getElementsByTagName("select")[1]){
		carModel.node.parentNode.removeChild(carModel.node.parentNode.getElementsByTagName("select")[1]);
		carModel.node.className = "";
	}else if(carModel.firm == 0){
		return false;
	}else{
		loadXMLDoc("get",AJAX_URL,function(){modelListView(req.responseXML.documentElement)},null);
	}
}
function modelListView(xml){ // Отображает список моделей для выбранной фирмы
	var models = xml.getElementsByTagName("model");
	var select = document.createElement("select");
	var option = document.createElement("option");
	var optionText = document.createTextNode("выбрать модель");
	var countModels = "";
	option.appendChild(optionText);
	option.setAttribute("value",0);
	select.appendChild(option);
	select.className = "select-models";
	for(var i=0;i<models.length;i++){
		var option = document.createElement("option");
		if(models[i].getAttribute("count")) countModels = " ("+models[i].getAttribute("count")+")";
		var optionText = document.createTextNode(models[i].firstChild.data+countModels);
		option.appendChild(optionText);
		option.setAttribute("value","/buy/"+models[i].getAttribute("url")+"/");
		select.appendChild(option);
	}
	if(carModel.node.parentNode.getElementsByTagName("select")[1]) carModel.node.parentNode.removeChild(carModel.node.parentNode.getElementsByTagName("select")[1]);
	carModel.node.parentNode.appendChild(select);
	carModel.node.className = "select-firm";
	mySetAttribute(select,"onchange","selectModel(this)");
}
function selectModel(model){ // Переходит на страницу выбранной модели
	var modelUrl = getOptionSelected(model).value;
	if(modelUrl == 0) return false;
	else window.location = modelUrl;
}
function selectCountry(country){ // Загружает список городов для выбранной страны
	var country = getOptionSelected(country).value;
	var AJAX_URL = "/ajax/cities.php?country="+country;
	loadXMLDoc("get",AJAX_URL,function(){cityListView(req.responseXML.documentElement)},null);
}
function cityListView(xml){ // Отображает список городов для выбранной страны
	var cities = xml.getElementsByTagName("city");
	var cityNode = document.getElementById("city");
	var oldCityOptions = cityNode.getElementsByTagName("option");
	while(oldCityOptions.length) cityNode.removeChild(oldCityOptions[0]);
	for(var i=0;i<cities.length;i++){
		var option = document.createElement("option");
		var optionText = document.createTextNode(cities[i].firstChild.data);
		option.appendChild(optionText);
		option.setAttribute("value",cities[i].getAttribute("cityid"));
		cityNode.appendChild(option);
	}
}
function changeColor(select){ // Отображает выбранный цвет
	var spanColor = document.getElementById("span-color");
	var color = getOptionSelected(select);
	var colorNameRu = color.firstChild.data;
	var metalic;
	spanColor.className.indexOf("metalic") < 0 ? metalic = false : metalic = true;
	color = color.value;
	spanColor.className = spanColor.className.replace(/color-cars-.*/,"color-cars-"+color);
	spanColor.title = colorNameRu;
	if(metalic) spanColor.title += " металлик";
}
function changeColorType(select){ // Отображает выбранный тип цвета
	var spanColor = document.getElementById("span-color");
	var colorType = getOptionSelected(select).value;
	if(colorType == "yes"){
		spanColor.className = "metalic " + spanColor.className;
		spanColor.title += " металлик";
	}else{
		spanColor.className = spanColor.className.replace("metalic","");
		spanColor.title = spanColor.title.replace(" металлик","");
	}
}
function changeModeOfCommunication(select){ // Меняет обязательный пункт в контактах
	var modeOfCommunication = getOptionSelected(select).value;
	var mail = document.getElementById("label-mail");
	var phone = document.getElementById("label-phone");
	var labelMail = document.getElementById("for-label-mail");
	var labelPhone = document.getElementById("for-label-phone");
	var required;
	var cloneElement;
	var errorNode;
	if(modeOfCommunication == "mail"){
		required = labelPhone.getElementsByTagName("span")[0];
		cloneElement = required.cloneNode(true);
		labelMail.getElementsByTagName("em")[0].appendChild(cloneElement);
		required.parentNode.removeChild(required);
		errorNode = labelPhone.getElementsByTagName("span")[0];
		if(errorNode){
			if(errorNode.className == "form-validate-error") delErrorMessageChangeModeOfCommunication(labelPhone);
		}
		mail.className = "form-validate:required";
		phone.className = "";
	}else{
		required = labelMail.getElementsByTagName("span")[0];
		cloneElement = required.cloneNode(true);
		labelPhone.getElementsByTagName("em")[0].appendChild(cloneElement);
		required.parentNode.removeChild(required);
		errorNode = labelMail.getElementsByTagName("span")[0];
		if(errorNode){
			if(errorNode.className == "form-validate-error") delErrorMessageChangeModeOfCommunication(labelMail);
		}
		phone.className = "form-validate:required";
		mail.className = "";
	}
}
function delErrorMessageChangeModeOfCommunication(requiredInputLabel){ // Удаляет сообщение об ошибке при смене обязательного пункта в контактах
	var input = requiredInputLabel.getElementsByTagName("input")[0];
	var cloneInput = input.cloneNode(true);
	cloneInput.className = "";
	requiredInputLabel.appendChild(cloneInput);
	requiredInputLabel.removeChild(input.parentNode);
}
function rememberInit(){ // Запоменает объявление
	var url = String(window.location);
	var ignoreUrlMyRemember = "/buy/remember/";
	var ignoreUrlMyAdvert = "/sell/my/";
	var rememberedClass = "remembered";
	var forgetClass = "forget";
	if(url.indexOf(ignoreUrlMyRemember) < 0 && url.indexOf(ignoreUrlMyAdvert) < 0){
		var myLinks = document.getElementById("info").getElementsByTagName("a");
		for(var i=0;i<myLinks.length;i++){
			if(myLinks[i].className.indexOf(rememberedClass) >= 0 || myLinks[i].className.indexOf(forgetClass) >= 0){
				myLinks[i].onclick = function(){rememberQery(this);return false}
			}
		}
	}
}
function rememberQery(button){ // Запоменает объявление
	var actionURL = button.href;
	var rememberedClass = "remembered";
	var forgetClass = "forget";
	var rememberedText = "запомнить";
	var forgetText = "забыть";
	var rememberA = document.getElementById("remember").getElementsByTagName("a")[0];
	var rememberCount = rememberA.innerHTML.substring(rememberA.innerHTML.lastIndexOf("&nbsp;")+6,rememberA.innerHTML.length);
	if(isNaN(rememberCount)){
		rememberCount = rememberA.innerHTML.substring(rememberA.innerHTML.lastIndexOf("—")+1,rememberA.innerHTML.length);
		var operaErrorNBSP = true;
	}
	loadXMLDoc("get",actionURL,null,null);
	if(button.className.indexOf(rememberedClass) >= 0){
		button.href = button.href.replace(rememberedClass,forgetClass);
		button.className = forgetClass;
		button.innerHTML = forgetText;
		rememberCount++;
		rememberA.parentNode.style.display = "inline";
		if(!operaErrorNBSP) rememberA.innerHTML = rememberA.innerHTML.substring(0,rememberA.innerHTML.lastIndexOf("&nbsp;")+6)+rememberCount;
		else rememberA.innerHTML = rememberA.innerHTML.substring(0,rememberA.innerHTML.lastIndexOf("—")+2)+rememberCount;
	}else{
		button.href = button.href.replace(forgetClass,rememberedClass);
		button.className = rememberedClass;
		button.innerHTML = rememberedText;
		rememberCount--;
		if(rememberCount <= 0) rememberA.parentNode.style.display = "none";
		if(!operaErrorNBSP) rememberA.innerHTML = rememberA.innerHTML.substring(0,rememberA.innerHTML.lastIndexOf("&nbsp;")+6)+rememberCount;
		else rememberA.innerHTML = rememberA.innerHTML.substring(0,rememberA.innerHTML.lastIndexOf("—")+2)+rememberCount;
	}
}
function selectPlace(select,placeType){ // Выбор страны и города
	var place = getOptionSelected(select).value;
	var windowLocation = String(window.location);
	if(place == 0) return false;
	else{
		if(placeType == "country"){
			window.location = "/changegeo.php?country="+place+"&ref="+windowLocation;
		}else{
			window.location = "/changegeo.php?city="+place+"&ref="+windowLocation;
		}
	}
}
function photoGalleryInit(){ // Инициализирует фото галерею
	if(document.getElementById("small-photos")){
		var smallPhotos = document.getElementById("small-photos").getElementsByTagName("img");
		for(var i=0;i<smallPhotos.length;i++){
			if(smallPhotos[i].className != "selected-img" && !smallPhotos[i].getAttribute("onclick")) mySetAttribute(smallPhotos[i],"onclick","photoGallery(this)");
		}
	}
}
function photoGallery(photo){ // Меняет активную фотографию
	var smallPhotos = document.getElementById("small-photos").getElementsByTagName("img");
	var bigPhoto = document.getElementById("big-photo");
	for(var i=0;i<smallPhotos.length;i++){
		if(smallPhotos[i].className == "selected-img"){
			smallPhotos[i].className = "";
			mySetAttribute(smallPhotos[i],"onclick","photoGallery(this)");
			break;
		}
	}
	photo.className = "selected-img";
	mySetAttribute(photo,"onclick","");
	bigPhoto.src = photo.src.substring(0,photo.src.length-4)+"-big.jpg";
}
function photoGalleryEdit(photo){ // Меняет активную фотографию
	var smallPhotos = document.getElementById("small-photos").getElementsByTagName("img");
	var bigPhoto = document.getElementById("big-photo");
	for(var i=0;i<smallPhotos.length;i++){
		if(smallPhotos[i].className == "selected-img"){
			smallPhotos[i].className = "";
			mySetAttribute(smallPhotos[i],"onclick","photoGalleryEdit(this)");
			break;
		}
	}
	photo.className = "selected-img";
	mySetAttribute(photo,"onclick","");
	bigPhoto.src = photo.src.substring(0,photo.src.length-10)+"-big.jpg?"+photo.src.substring(photo.src.length-5);
}
function searchFocus(){ // Устанавливает фокус на поле поиска
	var search = document.getElementById("int-search");
	if(search) search.focus();
}
function sellFormFirstInit(){
	var newSellFormFirstObj = new sellFormFirstObj();
	newSellFormFirstObj.construct();
}
function sellFormFirstObj(){
	this.firmField;
	this.modelField;
	this.typeField;
	this.submitField;
	this.modelFieldTytle;
	this.typeFieldTytle;
	this.submitFieldTytle;
	this.firm;
	this.model;
	this.type;
	this.firmRuName;
	this.typeRuName;
	this.construct = function(){
		var self = this;
		this.firmField = document.getElementById("sell-form-first-firm");
		this.modelField = document.getElementById("sell-form-first-model");
		this.typeField = document.getElementById("sell-form-first-type");
		this.submitField = document.getElementById("sell-form-first-submit");
		this.modelFieldTytle = this.modelField.parentNode.title;
		this.typeFieldTytle = this.typeField.parentNode.title;
		this.submitFieldTytle = this.submitField.parentNode.title;
		this.changeFirm();
		this.firmField.onchange = function(){self.changeFirm()};
		this.modelField.onchange = function(){self.changeModel()};
		this.typeField.onchange = function(){self.changeType()};
	}
	this.changeFirm = function(){
		this.firm = getOptionSelected(this.firmField).value;
		this.firmRuName = getOptionSelected(this.firmField).firstChild.data;
		this.disableField(this.typeField,this.typeFieldTytle);
		this.disableField(this.submitField,this.submitFieldTytle);
		if(this.firm == 0){
			this.disableField(this.modelField,this.modelFieldTytle);
		}else{
			var AJAX_URL = "/ajax/modelsbyfirm.php?firm="+this.firm;
			var self = this;
			loadXMLDoc("get",AJAX_URL,function(){self.fillModelList(req.responseXML.documentElement)},null);
		}
	}
	this.fillModelList = function(newValue){
		var items = newValue.getElementsByTagName("item");
		var _options = this.modelField.getElementsByTagName("option");
		while(_options.length > 1) this.modelField.removeChild(_options[1]);
		for(var i=0;i<items.length;i++){
			var option = document.createElement("option");
			var optionText = document.createTextNode(items[i].firstChild.data);
			option.appendChild(optionText);
			option.setAttribute("value",items[i].getAttribute("url"));
			this.modelField.appendChild(option);
		}
		this.enableField(this.modelField);
		this.modelField.focus();
	}
	this.changeModel = function(){
		this.model = getOptionSelected(this.modelField).value;
		this.disableField(this.submitField,this.submitFieldTytle);
		if(this.model == 0){
			this.disableField(this.typeField,this.typeFieldTytle);
		}else{
			var AJAX_URL = "/ajax/subtypesbyfirmmodel.php?model="+this.model+"&firm="+this.firm;
			var self = this;
			loadXMLDoc("get",AJAX_URL,function(){self.fillTypeList(req.responseXML.documentElement)},null);
		}
	}
	this.fillTypeList = function(newValue){
		var items = newValue.getElementsByTagName("item");
		var _options = this.typeField.getElementsByTagName("option");
		var option;
		var optionText;
		while(_options.length > 1) this.typeField.removeChild(_options[1]);
		for(var i=0;i<items.length;i++){
			option = document.createElement("option");
			optionText = document.createTextNode(items[i].firstChild.data);
			option.appendChild(optionText);
			option.setAttribute("value",items[i].getAttribute("url"));
			this.typeField.appendChild(option);
		}
		if(items.length == 1){
			this.typeField.getElementsByTagName("option")[1].selected = true;
			this.changeType(this.typeField.getElementsByTagName("option")[1].value);
		}else{
			this.enableField(this.typeField);
			this.typeField.focus();
		}
	}
	this.changeType = function(type){
		this.type = type || getOptionSelected(this.typeField).value;
		this.typeRuName = getOptionSelected(this.typeField).firstChild.data;
		if(this.type == 0){
			this.disableField(this.submitField,this.submitFieldTytle);
			this.fieldImgDestroy(this.typeField.parentNode);
		}else{
			this.typeImgCreate();
			this.submitField.href = '/sell/'+this.type+'/'+this.firm+'/'+this.model+'/';
			this.enableField(this.submitField);
			this.submitField.focus();
		}
	}
	this.typeImgCreate = function(){
		this.fieldImgDestroy(this.typeField.parentNode);
		var img = document.createElement("img");
		img.setAttribute("alt",this.typeRuName);
		img.setAttribute("src","/img/img-cars/"+this.type+".gif");
		img.setAttribute("width",143);
		img.setAttribute("height",54);
		this.typeField.parentNode.appendChild(img);
	}
	this.fieldImgDestroy = function(parentImg){
		img = parentImg.getElementsByTagName("img")[0];
		if(img) parentImg.removeChild(img);
	}
	this.disableField = function(node,nodeTitle){
		if(node.tagName == "SELECT" && nodeTitle){
			node.getElementsByTagName("option")[0].selected = true;
			this.fieldImgDestroy(this.typeField.parentNode);
		}
		node.parentNode.title = nodeTitle;
		if(node.tagName == "A"){
			node.className = node.className.replace("submit","disabled");
			node.onclick = function(){return false};
			node.href = "";
		}else{
			node.disabled = true;
		}
	}
	this.enableField = function(node){
		node.parentNode.title = "";
		if(node.tagName == "A"){
			node.className = node.className.replace("disabled","submit");
			node.onclick = "";
		}else{
			node.disabled = false;
		}
		if(node.tagName == "SELECT"){
			node.getElementsByTagName("option")[0].selected = true;
			this.fieldImgDestroy(this.typeField.parentNode);
		}
	}
}
function sellFormFocus(){ // Устанавливает фокус на первое поле, либо поле заполненное неправильно
	var sellForm = document.getElementById("sell-form");
	if(sellForm){
		var flagNotError = true;
		var errorMessageBoxes = sellForm.getElementsByTagName("span");
		for(var i=0;i<errorMessageBoxes.length;i++){
			if(errorMessageBoxes[i].className.indexOf("form-validate-error") >= 0){
				errorMessageBoxes[i].getElementsByTagName("input")[0].focus();
				flagNotError = false;
				break;
			}
		}
		if(flagNotError) sellForm.getElementsByTagName("input")[0].focus();
	}
}
function complaint(node){ // Конструктор окна жалоб
	var div = document.createElement("div");
	var textarea = document.createElement("textarea");
	var textareaText = document.createTextNode("Просто жалуюсь на это объявление.");
	var submit = document.createElement("strong");
	var submitText = document.createTextNode("! пожаловаться");
	div.appendChild(textarea);
	textarea.appendChild(textareaText);
	textarea.setAttribute("rows",5);
	textarea.setAttribute("cols",36);
	submit.className = "submit";
	submit.appendChild(submitText);
	mySetAttribute(submit,"onclick","window.miniWindowComplaint.miniWindowSendData('text='+this.parentNode.getElementsByTagName('textarea')[0].value)");
	div.appendChild(textarea);
	div.appendChild(submit);
	window.miniWindowComplaint = new miniWindow();
	window.miniWindowComplaint.construct(node,"Пожаловаться",div,"window.miniWindowComplaint","/complaint.php","Спасибо, что проявили бдительность.","complaint"); // Нужно заменить этот путь на реальный.
	textarea.focus();
}
function sendURL(node){ // Конструктор окна посылки ссылки
	var div = document.createElement("div");
	var label = document.createElement("label");
	var labelText = document.createTextNode("Адрес электронной почты");
	var input = document.createElement("input");
	var submit = document.createElement("strong");
	var submitText =  document.createTextNode("послать");
	label.setAttribute("for","send-url");
	input.setAttribute("type","text");
	input.setAttribute("maxlength",80);
	input.setAttribute("size",48);
	input.id = "send-url";
	mySetAttribute(input,'onkeypress',"if(event.keyCode == 0xA || event.keyCode == 0xD){window.miniWindowSendURL.miniWindowSendData('mail='+this.value)}");
	submit.className = "submit mail";
	submit.appendChild(submitText);
	mySetAttribute(submit,"onclick","window.miniWindowSendURL.miniWindowSendData('mail='+this.parentNode.getElementsByTagName('input')[0].value)");
	label.appendChild(labelText);
	label.appendChild(input);
	div.appendChild(label);
	div.appendChild(submit);
	window.miniWindowSendURL = new miniWindow();
	window.miniWindowSendURL.construct(node,"Послать ссылку",div,"window.miniWindowSendURL","/send-url.php","Ссылка послана.",null);
	input.focus();
}
function miniWindow(){ // Класс для вспомогательных окон
	this.node;
	this._window;
	this.windowName;
	this.customNode;
	this.object;
	this.closeTime = 1500;
	this.ajaxURL;
	this.ajaxPostData;
	this.message;
	this.subClass;
	this.construct = function(node,windowName,customNode,object,ajaxURL,message,subClass){
		this.node = node;
		this.windowName = windowName;
		this.customNode = customNode;
		this.object = object;
		this.ajaxURL = ajaxURL;
		this.message = message;
		this.subClass = subClass;
		this.miniWindowConstruct();
	}
	this.miniWindowConstruct = function(){
		this._window = document.createElement("div");
		var header = document.createElement("h4");
		var headerText = document.createTextNode(this.windowName);
		var close = document.createElement("span");
		var closeText = document.createTextNode(" ");
		this._window.className = "mini-window"+" "+this.subClass;
		header.appendChild(headerText);
		close.appendChild(closeText);
		close.setAttribute("title","закрыть");
		mySetAttribute(close,"onclick",this.object+".miniWindowClose(this.parentNode)");
		this._window.appendChild(header);
		this._window.appendChild(close);
		this._window.appendChild(this.customNode);
		this.node.parentNode.insertBefore(this._window,this.node);
	}
	this.miniWindowSendData = function(data){
		this.ajaxPostData = data;
		var self = this;
		loadXMLDoc("post",this.ajaxURL,function(){self.miniWindowSendDataHandler()},this.ajaxPostData);
	}
	this.miniWindowSendDataHandler = function(){
		var p = document.createElement("p");
		var pMessage = document.createTextNode(this.message);
		p.appendChild(pMessage);
		this._window.insertBefore(p,this.customNode);
		this.customNode.parentNode.removeChild(this.customNode);
		setTimeout(this.object+".miniWindowClose()",this.closeTime);
	}
	this.miniWindowClose = function(node){
		var node = node || this._window;
		if(node){
			if(node.parentNode) node.parentNode.removeChild(node);
		}else return false;
	}
}
function formValidateInit(form){ // Конструктор для валидации формы
	var newformValidate = new formValidate();
	var submit = newformValidate.construct(form);
	var inputs = form.getElementsByTagName("input");
	if(submit){
		for(var i=0;i<inputs.length;i++){
			if(inputs[i].type == "submit"){
				inputs[i].disabled = "disabled";
			}
		}
	}
	return submit;
}
function formValidate(){ // Класс для валидации формы
	this.formElements;
	this.submit = true;
	this.viewError = function(element,rules){
		var errorMessage = document.createTextNode(rules["message"]);
		var errorNodeInt = document.createElement("span");
		errorNodeInt.appendChild(errorMessage);
		if(element.parentNode.className == "form-validate-error"){
			var errorNodesInt = element.parentNode.getElementsByTagName("span");
			for(var i=0;i<errorNodesInt.length;i++) if(errorNodesInt[i].firstChild.data == rules["message"]) return false;
			element.parentNode.insertBefore(errorNodeInt,element);
		}else{
			var errorNode = document.createElement("span");
			errorNode.className = "form-validate-error";
			errorNode.appendChild(errorNodeInt);
			element.parentNode.insertBefore(errorNode,element);
			var cloneElement = element.cloneNode(true);
			errorNode.appendChild(cloneElement);
			element.parentNode.removeChild(element);
		}
	}
	this.clearError = function(element,rules){
		var errorNodesInt = element.parentNode.getElementsByTagName("span");
		for(var i=0;i<errorNodesInt.length;i++){
			var message = errorNodesInt[i].firstChild.data;
			message = message.replace(/\d/,"n");
			if(message.indexOf(rules["message"]) >= 0){
				errorNodesInt[i].parentNode.removeChild(errorNodesInt[i]);
			}
		}
		if(element.parentNode.tagName == "SPAN"){
			if(element.parentNode.getElementsByTagName("span").length == 0){
				var cloneElement = element.cloneNode(true);
				var errorNode = element.parentNode;
				errorNode.parentNode.insertBefore(cloneElement,errorNode);
				errorNode.parentNode.removeChild(errorNode);
			}
		}
	}
	this.formValidateRequired = function(element,rules){
		if(element.value) return true;
		else return false;
	}
	this.formValidate_d = function(element,rules){
		var regexp = /^\d*[\.|\,]?\d+$/;
		return regexp.test(element.value.replace(/(\t+)|(\n+)|(\s+)/g,""));
	}
	this.formValidate_w = function(element,rules){
		var regexp = /\w/;
		return regexp.test(element.value);
	}
	this.formValidateLength = function(element,rules){
		var _length = parseInt(element.className.substring(element.className.indexOf(rules["name"])+rules["name"].length+1,element.className.length));
		rules["message"] = rules["message"].replace("n",_length);
		if (element.value.length == _length) return true;
		else return false;
	}
	this.formValidateMaxLength = function(element,rules){
		var _length = parseInt(element.className.substring(element.className.indexOf(rules["name"])+rules["name"].length+1,element.className.length));
		rules["message"] = rules["message"].replace("n",_length);
		if (element.value.length <= _length) return true;
		else return false;
	}
	this.formValidateMinLength = function(element,rules){
		var _length = parseInt(element.className.substring(element.className.indexOf(rules["name"])+rules["name"].length+1,element.className.length));
		rules["message"] = rules["message"].replace("n",_length);
		if (element.value.length >= _length) return true;
		else return false;
	}
	this.formValidateYear = function(element,rules){
		var date = new Date();
		if(element.value > 0 && element.value <= date.getFullYear()) return true;
		else return false;
	}
	this.formValidateRules = [
		{
			name:"form-validate:required",
			handler:this.formValidateRequired,
			message:"Обязательное поле. "
		},
		{
			name:"form-validate:d",
			handler:this.formValidate_d,
			message:"Должны быть только цифры. "
		},
		{
			name:"form-validate:w",
			handler:this.formValidate_w,
			message:"Должны быть только цифры и буквы. "
		},
		{
			name:"form-validate:length",
			handler:this.formValidateLength,
			message:"В поле должно быть ровно n символов. "
		},
		{
			name:"form-validate:max-length",
			handler:this.formValidateMaxLength,
			message:"Максимальная длина не более n символов. "
		},
		{
			name:"form-validate:min-length",
			handler:this.formValidateMinLength,
			message:"Минимальная длина не менее n символов. "
		},
		{
			name:"form-validate:year",
			handler:this.formValidateYear,
			message:"Нужно указать год. "
		}
	];
	this.construct = function(form){
		this.formElements = form.getElementsByTagName("input");
		var focusFlag = false;
		for(var i=0;i<this.formElements.length;i++){
			if(this.formElements[i].className.indexOf("form-validate:") >= 0){
				for(var j=0;j<this.formValidateRules.length;j++){
					if(this.formElements[i].className.indexOf(this.formValidateRules[j]["name"]) >= 0){
						this.clearError(this.formElements[i],this.formValidateRules[j]);
						if(!this.formValidateRules[j]["handler"](this.formElements[i],this.formValidateRules[j])){
							this.viewError(this.formElements[i],this.formValidateRules[j]);
							this.submit = false;
							if(!focusFlag){
								this.formElements[i].focus();
								focusFlag = true;
							}
						}
					}
				}
			}
		}
		return this.submit;
	}
}
function viewSubActione(){ // Показывает кнопки "послать ссылку" и "пожаловаться" клиентам с JavaScript
	var subActione = document.getElementById("sub-actione");
	if(subActione) subActione.style.display = "block";
}
function loadXMLDoc(method,url,handler,data){ // Работа по AJAX
	if(window.XMLHttpRequest){
		req = new XMLHttpRequest();
	}else if(window.ActiveXObject){
		req = new ActiveXObject("Microsoft.XMLHTTP");
	}
    if(req && method && url){
		if(handler) req.onreadystatechange = function(){if(req.readyState == 4){if(req.status == 200){handler(req)}}};
        req.open(method,url,true);
        if(method == "post"){
    		req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			req.setRequestHeader("Content-length", data.length);
			req.setRequestHeader("Connection", "close"); 
    	}
        req.send(data);
	}
}
function getOptionSelected(select){ // Возвращает выбранный элемент списка
	var _options = select.getElementsByTagName("option");
	for(var i=0;i<_options.length;i++){
		if(_options[i].selected) return _options[i];
	}
	return false;
}
function mySetAttribute(node,event,handler){ // setAttribute for all client
	if(ie && !ieNew) node.setAttribute(event,function(){eval(handler)});
	else node.setAttribute(event,handler);
}
function addLoadEvent(func){ // Functions loader
	var oldonload = window.onload;
	if(typeof window.onload != "function"){
		window.onload = func;
	}else{
		window.onload = function(){
			oldonload();
			func();
		}
	}
}
function getCookie(name){ // Возвращает значение переменной по названию из куки
	var cookie = " "+document.cookie;
	var search = " "+name+"=";
	var setStr = null;
	var offset = 0;
	var end = 0;
	if(cookie.length > 0){
		offset = cookie.indexOf(search);
		if(offset != -1){
			offset += search.length;
			end = cookie.indexOf(";",offset)
			if(end == -1){
				end = cookie.length;
			}
			setStr = unescape(cookie.substring(offset,end));
		}
	}
	return(setStr);
}
