function _$(){return document.getElementById(arguments[0]);}
Function.prototype.bind=function(object){var method=this;return function(){return method.apply(object,arguments);}};
function addHandler(object,event,handler){if(typeof object.addEventListener!="undefined")object.addEventListener(event,handler,false);else if(typeof object.attachEvent!="undefined")object.attachEvent("on"+event,handler);}
function removeHandler(object,event,handler){if(typeof object.removeEventListener!="undefined")object.removeEventListener(event,handler,false);else if(typeof object.detachEvent!="undefined")object.detachEvent("on"+event,handler);}
function show(obj){if(typeof obj=="string")_$(obj).style.display="block";else obj.style.display="block";}
function hide(obj){if(typeof obj=="string")_$(obj).style.display="none";else obj.style.display="none";}
function addClass(obj,className){if(obj.className.indexOf(className)==-1){obj.className+=" "+className;}}
function removeClass(obj,className){obj.className=obj.className.replace(className,"");}
function cancelDefaultAction(event){if(typeof event.preventDefault!="undefined")event.preventDefault();if(typeof event.returnValue!="undefined")event.returnValue=false;}
function stopEvent(event){if(typeof event.stopPropagation!="undefined")event.stopPropagation();if(typeof event.cancelBubble!="undefined")event.cancelBubble=true;}
String.prototype.trim=function(){return this.replace(/^\s*/,"").replace(/\s*$/,"");};
function empty(){return false;}
function submit_form(){return send_mail();}


function getBounds(element)
{
	var left = 0, top = 0;

	while (element.offsetParent)
	{
		left += element.offsetLeft;
		top += element.offsetTop;
		element = element.offsetParent;
	}
	return {left: left, top: top};
}

function setGlobalOnLoad(f)
{
	var root = window.addEventListener || window.attachEvent ? window : document.addEventListener ? document : null;
	if (root)
	{
		addHandler(root, "load", f);
	}
	else
	{
		if (typeof window.onload == "function")
		{
			var existing = window.onload;
			window.onload = function() {
				existing();
				f();
			}
		}
		else
		{
			window.onload = f;
		}
	}
}

setGlobalOnLoad(function(){
	var list = new SiteList(_$("siteList"));
	list.init();
	
	var f = new FeedbackForm(_$("feedbackLink"));
	f.init();
});

function FeedbackForm(link)
{
	var self = this;
	var link = link;
	var shown = false;
	var holder = _$("feedbackForm");
	var form = holder.getElementsByTagName("form")[0];
	var submitBtn = _$("submitFeedbackBtn");
	
	this.init = function(){
		addHandler(link, "click", self.toggle);
		addHandler(_$("feedbackFormCloseBtn"), "click", self.toggle);
		addHandler(_$("fromInput"), "keyup", self.validate);
		addHandler(_$("emailInput"), "keyup", self.validate);
		addHandler(_$("phoneInput"), "keyup", self.validate);
		addHandler(_$("messageText"), "keyup", self.validate);
		self.validate();
	};
	
	this.disableSubmit = function(){
		submitBtn.src = "img/submit-dis.gif";
		form.onsubmit = empty;
	};
	
	this.enableSubmit = function(){
		submitBtn.src = "img/submit.gif";
		form.onsubmit = submit_form;
	};
	
	this.validate = function(){
		if (_$("fromInput").value.trim() != "" && _$("emailInput").value.trim() != "" && _$("messageText").value.trim() != "")
		{
			self.enableSubmit();
		}
		else
		{
			self.disableSubmit();
		}
	};
	
	this.toggle = function(event)
	{
		if (shown)
			self.hide(event);
		else
			self.show(event);
		cancelDefaultAction(event);
		return false;
	};
	
	this.show = function(event){
		event = event || window.event;
		var pos = getBounds(link);
		holder.style.top = pos.top - 170 + "px";
		holder.style.left = 580 + "px";
		show(holder);
		stopEvent(event);
		addHandler(document.getElementsByTagName("body")[0], "click", self.isClickOnForm);
		shown = true;
	};
	
	this.hide = function(event){
		hide(holder);
		removeHandler(document.getElementsByTagName("body")[0], "click", self.isClickOnForm);
		shown = false;
	};
	
	this.isClickOnForm = function(event){
		var src = event.srcElement || event.target;
		while (src.parentNode)
		{
			src = src.parentNode;
			if (src == holder)
			{
				break;
			}
		}
		if (!src.parentNode)
		{
			self.hide(event);
		}
	};
}

function SiteList(node)
{
	var self = this;
	var list = node;
	var shown;

	this.init = function(){
		var links = list.getElementsByTagName("a");
		var len = links.length;
		for (var i = 0; i < len; i++)
		{
			var a = links[i];
			if (a.className == "noReload") 
			{
				var link = new SiteLink(a);
				addHandler(a, "click", self.toggle.bind(link));
				link.hide();
			}
		}
	};
	
	this.toggle = function(event){
		cancelDefaultAction(event);
		if (this.selected())
		{
			this.hide();
		}
		else
		{
			if (self.shown)
			{
				self.shown.hide();
			}
			this.show();
			self.shown = this;
		}
		return false;
	};
}

function SiteLink(node)
{
	var self = this;
	var node = node;
	
	this.show = function()
	{
		addClass(node, "selected");
		show(node.parentNode.getElementsByTagName("ul")[0]);
	};
	
	this.hide = function()
	{
		removeClass(node, "selected");
		hide(node.parentNode.getElementsByTagName("ul")[0]);
	};
	
	this.selected = function()
	{
		return (node.className.indexOf("selected") != -1);
	};
}

