// a simple menu script created by fredrik 2007-03-01

// find out if we should expand a menuItem
function menuControl(evt){
	if(!evt){ evt = window.event; }

	// find the correct LI node
	var target = evt.srcElement || evt.target ;
	var li = target;

	// find the li node
	while(li && li.nodeName.toLowerCase() != 'li'){
		li = li.parentNode;
	}
	if(!li){ return; }

	if(target.nodeName.toLowerCase() == 'a'){
		// remove decoration on the old one
		var item = document.getElementById('menuSelectedItem');
		if(item){
			item.removeAttribute('id');
		}
		// decorate this selected node
		target.setAttribute('id', 'menuSelectedItem');
	}

	if(li.className.indexOf('menuHasChildren') > -1){
		var regex = /\s?menuItemShowing/g;
		// find the UL childNode
		var ul = null;
		var ch = li.childNodes;
		for(var i = (ch.length - 1 || 0); i >= 0; i--){
			if(ch[i].nodeName.toLowerCase() == 'ul'){
				ul = ch[i];
				break;
			}
		}
		
		if(regex.test(li.className)){
			// hide menu, submenus as well
			li.className = li.className.replace(regex, " menuItemHidden");
			var lis = li.getElementsByTagName('li');
			for(var i = 0; i < lis.length; i++){
				var n = lis[i];
				n.className = n.className.replace(regex, " menuItemHidden");
			}
		}else{
			li.className = li.className.replace(/\s?menuItemHidden/, " menuItemShowing");
		}

		// prevent the default behavour to of a link
		evt.preventDefault ? evt.preventDefault() : evt.returnValue = false;
	}
}

// if we clicked a link, post the expanded items
function postExpandedMenuItems(evt){
// evt.preventDefault ?  evt.preventDefault() : evt.returnValue = false;

	var cur = /[?&]category=([0-9]+)/.exec(location.search);
	if(cur){
		cur = cur[1];
	}

	var link = evt.srcElement || evt.target;
	var href = link.href.split('?');
	if(href.length){
		var get = href[1].split('&');
		var getStr = "", tmp, page, cat;
		for(var i = 0, stop = get.length; i < stop; i++){
			tmp = get[i].split("=");
			switch(tmp[0]){
// 			if(tmp[0] != 'page' && tmp[0] != 'expandedmenuitems'){// ignore these
				case 'expandedmenuitems':
					break;
				case 'page':
					page = get[i];
					break;
				case 'category':
					cat = tmp[1];
				default:
				getStr += "&" + get[i];
			}
		}

		// only include page when we are on the same category
		if(cat == cur){
			getStr += "&" +page;
		}
	}

	var expStr = getExpandedMenuItems()
	if(expStr){
		getStr += "&" +'expandedmenuitems=' + expStr;
	}

	link.href = href[0] + "?" + getStr.substring(1);
}

// get ids of expanded menuItems
function getExpandedMenuItems(){
	var menuRoot = document.getElementById('menuList');
	var items = menuRoot.getElementsByTagName('li');
	var regex = /\bmenuItemShowing\b/;
	var regex2 = /[?&]category=([0-9]+)/;
	var getstr = "";

	for(var i = 0; i < items.length; i++){
		if(regex.test(items[i].className)){
			var href = items[i].getElementsByTagName('a')[0].href;
			var id = regex2.exec(href);
			if(id){
				getstr += getstr.length ? ','+id[1] : id[1];
			}
		}
	}
	return getstr;
}

function openBigImage(linkNode){
	var node = linkNode;
	while(node){
		if(node.id == 'contentcenter'){
			break;
		}
		node = node.parentNode;
	}

	if(node){
		var win = window.open("", "Bild", "width=630,height=500,top=200,left=200");
		win.document.write("<html><head><style>@import 'css/shop.css';</style></head><body><div class='center'><img src='" + linkNode.href +  " align='bottom'/><br/><a href='javascript:window.close();'>Stäng</a></div></body></html>");
		win.document.close();
	}
}

// listen to all onclicks
window.onload = function(){
	
	var regex = new RegExp(location.protocol + '//'+ (location.host || location.hostname) + location.pathname);
	var regexDomain = new RegExp(location.protocol + '//'+ (location.host || location.hostname));

	document.body.onclick = function(evt){
		if(!evt){ evt = window.event; }
		var target = evt.target || evt.srcElement;
		var nodeName = target.nodeName.toLowerCase();
		switch(nodeName){
			case 'img':
				if(target.parentNode.nodeName.toLowerCase() == 'a'){
					//open a little window
					var node = target.parentNode;
					if(regexDomain.test(node.href)){ // match this domain?
						openBigImage(node);
						evt.preventDefault ? evt.preventDefault() : evt.returnValue = false;
					}
				}
				break;
			case 'a':
				// find out if the link is pointing to this page
				if(regex.test(target.href)){
					// change the href to match the status of the menu
					postExpandedMenuItems.call(this, evt);
				}
			case 'p': // falltrough
				// find out if it is a menu event
				var menuRoot = document.getElementById('menuList');
				while(target.parentNode){
					if(target.parentNode == menuRoot){
						return menuControl.call(this, evt);
					}
					target = target.parentNode;
				}
				break;
		}
	}
}

// validate the customer form before it is submited
function customerFormSubmit(form, evt, test){
	if(!test){
		test = {
				'forename': /.{2,}/,
				'surname': /.{2,}/,
				'adress': /.{3}/,
				'zipnr':/[0-9]{5}/,
				'zipname':/.{2,}/,
				'email':/([\da-z]+[-._+&'])*[\da-z]+@([0-9a-zA-Z]([-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?\.)+[a-z]{2,6} ?/
				};
	}
	var ret = true;
	var childs = form.childNodes;
	// go invards to be able to get the focus order correct
	for(var i = childs.length - 1; i >= 0; i--){
		var node = childs[i];
		if(test[node.name] instanceof RegExp){
			if(test[node.name].test(node.value)){
				node.className = "";
			}else{
				node.className = "requiredField";
				node.focus();
				ret = false;
				evt.returnValue = false;
				if(evt.preventDefault){
					evt.preventDefault();
				}
			}
		}
	}
	return ret;
}

function valueIsNumeric(evt){
	if(!evt){
		evt = window.event;
	}
	if(evt.charCode){
		return !isNaN(String.fromCharCode(evt.charCode));
	}
	return true; // backspace and such
}

// for textarea (doesn't have maxlength)
function checkMaxLength(evt, maxlength){
	if(!evt){
		evt = window.event;
	}
	var mess = "", target = evt.target || evt.srcElement;
	if((evt.charCode || evt.keyCode) && target.value.length >= maxlength){
		 // allow backspace, delete and such
		evt.preventDefault ? evt.preventDefault() : evt.returnValue = false;
		target.style.backgroundColor = "red";
		mess = "Detta fält tillåter bara "+maxlength+" tecken.";
	}else{
		target.style.backgroundColor = "";
	}

	var error = document.getElementById('displayError');
	if(error){
		if(mess){
			var txt = document.createTextNode(mess);
			if(error.firstChild){
				error.replaceChild(txt, error.firstChild);
			}else{
				error.appendChild(txt);
			}
		}else{
			if(error.firstChild){
				error.removeChild(error.firstChild);
			}
		}
	}
}

function debug(str){
	var div = document.createElement("div");
	div.appendChild(document.createTextNode("DEBUG: "+str));
	div.appendChild(document.createElement("br"));
	document.body.appendChild(div);
}
