var Site = {
	init: function(){
		Site.preloadPictures();
		autoPopulate.init();
		shareLinks.init();
		boxLinks.init();
		
		//printHandler.init();
		//focusFields.init();
		
		if(EL(autoComplete.fieldId)){
			autoComplete.init();
		}
		
		if(EL('generic-functions-print')){
			var printer = EL('generic-functions-print');
			printer.onclick = function(){
				window.print();
				return false;
			}
		}
	},
	
	/* Written by Jonathan Snook, http://www.snook.ca/jonathan
	 * Add-ons by Robert Nyman, http://www.robertnyman.com
	 */
	getElementsByClassName:function(oElm, strTagName, strClassName) {
	    var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName);
	    var arrReturnElements = new Array();
	    strClassName = strClassName.replace(/\-/g, "\\-");
	    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|EL)");
	    var oElement;
	    for(var i=0; i<arrElements.length; i++){
	        oElement = arrElements[i];      
	        if(oRegExp.test(oElement.className)){
	            arrReturnElements.push(oElement);
	        }   
	    }
	    return (arrReturnElements)
	},
	/**
	 * addEvent found at http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html
	 */
	addEvent:function(obj, type, fn) {
		if (obj.addEventListener)
			obj.addEventListener(type, fn, false);
		else if (obj.attachEvent) {
			obj["e"+type+fn] = fn;
			obj[type+fn] = function() {obj["e"+type+fn](window.event);}
			obj.attachEvent("on"+type, obj[type+fn]);
		}
	},
	
	preloadPictures: function(){
		var img = new Image();
		var array = new Array(
			"img/share-box.gif",
			"img/share-box-big.gif"
		);
		
		if(document.images){
			for(var i=0; i < array.length; i++){ img.src = array[i]; }
		}
	}
}

var autoComplete = {
	url: "/templates/UA/Pages/DictionaryAjaxSearch.aspx",
	fieldId: "dictionary-search",
	fieldHiddenId : "dictionary-search-hidden",
	formId: "__aspnetForm",
	submitId: "dictionary-search-submit",
	
	visible: false,
	position: 0,
	
	init: function(){
		autoComplete.wrapper = document.createElement("div");
		autoComplete.wrapper.className = "autocomplete";
		
		autoComplete.search = EL(autoComplete.fieldId);
		autoComplete.search.setAttribute("autocomplete", "off");
		autoComplete.searchHidden = EL(autoComplete.fieldHiddenId);
		
		autoComplete.parent = autoComplete.search.parentNode;
		
		autoComplete.form = EL(autoComplete.formId);
		autoComplete.button = EL(autoComplete.submitId);
		
		autoComplete.dictionaryStartNodeId = EL("dictionary-start-node-id").value;
		
		Site.addEvent(autoComplete.search, "keyup", function(e){
			var evtobj = window.event ? event : e;
			var key = evtobj.charCode? evtobj.charCode : evtobj.keyCode;
			var query = "?q=" + autoComplete.search.value;
			
			switch(key){
				case 38:
					autoComplete.onKeyUp();
					break;
				case 40:
					autoComplete.onKeyDown();
					break;
				case 13:
					autoComplete.onKeyEnter();
					break;
				default:
					autoComplete.searchHidden.value = autoComplete.search.value;
					var ajax = new Ajax(autoComplete.url + query + "&id=" + autoComplete.dictionaryStartNodeId, autoComplete.onComplete);
					break;
			}
		});
		
		Site.addEvent(autoComplete.search, "blur", function(e){
			setTimeout("autoComplete.destroy()", 250);
		});
		
		//Site.addEvent(autoComplete.form, "submit", function(e){
		//	if( e.preventDefault ) { e.preventDefault(); }
		//	e.returnValue = false;
		//});
		
		Site.addEvent(autoComplete.button, "click", function(e){
			autoComplete.submit();
		});
	},
	
	onKeyUp: function(){
		if(!autoComplete.visible){ return; }
		if(autoComplete.position == 1){
			autoComplete.setIndex(autoComplete.items.length - 1);
			return;
		}
		autoComplete.changeIndex("up");
		autoComplete.searchHidden.value = autoComplete.getCurrent().innerHTML;
	},
	
	onKeyDown: function(){
		if(!autoComplete.visible){ return; }
		if(autoComplete.position == (autoComplete.items.length)){
			autoComplete.setIndex(0);
			return;
		}
		autoComplete.changeIndex("down");
		autoComplete.searchHidden.value = autoComplete.getCurrent().innerHTML;
	},
	
	onKeyEnter: function(){
		if(!autoComplete.visible){ 
			autoComplete.submit();
			return;
		}
		autoComplete.select(autoComplete.getCurrent());
	},
	
	getCurrent: function(){
		if(autoComplete.position > 0) {
			return autoComplete.items[autoComplete.position - 1];
		}
	},
	
	changeIndex: function(e){
		if(autoComplete.position != 0) { autoComplete.items[autoComplete.position - 1].className = ""; }
		if(e == "down"){ autoComplete.position++; }
		else {autoComplete.position--; }
		autoComplete.items[autoComplete.position - 1].className = "sel";
	},
	
	setIndex: function(index){
		if(autoComplete.position != 0) { autoComplete.items[autoComplete.position - 1].className = ""; }
		autoComplete.position = index + 1;
		autoComplete.items[autoComplete.position - 1].className = "sel";
	},
	
	onComplete: function(obj){
		autoComplete.response = obj.responseText;
		if(autoComplete.response == ""){ autoComplete.reset(); return; }
		
		autoComplete.wrapper.innerHTML = autoComplete.response;
		
		autoComplete.items = autoComplete.wrapper.getElementsByTagName("li");
		
		for(var i = 0; i < autoComplete.items.length; i++){
			autoComplete.items[i].index = i;
			
			Site.addEvent(autoComplete.items[i], "mouseover", function(){
				autoComplete.setIndex(this.index);
			});
			
			Site.addEvent(autoComplete.items[i], "click", function(){
				autoComplete.searchHidden.value = this.innerHTML;
				autoComplete.select(this);
			});
		}
		
		if(!autoComplete.visible){
			autoComplete.parent.insertBefore(autoComplete.wrapper, autoComplete.search);
			autoComplete.visible = true;
		}

	},
	
	submit: function(){
		autoComplete.form.onsubmit = null;
		autoComplete.form.submit();
	},
	
	select: function(el){
		//if(el != undefined) { autoComplete.search.value = el.innerHTML; }
		//autoComplete.destroy();
		autoComplete.submit();
	},
	
	destroy: function(){
		if(autoComplete.visible){ autoComplete.wrapper.parentNode.removeChild(autoComplete.wrapper); }
		autoComplete.reset();
	},
	
	reset: function(){
		autoComplete.visible = false;
		autoComplete.position = 0;
	}
}

/*var printHandler = {
	init: function(){
		if(EL('generic-functions')){
			var li = document.createElement("li");
			li.id = "generic-functions-print";
			var link = document.createElement("a");
			link.href = "#";
			link.innerHTML = "Skriv ut";
			
			link.onclick = function(){
				printHandler.print();
				return false;
			}
			
			li.appendChild(link);
			EL('generic-functions').insertBefore(li, EL('generic-functions-sitemap'));
		}
	},
	
	print: function(){
		window.print();
	}
}*/

var shareLinks = {
	init: function(){
		var shareLinks = Site.getElementsByClassName(document, "li", "article-functions-share");
		for(var i = 0; i < shareLinks.length; i++){
			var link = shareLinks[i].getElementsByTagName("a")[0];
			link.onclick = function(){
				var menu = shareMenu.create(this);
				return false;
			}
		}
	}
}

var shareMenu = {
	timeout: 1.5,
	ajaxUrl: "/templates/UA/Pages/EmailFriendAjax.aspx",
	
	create: function(el){
		var pageUrl = el.getAttribute("pageUrl");
		var pageTitle = el.getAttribute("pageTitle");
		
		var wrapper = document.createElement("div");
		var menu = document.createElement("ul");
		
		wrapper.className = "share-menu";
		wrapper.onmouseover = shareMenu.onMouseOver;
		wrapper.onmouseout = shareMenu.onMouseOut;
		
		var items = new Array(
			{ "title" : "E-post", "url" : "#", "css" : "share-menu-email", "event": shareMenu.onEmailClick },
			{ "title" : "Facebook", "url" : "http://www.facebook.com/share.php?u=" + pageUrl, "css" : "share-menu-facebook" },
			{ "title" : "Digg", "url" : "http://digg.com/submit?phase=2&url=" + pageUrl + "&title=" + pageTitle, "css" : "share-menu-digg" },
			{ "title" : "MySpace", "url" : "http://www.myspace.com/Modules/PostTo/Pages/?c=" + pageUrl, "css" : "share-menu-myspace" }
		);
		
		for(var i = 0; i < items.length; i++){
			var list = document.createElement("li");
			list.className = items[i].css;
			
			var link = document.createElement("a");
			link.href = items[i].url;
			link.innerHTML = items[i].title;
			link.title = items[i].title;
			if(items[i].event != undefined) link.onclick = items[i].event;
			
			list.appendChild(link);
			menu.appendChild(list);
		}
		
		wrapper.appendChild(menu);
		el.parentNode.appendChild(wrapper);
		
		shareMenu.startTime();
		
		this.wrapper = wrapper;
		this.pageUrl = pageUrl;
		this.pageTitle = pageTitle;
	},
	
	onEmailClick: function(){
		shareMenu.wrapper.className = "send-to-friend";
		shareMenu.wrapper.innerHTML = "<h4>Tipsa en kompis</h4>";
		shareMenu.wrapper.onmouseout = null;
		
		var exit = document.createElement("p");
		exit.className = "send-to-friend-close";
		
		var exitLink = document.createElement("a");
		exitLink.title = "St&auml;ng";
		exitLink.href = "#";
		exitLink.innerHTML = "St&auml;ng";
		exitLink.onclick = function(){
			shareMenu.destroy();
			return false;
		}
		
		exit.appendChild(exitLink);
		shareMenu.wrapper.appendChild(exit);
		
		var form = document.createElement("form");
		form.action = "skicka.html";
		form.method = "post";
		
		var fields = new Array(
			{"label":"Ditt namn:","name":"yourName","wrapper":"send-to-friend-col-1"},
			{"label":"Din e-post:","name":"yourMail","wrapper":"send-to-friend-col-2"},
			{"label":"Din kompis namn:","name":"friendName","wrapper":"send-to-friend-col-1"},
			{"label":"Din kompis e-post:","name":"friendMail","wrapper":"send-to-friend-col-2"}
		);
		
		for(var i = 0; i < fields.length; i++){
			var div = document.createElement("div");
			div.className = fields[i].wrapper;
			
			var label = document.createElement("label");
			label.innerHTML = fields[i].label;
			
			var input = document.createElement("input");
			input.type = "text";
			input.name = fields[i].name;
			
			div.appendChild(label);
			div.appendChild(input);
			form.appendChild(div);
		}

		var button = document.createElement("input");
		button.className = "button-gray";
		button.type = "submit";
		button.value = "Skicka";		
		form.appendChild(button);
		this.button = button;
		
		shareMenu.wrapper.appendChild(form);
		
		form.onsubmit = function(){
			button.disabled = "disabled";
			button.onclick = null;
			shareMenu.submit(this);
			return false;
		};
		
		return false;
	},
	
	submit: function(form){
		var inputs = form.getElementsByTagName("input");
		var q = "?";
		for(var i=0; i < inputs.length; i++){
			q += i > 0 ? "&" : "";
			q += inputs[i].name + "=" + inputs[i].value;
		}
		var ajax = new Ajax(shareMenu.ajaxUrl + q + "&pageUrl=" + this.pageUrl, function(obj){
			form.innerHTML = obj.responseText;
			shareMenu.wrapper.onmouseout = shareMenu.onMouseOut;
		});
	},
	
	onMouseOver: function(){
		shareMenu.clearTime();
	},
	
	onMouseOut: function(){
		shareMenu.startTime();
	},
	
	startTime: function(){
		shareMenu.clearTime();
		shareMenu.timer = setTimeout("shareMenu.destroy()", shareMenu.timeout * 1000);
	},
	
	clearTime: function(){
		if(shareMenu.timer) clearTimeout(shareMenu.timer);
	},
	
	destroy: function(){
		shareMenu.wrapper.parentNode.removeChild(shareMenu.wrapper);
	}
}
var boxLinks = {
	init: function(){
		
		if(EL('register-now')){
			boxLink.create(EL('register-now'));
		}
		
		var elements = new Array();
		
		var lists = Site.getElementsByClassName(document, "ul", "side-module-list");
		for(var i = 0; i < lists.length; i++){
			var li = lists[i].getElementsByTagName("li");
			for(var j = 0; j < li.length; j++){
				elements.push(li[j]);
			}
		}
		
		/*var boxes = new Array(
			{"id": "profile-discussions", "element":"li"}
			,{"id": "local-activities", "element":"li"}
		);
		
		for(var i = 0; i < boxes.length; i++){
			if(EL(boxes[i].id)){
				var li = EL(boxes[i].id).getElementsByTagName(boxes[i].element);
				for(var j = 0; j < li.length; j++){
					elements.push(li[j]);
				}
			}
		}*/

		for(var i = 0; i < elements.length; i++){
			var link = boxLink.create(elements[i]);
		}
	}
}

var boxLink = {
	create: function(el){
		var link = el.getElementsByTagName("a")[0];
		
		if(link == undefined) { return };
		
		el.className += " link";
		
		Site.addEvent(el, "mouseover", function(){
			el.className += " over";
		});
		
		Site.addEvent(el, "mouseout", function(){
			el.className = el.className.replace(" over", "");
		});
		
		Site.addEvent(el, "click", function(){
			window.location = link.href;
		});
	}
}

var XmlHttp = function(){
	try {
		// Firefox, Opera 8.0+, Safari
		return new XMLHttpRequest();
	} catch (e) {
		// Internet Explorer
		try	{
			return new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			return new ActiveXObject("Microsoft.XMLHTTP")
		}
	}
	return null;
}

var Ajax = function(url, onComplete){
	var xmlHttp = new XmlHttp();
	
	if(xmlHttp != null){
		xmlHttp.onreadystatechange = function(){
			if (xmlHttp.readyState == 4) { 
				onComplete(xmlHttp);
			}
		}
		
		xmlHttp.open("GET", url, true);
		xmlHttp.send(null);
	}
}

var focusFields = {
	cssClass: "focus",
	init: function(){
		var inputs = document.getElementsByTagName("input");
		for(var i = 0; i < inputs.length; i++){
			if(inputs[i].type == "text" || inputs[i].type == "password"){
				Site.addEvent(inputs[i], "focus", function(){
					this.oldClass = this.className;
					this.className += " " + focusFields.cssClass;
				});
				Site.addEvent(inputs[i], "blur", function(){
					if(this.oldClass) this.className = this.oldClass;
				});
			}
		}
	}
}

/*
* Auto-populate function by Roger Johansson, www.456bereastreet.com
*/
var autoPopulate = {
	sInputClass:'populate',
	sHiddenClass:'structual',
	bHideLabels:false,

	init:function() {
		if (!document.getElementById || !document.createTextNode) {return;}
		var arrInputs = Site.getElementsByClassName(document, 'input', autoPopulate.sInputClass)
		var iInputs = arrInputs.length;
		var oInput;
		for (var i=0; i<iInputs; i++) {
			oInput = arrInputs[i];
			if (oInput.type == 'text' || oInput.type == 'password'){
				if (autoPopulate.bHideLabels) { autoPopulate.hideLabel(oInput.id); }
				if ((oInput.value == '') && (oInput.title != '')) { oInput.value = oInput.title; }
				Site.addEvent(oInput, 'focus', function() {
					if (this.value == this.title) {
						this.value = '';
						this.select();
					}
				});
				Site.addEvent(oInput, 'blur', function() {
					if (!this.value.length) { this.value = this.title; }
				});
			}
		}
	},
	hideLabel:function(sId) {
		var arrLabels = document.getElementsByTagName('label');
		var iLabels = arrLabels.length;
		var oLabel;
		for (var i=0; i<iLabels; i++) {
			oLabel = arrLabels[i];
			if (oLabel.htmlFor == sId) {
				oLabel.className = oLabel.className + ' ' + autoPopulate.sHiddenClass;
			}
		}
	}
};

function EL() {
	var elements = new Array();
	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;
}

Site.addEvent(window, 'load', Site.init);

function addDOMLoadEvent(func){
	if (!window.__load_events){
		var init = function(){
			if(arguments.callee.done) return;
				arguments.callee.done = true;
      			if (window.__load_timer) {
					clearInterval(window.__load_timer);
					window.__load_timer = null;
				}
          	for (var i=0;i < window.__load_events.length;i++) {
				window.__load_events[i]();
			}
			window.__load_events = null;
		};
		if (document.addEventListener) {
			document.addEventListener("DOMContentLoaded", init, false);
		}
		/*@cc_on @*/
		/*@if (@_win32)
			document.write("<scr"+"ipt id=__ie_onload defer src=//0><\/scr"+"ipt>");
			var script = document.getElementById("__ie_onload");
			script.onreadystatechange = function() {
				if (this.readyState == "complete") {
					init(); // call the onload handler
				}
			};
		/*@end @*/
		if(/WebKit/i.test(navigator.userAgent)){
			window.__load_timer = setInterval(function(){
				if (/loaded|complete/.test(document.readyState)){
					init();
				}
			}, 10);
		}
    	window.onload = init;
		window.__load_events = [];
	}
	window.__load_events.push(func);
}