var Site = {
	init: function(){
		RoundedCorners.moduleImages();
		RoundedCorners.wide();
		RoundedCorners.paket();		
		Weather.init();
		autoPopulate.init();
		
		/*if($(CategoryFilter.container)){
			CategoryFilter.init();
		}*/

        if($("module-paket-sv")){
		    var boxlink = new boxLink($("module-paket-sv"));
		}
		else if($("module-paket-en")){
		    var boxlink = new boxLink($("module-paket-en"));
		}
		
		if($("functions-generic")){
		    var print = document.createElement("li");
		    var printLink = document.createElement("a");
		    printLink.href = "#";
		    printLink.innerHTML = printLinkText;
		    printLink.onclick = function(){
		        window.print();
		        return false;
		    }
		    
		    print.appendChild(printLink);
		    $('functions-generic').appendChild(print);
		}
		
		if($('radio')){
		    var link = $("radio").getElementsByTagName("a")[0];
		    link.onclick = function(){
		        var newwin = window.open(link, "name", "height=666, width=770");
		        if(window.focus)
		            newwin.focus();
		        return false;
		    }
		}
		
		var iframe = $("cbMyBooking");
		iframe.allowTransparency = true;
		
		if($('overnattning')){
		    $('overnattning').style.display = "none";
		}
	},
	
	/**
	 * getElementsByClassName function included here for portability.
	 * 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|$)");
	    var oElement;
	    for(var i=0; i<arrElements.length; i++){
	        oElement = arrElements[i];      
	        if(oRegExp.test(oElement.className)){
	            arrReturnElements.push(oElement);
	        }   
	    }
	    return (arrReturnElements)
	},
	/**
	 * addEvent function included here for portability.
	 * 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]);
		}
	}
}

function boxLink(el){
    var link = el.getElementsByTagName("a")[0];
    if(link){
	    el.className += " link";
	    Site.addEvent(el, "click", function(){
	        window.location = link;
	    });
	}
}

function toggleLayer(){
    var el = $('overnattning');
    var classname = "active"
    if(el.style.display == "block"){
        el.style.display = "none";
        el.className = el.className.replace(" " + classname, "");
    }else{
        el.style.display = "block";
        el.className += " " + classname;
    }
}

/**
 * Filtrerar medlemmar
 */
var CategoryFilter = {
	container: "side-module-filter",
	update: "side-module-update",
	url: "functions/MemberList.ashx",
	
	init: function(){
		var container = $(CategoryFilter.container);
		var select = container.getElementsByTagName("select")[0];
		var input = container.getElementsByTagName("input");
		var checkbox = new Array();
		
		for(var i = 0; i < input.length; i++){
			if(input[i].type == "checkbox")
				checkbox.push(input[i]);
			else if(input[i].className == "hidId")
				CategoryFilter.id = input[i].value;
		}
		
		for(var i = 0; i < checkbox.length; i++){
			checkbox[i].onclick = function(){
				CategoryFilter.refresh();
			}
		}
		
		select.onchange = function(){
			CategoryFilter.refresh();
		}
		
		CategoryFilter.select = select;
		CategoryFilter.checkbox = checkbox;
		CategoryFilter.refresh();
	},
	
	getVars: function(){
		var options = CategoryFilter.select.getElementsByTagName("option");
		var vars = "id=" + CategoryFilter.id;
		vars += "&area=";
		
		for(var i = 0; i < CategoryFilter.checkbox.length; i++){
			if(CategoryFilter.checkbox[i].checked)
				vars += CategoryFilter.checkbox[i].value + "-";
		}
		if(vars.indexOf('-') > -1){
			vars += "::";
			vars = vars.replace("-::", "");
		}

		vars += "&cat=";
		for(var i = 0; i < options.length; i++){
			if(options[i].selected)
				vars += options[i].value;
		}
		
		return vars;
	},
	
	refresh: function(){
		var vars = CategoryFilter.getVars();
		var ajax = new Ajax(CategoryFilter.url + "?" + vars, CategoryFilter.onComplete);
	},
	
	onComplete: function(obj){
	    var update = $(CategoryFilter.update);
		update.innerHTML = obj.responseText;
		RoundedCorners.moduleImages();
	}
}

/**
 * Runda hörn på bilder
 */
var RoundedCorners = {
	moduleImages: function(){
		var modules = Site.getElementsByClassName(document, "div", "module-1");
		var elements = new Array();
		
		for(var i = 0; i < modules.length; i++){
			var content = Site.getElementsByClassName(modules[i], "div", "module-content");
			for(var j = 0; j < content.length; j++){
				elements.push(content[j]);
			}
		}
		
		var radius = 3;
		var options = new Array("bottom-left");
		var rounded = Rounded.init(radius, elements, options);
	},
	
	wide: function(){
		var elements = Site.getElementsByClassName(document, "p", "wide-picture");
		var radius = 6;
		var options = new Array("top-left", "top-right", "bottom-left", "bottom-right");
		var rounded = Rounded.init(radius, elements, options);
	},
	
	paket: function(){
	    var modules = Site.getElementsByClassName(document, "div", "module-2");
		var elements = new Array();
		
		for(var i = 0; i < modules.length; i++){
			elements.push(modules[i]);
			/*var content = Site.getElementsByClassName(modules[i], "div", "module-content");
			for(var j = 0; j < content.length; j++){
			}*/
		}
		
	    var radius = "paket";
	    var options = new Array("top-left", "top-right");
	    var rounded = Rounded.init(radius, elements, options);
	}
}

var Rounded = {
	init: function(radius, elements, options){
	    if(elements != undefined){
		    Rounded.radius = radius;
		    Rounded.options = options;

		    if(elements.length != undefined){
		        for(var i = 0; i < elements.length; i++){
			        Rounded.createMask(elements[i]);
		        }
		    }else{
		        Rounded.createMask(elements);
		    }
		}
	},
	
	createMask: function(element){
		var target = element.getElementsByTagName("img")[0];
		if(target){
		    var maskWrapper = document.createElement("div");
		    maskWrapper.className = "mask-wrapper";
    		
		    element.appendChild(maskWrapper);
		    element.insertBefore(maskWrapper, target);
		    maskWrapper.appendChild(target);
    		
		    for(var i = 0; i < Rounded.options.length; i++){
			    var attr = Rounded.options[i];
			    var mask = document.createElement("div");
			    mask.className = "mask-size-" + Rounded.radius + " mask-" + attr;
			    maskWrapper.appendChild(mask);
		    }
		}
	}
}

/**
 * Vädret
 */
var Weather = {
	init: function(){
		var ajax = new Ajax("functions/weather.ashx", Weather.onComplete);
	},
	
	onComplete: function(obj){
	    if(!obj) return;
	    
		var root = obj.responseXML;
		
		if(!root.documentElement && obj.responseStream)
			root.load(obj.responseStream);
		else
			root = root.documentElement;

		var title = new XmlNode(root, "title");		
		var main = new XmlNode(root, "item");
		var conditionNow = new XmlNode(main, "condition", "yweather");
		var conditionToday = new XmlNode(main, "forecast", "yweather", 0);
		var conditionTomorrow = new XmlNode(main, "forecast", "yweather", 1);
		
		Weather.title = title.value;
		Weather.setCurrent(conditionNow);
		Weather.today = new Weather.Forecast(conditionToday);
		Weather.tomorrow = new Weather.Forecast(conditionTomorrow);
		
		Weather.display();
	},
	
	setCurrent: function(node){
		Weather.current = new Object();
		Weather.current.text = node.getAttribute("text");
		Weather.current.code = node.getAttribute("code");
		Weather.current.temp = node.getAttribute("temp");
		Weather.current.date = node.getAttribute("date");
	},
	
	Forecast: function(node){
		var forecast = new Object();
		forecast.text = node.getAttribute("text");
		forecast.code = node.getAttribute("code");
		forecast.low = node.getAttribute("low");
		forecast.high = node.getAttribute("high");
		forecast.day = node.getAttribute("day");
		forecast.date = node.getAttribute("date");
		return forecast;
	},
	
	display: function(){
		var wrapper = $('side');
		var before = $('radio');
		var container = document.createElement("div");
		var list = document.createElement("ul")
		
		container.appendChild(list);
		container.setAttribute("id", "weather");
		wrapper.appendChild(container);
		wrapper.insertBefore(container, before);
		
		Weather.list = list;
		
		var current = new Weather.DisplayItem(Weather.current, "weather-current", "Just nu", false);
		var today = new Weather.DisplayItem(Weather.today, "weather-today", "Idag", true);
		var tomorrow = new Weather.DisplayItem(Weather.tomorrow, "weather-tomorrow", "Imorgon", true);	
	},
	
	DisplayItem: function(obj, className, label, forecast){
		var el = document.createElement("li");
		var text;
		if(forecast){
			text = "<span class=\"weather-header\">" + label + "</span>";
			text += "<br /><span class=\"weather-degrees\">";
			text += "H&ouml;gst: <span class=\"weather-high\">" + obj.high + "&deg;</span><br />";
			text += "L&auml;gst: <span class=\"weather-low\">" + obj.low + "&deg;</span>";
			text += "</span>";
		}else{
			text = label + ":" + obj.temp + "&deg;<span><!-- --></span>";
		}
		el.innerHTML = text;
		el.id = className;
		el.className = "code-" + obj.code;
		
		Weather.list.appendChild(el);
		return el;
	}
}

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 XmlNode = function(root, nodeName, namespace, index){
	var getNode = function(name){
		return (index == undefined) ? root.getElementsByTagName(name)[0] : root.getElementsByTagName(name)[index]
	}
	return getNode(nodeName) == null && namespace != undefined ? getNode(namespace + ":" + nodeName) : getNode(nodeName);
}

function $() {
	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;
}

/*
 * Auto-populate function by Roger Johansson, www.456bereastreet.com
 */
var autoPopulate = {
	sInputClass:'field',
	sHiddenClass:'structual',
	bHideLabels:false,
	init:function() {
		if (!document.getElementById || !document.createTextNode) {return;}
		var arrInputs = Site.getElementsByClassName(document, 'span', autoPopulate.sInputClass)
		var iInputs = arrInputs.length;
		var oInput;
		for (var i=0; i<iInputs; i++) {
			oInput = arrInputs[i].getElementsByTagName('input')[0];
			if (oInput.type != 'text') { continue; }
			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;
			}
		}
	}
};

Site.addEvent(window, "load", Site.init);