//	Modification log
//	(date)		(author)	(activity/purpose)
//	20040414	ASO			La til en ekstra parameter i funksjonen printFlashXHTML for å sette farge på flashen
//	20040323	ASO			La inn funksjoner knyttet til å sette inn flash element
//	20040319	CA			ny funksjon, externalLinks()  
//	20040506	CA			endret isNotValidEmailFormat() slik at den aksepterer TLD inntil 4 karakterer
//	Todo
//	(date)		(author)	(activity/purpose) 
 
/**
 * Diverse javascriptfunksjoner, standard for alle siter
 *
 * @author Anders S. Oefsdahl <anders at apt no>
 * @author Christopher Aalholm <christopher at apt no>
 * @version 1.0.4
 */

/**
 * Om debug/tracer layer skal vises eller ikke
 * @var	boolean
 */
var boolDoTrace				= false;
/**
 * Navn på layer som debug/trace funksjonen skal bruke
 * @var	string
 */
var strTracerDestination	= "divTrace";
/**
 * Max antall linjer i debug/trace vinduet før øverste linje cleares, sett til 0 om vinduet aldri skal cleares
 * @var	integer
 */
var intTracerMaxLines		= 20;
/**
 * Om brukeren har rett versjon av flash
 * @var	boolean
 */
var hasRightVersion = false;
/**
 * Om brukeren har installert versjon 4 av flash
 * @var	boolean
 */
var flash4Installed = false;
/**
 * Om brukeren har installert versjon 5 av flash
 * @var	boolean
 */
var flash5Installed = false;
/**
 * Om brukeren har installert versjon 6 av flash
 * @var	boolean
 */
var flash6Installed = false;
/**
 * Om brukeren har installert versjon 7 av flash
 * @var	boolean
 */
var flash7Installed = false;
/**
 * Hvilken flashversjon som er påkrevd, kan overstyres i funksjonen printFlashXHTML()
 * @var	integer
 */
var requiredFlashVersion = 6;
/**
 * Maks versjoner av flash som er laget
 * @var	integer
 */
var maxVersion 			= 7;
/**
 * Installert versjon av flash hos brukeren
 * @var	integer
 */
var installedVersion	= 0;
/**
 * Om brukeren bruker Internet Explorer eller ikke
 * @var	boolean
 */
var isIE 	= (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
/**
 * Om brukeren sitter på Windows eller ikke
 * @var	boolean
 */
var isWin 	= (navigator.appVersion.indexOf("Windows") != -1) ? true : false;

/**
 * Funksjoner som skal kjøres i onload-eventet legges inn her
 * @since 1.0.1
 */
window.onload = function(){
	externalLinks();
}

/**
 * Om brukeren har internet explorer og sitter på windows, skriv ut vbscript som sjekker flashversjon
 */
if ((isIE) && (isWin)) {
	document.write('<scr' + 'ipt language="VBScript"\>\n');
	document.write('on error resume next \n');
	document.write('flash4Installed = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.4"))) \n');
	document.write('flash5Installed = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.5"))) \n');
	document.write('flash6Installed = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.6"))) \n');
	document.write('flash7Installed = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.7"))) \n');
	document.write('</scr' + 'ipt\> \n');
}

/**
 * Skriver ut debug/trace informasjon
 *
 * @access public
 * @param string	strOutput			Debug/trace informasjonen som skal brukes
 * @param integer	intAddTimestamp		Om du ønsker å legge til timestamp på tracingen, sett denne variablen til 1, standardverdi er 0
 * @return void
 */
function doTrace(strOutput, intAddTimestamp) {
	if (boolDoTrace) {
		var d = document.getElementById(strTracerDestination);
		var boolAddTimestamp;
		if (!intAddTimestamp)   boolAddTimestamp=false; else boolAddTimestamp=true;
		if (d) {
			strTimestamp = "";
			if (boolAddTimestamp) {
				var objDate = new Date();
				strTimestamp = getPaddedString(objDate.getHours(), "0", 2)+":"+getPaddedString(objDate.getMinutes(), "0", 2)+":"+getPaddedString(objDate.getSeconds(), "0", 2)+":"+getPaddedString(objDate.getMilliseconds(), "0", 3);
			}
			var arrMatches = d.innerHTML.match(/<br/g);
			if (arrMatches != null) {
				if (intTracerMaxLines>0) {
					if (arrMatches.length > intTracerMaxLines) {
						var strInnerHTML = d.innerHTML;
						var intPos = strInnerHTML.indexOf("<br");
						d.innerHTML = (intPos!=-1) ? strInnerHTML.substr(intPos+4) : strTimestamp+": "+strOutput+"<br />\n";
					} else d.innerHTML += strTimestamp+": "+strOutput+"<br />\n";
				} else d.innerHTML += strTimestamp+": "+strOutput+"<br />\n";
			} else {
				if (intTracerMaxLines>0) {
					d.innerHTML = (d.innerHTML.length > 1000) ? strTimestamp+": "+strOutput+"<br />\n" : d.innerHTML+strTimestamp+": "+strOutput+"<br />\n";
				} else d.innerHTML += strTimestamp+": "+strOutput+"<br />\n";
			}
		}
	}
}

/**
 * Legger til x antall karakterer til en text 
 *
 * @access public
 * @param string	strValue		Stringen som skal får noe tillagt
 * @param string 	strPadValue		Stringen som blir lagt til
 * @param integer	intLength		Hvor mange tegn strengen skal være totalt
 * 
 * @return string Den nye strengen
 */
function getPaddedString(strValue, strPadValue, intLength) {
	var strRet = "";
	strValue = strValue.toString();
	for (var i=0; i<(intLength-strValue.length); i++) {
		strRet += strPadValue;
	}
	strRet += strValue;
	return (strRet);
}

/**
 * Bytter ut .src på ett bilde med ett annet
 *
 * @access public
 * @param string	strName		ID til bildet
 * @param integer	intState	Integer som spesifiserer tilstand til bildet, 0=_off.gif og 1=_on.gif
 * @return void
 */
function swapImg(strName,intState){
	var i;		
	var newPath = "";
	var img 	= document.images[strName];
	var imgSrc 	= img.src;
	var path  	= imgSrc.split('/');
	var imgname = path[(path.length-1)].split('_');	
	for(i=0;i<(path.length-1);i++){
		newPath += path[i]+'/';
	}
	var newState 	= (intState) ? '_on.gif':'_off.gif';
	var newName 	= imgname[0]+newState;
	var newSrc 		= newPath+newName;
	img.src 		= newSrc;
}

/**
 * Fjerner spacer i en string med regulært uttrykk
 *
 * @access public
 * @param string	strText		Teksten som skal få spacer fjernet
 * @return string	Den nye teksten uten spacer
 */
function removeSpaces(strText) {
    var re   = /[\s]/g;
    return strText.replace(re,'');
}

/**
 * Sjekker om en streng er ett tall (enten float eller integer)
 *
 * @access public
 * @param string	strInput	Teksten som skal sjekkes
 * @return boolean	True om teksten er en integer eller float
 */
function isNumber(strInput){
	var item = parseInt(strInput, 10);
	if(isNaN(item)){
		return false;  
	}
	item = parseFloat(strInput);
	if(isNaN(strInput)) {
  		return false;
	}
	return true;
}

/**
 * Sjekker om en string er tom
 *
 * @access public
 * @param string	strInput	Strengen som skal sjekkes
 * @return boolean	True om teksten er tom
 */
function isEmpty(strInput){
	var str = removeSpaces(strInput);
	if(str == "" || str == null || str.length == 0){
		return true;
	}else{
		return false;
	}
}

/**
 * Sjekker om en radioknapp er trykket
 *
 * @access public
 * @param object objRadio	Object av typen input type radio
 * @return boolean	True om radioknappen er markert
 */
function radioChecked(objRadio){
	var boolChecked = false;
	for(i=0;i<objRadio.length;i++){
		if(objRadio[i].checked){
			boolChecked = true;
		}
	}
	return boolChecked;
}

/**
 * Sjekker om en streng er en gyldig epost via ett regulært uttrykk
 *
 * @access public
 * @param string	strEmail	Strengen som skal sjekkes
 * @return boolean	True om strengen er en epostadresse
 */
function isNotValidEmailFormat(strEmail){
	var exclude=/[^@\-\.\w]|^[_@\.\-]|[\._\-]{2}|[@\.]{2}|(@)[^@]*\1/;
	var check=/@[\w\-]+\./;
	var checkend=/\.[a-zA-Z]{2,4}$/;
	if(((strEmail.search(exclude) != -1)||(strEmail.search(check)) == -1)||(strEmail.search(checkend) == -1)){
		return true;
	} else {
		return false;
	}
}

/**
 * Sjekker om en string er ett gyldig telefonnummer
 *
 * @access public
 * @param string	strNo	Tallet som skal sjekkes
 * @param string	strType	Om nummeret skal være mobilnummer eller vanlig tlfnummer, sett til 'mobile' om du vil sjekke på mobilnummer
 * @return boolean	True om nummeret er ett norsk telefonnummer (uten +47) foran
 */
function notValidPhonenumber(strNO, strType){
	var re = (strType == 'mobile') ? /^[489]/ : /^[23567]/;
	var strNumber = removeSpaces(strNO);
	if(strNumber.length != 8){		
		return true;
	}
	if(!isNumber(strNumber)){		
		return true;
	}
	if(strNumber.search(re) == -1){
		return true;
	}	
	return false;
}

/**
 * Sjekker alle anchors på en side og setter target="_blank" dersom de har rel="external"
 *
 * @access private
 * @return void
 * @since 1.0.1
 */
function externalLinks(){	
	if (!document.getElementsByTagName) return;
	var anchors = document.getElementsByTagName("a");
	for(var i=0;i<anchors.length; i++){ 
		var anchor = anchors[i]; 
		if(anchor.getAttribute("href") && anchor.getAttribute("rel") == "external"){
			anchor.target = "_blank";
		}
	} 
}

/**
 * Sjekker om brukeren har rett flash versjon
 *
 * @access public
 * @param integer	intRequired	Hvilken flashversjon som er påkrevd
 * @return boolean	Returnerer verdien av variablen hasRightVersion
 * @see printFlashXHTML()
 * @since 1.0.2
 */
function checkForFlash(intRequired){
	hasRightVersion = false;
	if(!isIE){
		flash4Installed = false;
		flash5Installed = false;
		flash6Installed = false;
		flash7Installed = false;
	}
	requiredFlashVersion = (intRequired) ? intRequired : requiredFlashVersion;
	if(navigator.plugins){
		if(navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]){
			var isVersion2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
			var flashDescription = navigator.plugins["Shockwave Flash" + isVersion2].description;
			var flashVersion = parseInt(flashDescription.charAt(flashDescription.indexOf(".") - 1));
			flash4Installed = flashVersion == 4;
			flash5Installed = flashVersion == 5;
			flash6Installed = flashVersion >= 6;
			flash7Installed = flashVersion >= 7;
		}
	}
	for(var i = 4; i <= maxVersion; i++){
		if (eval("flash" + i + "Installed") == true){
			installedVersion = i;
		}
	}
	if (installedVersion >= requiredFlashVersion){
		hasRightVersion = true;
	}
	return hasRightVersion;
}

/**
 * Skriver ut object tag som er XHTML kompatibel for å sette inn flash element
 *
 * @access public
 * @param integer	intRequired			Hvilken flashversjon brukeren må ha
 * @param string	strFlashSwfUrl		URL til flash elementet
 * @param integer	intWidth			Bredde på flashelementet
 * @param integer	intHeight			Høyde på flashelementet
 * @param string	strFallbackImageUrl	URL til fallbackbilde
 * @param string	strLink				Link som blir lagt til fallbackbildet om det er satt
 * @param string	strSitemapUrl		Eventuellt imagemap som skal legges på fallbackbildet
 * @param string	strFallbackHTML		Alternativ HTML for å legge inn om ikke bruker har rett flashversjon
 * @param string	strColor			Bakgrunnsfarge på flashen (ink #), default satt til ingenting, dvs ingen param sendes til flash
 * @return void
 * @see checkForFlash()
 * @since 1.0.2
 */
function printFlashXHTML(intRequired,strFlashSwfUrl,intWidth,intHeight,strFallbackImageUrl,strLink,strSitemapUrl,strFallbackHTML,strColor){
	var str = '';
	var sitemap = (strSitemapUrl) ? ' usemap="#'+strSitemapUrl+'" ':''; 
	var strColorUse = (strColor) ? '<param name="bgcolor" value="'+strColor+'">' : '';
	if(checkForFlash(intRequired)){
		str += '<object type="application/x-shockwave-flash" data="' + strFlashSwfUrl + '" width="' + intWidth + '" height="' + intHeight + '">';
		str += '<param name="movie" value="' + strFlashSwfUrl + '" />';
		str += '<param name="menu" value="false" />';
		str += '<param name="quality" value="high" />';
		str += strColorUse;
		str += '</object>';
	}else{
		if(strFallbackImageUrl){
			if(strLink){
				str += '<div><a href="'+strLink+'"><img src="' + strFallbackImageUrl + '" width="' + intWidth + '" height="' + intHeight + '" alt="" '+sitemap+'/></a></div>';
			}else{
				str += '<div><img src="' + strFallbackImageUrl + '" width="' + intWidth + '" height="' + intHeight + '" alt="" '+sitemap+'/></div>';
			}
		} else if (strFallbackHTML) {
			str += strFallbackHTML;
		}
	}
	document.write(str);	
}

function FormatNumber(intNumber,intDecimals,strSeparator){
	strNumber = intNumber + ""	// Force argument to string.
	Decimals = intDecimals + ""	// Force argument to string.
	strSeparator += ""			// Force argument to string.
	
	if((strSeparator == "") || (strSeparator.length > 1)) strSeparator = "."
	if(strNumber.length == 0) strNumber = "0"
	var OriginalNumber = strNumber  // Save for strNumber too large.
	var Sign = 1
	var Pad = ""
	var Count = 0
	// If no strNumber passed, force strNumber to 0.
	
	if(parseFloat(strNumber)){
		strNumber = parseFloat(strNumber)}
	else {
	 	strNumber = 0
	}
	// If no decimals passed, default decimals to 2.
	if((parseInt(Decimals,10)) || (parseInt(Decimals,10) == 0)){
		Decimals = parseInt(Decimals,10)
	}else{
		Decimals = 2
	}
	if(strNumber < 0){
		 Sign = -1         // Remember sign of strNumber.
		 strNumber *= Sign    // Force absolute value of strNumber.
	}
	if(Decimals < 0) Decimals *= -1    // Force absolute value of Decimals.
	
	// Next, convert strNumber to rounded integer and force to string value.
	// (strNumber contains 1 extra digit used to force rounding)
	strNumber = "" + Math.floor(strNumber * Math.pow(10,Decimals + 1) + 5)
	if((strNumber.substring(1,2) == '.')||((strNumber + '')=='NaN')) return(OriginalNumber) // strNumber too large to format as specified.
	
	// If length of strNumber is less than strNumber of decimals requested +1,
	// pad with zeros to requested length.
	if(strNumber.length < Decimals +1){ // Construct pad string.
	 	for(Count = strNumber.length; Count <= Decimals; Count++) Pad += "0"
	}
	strNumber = Pad + strNumber // Pad strNumber as needed.
	
	var strIntTemp = strNumber.substring(0,strNumber.length - Decimals -1);
	strIntTemp = (strIntTemp.length < 1)?0+'':strIntTemp;
	var intMax = strIntTemp.length-1;
	var strInt = '';
	var intLength = 0;
	
	for(var I=intMax;I>=0;I--){
		if((intLength%3) == 0 && intLength >= 3) strInt = ' '+strInt;
		strInt = strIntTemp.charAt(I)+strInt;
		intLength++;
	}
	
	if(Decimals == 0){
		// Drop extra digit -- Decimal portion is formatted.
	 	strNumber = strInt
	}else{
	 	// Or, format strNumber with decimal point and drop extra decimal digit.
		strNumber = strInt + strSeparator + strNumber.substring(strNumber.length - Decimals -1, strNumber.length -1)
	}
	
	if(Sign == -1) strNumber = "-" + strNumber  // Set sign of strNumber.
	
	return(strNumber)
}

function getNumber(strNumber){
	var dblReturn = removeSpaces(strNumber);
	dblReturn = dblReturn.replace(/,/,'.');
	dblReturn = dblReturn.replace(/-/,'0');
	dblReturn = parseFloat(dblReturn);
	return dblReturn;
}

function getNok(strNumber){
	var dblReturn = FormatNumber(strNumber,2,',');
	dblReturn = dblReturn.replace(/,00/,',-');
	return dblReturn;
}

function invalidDate(aar,mnd,dag){
	svar = true;
	dag = parseInt(dag,10);
	mnd = parseInt(mnd,10);
	aar = parseInt(aar,10);
	if(!isNaN(dag) || !isNaN(mnd) || !isNaN(aar)){
		if(mnd <= 12 && aar < 3000){
			if(validerDag(dag,mnd,aar)){
				return false;
			}
		}
	}
	return svar;
}

function validerDag(dag,mnd,aar){
	dag = parseInt(dag,10);
	mnd = parseInt(mnd,10);
	var mndMAX = new Array(31,31,28,31,30,31,30,31,31,30,31,30,31);
	if(aar%4 == 0){
		mndMAX[2] = 29;
	}
	var topp = mndMAX[mnd];
	if(dag >= 1 && dag <= topp ){
		return true;
	}else{
		return false;
	}
}

function invalidYear(year,limitMin,limitMax){
	var result = true;
	if(limitMin == undefined){
		limitMin = 1900;
	}
	if(limitMax == undefined){
		var now = new Date();
		limitMax = now.getFullYear();
	}
	if(!isNaN(year)){
		if(year >= limitMin){
			if(year <= limitMax){
				result = false;
			}
		}
	}
	return result;
}