var ajaxFramesLoaded = false;
var ajaxFramesAnimated = false;

function clickhandler(e){
	var srcElement = e.srcElement||e.target;
	var trigger = srcElement;
	var cancelEvent = false;

	while(trigger && trigger.tagName){
		if (trigger.tagName.toLowerCase() == "a"){
			if (/(^|\s)+dhtml(\s|$)+/.test(trigger.rel)){
				break;
			}
		};
		trigger = trigger.parentNode;
	};
	if (trigger){
		var result = [];
		if (result = /(^|\s)+lightbox(\s|$)(([^\s]+)(\s|$))?/.exec(trigger.rel)){
			showLightbox(result[4]);
			cancelEvent = true;
		};
		if (/(^|\s)+close-lightbox(\s|$)+/.test(trigger.rel)){
			hideLightbox();
			cancelEvent = true;
		};
		result = [];
		if (result = /(^|\s)+scroll-frame(\s|$)([^\s]+)(\s|$)/.exec(trigger.rel)){
			cancelEvent = scrollToFrame(result[3]);
		};
		if (/(^|\s)+gallery-switch(\s|$)/.test(trigger.rel)){
			cancelEvent = gallerySwitch(trigger);
		};
		if (/(^|\s)+radio-contact-skin(\s|$)/.test(trigger.rel)){
			cancelEvent = contactSwitch(trigger);
		};
		if (/(^|\s)none(\s|$)/.test(trigger.rel)){
			cancelEvent = true;
		}
	};
	
	if (cancelEvent){
		if(e.stopPropagation) e.stopPropagation();
		if(e.preventDefault) e.preventDefault();
		if(e.cancelBubble) e.cancelBubble = true;
		return false;
	};
};

function contactSwitch(o){
	var re = /(^|\s)tpl-contact-state-([^>]+)(\s|$)/.exec(o.className);
	if (!re) return false;
	var owner = document.getElementById("tpl-carrier-frame-skn-contacts");
	
	if (!owner) return false;
	owner.className = owner.className.replace(/(^|\s)+skn-[^\s-]+(\s|$)+/, " ") + " skn-" + re[2];
	return true;
}

function scrollToFrame(id){
	if (ajaxFramesAnimated) return true;
	if (!ajaxFramesLoaded) return false;
	
	var level = [];
	var levelObjects = [];
	
	var menu = document.getElementById("tpl-menu");
	if (!menu) return false;
	var anchors = menu.getElementsByTagName("a");
	for (var i=0; i<anchors.length; i++){
		result = /(^|\s)+scroll-frame(\s|$)([^\s]+)(\s|$)/.exec(anchors[i].rel);
		if (result[3]){
			level.push(result[3]);
			levelObjects.push(document.getElementById('tpl-carrier-frame-' + result[3]));
		};
	};

	var res = /(^|\s)+(skn-[^\s]+)(\s|$)+/.exec(document.body.className)[2];
	if (!res) return false;
	var frameRes = document.getElementById('tpl-carrier-frame-' + res);
	var frameTrg = document.getElementById('tpl-carrier-frame-' + id);
	if (frameRes == frameTrg) return true;
	if (!frameRes || !frameTrg) return false;
	
	
	
	indexRes = null;
	indexTrg = null;
	for (var i=0; i<level.length; i++){
		if (res == level[i]) indexRes = i;
		if (id == level[i]) indexTrg = i;
	};
	
	ajaxFramesAnimated = true;
	if (indexRes != null & indexTrg != null){
		var indexAct = indexRes;
		(function(){
			if (!arguments.callee.flushed){
				arguments.callee.flushed = true;
				arguments.callee.indexAct = indexAct;
				arguments.callee.indexRes = indexRes;
				arguments.callee.indexTrg = indexTrg;
				arguments.callee.levelObjects = levelObjects;
			} else {
				indexAct = arguments.callee.indexAct;
				indexRes = arguments.callee.indexRes;
				indexTrg = arguments.callee.indexTrg;
				levelObjects = arguments.callee.levelObjects;
			};
		
			indexAct += (indexTrg - indexAct)*.2 + ((indexRes < indexTrg)?.05:-0.05);
			if (indexRes > indexTrg && indexAct < indexTrg) indexAct = indexTrg;
			if (indexRes < indexTrg && indexAct > indexTrg) indexAct = indexTrg;
			for (var i=0; i<levelObjects.length; i++){
				levelObjects[i].style.top = "0px"
				levelObjects[i].style.left = parseInt((i-indexAct) * 1000) + "px";
			};
			if (indexTrg != indexAct){
				arguments.callee.indexAct = indexAct;
				setTimeout(arguments.callee, 40);
			} else {
				ajaxFramesAnimated = false;
			}
		})();
	} else {
		if (indexRes == null){
			elevelObjects = [frameRes, frameTrg]
			indexRes = 0;
			indexTrg = 1;
			var indexAct = 0;
		} else {
			elevelObjects = [frameTrg, frameRes]
			indexRes = 1;
			indexTrg = 0;
			var indexAct = 1;
		};
		(function(){
			if (!arguments.callee.flushed){
				arguments.callee.flushed = true;
				arguments.callee.indexAct = indexAct;
				arguments.callee.indexRes = indexRes;
				arguments.callee.indexTrg = indexTrg;
				arguments.callee.elevelObjects = elevelObjects;
			} else {
				indexAct = arguments.callee.indexAct;
				indexRes = arguments.callee.indexRes;
				indexTrg = arguments.callee.indexTrg;
				elevelObjects = arguments.callee.elevelObjects;
			};
		
			indexAct += (indexTrg - indexAct)*.2 + ((indexRes < indexTrg)?.05:-0.05);
			if (indexRes > indexTrg && indexAct < indexTrg) indexAct = indexTrg;
			if (indexRes < indexTrg && indexAct > indexTrg) indexAct = indexTrg;
			for (var i=0; i<elevelObjects.length; i++){
				elevelObjects[i].style.left = "0px"
				elevelObjects[i].style.top = parseInt((i-indexAct) * 650) + "px";
			};
			if (indexTrg != indexAct){
				arguments.callee.indexAct = indexAct;
				setTimeout(arguments.callee, 40);
			} else {
				ajaxFramesAnimated = false;
			}
		})();
		
	};
	document.body.className = document.body.className.replace(/(^|\s)+(skn-[^\s]+)/g, "") + " " + id;
	var newh1 = frameTrg.getElementsByTagName("h1")[0];
	if (newh1){
		document.title = newh1.innerText||newh1.textContent;
	};
	
	return true;
}

function hideLightbox(){
	document.documentElement.className = document.documentElement.className.replace(/(^|\s)+skn-lightbox/g, "");
	var el;
	if (el = document.getElementById("tpl-lightbox-shield")){
		el.parentNode.removeChild(el);
	};
	if (el = document.getElementById("tpl-lightbox")){
		el.parentNode.removeChild(el);
	};
}

function prepareGallery(o){
	var placeholder = document.createElement("div");
	placeholder.className = "js-gallery-placeholder";
	var anchors = o.getElementsByTagName("a");
	var isFirst = true;
	for (var i=0; i<anchors.length; i++){
		var anchor = anchors[i];
		if (/(^|\s)dhtml(\s|$)/.test(anchor.rel) && /(^|\s)gallery-switch(\s|$)/.test(anchor.rel)){
			var relatedImage = document.createElement("img");
			relatedImage.src = anchor.href;
			anchor.relatedImage = relatedImage;
			anchor.relatedGallery = o;
			anchor.className = relatedImage.className = isFirst?"active":"";
			placeholder.appendChild(relatedImage);
			
			isFirst = false;
		};
	};
	o.insertBefore(placeholder, o.firstChild);
};

function gallerySwitch(a){
	if (!a.relatedGallery || !a.relatedImage) return false;
	var anchors = a.relatedGallery.getElementsByTagName("a");
	for (var i=0; i<anchors.length; i++){
		var anchor = anchors[i];
		if (/(^|\s)dhtml(\s|$)/.test(anchor.rel) && /(^|\s)gallery-switch(\s|$)/.test(anchor.rel) && anchor.relatedImage){
			anchor.className = anchor.relatedImage.className = (a==anchor)?"active":"";
		};
	};

	return true;
}

function contactFormValidate(o){
	var fields;
	switch (o.id){
		case 'feedback':
			fields = ['name', 'contact', 'message'];
		break;
		default: 
			return false;
	};
	var retval = true;
	for (var i=0; i<fields.length; i++){
		var el = o.elements[fields[i]];
		if (!el.filled || !/[^\s]+/.test(el.value)){
			el.className += " form-error";
			el.value = "Поле «" + el.title + "» обязательно для заполнения";
			retval = false;
		}
	};
	return retval;
}

function contactFormOnSubmit(e){
	var trigger = e.srcElement || e.target;
	if (!trigger.skipSend && contactFormValidate(trigger)){
		trigger.className += " js-ajax-loading";
		trigger.skipSend = true;
		
		var xhr = new XMLHttpRequest();
		xhr.onreadystatechange = function(){
		  try {
			if (xhr.readyState == 4) {
				if (xhr.status == 200) {
					trigger.className = trigger.className.replace(/(^|\s)+js-ajax-loading(\s|$)+/, " ");
					trigger.innerHTML = (xhr.responseText);
					setTimeout(hideLightbox, 5000);
				};
			}
		  } catch(e){}
		}
		var msgText = [];
		for (var i=0; i<trigger.elements.length; i++){
			msgText.push(encodeURIComponent(trigger.elements[i].name) + "=" + encodeURIComponent(trigger.elements[i].value));
		};
		msgText.push("__form_id__=" + encodeURIComponent(trigger.id));
		xhr.open("POST", "poster.php", true);
		xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		xhr.send(msgText.join("&"));
	};
	if (e.preventDefault) e.preventDefault();
	return false;	
}

function contactFormElementFocus(e){
	var trigger = e.srcElement || e.target;
	if (!trigger.filled){
		trigger.value = "";
	};
	trigger.className = trigger.className.replace(/(^|\s)+(form-filled(\s|$)|form-error(\s|$))+/g, " ") + " form-filled";
}

function contactFormElementBlur(e){
	var trigger = e.srcElement || e.target;
	trigger.filled = (/[^\s]+/.test(trigger.value));
	if (trigger.filled){
		trigger.className = trigger.className.replace(/(^|\s)+(form-filled(\s|$)|form-error(\s|$))+/g, " ") + " form-filled";
	} else {
		trigger.className = trigger.className.replace(/(^|\s)+(form-filled(\s|$)|form-error(\s|$))+/g, " ");
		trigger.value = trigger.title;
	};
}


function prepareForm(o){
	if (o.addEventListener){
		o.addEventListener('submit', contactFormOnSubmit, false);
	} else if (o.attachEvent){
		o.attachEvent('onsubmit', contactFormOnSubmit);
	};
	
	for (var i = 0; i<o.elements.length; i++){
		var el = o.elements[i];
		if (el.type && (el.type.toLowerCase() == "submit" || el.type.toLowerCase() == "button")) continue;
		if (el.title){
			el.value = el.title;
			if (el.addEventListener){
				el.addEventListener('focus', contactFormElementFocus, false);
				el.addEventListener('blur', contactFormElementBlur, false);
			} else if (o.attachEvent){
				el.attachEvent('onfocus', contactFormElementFocus);
				el.attachEvent('onblur', contactFormElementBlur);
			};
		};
	}
}

function showLightbox(id){
	var cm = document.getElementById("tpl-carcass-middle");
	var donor = document.getElementById(id);
	if (!cm || !donor) return false;
	document.documentElement.className += " skn-lightbox";
	var shield = arguments.callee.shield = document.createElement("div");
	shield.id = "tpl-lightbox-shield";
	shield.onclick = hideLightbox;
	cm.appendChild(shield);
	var lightbox = arguments.callee.lightbox = document.createElement("div");
	lightbox.id = "tpl-lightbox";
	lightbox.className = "tpl-lightbox-skn-" + id;
	var corners = ["tpl-lightbox-corner-nw", "tpl-lightbox-corner-ne", "tpl-lightbox-corner-sw", "tpl-lightbox-corner-se", "tpl-lightbox-bar-n", "tpl-lightbox-bar-e", "tpl-lightbox-bar-w", "tpl-lightbox-bar-s"];
	for (var i=0; i<corners.length; i++){
		var corner = lightbox.appendChild(document.createElement("div"));
		corner.className = corners[i];
		corner.appendChild(document.createElement("i"));
	};
	var inner = document.createElement("div");
	inner.className = "tpl-content-inner";
	inner.innerHTML = donor.innerHTML;
	lightbox.appendChild(inner);
	var closelink = document.createElement("a");
	closelink.href = "#nojs";
	closelink.className = "tpl-lightbox-close";
	closelink.rel = "dhtml close-lightbox";
	closelink.innerHTML = "Закрыть";
	lightbox.appendChild(closelink);

	var children = lightbox.getElementsByTagName("*");
	for (var i=0; i<children.length; i++){
		if (children[i].className && /(^|\s)js-gallery(\s|$)/.test(children[i].className)){
			prepareGallery(children[i]);
		};
		if (children[i].className && /(^|\s)js-form(\s|$)/.test(children[i].className)){
			prepareForm(children[i]);
		}
	}
	
	cm.appendChild(lightbox);
};

if (document.addEventListener){
	document.addEventListener('click', clickhandler, false);
} else if (document.attachEvent){
	document.attachEvent('onclick', clickhandler);
};

/* == XBROWSER XHR ================================================== */

if (typeof(XMLHttpRequest) == "undefined") {
  XMLHttpRequest = function() {
	try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); }
	  catch(e) {}
	try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); }
	  catch(e) {}
	try { return new ActiveXObject("Msxml2.XMLHTTP"); }
	  catch(e) {}
	try { return new ActiveXObject("Microsoft.XMLHTTP"); }
	  catch(e) {}
  };
};

/* == END OF XBROWSER XHR =========================================== */

function insertFrames(str){
	var carrier = document.getElementById("tpl-carrier");
	if (!carrier) return false;
	var temp = document.createElement("div");
	temp.innerHTML = str;
	while (temp.childNodes.length){
		ajaxFramesLoaded = true;
		var node = temp.childNodes[0];
		node.parentNode.removeChild(node);
		carrier.insertBefore(node, carrier.firstChild);
	};
};

function docready(){
	if (arguments.callee.alreadyRan) return;
	arguments.callee.alreadyRan = true;
	xhr = new XMLHttpRequest();

	xhr.onreadystatechange = function(){
	  try {
		if (xhr.readyState == 4) {
			if (xhr.status == 200) {
				insertFrames(xhr.responseText);
			};
		}
	  } catch(e){}
	}
	xhr.open("GET", "?ajaxframes", true);
	xhr.send(null);
};

if (document.addEventListener){
	document.addEventListener('DOMContentLoaded', docready, false);
	document.addEventListener('readystatechange', function(e){
		switch (document.readyState){
			case "interactive":
			case "complete":
				docready();
			break;
		};
	}, false);
} else if (document.attachEvent){
	document.attachEvent('onreadystatechange', function(e){
		switch (document.readyState){
			case "interactive":
			case "complete":
				docready();
			break;
		};
	});
};

