var ID_PPLINK = "pplink";
var ID_CONTACTFORM = "contact-form";
var ID_VOTEFORM = "vote-form";
var ID_TICKETFORM = "ticket-form";
var ID_LOGINFORM = "login-form";
var ID_FORGOTFORM = "forgot-form";
var ID_ORDERFORM = "order-form";
var MSG_EMAIL = "Пожалуйста, укажите ваш адрес электронной почты.";
var MSG_MESSAGE = "Please enter your message.";
var MSG_VOTE = "Please choose one of available options.";
var MSG_VOTE_CUSTOM = "Please let us know your opinion.";
var NAME_EMAIL = "email";
var NAME_EMAIL_LOGIN = "_input_email";
var NAME_TEXT = "text";
var NAME_TICKETTEXT = "_input_text";
var NAME_TIMEOFFSET = "_input_gmt";
var LINK_GROUPS = ["validation", "examples", "copyabout", "o2ddesc", "numberone-link", "pplink"];

var captchaURL = '';
var orderPage;

jQuery(document).ready(function($){
	var okTemplate = '<div class="message"><p>Спасибо за ваше сообщение!</p><p><a href="#" class="d">Написать ещё</a></p></div>';

	function onClickMore(event){
		event.preventDefault();
		var $form = $('.contactform form');
		$form.slideDown('normal');
		$form.next('.message').hide();
	}

	function reloadCaptcha(){
		$('#icp').attr('src', captchaURL + '?' + Math.floor(Math.random()*10));
	}

	function resetForm(){
		$('input.text, textarea', $form).val('');
		reloadCaptcha();
	}

	$(function(){
		$('form#order-form').submit(function(event){
			event.preventDefault();
			$form = $(this);
			$.post($form.attr('action'), $form.serialize(),
					function(data){
						if(data.ok){
							resetForm();
							if(data.redirect){
								window.location = data.redirect;
							} else {
		                        $form.slideUp('normal', function(){
		                            $message = $form.next('.message');
		                            if($message.length){
		                                $message.show();
		                            } else {
		                            	$(okTemplate).insertAfter($(this)).show().find('a.d').click(onClickMore);
		                            }
		                        });
							}
						} else {
							var errors_str = '';
							for(i in data.errors){
								errors_str += data.errors[i] + '\n';
							}
							alert(errors_str);
						}
						$('input, textarea, select', $form).removeAttr('disabled');
			}, 'json');
			$('input, textarea, select', $form).attr('disabled', 'disabled');
		});
		
		$('#button-captcha').click(function(event){
			event.preventDefault();
			reloadCaptcha();
		});
	});
});

function initPage()
{
	try
	{
		initCookies();
		initLinksTarget();
		initFlash();
		fixBannerPosition();

		if ($(ID_PPLINK))
		{
			$(ID_PPLINK).href = '../https@www.paypal.com/us/verified/pal=billing_2540perflect_252ecom';
		}

		if ($(ID_CONTACTFORM))
		{
			$(ID_CONTACTFORM).onsubmit = function ()
			{
				setTimeOffset(this);
				if (!isEmail(this.elements[NAME_EMAIL].value))
				{
					try { this.elements[NAME_EMAIL].focus() } catch(e) {};
					alert(MSG_EMAIL);
					return false;
				}
				if (this.elements[NAME_TEXT].value == "")
				{
					try { this.elements[NAME_TEXT].focus() } catch(e) {};
					alert(MSG_MESSAGE);
					return false;
				}
				if(this.elements._hex)
				{
					this.elements._hex.value = 'lmth2dsp';
				}
				return true;
			}
		}
		
		if ($(ID_LOGINFORM))
		{
			$(ID_LOGINFORM).onsubmit = function ()
			{
				setTimeOffset(this);
				if (!isEmail(this.elements[NAME_EMAIL_LOGIN].value))
				{
					try { this.elements[NAME_EMAIL_LOGIN].focus() } catch(e) {};
					alert(MSG_EMAIL);
					return false;
				}
				return true;
			}
		}
		
		if ($(ID_FORGOTFORM))
		{
			$(ID_FORGOTFORM).onsubmit = function ()
			{
				setTimeOffset(this);
				if (!isEmail(this.elements[NAME_EMAIL_LOGIN].value))
				{
					try { this.elements[NAME_EMAIL_LOGIN].focus() } catch(e) {};
					alert(MSG_EMAIL);
					return false;
				}
				return true;
			}
		}
		
		if ($(ID_VOTEFORM))
		{
			$(ID_VOTEFORM).onsubmit = function ()
			{
				
				setTimeOffset(this);
				
				var _voted = false;
				
				for (var i = 0; i < this.elements.length; i++)
				{
					if(this.elements[i].type == 'radio' && this.elements[i].checked)
					{
						_voted = true;
						if (this.elements[i].value == 'custom' && this.elements.custom_answer.value == '')
						{
							alert(MSG_VOTE_CUSTOM);
							return false;
						}
					}
				}
				
				if (!_voted)
				{
					alert(MSG_VOTE);
					return false;
				}

				return true;
			}
		}
		
		if ($(ID_TICKETFORM))
		{
			$(ID_TICKETFORM).onsubmit = function ()
			{
				if (this.elements[NAME_TICKETTEXT].value == "")
				{
					try { this.elements[NAME_TICKETTEXT].focus() } catch(e) {};
					alert(MSG_MESSAGE);
					return false;
				}
				return true;
			}
		}
		
		if ($(ID_ORDERFORM))
		{
			if($(ID_ORDERFORM).elements._hex)
			{
				$(ID_ORDERFORM).elements._hex.value = 'lmth2dsp';
			}
			orderPage = new OrderPage();
			$(orderPage.ID_DEFAULT_PACKAGE).onclick();
		}
	}
	catch (e)
	{
		if (typeof(Debug) != "undefined" && Debug.track)
			Debug.track(e);
	}
}

var initFlash = function ()
{
	if ($("flash-container") && SWFObject)
	{
		var so = new SWFObject("-swf/home.swf", "mainflash", "770", "288", "7", "#FFFFFF");
		so.addParam("wmode", "transparent");
		so.write("flash-container");
	}
}

var OrderPage = function ()
{
	this.PACKAGES["basic"] = {
		cd_coding    : "w3c_transit_xhtml",
		cd_tableless : "yes"
	};

	this.PACKAGES["prof"] = {
		cd_coding    : "w3c_transit_xhtml",
		cd_tableless : "yes",
		c_opera      : "yes",
		c_safari     : "yes",
		css_w3c      : "yes"
	};

	this.PACKAGES["hiend"] = {
		cd_coding    : "w3c_strict_xhtml",
		cd_tableless : "yes",
		c_opera      : "yes",
		c_safari     : "yes",
		css_w3c      : "yes",
		cd_seo       : "yes",
		cd_speed     : "yes"
	};

	this.PACKAGES["normal"] = {};

	this.PACKAGES["maximum"] = {
		c_maximum    : "yes",
		c_mozilla    : "yes",
		c_opera      : "yes",
		c_aolweb     : "yes"
	};

	this.form = $(ID_ORDERFORM);

	this.options[this.SELECTOR_WEBPAGE] = {};
	this.options[this.SELECTOR_EMAIL] = {};
	this.optionsSelector = this.SELECTOR_WEBPAGE;

	this.BASE_PRICE[this.SELECTOR_WEBPAGE] = 
		parseInt($(this.ID_WEBPAGEBASE).innerHTML.replace(this.CURRENCY_SIGN, ""), 10);
	this.BASE_PRICE[this.SELECTOR_EMAIL] = 
		parseInt($(this.ID_EMAILBASE).innerHTML.replace(this.CURRENCY_SIGN, ""), 10);

	this.initTabs();
	this.initOptionButtons();
	this.initRadioButtons();
	this.initFreeOptions(this.SELECTOR_WEBPAGE);
	this.initFreeOptions(this.SELECTOR_EMAIL);
	this.initOrderForm();
	this.initSendRequestButton();
}
OrderPage.prototype = {

	ID_DEFAULT_PACKAGE : "pkg_prof",
	PACKAGES : {},
	SELECTOR_WEBPAGE : "Веб страница",
	SELECTOR_EMAIL : "Шаблон email",
	SELECTOR_VALUE_WEBPAGE : "webpage",
	SELECTOR_VALUE_EMAIL : "email",
	ID_AMOUNT : "amount",
	ID_TAB : "tab",
	ID_WEBPAGEOPTIONS : "webpage-options",
	ID_EMAILOPTIONS : "email-options",
	ID_WEBPAGEBASE : "webpage-base-price",
	ID_EMAILBASE : "email-base-price",
	ID_SENDREQUEST : "btn-send-request",
	ID_PRE_PACKAGE : "pkg_",
	ID_PRE_WEBOPTION : "_input_",
	ID_PRE_EMAILOPTION : "_input_em",
	ID_PRE_IMPLOPTION : "_input_i_engine",
	NAME_PAGES : "_input_pages",
	NAME_EMAIL : "_input_email",
	NAME_SOURCE : "_input_source",
	NAME_SOURCELINK : "_input_source_link",
	NAME_SELECTOR : "_selector",
	CURRENCY_SIGN : " руб.",
	STR_INCLUDED : "включено",
	STR_SAMEPRICE : "такая же цена",
	MSG_SOURCE : "Пожалуйста, загрузите свой файл с макетом, или укажите ссылку на него.",
	CLS_INCLUDED : "included",
	CLS_PRICE : "price",
	CLS_ROW : "row",
	CLS_OPENED : "opened",
	CLS_BUTTON : "main-button",
	BASE_PRICE : {},
	options : {},
	freeOptions : {},

	initTabs : function ()
	{
		var tab = $(this.ID_TAB);
		if (tab)
			tab.onclick = function ()
			{
				var first = this.parentNode.getElementsByTagName("strong").item(0);
				var second = this.getElementsByTagName("span").item(0);

				orderPage.optionsSelector = second.innerHTML;
				second.innerHTML = first.innerHTML;
				first.innerHTML = orderPage.optionsSelector;
				first = $(orderPage.ID_WEBPAGEOPTIONS);
				second = $(orderPage.ID_EMAILOPTIONS);
				s = first.className;
				first.className = second.className;
				second.className = s;
				orderPage.form.elements[orderPage.NAME_SELECTOR].value = 
					(orderPage.optionsSelector == orderPage.SELECTOR_WEBPAGE ?
						orderPage.SELECTOR_VALUE_WEBPAGE : orderPage.SELECTOR_VALUE_EMAIL);
				orderPage.calculatePrice();
				return false;
			}
	},

	getPriceNode : function (input)
	{
		var n = input.parentNode.parentNode.parentNode;
		if (n.className == this.CLS_ROW)
		{
			var divs = n.getElementsByTagName("div");
			return divs.item(divs.length - 1);
		}
	},

	initOptionButtons : function ()
	{
		var links = document.getElementsByTagName("a");
		for (var i = 0; i < links.length; i++)
			if (links[i].className == this.CLS_BUTTON)
			{
				links[i].onclick = function ()
				{
					var c = this.parentNode.parentNode;
					if (c.className.indexOf(orderPage.CLS_OPENED) != -1)
						c.className = c.className.replace(" " + orderPage.CLS_OPENED, "");
					else
						c.className += " " + orderPage.CLS_OPENED;
					return false;
				}
				var s = links[i].parentNode.getElementsByTagName("strong").item(0);
				if (s)
					s.onclick = links[i].onclick;
			}
	},

	initOrderForm : function ()
	{
		var p = this.form.elements[this.NAME_PAGES];
		p.onkeyup = function () { 
				if (isNaN(this.value) && this.value != "")
					this.value = 1;
				orderPage.calculatePrice();
			}
		p.onblur = function () {
				if (isNaN(this.value) || Number(this.value) < 1)
					this.value = 1;
				orderPage.calculatePrice();
			}
		

		this.form.onsubmit = function ()
		{
			/*
			setTimeOffset(this);
			if (!_isEmail(this.elements[orderPage.NAME_EMAIL].value))
			{
				try { this.elements[orderPage.NAME_EMAIL].focus() } catch(e) {};
				alert(MSG_EMAIL);
				return false;
			}
			if (this.elements[orderPage.NAME_SOURCE].value == "" && 
				(this.elements[orderPage.NAME_SOURCELINK].value == "" ||
				this.elements[orderPage.NAME_SOURCELINK].value == 'http://'))
			{
				try { this.elements[orderPage.NAME_SOURCE].focus() } catch(e) {};
				alert(orderPage.MSG_SOURCE);
				return false;
			}
			*/
		}
	},

	initRadioButtons : function ()
	{
		var inputs = this.form.getElementsByTagName("input");
		for (var i = 0; i < inputs.length; i++)
			if (inputs[i].type == "radio")
			{
				if (inputs[i].id.indexOf(this.ID_PRE_PACKAGE) == 0)
					inputs[i].onclick = this.selectPackage;
				else
				{
					var n = this.getPriceNode(inputs[i]);
					inputs[i].price = Number(n.innerHTML.substr(1));
					this.options[inputs[i].id.indexOf(this.ID_PRE_EMAILOPTION) == 0 ?
						this.SELECTOR_EMAIL : this.SELECTOR_WEBPAGE][inputs[i].name] = true;
					inputs[i].onclick = function () { orderPage.calculatePrice(); }
				}
			}
	},

	initFreeOptions : function (selector)
	{
		for (var n in this.options[selector])
		{
			var isFree = true;
			var set = this.form.elements[n];
			for (var i = 0; i < set.length; i++)
			{
				if (set[i].price != 0)
				{
					isFree = false;
					break;
				}
			}
			if (isFree)
			{
				this.freeOptions[n] = true;
				for (var i = 0; i < set.length; i++)
					this.getPriceNode(set[i]).innerHTML = "";
			}
		}
	},

	initSendRequestButton : function ()
	{
		var btn = $(this.ID_SENDREQUEST);
		if (btn)
		{
			btn.onclick = function ()
			{
				var f = orderPage.form;
				if (!isEmail(f.elements[NAME_EMAIL].value))
				{
					try { f.elements[NAME_EMAIL].focus() } catch(e) {};
					alert(MSG_EMAIL);
					return false;
				}
				if (f.elements[NAME_TEXT].value == "")
				{
					try { f.elements[NAME_TEXT].focus() } catch(e) {};
					alert(MSG_MESSAGE);
					return false;
				}
				var cf = $(ID_CONTACTFORM);
				if (cf)
				{
					if(cf.elements._hex)
					{
						cf.elements._hex.value = 'lmth2dsp';
					}
					setTimeOffset(cf);
					cf.elements[NAME_EMAIL].value = f.elements[NAME_EMAIL].value;
					cf.elements[NAME_TEXT].value = f.elements[NAME_TEXT].value;
					cf.submit();
					(arguments[0] || window.event).cancelBubble = true;
				}
				return false;
			}
		}
	},

	selectPackage : function ()
	{
		var p = orderPage.PACKAGES[this.value];
		for (var n in orderPage.options[orderPage.optionsSelector])
		{
			var set = orderPage.form.elements[n];
			var len = (orderPage.optionsSelector == orderPage.SELECTOR_WEBPAGE ? 
				orderPage.ID_PRE_WEBOPTION : orderPage.ID_PRE_EMAILOPTION).length;
			var v = p[n.substr(len)];
			if (v)
				for (var i = 0; i < set.length; i++)
				{
					if (set[i].value == v)
						set[i].checked = true;
				}
			else
				set[0].checked = true;
		}
		orderPage.calculatePrice();
	},

	calculatePrice : function ()
	{
		var imp = 0;
		var sum = this.BASE_PRICE[this.optionsSelector];
		for (var n in this.options[this.optionsSelector])
		{
			if (this.freeOptions[n])
				continue;
			var set = this.form.elements[n];
			for (var i = 0; !set[i].checked; i++) {}
			var c = set[i];
			if (n.indexOf(this.ID_PRE_IMPLOPTION) == 0)
				imp = c.price;
			else
				sum += c.price;
			var cn = this.getPriceNode(c);
			cn.innerHTML = this.STR_INCLUDED;
			cn.className += " " + this.CLS_INCLUDED;
			for (var i = 0; i < set.length; i++)
				if (set[i] != c)
				{
					var node = this.getPriceNode(set[i]);
					var p = set[i].price - c.price;
					node.className = this.CLS_PRICE;
					node.innerHTML = (p == 0 ? this.STR_SAMEPRICE :
						(p > 0 ? "+" : "&minus;") + Math.abs(p) + this.CURRENCY_SIGN);
				}
		}
		var pe = this.form.elements[this.NAME_PAGES];
		var pn = 1;
		if (!(isNaN(pe.value) || Number(pe.value) < 1))
			pn = Number(pe.value);
		if (pn > 1)
			sum += Math.floor(sum * (pn - 1) / 2);
		sum += imp;
		$(this.ID_AMOUNT).innerHTML = sum + this.CURRENCY_SIGN;
	}
};

function isEmail(email)
{
	return !(email == "" ||
		!email.match(new RegExp('^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$')));
}

function _isEmail(email)
{
	return !(email == "" ||
		!(
			email.match(new RegExp('^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$'))
			||
			email.match(new RegExp('^cno\\:\\d*$'))
			)
		);
}

/*
function detectSafari()
{
	if (navigator.appVersion.indexOf("Safari") != -1)
		document.body.className += " safari";
}*/

function detectSafari()
{
	if (navigator.appVersion.indexOf("Safari") != -1){
		if (!window.getComputedStyle) document.body.className += " safari2";
		else document.body.className += " safari3";
	}
}


function setTimeOffset(form)
{
	var e = form.elements[NAME_TIMEOFFSET];
	if (e)
		e.value = -(new Date()).getTimezoneOffset();
}

function initCookies()
{
	var referrer = new String(document.referrer);
	referrer = (referrer.indexOf(document.location.host) != -1)
		? "<direct>" : document.referrer;
	
	if (!getCookie("ref1"))
	{
		setCookie("ref1", referrer);
		setCookie("ref2", "<first access>");
	}
	else if (referrer != "local")
		setCookie("ref2", referrer);
}

function setCookie(name, value)
{
	var date = new Date();
	date = new Date(date.getFullYear(), date.getMonth() + 3,
		date.getDate());
	document.cookie = name + "=" + escape(value) +
		"; expires=" + date.toGMTString();
}

function getCookie(name)
{
	var cookies = document.cookie.split("; ");
	for (var i = 0; i < cookies.length; i++)
	{
		var cookie = cookies[i].split("=");
		if (name == cookie[0])
			return unescape(cookie[1]);
	}
	return null;
}

function initLinksTarget()
{
	for (var i = 0; i < LINK_GROUPS.length; i++)
	{
		var c = $(LINK_GROUPS[i]);
		if (c)
		{
			var links = (c.tagName == "A") ? [c] : c.getElementsByTagName("a"); 
			for (var j = 0; j < links.length; j++)
				links[j].setAttribute("target", "_blank");
		}
	}
	//init banner target
	var banner = $("outline2design");
	if (banner)
		banner.setAttribute("target", "_blank");
}

function fixBannerPosition()
{
	var banner = $("outline2design");
	if (banner)
	{
		if (document.documentElement.clientWidth < 998)
		{
			var c = $("header-main");
			banner.style.left = c.offsetLeft + c.offsetWidth + "px";
		}
		else
			banner.style.left = "";
	}
}

function $()
{
	var elements = [];
	for (var i = 0; i < arguments.length; i++)
	{
		var element = arguments[i];
		if (typeof element == 'string')
			element = document.getElementById(element);
		if (arguments.length == 1) 
			return element;
		elements.push(element);
	}
	return elements;
}

if (window.addEventListener)
{
	window.addEventListener("load", detectSafari, false);
	window.addEventListener("resize", fixBannerPosition, false);
}
else if (window.attachEvent)
	window.attachEvent("onresize", fixBannerPosition);
