// いいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいい
// This function finds the menu element that is selected and changes its class.
//
// Note: This function requires that the menu is an unordered list (ul) with
// the id "ulMenu" and that each menu element is an anchor tag.
// いいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいい
function selectMenuElement()
{
    var strURL = window.location.href;
    var doc = document.getElementById('ulMenu').getElementsByTagName('a');
    var bFound = false;

    for (var i = 0; i < doc.length; i++)
    {
        var strHref = doc[i].href;
        if (strHref == strURL)
        {
            doc[i].className = 'selected';
            bFound = true;
        }
    }
    
    if (bFound == false)
    {
        doc[0].className = 'selected';
    }
}

// fGetBrowserAgent()
// this function returns 
// ns for Netscape,
// op for Opera,
// ff for FireFox,
// ie for Internet Explorer and
// nothing for other browsers

function fGetBrowserAgent() {
	var retVal = '';
	var agt = navigator.userAgent.toLowerCase();
	var app = navigator.appName.toLowerCase();
	var ieAgent = agt.indexOf('msie');
	var nsAgent = app.indexOf('netscape');
	var opAgent = app.indexOf('opera');
	var ffAgent = agt.indexOf('firefox');
	
	if (ieAgent!= -1) { retVal = 'ie'; } 
		else if (ffAgent!= -1){retVal = 'ff'; }
		else if (nsAgent!= -1){ retVal = 'ns'; } 
		else if (opAgent!= -1){retVal = 'op'; }
		
	return retVal;
}
function fFormatHourMinutes(sStr) {
    var retval='';
    var strNumbers = fGetOnlyNumbers(sStr);
    
    if(strNumbers.length>0) {
        if(strNumbers.length>4) {strNumbers=strNumbers.substring(0,4)}
        if(strNumbers.length==1 ) {retval='0'+strNumbers+':00'}
        if(strNumbers.length==2 ) {retval=strNumbers+':00'}
        if(strNumbers.length==3 ) {retval='0'+strNumbers.substring(0,1)+':'+strNumbers.substring(1,3)}
        if(strNumbers.length==4 ) {retval=strNumbers.substring(0,2)+':'+strNumbers.substring(2,4)}
    }
    return retval;
}

function fGetOnlyNumbers(sNumberString) {
    //returns blank string if no numbers found
    var retval = '';
    if(sNumberString.length>0) {
        for(i=0;i<sNumberString.length;i++) {
            if(fIsNumber(sNumberString.substring(i,i+1))) {
                retval=retval+sNumberString.substring(i,i+1).replace('\n','');
            }
        }       
    }
    return retval;    
}
function fFormatPrice(sPriceString) { // supports only norwegian price formatting with , as decimal separator
    //TODO: Add GroupDigits functionality. Look at the method fFormatPrice(num) below that is commented out
    var retval = fTrim(sPriceString.replace('.',','));
    
    if(retval.length>0) {
        var tmpStr='';
        for(i=0;i<retval.length;i++) {
        
            if(fIsNumber(retval.substring(i,i+1))||retval.substring(i,i+1)==','||retval.substring(i,i+1)=='-') {
                tmpStr=tmpStr+retval.substring(i,i+1).replace('\n','');
            }
        }
        retval=tmpStr;
        
    }
    if(retval==''||fTrim(retval)==',00'){return '0,00'}
            
    if(retval.indexOf(',')==-1) {
        retval=retval+',00';
        return retval;
    }
    if(retval.indexOf(',')==eval(retval.length-2)) { //only one decimal is used add one zero
        retval=retval+'0';
    }
    return retval;
}

//function fFormatPrice(num) {
//    num = num.toString().replace(/\$|\,/g,'');
//    if(isNaN(num))
//    num = "0";
//    num = Math.floor(num*100+0.50000000001);
//    cents = num%100;
//    num = Math.floor(num/100).toString();
//    if(cents<10)
//    cents = "0" + cents;
//    for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
//    num = num.substring(0,num.length-(4*i+3))+' '+
//    num.substring(num.length-(4*i+3));
//    return (num + ',' + cents);
//}

function fIsNumber(sStr)
{
    var tmpVal = Number.NaN;

    tmpVal = new Number(sStr);
    if (isNaN(tmpVal))
        return false;
    return true;
}

function fTrim(sString){
	if(sString.length < 1){
		return '';
	}
	sString = fRTrim(sString);
	sString = fLTrim(sString);
	if(sString==''){
		return '';
	} else{
		return sString;
	}
} //End Function

function fRTrim(sString){
	var w_space = String.fromCharCode(32);
	var v_length = sString.length;
	var strTemp = '';
	if(v_length < 0){
		return '';
	}
	var iTemp = v_length -1;

	while(iTemp > -1){
		if(sString.charAt(iTemp) == w_space){
		} else {
			strTemp = sString.substring(0,iTemp +1);
			break;
		}
		iTemp = iTemp-1;

	} //End While
	return strTemp;
} //End Function

function fLTrim(sString){
	var w_space = String.fromCharCode(32);
	if(v_length < 1){
		return '';
	}
	var v_length = sString.length;
	var strTemp = '';

	var iTemp = 0;

	while(iTemp < v_length){
		if(sString.charAt(iTemp) == w_space){
		} else {
			strTemp = sString.substring(iTemp,v_length);
			break;
		}
		iTemp = iTemp + 1;
	} //End While
	return strTemp;
} //End Function

function getElementPosX(e)
//returns the X position of the web page element
{
	var curleft = 0;
	if (e.offsetParent)
	{
		while (e.offsetParent)
		{
			curleft += e.offsetLeft
			e = e.offsetParent;
		}
	}
	else if (e.x)
		curleft += e.x;
	return curleft;
}

function getElementPosY(e)
//returns the Y position of the web page element
{
	var curtop = 0;
	if (e.offsetParent)
	{
		while (e.offsetParent)
		{
			curtop += e.offsetTop
			e = e.offsetParent;
		}
	}
	else if (e.y)
		curtop += e.y;
	return curtop;
}

function PageQuery(q) {
	if(q.length > 1) this.q = q.substring(1, q.length);
	else this.q = null;
	this.keyValuePairs = new Array();
	if(q) {
		for(var i=0; i < this.q.split("&").length; i++) {
			this.keyValuePairs[i] = this.q.split("&")[i];
		}
	}
	this.getKeyValuePairs = function() { return this.keyValuePairs; }
	this.getValue = function(s) {
		for(var j=0; j < this.keyValuePairs.length; j++) {
			if(this.keyValuePairs[j].split("=")[0] == s)
			return this.keyValuePairs[j].split("=")[1];
		}
		return false;
	}
	this.getParameters = function() {
		var a = new Array(this.getLength());
		for(var j=0; j < this.keyValuePairs.length; j++) {
			a[j] = this.keyValuePairs[j].split("=")[0];
		}
		return a;
	}
	this.getLength = function() { return this.keyValuePairs.length; } 
}
function queryString(key){
	var page = new PageQuery(window.location.search); 
	return unescape(page.getValue(key)); 
}
/*
**********************
ViewPort functions
**********************
crossbrowser functions to retrieve the clients current height, width, scrollbar left position and scrollbar top position
*/
function getViewPortHeight() {
    if (window.innerHeight!=window.undefined) return window.innerHeight;
    if (document.compatMode=='CSS1Compat') return document.documentElement.clientHeight;
    if (document.body) return document.body.clientHeight; 
    return window.undefined; 
}
function getViewPortWidth() {
    if (window.innerWidth!=window.undefined) return window.innerWidth;
    if (document.compatMode=='CSS1Compat') return document.documentElement.clientWidth;
    if (document.body) return document.body.clientWidth; 
    return window.undefined; 
}
function getViewPortScrollLeft() {
    if (window.pageXOffset!=window.undefined) return window.pageXOffset;
    if (document.compatMode=='CSS1Compat') return document.documentElement.scrollLeft;
    if (document.body) return document.body.scrollLeft; 
    return window.undefined; 
}
function getViewPortScrollTop() {
    if (window.pageXOffset!=window.undefined) return window.pageXOffset;
    if (document.compatMode=='CSS1Compat') return document.documentElement.scrollTop;
    if (document.body) return document.body.scrollTop; 
    return window.undefined; 
}

function fCenterWindow(eWindow) {
    // get current width and height
    var width = getViewPortWidth();
	var height = getViewPortHeight();
	
	var leftPos = (screen.availWidth - width) / 2;
	var topPos = (screen.availHeight - height) / 2;
    
    eWindow.moveTo(leftPos, topPos);
}

// Same as window.open, but calculates top and left position so the window will be opened in the center. 
// The width and height should be specified in the 'features' parameter
// The 'top' and 'left' parameters in 'features' must be left out.

function fOpenAndCenterWindow(url, name, features, replace) {
    var width = getViewPortWidth();
	var height = getViewPortHeight();
	
    var leftPos = (screen.availWidth - width) / 2;
	var topPos = (screen.availHeight - height) / 2;
	if(features!=null){features+=','}
	features+='left='+leftPos+',top='+topPos;
    return window.open(url, name, features, replace);
}

function fOpenMoreInfoWindow(sDocumentText) {

	var oNewWindow = window.open('','','toolbar=no,scrollbars=1,width=350,height=200,menubar=no,status=no,location=no,directories=no');
	
	
	oNewWindow.document.writeln('<html><head>');
	oNewWindow.document.writeln('<title>Informasjon</title>');
	oNewWindow.document.writeln('<style>');
	oNewWindow.document.writeln('BODY {font-size:8pt;font-family:verdana;background:#fffff0}');
	oNewWindow.document.writeln('TD {font-size:8pt;font-family:verdana}');
	oNewWindow.document.writeln('TR {font-size:8pt;font-family:verdana}');
	oNewWindow.document.writeln('.content {font-size:8pt;font-family:verdana}');
	oNewWindow.document.writeln('.MoreInfo {cursor:hand;font-size:10px;border-style: solid; border-width: 1; padding-left: 4; padding-right: 4; padding-top: 1; padding-bottom: 1}');
	oNewWindow.document.writeln('</style>');
	oNewWindow.document.writeln('</head>');
	oNewWindow.document.writeln('<body>');
	oNewWindow.document.writeln(sDocumentText);
	oNewWindow.document.writeln('<br><div align="right">');
	oNewWindow.document.writeln('<span class="MoreInfo" onClick="window.close();">Lukk vindu</span>');
	oNewWindow.document.writeln('</div>');
	oNewWindow.document.writeln('</body></html>');
	oNewWindow.document.writeln('');
}

/*
addOnSubmitEvent is used to add functions to existing onsubmit event
*/
function addOnSubmitEvent(func) {
  var oldonsubmit = document.forms[0].onsubmit;
  if (typeof document.forms[0].onsubmit != 'function') {
    document.forms[0].onsubmit = func;
  } else {
    document.forms[0].onsubmit = function() {
      if (oldonsubmit) {
        oldonsubmit();
      }
      func();
    }
  }
}

/*
addLoadEvent is used to add functions to existing onload event
*/
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}

// Datetime functions


//function FormatDate(DateToFormat,FormatAs,LCID){
////TODO: fully support NO dates
// 
//if(DateToFormat==""){return"";}
//if(!FormatAs){FormatAs="dd/mm/yyyy";}
//if(!LCID){LCID=1033}

//var strReturnDate;
//FormatAs = FormatAs.toLowerCase();
//DateToFormat = DateToFormat.toLowerCase();
//var arrDate
//var arrMonths 
//if(LCID==1044) {
//    arrMonths = new Array("Januar","Februar","Mars","April","Mai","Juni","Juli","August","September","Oktober","November","Desember");
//} else {  
//    arrMonths = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
//}
//var strMONTH;
//var Separator;

//while(DateToFormat.indexOf("st")>-1){
//DateToFormat = DateToFormat.replace("st","");
//}

//while(DateToFormat.indexOf("nd")>-1){
//DateToFormat = DateToFormat.replace("nd","");
//}

//while(DateToFormat.indexOf("rd")>-1){
//DateToFormat = DateToFormat.replace("rd","");
//}

//while(DateToFormat.indexOf("th")>-1){
//DateToFormat = DateToFormat.replace("th","");
//}

//if(DateToFormat.indexOf(".")>-1){
//Separator = ".";
//}

//if(DateToFormat.indexOf("-")>-1){
//Separator = "-";
//}


//if(DateToFormat.indexOf("/")>-1){
//Separator = "/";
//}

//if(DateToFormat.indexOf(" ")>-1){
//Separator = " ";
//}

//arrDate = DateToFormat.split(Separator);
//DateToFormat = "";
//	for(var iSD = 0;iSD < arrDate.length;iSD++){
//		if(arrDate[iSD]!=""){
//		DateToFormat += arrDate[iSD] + Separator;
//		}
//	}
//DateToFormat = DateToFormat.substring(0,DateToFormat.length-1);
//arrDate = DateToFormat.split(Separator);

//if(arrDate.length < 3){
//return "";
//}

//var DAY = arrDate[0];
//var MONTH = arrDate[1];
//var YEAR = arrDate[2];




//if(parseFloat(arrDate[1]) > 12){
//DAY = arrDate[1];
//MONTH = arrDate[0];
//}

//if(parseFloat(DAY) && DAY.toString().length==4){
//YEAR = arrDate[0];
//DAY = arrDate[2];
//MONTH = arrDate[1];
//}


//for(var iSD = 0;iSD < arrMonths.length;iSD++){
//var ShortMonth = arrMonths[iSD].substring(0,3).toLowerCase();
//var MonthPosition = DateToFormat.indexOf(ShortMonth);
//	if(MonthPosition > -1){
//	MONTH = iSD + 1;
//		if(MonthPosition == 0){
//		DAY = arrDate[1];
//		YEAR = arrDate[2];
//		}
//	break;
//	}
//}

//var strTemp = YEAR.toString();
//if(strTemp.length==2){

//	if(parseFloat(YEAR)>40){
//	YEAR = "19" + YEAR;
//	}
//	else{
//	YEAR = "20" + YEAR;
//	}

//}


//	if(parseInt(MONTH)< 10 && MONTH.toString().length < 2){
//	MONTH = "0" + MONTH;
//	}
//	if(parseInt(DAY)< 10 && DAY.toString().length < 2){
//	DAY = "0" + DAY;
//	}
//	switch (FormatAs){
//	case "dd/mm/yyyy":
//	return DAY + "/" + MONTH + "/" + YEAR;
//	case "mm/dd/yyyy":
//	return MONTH + "/" + DAY + "/" + YEAR;

//	case "dd.mm.yyyy":
//	return DAY + "." + MONTH + "." + YEAR;
//	case "mm.dd.yyyy":
//	return MONTH + "." + DAY + "." + YEAR;
//	case else:

//	switch (FormatAs){
//        case "dd/mmm/yyyy":
//	        return DAY + " " + arrMonths[MONTH -1].substring(0,3) + " " + YEAR;
//	    case "mmm/dd/yyyy":
//	        return arrMonths[MONTH -1].substring(0,3) + " " + DAY + " " + YEAR;
//	    case "dd/mmmm/yyyy":
//	        return DAY + " " + arrMonths[MONTH -1] + " " + YEAR;	
//	    case "mmmm/dd/yyyy":
//	        return arrMonths[MONTH -1] + " " + DAY + " " + YEAR;
//    
//        }
//	}

//return DAY + "/" + strMONTH + "/" + YEAR;;


//}


/* Validators for user input */
//function isDate
function IsDate(DateToCheck){ // only supports dd.mm.yyyy, dd.mm.yy, dd/mm/yyyy and dd/mm/yy
    if(DateToCheck==''){return false;}
    
    //check total length. Must be 8 or 10 chars
    if(DateToCheck.length!=8&&DateToCheck.length!=10) {return false;}
    //alert(DateToCheck.substring(5,6));
    if((DateToCheck.substring(2,3)!='.'||DateToCheck.substring(5,6)!='.')&&(DateToCheck.substring(2,3)!='/'||DateToCheck.substring(5,6)!='/')){return false;}
    
    // TODO: more checks...
    return true;
}//end function

function IsEmail(strEmail) {
    return (strEmail.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1);
}
function IsValidFirstAndLastName(strFirstName, strLastName) {
    if(strFirstName.length<1||strLastName.length<1||eval(strFirstName.length+strLastName.length)<4) {return false}
    return true;
}

function IsPrimeNumber(i) {
    if(i % 2 == 0) {return false}
    return true;
}
function setClientSize(W, H)
  {
    // it is important to resize the window to the
    // wanted values first, even if we won't get them.
    window.resizeTo(W, H);

    // create the checkpoint element
    var cp = document.createElement("div");
    cp.style.position = "absolute";
    cp.style.width = "0px";
    cp.style.height = "0px";
    cp.style.right = "0px";
    cp.style.bottom = "0px";

    // we can only read it's position after we
    // insert it into the document
    document.body.appendChild(div);

    // here we get the actual client size
    var current_width = cp.offsetLeft;
    var current_height = cp.offsetTop;

    // here we find out how much more we need
    // in order to get to the needed W x H size
    // (or in other words, we compute the size of
    // window decorations: border, scroll bars, title)
    var dw = W - current_width;
    var dh = H - current_height;

    // and _finally_ we get what we need
    window.resizeBy(dw, dh);

    // we can safely delete the checkpoint now
    document.body.removeChild(cp);

    // for the curious, return to see how much
    // did IE miss it
    // return { missed_width: dw, missed_height: dh };
  }

