var feil 		= false;
var feilmelding 	= "";
var returnVal		= true;
var feilmeldingsfarve   = 'yellow';
var colorwhite   = '#FFFFFF';
var MAX_NUMBER 		= 99999999999999999999999999999999999;
var feil_del1 		= "Følgende feil(er) oppstod:";
var feil_del2 		= "\n  -> ";

var ikke_blank 		= "Felter som ikke kan være blanke";

var checkObjects	= new Array();
var feltnavn		= new Array();

function RequiredField(objName,feltName) {
	// Kalles fra init funksjon i dokumentet
	// Legger alle feltes som skal sjekkes ved
	// validering.
	checkObjects[eval(checkObjects.length)] = objName;
	feltnavn[eval(feltnavn.length)]     = feltName;
}

function SetErrorColor (color) {
	// Kalles fra init funksjon i dokumentet	
	// Settes bakgrundsfarve som brukes i IE for å
	// markere tekstboksene ved feil/ mangler
	feilmeldingsfarve = color;
}

function validate() {
	// Kalles fra submit knappens 'onClick' event
	// Sjekker først alle feltenes validering for så
	// å dobbelsjekke mot felter som ikke må være tom.
	var i;	
	var ix;
	var errortext = "";
	var ieError = false;
	returnVal = true;
	
   // tvinger fram validering
   //for (ix = 0; ix < document.forms.length; i++) {
	for (i = 0; i < document.forms[0].elements.length; i++) {
   		if (document.forms[0].elements[i].type == 'text') {
   				document.forms[0].elements[i].blur;
  		}
	}
   //}
	if (feil == true) {
		alert(window.status);
		returnVal = false;
	} else {
		if (checkObjects.length > 0) {
		errorObject = "";
			for (i = 0; i < checkObjects.length; i++) {
				vbtrim(checkObjects[i]);
 				//alert(checkObjects[i].name.toString());
				if (checkObjects[i].value.length == 0) {
					if (navigator.appVersion.indexOf("MSIE") > 0) {
						checkObjects[i].style.backgroundColor = feilmeldingsfarve;
						ieError = true;
					} else {
						if (!errortext) errortext = feil_del1 + "\n" + ikke_blank;
						errortext = errortext + feil_del2 + feltnavn[i];
					}
					returnVal = false;
				} else {
					if (navigator.appVersion.indexOf("MSIE") > 0) {
						if (checkObjects[i].style.backgroundColor != feilmeldingsfarve) {
							checkObjects[i].style.backgroundColor = 'white';
						} else { 
							ieError = true; 
						}
					}
				}
			}
		}
		if (errortext) {
			alert(errortext);
			feil = false;
		}
		if (ieError == true) {
			alert(feil_del1 + feil_del2 +'Sjekk feltene som er markert.');
			GoToFirstError();
			feil = false;
		}
	}
}

function GoToFirstError() {
	// Brukes kun i IE for å gå til første feltet som har 'feilmeldingsfarve'
	// som bakgrundsfarve. Fungerer ikke helt etter plan, men bedre enn ikke noe.
	var i;
	for (i = 0; i < document.forms[0].elements.length; i++) {
		if (document.forms[0].elements[i].style.backgroundColor == feilmeldingsfarve) {
			document.forms[0].elements[i].select();
			document.forms[0].elements[i].focus();
			break;
		}
	}
}

function handlefeil(objName) {
	// Handtering av visning av feilmeldinger
	if (feil == true) {

		if (navigator.appVersion.indexOf("MSIE") > 0 || navigator.appName == "Netscape"  ) {
			objName.style.backgroundColor = feilmeldingsfarve;
		}
		window.status =(feil_del1 + feil_del2 + feilmelding);
		if (objName.type=='text') {
			objName.select();
		}
		
		objName.focus();
	} else {
		if (navigator.appVersion.indexOf("MSIE") > 0 || navigator.appName == "Netscape") {
			objName.style.backgroundColor = colorwhite;
		} 
		feil = false;
	}
}



function checkstring(objName,req,min,max,strcase) {
	// objName 	= this
	// req 		= J (må være utfyldt) eller N (trenger ikke være utfyldt)
	// min 		= minimums lengden på teksten
	// max 		= maximum lengden på teksten
	// strcase 	= L (Lower), U (Upper), N (NameCase), F (Ucase : First character)
	if (feil == true) {
		//alert('Det er da en feil i forrige kontroll');
		feil = true;
	} else {
		if (require(objName,req) == true) {
			feil = true;
			feilmelding=("Du må fylle ut dette feltet.");

		} 
		objName.value = rtrim(objName.value.replace(/\s+/g," "));
		if (strcase == 'L') {
			objName.value=objName.value.toLowerCase();
		} else if (strcase == 'U') {
			objName.value=objName.value.toUpperCase();
		} else if (strcase == 'N') {
			capsLc(objName);
		} else if (strcase == 'F') {
			objName.value=objName.value.substring(0,1).toUpperCase()+objName.value.substring(1,objName.value.length);
		}
		if (objName.value.length > 0) {
			if (objName.value.length < min) { 
				feil = true;
				feilmelding=("Dette feltet må fylles ut med minst " + min + " tegn og maks. " + max + " tegn.");
			} else if (objName.value.length > max) { 
				feil = true;
				feilmelding=("Dette feltet må fylles ut med minst " + min + " tegn og maks. " + max + " tegn.");
			}
		}
	handlefeil(objName);
	}
}

function checknumber(object,req,min,max,dec,mod10) {
	// objName 	= this
	// req 		= J (må være utfyldt) eller N (trenger ikke være utfyldt)
	// min 		= minimums verdi av tallet
	// max 		= maximum verdi av tallet
	// dec		= max antall desimaler
	// mod10	= J/N for modulus 10 sjekk
	var objName = object;
	if (feil == true) {
		//alert('Det er da en feil i forrige kontroll');
		feil = true;
	} else {
		//while (objName.value.indexOf(' ') <> 0) {
		//	objName.value = objName.value.replace(' ','a');
		//}
		if (objName.value.indexOf(',') > 0 ) {
			objName.value = ( objName.value.substring(objName.value.indexOf(','), 0) + "." + objName.value.substring(objName.value.indexOf(',')+1, objName.value.length));
			//alert(objName.value);
		}
		if (dec == 0) {
			if (objName.value.indexOf('.') > 0) {
				objName.value = ( objName.value.substring(objName.value.indexOf('.'), 0));
			}
			dectext = '';
		} else {
			if (objName.value.indexOf('.') > -1) {
				if (objName.value.indexOf('.') == 0) {
					objName.value = "0" + objName.value;
				}
				dectext = objName.value.substring(objName.value.indexOf('.')+1, objName.value.length);
			} else {
				dectext = '';
				if (objName.value.length > 0  ) {
					objName.value = objName.value + '.';
				}
			}
		}

		if (require(objName,req) == true) {
			feil = true;
			feilmelding=("Du må fylle ut dette feltet.");

		} 
		if (objName.value.length > 0) {
			if (checkmodulus10(objName) == false && mod10 == 'J' ) {
				feil = true;
				feilmelding=("Søket feilet på utregningen til KID og feltene på OCR-linjen. Vær vennlig å prøv igjen!");

			} else if (isNaN(objName.value) || objName.value == "") {
				feil = true;
				feilmelding=("Dette feltet må fylles ut med tallverdier. Prøv igjen!");

			} else if ((dectext.length > dec) && (dec != 0)) {
				dectext = dectext.substring(0, dec); 
				objName.value = objName.value.substring(0, objName.value.indexOf('.')+1) + dectext.toString();
			} else if ((dectext.length < dec) && (dec != 0)) {
				for (intElementNr = dectext.length; intElementNr < dec; intElementNr++) {
					dectext = dectext + '0';
				}
				objName.value = objName.value.substring(0, objName.value.indexOf('.')+1) + dectext.toString();
			} else if (parseFloat(objName.value) < min) { 
				feil = true;
				feilmelding=("Dette feltet må være minst " + min + ". Prøv igjen!");

			} else if (parseFloat(objName.value) > max) { 
				feil = true;
				feilmelding=("Dette feltet kan være maks. " + max + ". Prøv igjen!");

			}
		}
		handlefeil(objName);
	} 
}

function checkperiod(object,req) {
	// objName 	= this
	// req 		= J (må være utfyldt) eller N (trenger ikke være utfyldt)
	// min 		= minimums verdi av tallet
	// max 		= maximum verdi av tallet
	var objName = object;
	var min = 6;
	var max = 6;
	
	if (feil == true) {
		//alert('Det er da en feil i forrige kontroll');
		feil = true;
	} else {
		//while (objName.value.indexOf(' ') <> 0) {
		//	objName.value = objName.value.replace(' ','a');
		//}
		if (require(object,req) == true) {
			feil = true;
			feilmelding=("Du må fylle ut dette feltet (ÅÅÅÅMM)." + object.value);
		} 
		
		if (objName.value.indexOf(',') > 0 || objName.value.indexOf('.') > 0) {
			feil = true;
			feilmelding=("Du må fylle ut dette feltet uten desimaler (ÅÅÅÅMM).");
		}

		if (objName.value.length > 0 || feil != true) {
            if (isNaN(objName.value) || objName.value == "") {
				feil = true;
				feilmelding=("Dette feltet må fylles ut med heltall (ÅÅÅÅMM). Prøv igjen!");

			} else if (parseFloat(objName.value.length) < min) { 
				feil = true;
				feilmelding=("Dette feltet må være minst " + min + " tegn (ÅÅÅÅMM). Prøv igjen!");

			} else if (parseFloat(objName.value.length) > max) { 
				feil = true;
				feilmelding=("Dette feltet kan være maks. " + max + " tegn (ÅÅÅÅMM). Prøv igjen!" + objName.value);

			}
			
			// Må sjekke om det er YYYY og MM som er gyldige...
			if (feil == false || objName.value.length > 0) {
				//Riktig format...
				var mnd = objName.value.substring(4,objName.value.length);
				var aar = objName.value.substring(0,4);
				if (parseFloat(mnd) < 1 || parseFloat(mnd) > 12) {
					
					feil = true;
					feilmelding=("Angitt måned i perioden er ikke gyldig (ÅÅÅÅMM). Prøv igjen!");
				} else if (aar < 1990 || aar > 2051) {
					feil = true;
					feilmelding=("Angitt årstall i perioden er ikke gyldig (ÅÅÅÅMM). Prøv igjen!");
				}
			}
		}
		handlefeil(objName);
	} 
}

function checkemail(objName,req) {
	// Sjekker gyldighet på mail addresse
	if (feil == true) {
		// feil i annen tekstboks også
	} else {
		if (require(objName,req) == true) {
			feil = true;
			feilmelding=("Du har glemt å fylle ut e-postadresse.");
		} 
		if (objName.value.length > 0) {
			if ((objName.value.indexOf("@") == -1) || (objName.value.charAt(0) == ".") || (objName.value.charAt(0) == "@") || (objName.len < 6) || (objName.value.indexOf(".") == -1) || (objName.value.charAt(objName.value.indexOf("@")+1) == ".") || (objName.value.charAt(objName.value.indexOf("@")-1) == ".")) {
   				feil = true;
   				feilmelding=("Du har skrevet en ugyldig e-postadressen. Prøv på nytt!");
			} else {

emailStr=objName.value;
/* The following pattern is used to check if the entered e-mail address
   fits the user@domain format.  It also is used to separate the username
   from the domain. */
var emailPat=/^(.+)@(.+)$/
/* The following string represents the pattern for matching all special
   characters.  We don't want to allow special characters in the address. 
   These characters include ( ) < > @ , ; : \ " . [ ]    */
var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]\\$\\#\\§\\<\\>\\'\\&\\£\\*\\/||´"
/* The following string represents the range of characters allowed in a 
   username or domainname.  It really states which chars aren't allowed. */
var validChars="\[^\\s" + specialChars + "\]"
/* The following pattern applies if the "user" is a quoted string (in
   which case, there are no rules about which characters are allowed
   and which aren't; anything goes).  E.g. "jiminy cricket"@disney.com
   is a legal e-mail address. */
var quotedUser="(\"[^\"]*\")"
/* The following pattern applies for domains that are IP addresses,
   rather than symbolic names.  E.g. joe@[123.124.233.4] is a legal
   e-mail address. NOTE: The square brackets are required. */
var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
/* The following string represents an atom (basically a series of
   non-special characters.) */
var atom=validChars + '+'
/* The following string represents one word in the typical username.
   For example, in john.doe@somewhere.com, john and doe are words.
   Basically, a word is either an atom or quoted string. */
var word="(" + atom + "|" + quotedUser + ")"
// The following pattern describes the structure of the user
var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
/* The following pattern describes the structure of a normal symbolic
   domain, as opposed to ipDomainPat, shown above. */
var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")


/* Finally, let's start trying to figure out if the supplied address is
   valid. */

/* Begin with the coarse pattern to simply break up user@domain into
   different pieces that are easy to analyze. */
var matchArray=emailStr.match(emailPat)
if (matchArray==null) {
  /* Too many/few @'s or something; basically, this address doesn't
     even fit the general mould of a valid e-mail address. */
	//alert("Email address seems incorrect (check @ and .'s)")
	//return false
   	feil = true;
   	feilmelding=("Du har skrevet en ugyldig e-postadressen. Prøv på nytt!");
}
var user=matchArray[1]
var domain=matchArray[2]

// See if "user" is valid 
if (user.match(userPat)==null) {
    // user is not valid
    //alert("The username doesn't seem to be valid.")
    //return false
   	feil = true;
   	feilmelding=("Du har skrevet en ugyldig e-postadressen. Prøv på nytt!");
}

/* if the e-mail address is at an IP address (as opposed to a symbolic
   host name) make sure the IP address is valid. */
var IPArray=domain.match(ipDomainPat)
if (IPArray!=null) {
    // this is an IP address
	  for (var i=1;i<=4;i++) {
	    if (IPArray[i]>255) {
	        //alert("Destination IP address is invalid!")
		//return false
   		feil = true;
   		feilmelding=("Du har skrevet en ugyldig e-postadressen. Prøv på nytt!");
	    }
    }
    //return true
}

// Domain is symbolic name
var domainArray=domain.match(domainPat)
if (domainArray==null) {
	//alert("The domain name doesn't seem to be valid.")
    	//return false
   	feil = true;
   	feilmelding=("Du har skrevet en ugyldig e-postadressen. Prøv på nytt!");
}

/* domain name seems valid, but now make sure that it ends in a
   three-letter word (like com, edu, gov) or a two-letter word,
   representing country (uk, nl), and that there's a hostname preceding 
   the domain or country. */

/* Now we need to break up the domain to get a count of how many atoms
   it consists of. */
var atomPat=new RegExp(atom,"g")
var domArr=domain.match(atomPat)
var len=domArr.length
if (domArr[domArr.length-1].length<2 || 
    domArr[domArr.length-1].length>3) {
   // the address must end in a two letter or three letter word.
   //alert("The address must end in a three-letter domain, or two letter country.")
   //return false
   	feil = true;
   	feilmelding=("Du har skrevet en ugyldig e-postadressen. Prøv på nytt!");
}

// Make sure there's a host name preceding the domain.
if (len<2) {
   //var errStr="This address is missing a hostname!"
   //alert(errStr)
   //return false
   	feil = true;
   	feilmelding=("Du har skrevet en ugyldig e-postadressen. Prøv på nytt!");
}

// If we've gotten this far, everything's valid!
//return true;





			}

		}
        handlefeil(objName);
	}
}

function checkdate(objName,req) {
	// Sjekker og formaterer dato
	if (feil == false) {
		if (require(objName,req) == true) {
			feil = true;
			feilmelding=("Du har glemt å fylle ut dato.");
		} 
		if (chkdate(objName) == false) {
			feil = true;
			feilmelding=("Du har skrevet en ugyldig dato. Prøv på nytt!");
		}
		handlefeil(objName);
	}
}

function checkfuturedate(objName,req,msgbox) {
	var myDate = new Date();
	var today = new Date();
	var strDate;
	var strDay;
	var strMonth;
	var strYear;

	// Sjekker og formaterer dato
	if (feil == false) {
		if (require(objName,req) == true) {
			feil = true;
			feilmelding=("Du har glemt å fylle ut dato.");
		} 
		if (chkdate(objName) == false) {
			feil = true;
			feilmelding=("Du har skrevet en ugyldig dato. Prøv på nytt!");
		}
		
		if (feil == false) {
			try {
				var datefield = objName;
				strDate = datefield.value;

				strDay = parseFloat(strDate.substr(0, 2));
				strMonth = parseFloat(strDate.substr(3, 2))-1;
				strYear = parseFloat(strDate.substr(6, 4));
				myDate.setFullYear(strYear,strMonth,strDay);
				
				if (myDate < today) {
					feil = true;
					feilmelding=("Du har ikke skrevet en framtidig dato. Prøv på nytt!");
				}
			} catch (e) {
					feil = true;
					feilmelding=("Du har ikke skrevet en framtidig dato. Prøv på nytt!");
			}
		}
		if (msgbox=="true" && feil == true) {
			alert(feilmelding);			
		}
		handlefeil(objName);		

	}
}


function CheckEmpty(objName,req) {
	// Sjekker og formaterer dato
	if (feil == false) {
		if (require(objName,req) == true) {
			feil = true;
			feilmelding=("Du har glemt å fylle ut verdi i feltet.");
		} 
		if (objName.value.length==0) {
			feil = true;
			feilmelding=("Du har glemt å fylle ut verdi i feltet.");
		}
		handlefeil(objName);
	}
}

function checkpersnr(objName, req) {
	// objName 	= this
	// req 		= J (må være utfyldt) eller N (trenger ikke være utfyldt)
	if (feil == true) {
		//alert('Det er da en feil i forrige kontroll');
		feil = true;
	} else {
		if (require(objName,req) == true) {
			feil = true;
			feilmelding=("Du må fylle ut dette feltet.");
		} 
		if (objName.value.length != 0) {
			if (objName.value.length != 11) {
				feil = true;
				feilmelding=("Personnummeret må være 11 siffer. Prøv igjen!");
			} 
			if (isNaN(objName.value) || objName.value == "") {
				feil = true;
				feilmelding=("Dette feltet må fylles ut med tallverdier. Prøv igjen!");
				
			}
			//var mydato = objName.value.substring(0, 6);
			//if (chkdate(mydato) == false) {
			//	feil = true;
			//	feilmelding=("Du har skrevet en ugyldig dato. Prøv på nytt!");
			//}
			
			
			//alert (objName.value.substr(0,  1));
			
			var tall = (parseFloat(objName.value.substr(0,  1)) * 3)
				+ (parseFloat(objName.value.substr(1,  1)) * 7)
				+ (parseFloat(objName.value.substr(2,  1)) * 6)
				+ (parseFloat(objName.value.substr(3,  1)) * 1)
				+ (parseFloat(objName.value.substr(4,  1)) * 8)
				+ (parseFloat(objName.value.substr(5,  1)) * 9)
				+ (parseFloat(objName.value.substr(6,  1)) * 4)
				+ (parseFloat(objName.value.substr(7,  1)) * 5)
				+ (parseFloat(objName.value.substr(8,  1)) * 2)
				+ (parseFloat(objName.value.substr(9,  1)));
				
			if (Mod(tall,11) != 0) {
				feil = true;
				feilmelding=("Du har skrevet feil i personnummer. Prøv på nytt!");
			}
			
			var tall = (parseFloat(objName.value.substr(0, 1)) * 5)
			+ (parseFloat(objName.value.substr(1, 1)) * 4)
			+ (parseFloat(objName.value.substr(2, 1)) * 3)
			+ (parseFloat(objName.value.substr(3, 1)) * 2)
			+ (parseFloat(objName.value.substr(4, 1)) * 7)
			+ (parseFloat(objName.value.substr(5, 1)) * 6)
			+ (parseFloat(objName.value.substr(6, 1)) * 5)
			+ (parseFloat(objName.value.substr(7, 1)) * 4)
			+ (parseFloat(objName.value.substr(8, 1)) * 3)
			+ (parseFloat(objName.value.substr(9, 1)) * 2)
			+ (parseFloat(objName.value.substr(10, 1)));
		      
			if (Mod(tall,11) != 0) {
				feil = true;
				feilmelding=("Du har skrevet feil i personnummer. Prøv på nytt!");
			}
		}
		handlefeil(objName);
	} 
}
/*
** INTERNE FUNKSJONER
*/
function require(objName,req) {

	var datefield = objName;
	strDate = datefield.value;
	window.status = "";
	vbtrim(objName);
	
	if (feil == true) {
		return false;
	} else {
		if (strDate.length < 1 ) { 
			if (req == 'N') { 
				return false;
			} else {
				return true;
			}
		} else {
			return false;
		}
	}

}



function chkdate(objName) {
	var strDatestyle = "EU";  
	var strDate;
	var strDateArray;
	var strDay;
	var strMonth;
	var strYear;
	var intday;
	var intMonth;
	var intYear;
	var booFound = false;
	var datefield = objName;
	var strSeparatorArray = new Array("-"," ","/",".");
	var intElementNr;
	var err = 0;
	var strMonthArray = new Array(12);
	strMonthArray[0] = "Jan";
	strMonthArray[1] = "Feb";
	strMonthArray[2] = "Mar";
	strMonthArray[3] = "Apr";
	strMonthArray[4] = "Mai";
	strMonthArray[5] = "Jun";
	strMonthArray[6] = "Jul";
	strMonthArray[7] = "Aug";
	strMonthArray[8] = "Sep";
	strMonthArray[9] = "Okt";
	strMonthArray[10] = "Nov";
	strMonthArray[11] = "Des";
	strDate = datefield.value;
	if (strDate.length < 1) {
		return true;
	}
	if (strDate.length < 6) {
		return false;
	}
	for (intElementNr = 0; intElementNr < strSeparatorArray.length; intElementNr++) {
		if (strDate.indexOf(strSeparatorArray[intElementNr]) != -1) {
			strDateArray = strDate.split(strSeparatorArray[intElementNr]);
			if (strDateArray.length != 3) {
				err = 1;
				return false;
			}
			else {
				strDay = strDateArray[0];
				strMonth = strDateArray[1];
				strYear = strDateArray[2];
			}
			booFound = true;
			   }
			}
			if (booFound == false) {
				if (strDate.length>5) {
				strDay = strDate.substr(0, 2);
				strMonth = strDate.substr(2, 2);
				strYear = strDate.substr(4);
				   }
			}
			if (strYear.length == 2) {
				intYear =  parseInt(strYear, 10);
				if (intYear < 30 ) {
					strYear = '20' + strYear;
				} else {
					strYear = '19' + strYear;
				}
			}

			intday = parseInt(strDay, 10);
			if (isNaN(intday)) {
				err = 2;
				return false;
			}
			intMonth = parseInt(strMonth, 10);
			if (isNaN(intMonth)) {
				for (i = 0;i<12;i++) {
					if (strMonth.toUpperCase() == strMonthArray[i].toUpperCase()) {
   					intMonth = i+1;
   					strMonth = strMonthArray[i];
   					i = 12;
			   	}
				}
				if (isNaN(intMonth)) {
					err = 3;
					return false;
				   }
				}
				intYear = parseInt(strYear, 10);
					if (isNaN(intYear)) {
					err = 4;
					return false;
				}
				if (intMonth>12 || intMonth<1) {
					err = 5;
					return false;
				}
				if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intday > 31 || intday < 1)) {
					err = 6;
					return false;
				}
				if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intday > 30 || intday < 1)) {
					err = 7;
					return false;
				}
				if (intMonth == 2) {
               if (intday < 1) {
                  err = 8;
                  return false;
               }
               if (LeapYear(intYear) == true) {
                  if (intday > 29) {
                     err = 9;
                     return false;
                  }
			   } else {
   				if (intday > 28) {
	   			err = 10;
		   		return false;
			   }
		     }
	}
	if (strDatestyle == "US") {
		datefield.value = strMonthArray[intMonth-1] + " " + intday+" " + strYear;
	} else {
		if (strDay.length == 1) {
			strDay = "0" + strDay;
		}
		if (strMonth.length == 1) {
			strMonth = "0" + strMonth;
		}
		
		datefield.value = strDay + "-" + strMonth + "-" + strYear;
	}
	return true;
}

function LeapYear(intYear) {
	if (intYear % 100 == 0) {
		if (intYear % 400 == 0) { return true; }
		}
		else {
		if ((intYear % 4) == 0) { return true; }
	}
	return false;
}

function checkmodulus10(CardNumber) {
// Sjekker kredittkort nummer

	var argv = checkmodulus10.arguments;
	var argc = checkmodulus10.arguments.length;
	var CardNumber = argc > 0 ? argv[0] : this.cardnumber;
	if (isNaN(CardNumber.value) == NaN) {
		return false;
	  }

		var no_digit = CardNumber.value.length;
		var oddoeven = no_digit & 1;
		var sum = 0;
		for (var count = 0; count < no_digit; count++) {
			var digit = parseInt(CardNumber.value.charAt(count));
			if (!((count & 1) ^ oddoeven)) {
				digit *= 2;
				if (digit > 9)
				digit -= 9;
			}
			sum += digit;
		}
		if (sum % 10 == 0)
			return true;
		else
			return false;
}

function modulus10(CardNumber) {
// Sjekker kredittkort nummer

	var argv = modulus10.arguments;
	var argc = modulus10.arguments.length;
	var CardNumber = argc > 0 ? argv[0] : this.cardnumber;
	if (isNaN(CardNumber.value) == NaN) {
		return false;
	  }

		var no_digit = CardNumber.value.length;
		var oddoeven = no_digit & 1;
		var sum = 0;
		for (var count = 0; count < no_digit; count++) {
			var digit = parseInt(CardNumber.value.charAt(count));
			if ( !((count & 1) ^ oddoeven)) {
				sum += digit;
			} else {
				digit *= 2;		
				if (digit > 9) {
					m1 = digit -10;
					digit = 1 + m1;
				}
		   		sum = sum + digit;
			}
		}
		sum1 = Math.ceil(sum /10);
		sum1 = (sum1 * 10);
		sum = sum1 -sum;
		return sum;
}

function addmodulus10(CardNumber) {
	CardNumber.value = CardNumber.value + modulus10(CardNumber)
}

function capsLc(objName){
	if (navigator.appVersion.substring(0,1)=="2"){
		navOld(objName);
	} else {
		navNew(objName);
	}
}

function Mod(CardNumber, ModNumber){
	var x = CardNumber;
	while (x >= ModNumber) {
		x = x - ModNumber;
	}
	return x;
}

function navOld(objName){
	txt=objName.value+" ";
	txt=txt.toLowerCase();
	txtl="";
	while ((txt.length>0)&&(txt.indexOf(" ")>-1)){
		pos=txt.indexOf(" ");
		wrd=txt.substring(0,pos);
		cmp=" "+wrd+" ";
		if (tst.indexOf(cmp)<0){
		ltr=wrd.substring(0,1);
		ltr=ltr.toUpperCase();
		wrd=ltr+wrd.substring(1,wrd.length);
	}
	txtl+=wrd+" "; 
	txt=txt.substring((pos+1),txt.length);
	}
	ltr=txtl.substring(0,1);
	ltr=ltr.toUpperCase();
	txtl=ltr+txtl.substring(1,txtl.length-1);
	objName.value=txtl;
}

function navNew(objName){
	txt=objName.value;
	txt=txt.toLowerCase();

	wrd=txt.substring(0,1);
	txt=wrd.toUpperCase()+txt.substring(1,txt.length);
	while (txt.indexOf(" ")>-1){
		pos=txt.indexOf(" ");
		wrd=txt.substring(pos+1,pos+2);
		txt=txt.substring(0,pos)+"£"+wrd.toUpperCase()+txt.substring(pos+2,txt.length);
	}
	while (txt.indexOf("£")>-1 ){
		txt=txt.replace("£"," ");
	}
	while (txt.indexOf("-")>-1){
		pos=txt.indexOf("-");
		wrd=txt.substring(pos+1,pos+2);
		txt=txt.substring(0,pos)+"¤"+wrd.toUpperCase()+txt.substring(pos+2,txt.length);
	}
	while (txt.indexOf("¤")>-1 ){
		txt=txt.replace("¤","-");
	}

	objName.value=txt;
}

function vbtrim (objName) {
	while(''+objName.value.charAt(0)==' ')objName.value=objName.value.substring(1,objName.value.length);
}

function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}
function ltrim(stringToTrim) {
	return stringToTrim.replace(/^\s+/,"");
}
function rtrim(stringToTrim) {
	return stringToTrim.replace(/\s+$/,"");
}




// Additional functions
var comboObjects	= new Array();
var Comboidfelt 	= new Array();
var Comboinfofelt	= new Array();

var ListObjects	= new Array();
var Listidfelt 	= new Array();
var Listinfofelt	= new Array();
var ListLink       = new Array();
var ListValue       = new Array();

var fieldObjects	= new Array();
var fieldidfelt 	= new Array();
var fieldinfofelt	= new Array();



function addcomboitem(objName,lockFelt,idFelt,infoFelt) {
	//Adds comboitems
	var ObjectNavn = objName + '#' + lockFelt;
	comboObjects[eval(comboObjects.length)]    = ObjectNavn;
	Comboidfelt[eval(Comboidfelt.length)]      = idFelt;
	Comboinfofelt[eval(Comboinfofelt.length)]  = infoFelt;
}

function addfielditem(objName,lockFelt,idFelt,infoFelt) {
	//Adds comboitems
	var ObjectNavn = objName + '#' + lockFelt + '#' + idFelt;
	fieldObjects[eval(fieldObjects.length)]    = ObjectNavn;
	//alert(ObjectNavn);
	fieldidfelt[eval(fieldidfelt.length)]      = idFelt;
	fieldinfofelt[eval(fieldinfofelt.length)]  = infoFelt;
}

function addlistitem(objName,lockFelt,idFelt,infoFelt,link) {
	//Adds listitem with link... 
	var ObjectNavn = objName + '#' + lockFelt;
	ListValue[eval(ListValue.length)]    = lockFelt;
	ListObjects[eval(ListObjects.length)]    = ObjectNavn;
	Listidfelt[eval(Listidfelt.length)]      = idFelt;
	Listinfofelt[eval(Listinfofelt.length)]  = infoFelt;
	ListLink[eval(ListLink.length)]  = link;
}

function getfielditems(objSource,objName,lockFelt,idFelt){
	//Fills textbox
	//objSource = Textbox to fill
	//objName 	= this
	//lockFelt  = Oppslagsfelt
	//idFelt    = Verdifelt
	var ObjectNavn = objName + '#' + lockFelt.toString() + '#' + idFelt.toString();	
	//alert(fieldObjects.length.toString());
	objSource.value = '';
	if (fieldObjects.length > 0) {
		//alert('hello');
		for (i = 0; i < fieldObjects.length; i++) {
		
			if (fieldObjects[i] == ObjectNavn) {
				//Verdien er lik og skal derfor legge den til..
				//alert(fieldinfofelt[i]);
				objSource.value = fieldinfofelt[i];
			}
		}
	}
}


function fillcomboitems(objSource,objName,lockFelt,clear){
	//Fills comboboxes
	//objSource = Combobox to fill
	//objName 	= this
	//lockFelt  = Oppslagsfelt
	//clear 	= J blanker N blanker ikke
	if (clear == 'J') {
		clearcombo(objSource);
	}
	var ObjectNavn = objName + '#' + lockFelt.value.toString();	
    var ObjectLength = ObjectNavn.length;
    
	var Alle = false;
	//alert(ObjectNavn);
	if (lockFelt.value.toString() == '') {
		if (comboObjects.length > 0) {
			
			for (i = 0; i < comboObjects.length; i++) {
				// Må sjekke om det er riktig ObjectNavn...
				if (comboObjects[i].substring(0,ObjectLength) == ObjectNavn) {
					if (Alle != true || Comboidfelt[i] != '') {
						objSource.options[objSource.options.length] = new Option(Comboinfofelt[i],Comboidfelt[i]);
					}
					if (Comboidfelt[i] == '') {
						Alle = true;
					}
				}
			}
		}
	} else {
		if (comboObjects.length > 0) {
			for (i = 0; i < comboObjects.length; i++) {
				//vbtrim(comboObjects[i]);
				if (comboObjects[i] == ObjectNavn) {
					//Verdien er lik og skal derfor legge den til..
					objSource.options[objSource.options.length] = new Option(Comboinfofelt[i],Comboidfelt[i]);
				}
			}
		}
	}
	//objSource.onchange;
}

function filllistitems(objSource,objName,lockFelt,imgsource, cssstyle){
	//Fills div with items...
	//objSource = Combobox to fill
	//objName 	= this
	//lockFelt  = Oppslagsfelt
	//imgsource = Angir bane til vis mer img
	
    var outString = objSource.innerHTML;
	if (outString !='') {
		objSource.innerHTML = '';
	} else {
		var ObjectNavn = objName + '#' + lockFelt;	
		var Alle = false;
		//alert(ObjectNavn);
		if (ListObjects.length > 0) {
			outString += "<table border='0'>"
			for (i = 0; i < ListObjects.length; i++) {
				//vbtrim(comboObjects[i]);
				if (lockFelt != '') {
					var checkObject = ListObjects[i]					
				} else { 
					var checkObject = ListObjects[i].toString().substring(0, ObjectNavn.length);
				}
				if (checkObject == ObjectNavn) {
				   if (Listinfofelt[i] != '') {
						//Verdien er lik og skal derfor legge den til..
						outString += "<tr valign='middle'><td align='left'><img src='" + imgsource + "' border='0'/></td>"
						outString += "<td align='left'>" 
						if (ListLink[i] != '') {
							//outString += "<div href='"  + ListLink[i] ">"
							outString += "<div onclick='JavaScript:window.location.href=&quot;" + ListLink[i] + "&quot;;' class='" + cssstyle + "'>"
						}
						outString += Listinfofelt[i] 
						if (ListLink[i] != '') {
							//outString += "</div>"
							outString += "</div>"
						}
						outString += "</td></tr>";
						//objSource.options[objSource.options.length] = new Option(,Listidfelt[i]);
					}
				}
			}
			objSource.innerHTML = outString;
		}
	}
}

function clearcombo(objName) {
	//Clears comboboxes
	//objName 	= this

	for (var i = objName.options.length - 1; i >= 0; i--) {
		objName.options[i] = null;
	}
	objName.selectedIndex = -1;
}

function fillcombo(objName,clear,liste, splitchar){
	//Fills comboboxes
	//objName 	= this
	//clear 	= J blanker N blanker ikke
	if (clear == 'J') {
		clearcombo(objName);
	}
	var listesplit = liste.split(splitchar)
	var x = 0;
	for (var i = 0; i < (listesplit.length/2); i++){
		objName.options[objName.options.length] = new Option(listesplit[x], listesplit[x + 1]);
		x = x + 2;
  }
}

function selectcomboitem(objName,idValue){
	//Select
	//objSource = Combobox to test
	//idValue    = Verdi som skal velges
	//alert(objName.length);
	if (idValue.length > 0) {
		for (var i = objName.options.length - 1; i >= 0; i--) {
			if (objName.options[i].value == idValue) {
				//objName.options[i].selected = true;
				//Velger post..
				objName.options[i].selected = true;
				objName.options[i].defaultSelected = true;
				//alert(idValue);
			}
		}
	}
}

function LCase(Value) {
  return Value.toString().toLowerCase();
}

function UCase(Value) {
  return Value.toString().toUpperCase();
}

function Len(Expression) {
  return Expression.toString().length;
}

function Left(Str, Length) {
  if (Length < 0) {
    alert("Invalid Length argument\n\nLeft function (js2vb.js)"); return "";
  }
  return Str.substring(0, Length);
}

function Right(Str, Length) {
  if (Length < 0) {
    alert("Invalid Length argument\n\nRight function (js2vb.js)"); return "";
  }
  return Str.substring(Len(Str) - Length, Len(Str));
}

function Mid(Str, Start, Length) {
  if (Length < 1) {
    alert("Invalid Length argument\n\nMid function (js2vb.js)"); return "";
  }
  if (Start < 0) {
    alert("Invalid Start argument\n\nMid function (js2vb.js)"); return "";
  }
  return Str.substring(Start, Start + Length);
}

function InStr(Start, String1, String2, Compare) {
  if (Start < 1) {
    alert("Invalid Start argument\n\nInStr function (js2vb.js)"); return "";
  }
  if (Start > Len(String1)) return 0;
  if (Len(String2) == 0) return Start;
  if (Compare == 1) {String1 = LCase(String1); String2 = LCase(String2);}
  if (Start > 1) {
    var index = Right(String1, Len(String1) - Start + 1).indexOf(String2)
    if (index == -1) {return 0;} else {return index + Start;}
  } else {
    return String1.indexOf(String2) + 1
  }
}

function InStrRev(StringCheck, StringMatch, Start, Compare) {
  if (Start == 0 || Start < -1) {
    alert("Invalid Start argument\n\nInStrRev function (js2vb.js)");
	return "";
  }
  if (Len(StringMatch) == 0) return Start;
  if (Compare == 1) {
    StringCheck = LCase(StringCheck); StringMatch = LCase(StringMatch);
  }
  if (Start > 1) {
    return Left(StringCheck, Start).lastIndexOf(StringMatch) + 1;
    } else {
    return StringCheck.lastIndexOf(StringMatch) + 1;
  }
}

function IsNull(Expression) {
  return (Expression == null);
}

function IsEmpty(Expression) {
  return (Expression.toString().length == 0);
}

function IsObject(Expression) {
  return (typeof Expression == "object");
}

function IsArray(VarName) {
  return (VarName.constructor.toString().indexOf("Array") == -1);
}

function IsDate(Expression) {
  var test = new Date(Date.parse(Expression));
  return !(isNaN(test.getYear()));
}

function MonthName(Month, Abbreviate) {
  var months = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
  if (Month < 1 || Month > 13) {
    alert("Invalid Month argument\n\nMonthName function (js2vb.js)");
	return "";
  }
  var retval = months[Month - 1];
  if (Abbreviate) retval = Left(retval, 3);
  return retval;
}

function WeekdayName(Weekday, Abbreviate, FirstDayOfWeekValue) {
  var weekdays = new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
  if (Weekday < 1 || Weekday > 7) {
    alert("Invalid Weekday argument\n\nWeekdayName function (js2vb.js)");
    return "";
  }
  if (FirstDayOfWeekValue < 0 || FirstDayOfWeekValue > 7) {
    alert("Invalid FirstDayOfWeekValue argument\n\n\
	WeekdayName function (js2vb.js)");
	return "";
  }
  var addval = (FirstDayOfWeekValue > 1) ? FirstDayOfWeekValue : 0;
  if (Weekday + addval > 7) addval -= 7;
  return weekdays[Weekday + addval - 1];
}

function GetTableValue(pControl, pReturControl,pTable, pFelt, pReturfelt, pFeilmelding) {
	var pVerdi = pControl.value;
	if (pVerdi != "") {
		try {
			var arr = showModalDialog("../popup/checktablevalue.asp?table=" + pTable + "&felt1=" + pFelt + "&verdi1=" + pVerdi + "&Returfelt=" + pReturfelt + "&Feilmelding=" + pFeilmelding,"","dialogHide:0;unadorned:yes;dialogTop:-200px;dialogLeft:-200px;dialogHeight:100px;dialogWidth:100px");
			if (arr.Result != true) {
				pControl.value = "";
				if (pReturControl != null) {
					pReturControl.value = "";
				}
				pControl.focus();
			} else {
				if (arr.Returverdi != "") {
					if (pReturControl != null) {
						pReturControl.value = arr.Returverdi;}
				} else {
					if (pReturControl != null) {
						pReturControl.value = "";
					}
				}
			}
			} catch (e) {
					null;
			}
		
	} else {
			if (pReturControl != null) {
				pReturControl.value = "";
			}
	}
}
		function IsNumeric(sText)
		{
			var ValidChars = "0123456789.";
   			var IsNumber=true;
   			var Char;

 
   			for (i = 0; i < sText.length && IsNumber == true; i++) 
      			{ 
      			Char = sText.charAt(i); 
      			if (ValidChars.indexOf(Char) == -1) 
         			{
         			IsNumber = false;
         			}
      			}
   			return IsNumber;
   
   		}


		function GetTableValue14(pControl, pReturControl,pReturControl2,pReturControl3,pReturControl4,pReturControl5,pReturControl6,pReturControl7,pReturControl8,pReturControl9,pReturControl10,pReturControl11,pReturControl12,pReturControl13,pReturControl14,pReturControl15,pTable, pFelt, pReturfelt, pReturfelt2, pReturfelt3,pReturfelt4,pReturfelt5,pReturfelt6,pReturfelt7,pReturfelt8,pReturfelt9,pReturfelt10,pReturfelt11,pReturfelt12,pReturfelt13,pReturfelt14,pReturfelt15,pWhere,pFeilmelding) {
			var pVerdi = pControl.value;
			if (pVerdi == "" || document.activeElement.value == "Blank felter") {
				return;
			} else {

				if (IsNumeric(pVerdi) && pVerdi != "") {
			var arr = showModalDialog("../popup/checktablevalue.asp?table=" + pTable + "&felt1=" + pFelt + "&verdi1=" + pVerdi + "&Returfelt=" + pReturfelt + "&Returfelt2=" + pReturfelt2 + "&Returfelt3=" + pReturfelt3 + "&Returfelt4=" + pReturfelt4 + "&Returfelt5=" + pReturfelt5 + "&Returfelt6=" + pReturfelt6 + "&Returfelt7=" + pReturfelt7 + "&Returfelt8=" + pReturfelt8 + "&Returfelt9=" + pReturfelt9 + "&Returfelt10=" + pReturfelt10 + "&Returfelt11=" + pReturfelt11 + "&Returfelt12=" + pReturfelt12 + "&Returfelt13=" + pReturfelt13 + "&Returfelt14=" + pReturfelt14 + "&Returfelt15=" + pReturfelt15 + "&Where=" + pWhere + "&Feilmelding=" + pFeilmelding,"","dialogHide:0;unadorned:yes;dialogTop:-200px;dialogLeft:-200px;dialogHeight:1px;dialogWidth:1px");
				if (arr.Result != true) {
					pControl.value = "";
					if (pReturControl != null) {
						pReturControl.value = "";
						pReturControl2.value = "";
						pReturControl3.value = "";
						pReturControl4.value = "";
						pReturControl5.value = "";
						pReturControl6.value = "";
						pReturControl7.value = "";
						pReturControl8.value = "";
						pReturControl9.value = "";
						pReturControl10.value = "";
						pReturControl11.value = "";
						pReturControl12.value = "";
						pReturControl13.value = "";
						pReturControl14.value = "";
						pReturControl15.value = "";
						ClearInteresser();
					}
					pControl.focus();
				} else {
					if (arr.Returverdi != "") {
						if (pReturControl != null) {
							pReturControl.value = arr.Returverdi;
							pReturControl2.value = arr.Returverdi2;
							pReturControl3.value = arr.Returverdi3;
							pReturControl4.value = arr.Returverdi4;
							pReturControl5.value = arr.Returverdi5;
							pReturControl6.value = arr.Returverdi6;
							pReturControl7.value = arr.Returverdi7;
							pReturControl8.value = arr.Returverdi8;
							pReturControl9.value = arr.Returverdi9;
							pReturControl10.value = arr.Returverdi10;
							pReturControl11.value = arr.Returverdi11;
							pReturControl12.value = arr.Returverdi12;
							pReturControl13.value = arr.Returverdi13;
							pReturControl14.value = arr.Returverdi14;
							pReturControl15.value = arr.Returverdi15;
						}
					} else {
						if (pReturControl != null) {
							pReturControl.value = "";
							pReturControl2.value = "";
							pReturControl3.value = "";
							pReturControl4.value = "";
							pReturControl5.value = "";
							pReturControl6.value = "";
							pReturControl7.value = "";
							pReturControl8.value = "";
							pReturControl9.value = "";
							pReturControl10.value = "";
							pReturControl11.value = "";
							pReturControl12.value = "";
							pReturControl13.value = "";
							pReturControl14.value = "";
							pReturControl15.value = "";
						}
					}
				}
				} else {
					if (pReturControl != null) {
						pReturControl.value = "";
						pReturControl2.value = "";
						pReturControl3.value = "";
						pReturControl4.value = "";
						pReturControl5.value = "";
						pReturControl6.value = "";
						pReturControl7.value = "";
						pReturControl8.value = "";
						pReturControl9.value = "";
						pReturControl10.value = "";
						pReturControl11.value = "";
						pReturControl12.value = "";
						pReturControl13.value = "";
						pReturControl14.value = "";
						pReturControl15.value = "";
					}
				}
			}
		}
