/**
 * 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
 */
addOnLoadListener(externalLinks);
addOnLoadListener(popupWindows);

/**
 * 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";
		}
	}
}

/**
 * Popper et vindu med en side angitt i link.
 *
 * @access	private
 * @since	3.5.41
 * @param	string	strLink	Lenken til siden som skal poppes
 * @param	string	strAttributes	en kommaseparert streng med atributter
 * @return	void
 */
function popupWin(strLink,strAttributes) {
    var popupWin = null;
    popupWin = window.open(strLink,'winPopup',strAttributes);
}

/**
 * Sjekker alle anchors på en side og setter href="javascript:popupWin()" dersom de har rel="popup"
 *
 * Angi ankere rel="popup|width|height[|resizable|scrollbars|toolbar|menubar|location|status|directories]"
 * Alt etter height er valgfritt, alle disse atributtene er slått av som standard.
 *
 * @access	private
 * @since	3.5.41
 * @return	void
 */
function popupWindows() {
    if(!document.getElementsByTagName) {
         return;
    }

	var arrAttributes = new Array();
	arrAttributes[3] = 'no'; //resizable
	arrAttributes[4] = 'no'; //scrollbars
	arrAttributes[5] = 'no'; //toolbar
	arrAttributes[6] = 'no'; //menubar
	arrAttributes[7] = 'no'; //location
	arrAttributes[8] = 'no'; //status
	arrAttributes[9] = 'no'; //directories

    var scrW = screen.availWidth;
    var scrH = screen.availHeight;
    var anchors = document.getElementsByTagName("a");
    for (var i = 0; i < anchors.length; i++) {
         var anchor = anchors[i];
         var linkDest = anchor.getAttribute("href");
         var relIndex = anchor.getAttribute("rel");
		 if (relIndex) {
			 var relSplit = relIndex.split("|");

			 for(I=3;I<relSplit.length;I++){
				arrAttributes[I] = relSplit[I];
			 }

			 var windowAttributes = "";
			 if(relSplit[0] == "popup") {
				  if (relSplit[1] > scrW) {
					 pW = scrW - 10;
				  }
				  else {
					 pW = relSplit[1];
				  }
				  if (relSplit[2] > scrH) {
					 pH = scrH - 40;
				  }
				  else {
					 pH = relSplit[2];
				  }
				  scrX = (scrW - pW - 10) * .5;
				  scrY = (scrH - pH - 30) * .5;
				  var windowAttributes = "width=" + pW + ",height=" + pH + ",left=" + scrX + ",top=" + scrY + ",screenX=" + scrX + ",screenY=" + scrY;
				  windowAttributes += ",resizable=" + arrAttributes[3] + ",scrollbars=" + arrAttributes[4] + ",toolbar=" + arrAttributes[5] + ",menubar=" + arrAttributes[6] + ",location=" + arrAttributes[7] + ",status=" + arrAttributes[8] + ",directories=" + arrAttributes[9];
				  anchor.setAttribute("href", "javascript:popupWin('" + linkDest + "','" + windowAttributes + "')");
			 }
		 }
    }
}

/**
 * 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 += unescape(strFallbackHTML);
		}
	}
	document.write(str);
}

