var Util = new Object();
        
// inits script
Util.initPageJs = function() {
	Util.printPage();
	Util.myLinks();
	Util.slideShow();
	Util.initButtons();
	Util.initPollResult();
}

// prints 
Util.printPage = function() {
	$("#print").show().children().click(function(){
		window.print();
		return false;
	})
}

// my links
Util.myLinks = function() {
	$("#myLinks").show();
	$('#topNavSelectSubmit').click(function() {
		var link = $('#topNavSelectLinks option:selected').eq(0).val();
		if(link) {
			location.href = link;
		}
	})
}

// poll result
Util.initPollResult = function() {
	var values = $(".cp_poll_result dd");
	var column = $(".cp_poll_result span");
	$.each(values, function() {
		var result = ($(this).width() - 40) * parseInt($(this).text())/100;
		$(this).find("span").animate({width: result}, 1500);
		// backup for safari (redering to fast, so redo function on mouseover to redraw)
		if(Util.safari()) {
			this.onmouseover = Util.initPollResult;
		}
	});
}

// slideshow
Util.slideShow = function() {
	$(".cp_slideshow_js").show();
	$(".cp_slideshow_nojs").hide();
}

Util.initButtons = function() {
	buttons = $("[type=image]");
	$.each(buttons, function() {
		this.onmouseover = function(){this.src = this.src.replace(/.png/g, "_over.png")};
		this.onmouseout = function(){this.src = this.src.replace(/_over/g, "")};
	})
//	buttons.each().hide();
}

// runs when DOM is ready
$(document).ready(function() {
	Util.initPageJs();
});

// Slideshow object
Util.slideshow = function() {
	// Vars
	var sel = 0;
	var pane = null;
	var img = 0;
  
	// Public functions
	this.init = init;
	this.previous = previous;
	this.next = next;
  
	function init(p, img_array) {
		if(document.getElementById(p)) {
			pane = document.getElementById(p);
		}

		if(img_array.length > 0) {
			img = img_array;
		}

		for(var i = 0; i < pane.getElementsByTagName("DIV").length; i++) {
			if(pane.getElementsByTagName("DIV")[i].className == "prev") {
				pane.getElementsByTagName("DIV")[i].onclick = previous;
				pane.getElementsByTagName("DIV")[i].onmouseover = function(){this.firstChild.firstChild.src = this.firstChild.firstChild.src.replace(/.png/g, "_over.png")};
				pane.getElementsByTagName("DIV")[i].onmouseout = function(){this.firstChild.firstChild.src = this.firstChild.firstChild.src.replace(/_over/g, "")};
			}
			if(pane.getElementsByTagName("DIV")[i].className == "next") {
				pane.getElementsByTagName("DIV")[i].onclick = next;
				pane.getElementsByTagName("DIV")[i].onmouseover = function(){this.firstChild.firstChild.src = this.firstChild.firstChild.src.replace(/.png/g, "_over.png")};
				pane.getElementsByTagName("DIV")[i].onmouseout = function(){this.firstChild.firstChild.src = this.firstChild.firstChild.src.replace(/_over/g, "")};
			}
		}
		pane.onclick = function() {
			location.href = this.link;
		}
		changeImage();
	}

	function changeImage() {
		if(pane && img) {
			pane.style.backgroundImage = "url(" + img[sel][0] + ")";
			pane.link = img[sel][1];
			pane.title = img[sel][2];
		}
	}

	function previous(event) {
		Util.nonClick(event);
		sel--;
		if(sel < 0) {
			sel = img.length - 1;
		}
		changeImage();
		return false;
	}

	function next(event) {
		Util.nonClick(event);
		sel++;
		if(sel >= img.length) {
			sel = 0;
		}
		changeImage();
		return false;
	}
}

Util.over = function(element, targetElement) {
	if(targetElement == undefined) {
		if(!element.initiated){
			element.onmouseout = function() {
				Util.out(this);
			}
			element.initiated = true;
		}
		element.firstChild.src = element.firstChild.src.replace(/\.gif/g, "_sel.gif");
	}
	else {
		if(!element.initiated){
			element.onmouseout = function() {
				Util.out(this, targetElement);
			}
			element.initiated = true;
		}
		targetElement.className += targetElement.className ? " selected" : "selected";
	}
}

Util.out = function(element, targetElement) {
	if(targetElement == undefined) {
		element.firstChild.src = element.firstChild.src.replace(/_sel/g, "");
	}
	else {
		targetElement.className = targetElement.className.replace(/ selected|selected |selected/g, "");
	}
}

Util.noScriptLink = function(action, image, alt) {
	document.write('<a href="'+action+'" onmouseover="Util.over(this);"><img src="'+image+'" alt="'+alt+'" /></a>');
}

Util.listOver = function(element) {
	element.className += element.className ? " over" : "over";
	if(!element.initiated){
		element.onmouseout = function() {
			Util.listOut(this);
		}
		element.initiated = true;
	}
}
Util.listOut = function(element) {
	element.className = element.className.replace(/ over|over |over/g, "");
}
Util.listCheck = function(element, event) {
	event = event ? event : window.event;
	var i, input, inputs;
	if(element.nodeName.toLowerCase() == "input" && element.type == "checkbox") {
		inputs = new Array();
		inputs[0] = element;
	}
	else {
		inputs = element.getElementsByTagName("input");
	}
	for(i = 0; input = inputs[i]; i++) {
		if(input.type == "checkbox") {
			if(input.checkValue) {
				input.checkValue = false;
				input.checked = false;
			}
			else {
				input.checkValue = true;
				input.checked = true;
			}
		}
	}
}
Util.showLargerThumb = function(element) {
	if(!element.initiated){
		var i, thumbs, thumb;
		thumbs = element.parentNode.getElementsByTagName("div");
		for(i = 0; thumb = thumbs[i]; i++) {
			if(thumb.className == "largerThumb") {
				element.thumb = thumb;
				element.onmouseout = function() {
					Util.hideLargerThumb(this);
				}
				element.initiated = true;
			}
		}
	}
	element.thumb.style.left = Util.absoluteLeft(element)-Util.absoluteLeft(document.getElementById("wrapper")) + 52 + 'px';
	element.thumb.style.top = Util.absoluteTop(element) - 14 +  'px';
	element.thumb.className += element.thumb.className ? " show" : "show";
}
Util.hideLargerThumb = function(element) {
	element.thumb.className = element.thumb.className.replace(/ show|show |show/g, "");
}
Util.showLargerQuestionaireThumb = function(element) {
	if(!element.initiated){
		var i, thumbs, thumb;
		thumbs = element.parentNode.getElementsByTagName("div");
		for(i = 0; thumb = thumbs[i]; i++) {
			if(thumb.className == "largerThumb") {
				element.thumb = thumb;
				element.onmouseout = function() {
					Util.hideLargerThumb(this);
				}
				element.initiated = true;
			}
		}

	}

	element.thumb.style.left = Util.absoluteLeft(element)-Util.absoluteLeft(document.getElementById("wrapper")) - 240 + 'px';
	element.thumb.style.top = Util.absoluteTop(element) - 8 + 'px';
	element.thumb.className += element.thumb.className ? " show" : "show";
}
// Get absolute left position
Util.absoluteLeft = function(element) {
	if(Util.safari() && element.nodeName == "TR") {
		return element.getElementsByTagName("TD")[0].offsetLeft + Util.absoluteLeft(Util.getParentTag("TABLE", element));
	}
	else if(element.offsetParent) {
		return element.offsetLeft + Util.absoluteLeft(element.offsetParent);
	}
	return element.offsetLeft;
} 
// Get absolute top position
Util.absoluteTop = function(element) {
	if(Util.safari() && element.nodeName == "TR") {
		return element.getElementsByTagName("TD")[0].offsetTop + Util.absoluteTop(Util.getParentTag("TABLE", element));
	}
	else if(element.offsetParent) {
		return element.offsetTop + Util.absoluteTop(element.offsetParent);
	}
	return element.offsetTop;
}
Util.explorer = function() {
        if(navigator.appVersion.indexOf("MSIE 8") >= 0) {
           return false;
        }
	return (document.all) ? true : false;
}
Util.safari = function() {
	return (navigator.appVersion.indexOf("Safari") >= 0) ? true : false;
}
Util.firefox = function() {
	return (navigator.userAgent.indexOf("Firefox") >= 0) ? true : false;
}
Util.opera = function() {
	return (navigator.userAgent.indexOf("Opera") >= 0) ? true : false;
}

// Returns the first parent occurence of tag
Util.getParentTag = function(tag, element) {
	if(element.nodeName != tag && element.nodeName != "BODY") {
		element = Util.getParentTag(tag, element.parentNode);
	} 
	return element;
}

// Get elements in optional content with classname (default content is contentWrap)
Util.getElementsByClassName = function(classname, content) {
	var element, i, elements, regexp, return_array;
	return_array = new Array();
	elements = content ? (typeof(content) == "string" ? document.getElementById(content).getElementsByTagName("*") : content.getElementsByTagName("*")) : document.getElementById("contentWrap").getElementsByTagName("*");
	// IE < 6 needs a bit of help getting elements
	elements = elements.length ? elements : (Util.explorer() ? document.all : elements);
	regexp = new RegExp("(^|\\s)" + classname + "(\\s|$|\:)");
	for(i = 0; element = elements[i]; i++) {
		if(regexp.test(element.className)) {
			return_array[return_array.length] = element;
		}
	}
	return return_array;
}
// Get elements in optional content with attribute (default content is contentWrap)
Util.getElementByAttribute = function(attribute, content, value) {
	var element, i, elements, return_array;
	return_array = new Array(); 
	elements = content ? (typeof(content) == "string" ? document.getElementById(content).getElementsByTagName("*") : content.getElementsByTagName("*")) : document.getElementById("contentWrap").getElementsByTagName("*");
	// IE < 6 needs a bit of help getting elements
	elements = elements.length ? elements : (Util.explorer() ? document.all : elements);
	for(i = 0; element = elements[i]; i++) {
		if(element.getAttribute(attribute) && (typeof(value) == "undefined" || element.getAttribute(attribute) == value)) {
			return element;
		}
	}
	return false;
}
// Check for type definition of element. Defined by identifier:type
Util.getTypeDefinitionByClassName = function(identifier, element) {
	var regexp = new RegExp(identifier+":[?=\\w/\\#~:.?+=?&%@!\\-]*");
	if(element.className.match(regexp)) {
		return element.className.match(regexp)[0].replace(identifier+":", "");
	}
	return false;
}
Util.nonClick = function(event){
	event = event ? event : window.event;
	if(event.preventDefault){event.preventDefault();}
	if(event.stopPropagation){event.stopPropagation();}
	event.returnValue = false;
	event.cancelBubble = true;
}

// validation
Util.validationMessage = "";

Util.validate = function(form) {
	Util.validationMessage = "";
        count = 0;
	var elements = Util.getElementsByClassName("valid", form);
	for(var i = 0; element = elements[i]; i++) {
		Util.valid.resetError(element);
		Util.valid[Util.getTypeDefinitionByClassName("valid", element)](element);
	}

        if(count==0 && (form.id=='edit_links' || form.id=='edit_newsletters' || form.id=='edit_subs')) {
                alert('Venligst kontroller mindst én afkrydsningsfeltet.');
                return false;
        }
        if(count==0 && form.id=='ny_bruger_klub1000') {
                Util.validationMessage += 'Ja, jeg har læst medlemsbetingelserne.';
        }
	if(Util.validationMessage) {
		alert("Kontroller venligst det indtastede:\n\n"+Util.validationMessage);
                return false;
	}        
        if((form.id=='change_password' || form.id=='ny_bruger' || form.id=='password_reset') && (form.password.value != form.password2.value)) {
                alert('Gentag adgangskode ikke passer adgangskode.');
                return false;
        }
	else {
		return true;
	}
	return false;

}
Util.valid = new Object();

Util.valid.label = function(element) {
	var label = Util.getElementByAttribute(Util.explorer() ? "htmlFor" : "for", element.parentNode, element.id);
	if(label.getElementsByTagName("span").length) {
		label.getElementsByTagName("span")[0].className = "error";
	}
        if(navigator.appVersion.indexOf("MSIE 8") >= 0) {
	        return (label.innerHTML).replace(/: <SPAN class=error>\*<\/SPAN>|:<SPAN class=error>\*<\/SPAN>|<SPAN class=error>\*<\/SPAN>|<SPAN>\*<\/SPAN>/g, "")+"\n";
        }
	if(Util.explorer()) {
		return (label.innerHTML).replace(/: <SPAN class=error>\*<\/SPAN>|:<SPAN class=error>\*<\/SPAN>|<SPAN class=error>\*<\/SPAN>|<SPAN>\*<\/SPAN>/g, "")+"\n";
	}
        else if(Util.opera()) {
		return (label.innerHTML).replace(/: <SPAN class="error">\*<\/SPAN>|:<SPAN class="error">\*<\/SPAN>|<SPAN class="error">\*<\/SPAN>|<SPAN>\*<\/SPAN>/g, "")+"\n";
        }
	else {
		return (label.innerHTML).replace(/: <span class="error">\*<\/span>|:<span class="error">\*<\/span>|<span class="error">\*<\/span>|<span>\*<\/span>/g, "")+"\n";
	}
}
Util.valid.resetError = function(element) {
	var label = Util.getElementByAttribute(Util.explorer() ? "htmlFor" : "for", element.parentNode, element.id);
	if(label.getElementsByTagName("span").length) {
		label.getElementsByTagName("span")[0].className = label.getElementsByTagName("span")[0].className.replace(/error/g, "");
	}
}

/* Validation models */
Util.valid.name = function(element) {
        var regexp = new RegExp("[0-9]");
	if(!element.value) {
		Util.validationMessage += Util.valid.label(element);
	}
        else if(element.value.match(regexp)) {
               Util.validationMessage += Util.valid.label(element);
        } 
}
Util.valid.string = function(element) {
	if(!element.value) {
		Util.validationMessage += Util.valid.label(element);
	}
}
Util.valid.number = function(element) {
	var regexp = new RegExp("[0-9]");
	var regexp_alpha = new RegExp("[^0-9]");
	if(!element.value.match(regexp) || element.value.match(regexp_alpha)) {
		Util.validationMessage += Util.valid.label(element);
	}
}
Util.valid.nonzero_number = function(element) {
	var regexp = new RegExp("[1-9]");
	var regexp_alpha = new RegExp("[^1-9]");
	if(!element.value.match(regexp) || element.value.match(regexp_alpha)) {
		Util.validationMessage += Util.valid.label(element);
	}
}
Util.valid.entered_number = function(element) {
	var regexp = new RegExp("[0-9]*");
        var regexp_alpha = new RegExp("[^0-9]");
	if(!element.value.match(regexp) || element.value.match(regexp_alpha)) {
		Util.validationMessage += Util.valid.label(element);
	}
}
Util.valid.kwh_consumption = function(element) {
	var regexp = new RegExp("[0-9.,]");
	var regexp_alpha = new RegExp("[^0-9.,]");
	if(!element.value.match(regexp) || element.value.match(regexp_alpha)) {
		Util.validationMessage += Util.valid.label(element);
	}
}
Util.valid.postnumber = function(element) {
	var regexp = new RegExp("[0-9]");
	var regexp_alpha = new RegExp("[^0-9]");
	if(element.value.length<4 || element.value.length>4 ) {
		Util.validationMessage += Util.valid.label(element);
	}
	else if(!element.value.match(regexp) || element.value.match(regexp_alpha)) {
		Util.validationMessage += Util.valid.label(element);
	}
}
Util.valid.price = function(element) {
	var regexp = new RegExp("[0-9,]");
	var regexp_alpha = new RegExp("[^0-9,]");
        val = element.value.replace(',','.');
        if((val > 10) || (element.value) && (!element.value.match(regexp) || element.value.match(regexp_alpha))) {
		Util.validationMessage += Util.valid.label(element);
	}
}
Util.valid.password = function(element) {
	var regexp = new RegExp("[0-9a-zA-Z]");
	if(!element.value.match(regexp)) {
		Util.validationMessage += Util.valid.label(element);
	}
}
Util.valid.date = function(element) {
	var regexp = new RegExp(/\d\d-\d\d-\d\d\d\d\b/i);
	if(!element.value.match(regexp)) {
		Util.validationMessage += Util.valid.label(element);
	}
}

Util.valid.date_not_future = function(element) {
	var regexp = new RegExp(/\d\d-\d\d-\d\d\d\d\b/i);
	if(!element.value.match(regexp)) {
		Util.validationMessage += Util.valid.label(element);
	}
        var today = new Date();
        var user_date = new Date(element.value);
 
        var usr_dt_str = element.value;
        var u_date_list = usr_dt_str.split('-');
        var u_yr = u_date_list[2];
        var u_mon = u_date_list[1] - 1;
        var u_dt = u_date_list[0];
        var ud = new Date(u_yr, u_mon, u_dt);

        if (ud > today)
         {
           Util.validationMessage += Util.valid.label(element);
         }
}

Util.valid.email = function(element) {
	var regexp = new RegExp(/^([\w\._-]+)(@)([\w-_]+)(\.)([\w\._-]+)$/);
	if(!element.value.match(regexp)) {
		Util.validationMessage += Util.valid.label(element);
	}
}
// minimum 1 checkbox in container checked 
Util.valid.checkbox = function(container) {        
	if(container.checked) {
                count++;              
	}

}

Util.valid.mobileforsms = function(element) {
        var is_sms = document.getElementById('sms_a');
        if (is_sms.checked || element.value.length > 0)
        {
  	  var regexp = new RegExp("[0-9]");
	  var regexp_alpha = new RegExp("[^0-9]");
	  if(!element.value.match(regexp) || element.value.match(regexp_alpha)) {
		Util.validationMessage += Util.valid.label(element);
	  }
        }
}
