/*
	11.02.2007 - Andrew Romashkin
	Copyright (c) 2007 PSD2HTML.com
*/


var ID_CONTACTFORM = "contact-form";
var ID_TICKETFORM = "ticket-form";
var ID_ORDERFORM = "order-form";
var MSG_EMAIL = "Please specify valid E-mail address.";
var MSG_MESSAGE = "Please enter your message.";
var NAME_EMAIL = "email";
var NAME_TEXT = "text";
var NAME_TICKETTEXT = "_input_text";
var NAME_TIMEOFFSET = "_input_gmt";
var LINK_GROUPS = ["validation", "examples", "copyabout", "o2ddesc"];

var orderPage;


function initPage()
{
	try
	{
		initCookies();
		initLinksTarget();
		initFlash();
		fixBannerPosition();

		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_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 : "Web Page",
	SELECTOR_EMAIL : "Email Template",
	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 : "included",
	STR_SAMEPRICE : "same price",
	MSG_SOURCE : "Please upload design sources or specify a link to file.",
	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;
			}
			return true;
		}
	},

	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(2));
					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 ? "+" : "-") + this.CURRENCY_SIGN + Math.abs(p));
				}
		}
		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 = this.CURRENCY_SIGN + sum;
	}
};

function isEmail(email)
{
	return !(email == "" ||
		!email.match(new RegExp('^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$')));
}

function detectSafari()
{
	if (navigator.appVersion.indexOf("Safari") != -1)
		document.body.className += " safari";
}

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);