/*
// CATCH EVENTS
if (!document.all) {document.captureEvents(Event.KEYDOWN|Event.KEYUP);}
var eventKey = new Object();
window.onblur = function() {for (var a in eventKey) eventKey[a] = false;}
document.onkeyup = function(e)
{
	if (!document.all) {event = e;}
	if (event.keyCode > 0) {eventKey[event.keyCode] = false;}
	if (window.onKeyUp) onKeyUp();
}
document.onkeydown = function(e)
{
	if (!document.all) {event = e;}
	if (event.keyCode > 0) {eventKey[event.keyCode] = true;}
	if (window.onKeyDown) onKeyDown();
}
*/

// FUNCTIONS
function setCookie(c_name,value,expiredays) {
	var exdate=new Date();
	exdate.setDate(expiredays);
	document.cookie=c_name+ "=" +escape(value)+((expiredays==null) ? "" : ";expires="+exdate);
}
function getCookie(c_name) {
	if (document.cookie.length>0) {
		c_start=document.cookie.indexOf(c_name + "=")
		
		if (c_start!=-1) { 
			c_start=c_start + c_name.length+1
			c_end=document.cookie.indexOf(";",c_start)
			if (c_end==-1) c_end=document.cookie.length
			return unescape(document.cookie.substring(c_start,c_end))
		} 
	}
	return null
}
function deleteCookie(name)
{
	setCookie(name,"",-1);
}
function showLogin() {
   Modal('Du loggas nu in...<br />Laddar innehåll...</div>',{width: 200, height: 60, callback: hideLogin})
}
function hideLogin(e) {
		removeModal();
}
function trim(s)
{
	return s.toString().replace(/^(\s)+/, "").replace(/(\s)+$/, "");
}

function verifyOrgId(n)
{
	var re = new RegExp("^([0-9]{6})-([0-9]{4})$", "ig");
	var ma = re.exec(n);
	return (ma && (calculateCheckDigit(ma[1] + ma[2].substring(0,3)) == ma[2].charAt(3)));
}

function calculateCheckDigit(num)
{
    var i, n, sum = 0, l;
    
    num = num.toString();
    l = num.length;
    for(i = l - 1; i >= 0; i--)
    {
        n = parseInt(num.charAt(i)) * (2 - ((l + 3 - i) % 2));
        sum += parseInt(Math.floor(n / 10) + (n % 10));
	}
	return (10 - (sum % 10)) % 10;
}

function verifyEmail(e, mandatory)
{
	if (trim(e) == "") return !mandatory;
	var re = /^.+@.+\..+$/ig;
	return (re.exec(e) != null);
}

function verifyPhone(p, mandatory)
{
	if(trim(p) == "") return !mandatory;
	var re = /^([0-9]|\s|\+|\-|\(|\))+$/ig;	
	return (re.exec(p) != null);
}

function parseFloatEx(f)
{
	return parseFloat(f.toString().replace(",", "."));
}

// Returnerar -1 om allt är ok, annars 0 och uppåt. (den plats där första felet påträffades)
function checkAllowedChar(str)
{
	var allowedchar = /[^-\^_\^a-z\^A-Z\^0-9]/gi;
	var check = str.search(allowedchar);
	return check;
}

function checkEmail(s)
{
	var exclude=/[^@\-\.\w]|^[_@\.\-]|[\._\-]{2}|[@\.]{2}|(@)[^@]*\1/;
	var check=/@[\w\-]+\./;
	var checkend=/\.[a-zA-Z]{2,3}$/;
	var emailad=s;

	if(((emailad.search(exclude) != -1)||(emailad.search(check)) == -1)||(emailad.search(checkend) == -1))
	{
		return false;
	} else 
	{
		return true;
	}
	
}

function parseDate(dstr)
{
	var re = /^([0-9]{4})-([0-1][0-9])-([0-3][0-9])$/ig;
	var match = re.exec(dstr);
	if(!match) return null;
	if(match[2] < 1 || match[2] > 12) return null;
	var days = new Array(31,(parseInt(match[1]) % 4 ? 28 : 29),31,30,31,30,31,31,30,31,30,31);
	if(match[3] < 1 || match[3] > days[match[2] - 1]) return null;
	return new Date(match[1], match[2], match[3]);
}

function time(n)
{
	var re = /^(([0-2])?[0-9])\:([0-5][0-9])$/ig;
	var ma = re.exec(trim(n));
	
	if(!ma)
		this.valid = false;
	else
	{
		this.valid = (parseInt(ma[1]) < 24);
		this.hour = parseInt(ma[1]);
		this.minute = parseInt(ma[3]);
	}
}
function formatPrice(p, l, delim)
{
	var b = Math.pow(10, l);

	p = parseFloatEx(p);
	p = Math.round(p * b) / b;

	p = p.toString().split(".");

	var h = "", d = "", j = 0;

	var nil = "0000000000000000000";

	if(p.length == 1)
		d = nil.slice(0, l);
	else if(p[1].length < l)
		d = p[1] + nil.slice(0, l - p[1].length);
	else
		d = p[1];

	for(var i = p[0].length - 1; i >= 0; i--)
	{
		if(j && (j % 3) == 0) h = " " + h;
		h = p[0].charAt(i) + h;
		j++;
	}

	if(l > 0)
	{
		if(!delim) delim = ",";
	}
	else
		delim = "";
	
	return h + delim + d;
}
function round(number, numdecdig)
{
	if (numdecdig == null) return number;
	
	var n = Math.pow(10, numdecdig);
	
	number = Math.round(number * n);
	number = number / n;
	
	return number;
}

function coalesce(val1, val2)
{
	if (val1 != null && trim(val1) != "")
		return val1;
	else
		return val2;
}

function makeStringSafe(str)
{
	str = str.replace(/ö/gi, "o");
	str = str.replace(/å/gi, "a");
	str = str.replace(/ä/gi, "a");
	str = str.replace(/\&/gi, "o");
	str = str.replace(/ü/gi, "u");
	str = str.replace(/é/gi, "e");
	str = str.replace(/è/gi, "e");
	str = str.replace(/á/gi, "a");
	str = str.replace(/à/gi, "a");
	str = str.replace(/\//gi, "-");
	str = str.replace(/\\/gi, "-");
	str = str.replace(/\$/gi, "S");
	str = str.replace(/\£/gi, "L");
	str = str.replace(/\*/gi, "x");
	str = str.replace(/\s/gi, "_");
	
	str = str.replace(/(\W|^-)/gi, "");
	
	return str;
}

function list_setSelectedItem(sel, value)
{
	for (var i = 0; i < sel.options.length && sel.options[i].value != value; i++);
	
	var ok = (i < sel.options.length);
	
	if (ok) sel.selectedIndex = i;
	
	return ok;
}

function list_moveSelected(sourceSel, targetSel)
{
	for (var i = 0; i < sourceSel.options.length; )
	{
		if (sourceSel.options[i].selected)
		{
			//var newOption = new Option(sourceSel.options[i].text, sourceSel.options[i].value, false, false);
			list_insert(targetSel, sourceSel.options[i].text, sourceSel.options[i].value);
			sourceSel.remove(i);
		}
		else
			i++;
	}
	list_sort(targetSel);
}

function list_insert(targetSel, optionText, optionValue)
{
	newOption = new Option(optionText, optionValue, false, false);
	targetSel.options[targetSel.options.length] = newOption;
}

function selectSort(a, b)
{
	var aVal = a.split("\n")[1].toUpperCase();
	var bVal = b.split("\n")[1].toUpperCase();
	
	if (aVal < bVal)
		return -1;
	else if (aVal > bVal)
		return 1;
	return 0;
}

function list_sort(sel)
{
	//don't work if there are one \n in the string
	
	var opt = new Array();
	for (var i = 0; i < sel.options.length; i++)
	{
		opt[i] = sel.options[i].value + "\n" + sel.options[i].text;
	}
	
	opt.sort(selectSort);
	
	for (var i = 0; i < opt.length; i++)
	{
		var optData = opt[i].split("\n");
		sel.options[i].value = optData[0];
		sel.options[i].text = optData[1];
	}
}

function list_excludeContent(sourceSel, targetSel)
{
	var j, targetVal, i = 0;
	
	for (j = 0; j < targetSel.options.length; j++)
	{
		targetVal = targetSel.options[j].value;
		while (i < sourceSel.options.length && parseInt(sourceSel.options[i].value) != parseInt(targetVal)) i++;
		if (i != sourceSel.options.length) sourceSel.remove(i);
		i = 0;
	}
}

function list_getValueString(sel)
{
	var str = "";
	for(var i = 0; i < sel.options.length; i++)
	{
		if (i > 0) str += "|";
		str += sel.options[i].value;
	}
	return str;
}

function list_removeAll(sel)
{
	while (sel.length > 0)
		sel.remove(0);
}

Math.roundUp = function(number)
{
	var i = parseInt(number);
	if (i < number) i++;
	return i;
}

function countLines(string, lineLetter)
{
	var v = string.split("\n");
	var lc = v.length;
	
	for (var i = 0; i < v.length; i++)
		lc += max(Math.roundUp(v[i].length / lineLetter) - 1, 0);
	
	return lc;
}

function min(value1, value2)
{
	return (value1 < value2 ? value1 : value2);
}

function max(value1, value2)
{
	return (value1 > value2 ? value1 : value2);
}

function CartAction() {	
	this.go = function() {
		var cartid = this.cartid;
		var action = this.action;
		var artno = this.articleno;
		var count = coalesce(this.count,1);
		var caid = coalesce(this.caid,-1);
		var rowtext = this.rowtext;
		var reloadmf = coalesce(this.reloadmf,0);
		
		// run cart action
		var url = "/cartmodify.asp?action=" + action + "&ReloadMF=" + reloadmf + "&CartId=" + cartid + "&ArticleNo=" + escape(artno) + "&Count=" + count + "&CAId=" + caid + "&RowText=" + rowtext;		
		parent.ohaction.location.href = url;
	}
}

function addtocart(cartid, artno, n, caid, rowtext, reloadmf)
{	
	var crt = new CartAction
		// substitute worthless javascript encode function
		artno = artno.replace(/\+/g,"_PLUS_")
		artno = artno.replace(/\-/g,"_MINUS_")
		artno = artno.replace(/\ /g,"_SPACE_");
		
		crt.cartid = cartid;
		crt.action = "addarticle";
		crt.articleno = artno;
		crt.count = n;
		crt.caid = coalesce(caid,-1);
		crt.rowtext = coalesce(rowtext,'');
		crt.reloadmf = coalesce(reloadmf,0);
		crt.go();	
	
	return false;
}

function radio_getCheckedValue(radioelement) {
	for(var i=0; i < radioelement.length; i++) {
		if(radioelement[i].checked)
			return radioelement[i].value;
	}
}

function ActivateMenuItem(sMenuItem, sURL) {

	if(sMenuItem.length > 0) { 
		parent.ohtop.document.getElementById(parent.ohtop.g_ActiveMenu).src = "images/menu/" + parent.ohtop.g_ActiveMenu + ".jpg"; //reset active menu item
		parent.ohtop.document.getElementById(sMenuItem).src = "images/menu/" + sMenuItem + ".jpg"; //activate chosen manu item
		parent.ohtop.g_ActiveMenu = sMenuItem;
	}
	if(sURL) {
		parent.ohmain.location.href = sURL;
		//parent.ohtop.getElementById("hidden").focus();
	}
}

var fakeModal;
var fakeModalFrame;
var fakeModalIFrame;
var fakeModalTextDiv;

var defaultCallbacks = {
	Standard: function(state) {
		if(state=="done") {
			fakeModal.style.display = fakeModalFrame.style.display = "none";
			fakeModalIFrame.event("finished");
		} else if(state=="unload") {
			removeModal();
		}
	}
}

function removeModal() {
	fakeModal.style.display = "none";
	fakeModalFrame.style.display = "none";
	if (fakeModalIFrame != null)
		fakeModalIFrame.event("unload");
}
function Modal(url, arguments) {
	if(!fakeModal) { 
		fakeModal = document.createElement("div"); fakeModal.id = "__FAKEMODAL";
		fakeModal.style.position = "absolute";
		fakeModal.style.left = fakeModal.style.top = "0px";
		fakeModal.style.backgroundColor = "#000";
		fakeModal.style.width = fakeModal.style.height = "100%";
		fakeModal.style.filter = "alpha(opacity=0)";
		fakeModal.style.opacity = 0.0;
		fakeModal.style.zIndex = "100";
		document.body.appendChild(fakeModal);
	}
	if(!fakeModalFrame) {
		fakeModalFrame = document.createElement("div"); 
		fakeModalFrame.id = "__FAKEMODALFRAME";
		fakeModalFrame.style.position = "absolute";
		fakeModalFrame.style.left = fakeModalFrame.style.top = "0px";
		fakeModalFrame.style.backgroundColor = "#FFF";
		fakeModalFrame.style.border = "1px solid #000";
		fakeModalFrame.style.zIndex = "101";
		fakeModalFrame.style.overflow = "hidden";
		document.body.appendChild(fakeModalFrame);
	}
	/*if(!fakeModalIFrame) {
		fakeModalIFrame = document.createElement("iframe"); fakeModalIFrame.id = "__FAKEMODALIFRAME";
		fakeModalIFrame.style.position = "absolute";
		fakeModalIFrame.style.left = fakeModalIFrame.style.top = "0px";
		fakeModalIFrame.style.width = fakeModalIFrame.style.height = "100%";
		fakeModalIFrame.frameBorder = 0; fakeModalIFrame.border = 0;
		fakeModalIFrame.event = function(evt){};
		fakeModalIFrame.callback = function(){}
		fakeModalFrame.appendChild(fakeModalIFrame);
	}*/
	if(!fakeModalTextDiv)
	{
		fakeModalTextDiv = document.createElement("div");
		fakeModalTextDiv.style.position = "absolute";
		fakeModalTextDiv.style.left = fakeModalTextDiv.style.top = "0px";
		fakeModalTextDiv.style.width = fakeModalTextDiv.style.height = "100%";
		fakeModalTextDiv.frameBorder = 0; fakeModalTextDiv.border = 0;
		fakeModalTextDiv.event = function(evt){};
		fakeModalTextDiv.callback = function(){}
		fakeModalFrame.appendChild(fakeModalTextDiv);
	}
	
	fakeModal.style.display = fakeModalFrame.style.display = "block";
	fakeModalFrame.style.width = arguments.width+"px";
	fakeModalFrame.style.height = arguments.height+"px";
	fakeModalFrame.style.left = ((fakeModal.offsetWidth/2)-(arguments.width/2))+"px";
	fakeModalFrame.style.top = ((fakeModal.offsetHeight/2)-(arguments.height/2))+"px";
	if(arguments.callback) {fakeModalTextDiv.callback = arguments.callback; } else { fakeModalTextDiv.callback = defaultCallbacks.Standard; }
	//fakeModalIFrame.src = url;
	fakeModalTextDiv.innerHTML = "<br><div style=text-align:center>" + url + "</span>";
}
