function openWindow(url, width, height) {
	winParam="height=" + height + ", width=" + width + ", scrollbars=1, resizable=no";
	win=window.open(url, '_new', winParam);
	win.moveTo(screen.width/2-width/2, screen.height/2-height/2);
}

function popup(url, descr) {
	winParam="fullscreen=no,toolbar=no,status=no,menubar=no,scrollbars=no,resizable=no,directories=no,location=no";
	win=window.open('/aske/opencms/system/modules/com.gridnine.opencms.modules.friibergh/pages/popup.html' + '?url=' + url + '&descr=' + descr, '_new', winParam);
}
function big(url, descr) {
	winParam="scrollbars=0, resizable=no";
	win=window.open('/aske/opencms/system/modules/com.gridnine.opencms.modules.friibergh/pages/popup.html' + '?url=' + url + '&param=gallery', '_new', winParam);
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}
function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}
function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
function MM_callJS(jsStr) { //v2.0
  return eval(jsStr)
}
function DoAutorotationUp() {
        document.ptviewer.startAutoPan( 0.0, 1.0005, 1.0 );
}
function DoAutorotationDown() {
        document.ptviewer.startAutoPan( 0.0, -1.0005, 1.0 );
}
function DoAutorotationLeft() {
        document.ptviewer.startAutoPan( -1.001, 0.0, 1.0 );
}
function DoAutorotationRight() {
        document.ptviewer.startAutoPan( 1.001, 0.0, 1.0 );
}
function DoAutorotationStop() {
        document.ptviewer.stopAutoPan();
}
function DoZoomIn() {
	document.ptviewer.startAutoPan( 0.0, 0.0, 0.985 );  
}
function DoZoomOut() {
	document.ptviewer.startAutoPan( 0.0, 0.0, 1.015 );
}
function StopZooming() {
    document.ptviewer.stopAutoPan();
}
function MM_findObj(n, d) { //v4.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(n); return x;
}

function testForm(formToTest, element){ 
	var err = "";
	var varde;
	var rubrikNamn;
	var elementNamn;
	var validTyp;
	var returString;

		for(var i=0; i < element.length; i++){
			varde = "";
			rubrikNamn = element[i][0];
			elementNamn = element[i][1];
			validTyp = element[i][2];
			returString = (element[i].length > 3)?("*"+element[i][3].replace(/\[rubrik\]/gi,rubrikNamn)+"\n"):null;
			
			if(formToTest.elements[elementNamn] == null){
				err += '\'' + elementNamn + '\' finns inte i formuläret!\n';
				continue;
			}


			if(formToTest.elements[elementNamn].length){
				for(var n=0;n < formToTest.elements[elementNamn].length;n++){
					if(formToTest.elements[elementNamn][n].type=="text" && !formToTest.elements[elementNamn][n].disabled){
						varde += formToTest.elements[elementNamn][n].value;
					}else if((formToTest.elements[elementNamn].type=="select-one" || formToTest.elements[elementNamn].type=="select-multiple") && !formToTest.elements[elementNamn].disabled && formToTest.elements[elementNamn][n].selected){
						varde += formToTest.elements[elementNamn][n].value;
					}else if((formToTest.elements[elementNamn][n].type=="select-one" || formToTest.elements[elementNamn][n].type=="select-multiple") && !formToTest.elements[elementNamn][n].disabled){
						if(formToTest.elements[elementNamn][n].options.length){
							for(var ii=0; ii < formToTest.elements[elementNamn][n].options.length; ii++){
								if(formToTest.elements[elementNamn][n].options[ii].selected){
									varde += formToTest.elements[elementNamn][n].options[ii].value;
								}
							}
						}else{
							varde += formToTest.elements[elementNamn][n].value;
						}
					}else if(formToTest.elements[elementNamn][n].checked==true && !formToTest.elements[elementNamn][n].disabled){
						varde += formToTest.elements[elementNamn][n].value;
					}
				}
			}else{
				if((formToTest.elements[elementNamn].type=="checkbox" || formToTest.elements[elementNamn].type=="radio") && !formToTest.elements[elementNamn].disabled){
					if(formToTest.elements[elementNamn].checked){
						varde = formToTest.elements[elementNamn].value;
					}
				}else if(!formToTest.elements[elementNamn].disabled){
					varde = formToTest.elements[elementNamn].value;
				}
			}

			if(validTyp.exec){
				if(!(varde.match(validTyp) != null || varde.length == 0)){
					err += returString;
				}
			}else if(validTyp == 'notNull'){
				if(!validateNotNull(varde)){
					err += (returString)?returString:'*Fältet \'' + rubrikNamn + '\' får inte vara tomt\n';
				}
			}else if(validTyp == 'nummer'){
				if(!validateNumber(varde)){
					err += (returString)?returString:'*Fältet \'' + rubrikNamn + '\' får endast bestе av siffror\n';
				}
			}else if(validTyp == 'heltal'){
				if(!validateHeltal(varde)){
					err += (returString)?returString:'*Fältet \'' + rubrikNamn + '\' får endast bestе av siffror\n';
				}
			}else if(validTyp == 'bit'){
				if(!validateBit(varde)){
					err += (returString)?returString:'*Fältet \'' + rubrikNamn + '\' får endast bestе av siffran 1 eller 0\n';
				}
			}else if(validTyp == 'kontonummer'){
				if(!(varde.length==0 || Number(varde))){
					err += (returString)?returString:'*Fältet \'' + rubrikNamn + '\' får endast bestе av siffror\n';
				}
			}else if(validTyp == 'postnr'){
				if(!validatePostnr(varde)){
					err += (returString)?returString:'*Fältet \'' + rubrikNamn + '\' innehеller inte ett giltigt postnummer ex. 999 99\n';
				}
			}else if(validTyp == 'telnummer'){
				if(!validateTelNumber(varde)){
					err += (returString)?returString:'*Fältet \'' + rubrikNamn + '\' innehеller inte ett giltigt telefonnummer ex. +46 (0) 8-111 111 11\n';
				}
			}else if(validTyp == 'epost'){
				if(!validateEmail(varde)){
					err += (returString)?returString:'*Fältet \'' + rubrikNamn + '\' innehеller inte en korrekt E-postadress\n' ;
				}
			}else if(validTyp == 'datum'){
				if(!validateDate(varde)){
					err += (returString)?returString:'*Fältet \'' + rubrikNamn + '\' innehеller inte ett giltigt datum [ееее-mm-dd]\n';
				}
			}else if(validTyp == 'klocka'){
				if(!validateKlocka(varde)){
					err += (returString)?returString:'*Fältet \'' + rubrikNamn + '\' innehеller inte ett korrekt klockslag [tt.mm] Tex 17.25\n';
				}
			}else if(validTyp == 'datum2'){
				if(!validateDate(varde)){
					err += (returString)?returString:'*Fältet \'' + rubrikNamn + '\' innehеller inte ett giltigt datum [ееее-mm-dd]\n';
				}
			}else if(validTyp == 'datumtid'){
				if(!validateDateTime(varde)){
					err += (returString)?returString:'*Fältet \'' + rubrikNamn + '\' innehеller inte ett giltigt datum [ееее-mm-dd hh:mm]\n';
				}
			}else if(validTyp.substr(0,6) == 'langd='){
				langd = validTyp.substring(validTyp.indexOf("=")+1,validTyp.length);
				if(!validateLength(varde,langd)){
					err += (returString)?returString:'*Fältet \''+ rubrikNamn +'\' mеste bestе av '+ langd +' tecken\n';
				}
			}else if(validTyp.substr(0,9) == 'maxlangd='){
				langd = validTyp.substring(validTyp.indexOf("=")+1,validTyp.length);
				if(!validateMaxLength(varde,langd)){
					err += (returString)?returString:'*Fältet \''+ rubrikNamn +'\' får inte bestе av fler än '+ langd +' tecken\n';
				}
			}else if(validTyp.substr(0,9) == 'minlangd='){
				langd = validTyp.substring(validTyp.indexOf("=")+1,validTyp.length);
				if(!validateMinLength(varde,langd)){
					err += (returString)?returString:'*Fältet \''+ rubrikNamn +'\' får inte bestе av färre än '+ langd +' tecken\n';
				}
			}else if(validTyp.substr(0,7) == 'minnum='){
				langd = validTyp.substring(validTyp.indexOf("=")+1,validTyp.length);
				if(!validateMinNum(varde,langd)){
					err += (returString)?returString:'*Fältet \''+ rubrikNamn +'\' får inte innehеlla värden under '+ langd +'\n';
				}
			}else if(validTyp.substr(0,7) == 'maxnum='){
				langd = validTyp.substring(validTyp.indexOf("=")+1,validTyp.length);
				if(!validateMaxNum(varde,langd)){
					err += (returString)?returString:'*Fältet \''+ rubrikNamn +'\' får inte innehеlla värden цver '+ langd +'\n';
				}
			}else if(validTyp.substr(0,8) == 'mindate='){
				langd = validTyp.substring(validTyp.indexOf("=")+1,validTyp.length);
				if(!validateMinDate(varde,langd)){
					err += (returString)?returString:'*Fältet \''+ rubrikNamn +'\' får inte innehеlla datum innan '+ langd +'\n';
				}
			}else if(validTyp.substr(0,8) == 'maxdate='){
				langd = validTyp.substring(validTyp.indexOf("=")+1,validTyp.length);
				if(!validateMaxDate(varde,langd)){
					err += (returString)?returString:'*Fältet \''+ rubrikNamn +'\' får inte innehеlla datum efter '+ langd +'\n';
				}
			}else if(validTyp == 'idnummer'){
				if(!validateIdNum(varde)){
					err += (returString)?returString:'*Fältet \'' + rubrikNamn + '\' innehеller inte ett giltigt id-nummer [xxxxxx-xxxx]\n';
				}
			}else if(validTyp == 'creditcard'){
				if(!validateCreditCard(varde)){
					err += (returString)?returString:'*Fältet \'' + rubrikNamn + '\' innehеller inte ett giltigt kreditkortsnummer';
				}
			}else{
				err += '*\'' + validTyp + '\' är inte en giltig valideringsmetod\n';
			}
		}

		if (err != ''){
			alert(err);
		}
		return (err == '');
	}

	function testFormBool(formToTest, element){ 
	var isValid = true;
	var varde;
	var rubrikNamn;
	var elementNamn;
	var validTyp;
	var returString;

		for(var i=0; i < element.length; i++){
			varde = "";
			rubrikNamn = element[i][0];
			elementNamn = element[i][1];
			validTyp = element[i][2];
			
			if(formToTest.elements[elementNamn] == null){
				isValid = false;
				break;
			}

			if(formToTest.elements[elementNamn].length){
				for(var n=0;n < formToTest.elements[elementNamn].length;n++){
					if(formToTest.elements[elementNamn][n].type=="text" && !formToTest.elements[elementNamn][n].disabled){
						varde += formToTest.elements[elementNamn][n].value;
					}else if((formToTest.elements[elementNamn].type=="select-one" || formToTest.elements[elementNamn].type=="select-multiple") && !formToTest.elements[elementNamn].disabled && formToTest.elements[elementNamn][n].selected){
						varde += formToTest.elements[elementNamn][n].value;
					}else if((formToTest.elements[elementNamn][n].type=="select-one" || formToTest.elements[elementNamn][n].type=="select-multiple") && !formToTest.elements[elementNamn][n].disabled){
						if(formToTest.elements[elementNamn][n].options.length){
							for(var ii=0; ii < formToTest.elements[elementNamn][n].options.length; ii++){
								if(formToTest.elements[elementNamn][n].options[ii].selected){
									varde += formToTest.elements[elementNamn][n].options[ii].value;
								}
							}
						}else{
							varde += formToTest.elements[elementNamn][n].value;
						}
					}else if(formToTest.elements[elementNamn][n].checked==true && !formToTest.elements[elementNamn][n].disabled){
						varde += formToTest.elements[elementNamn][n].value;
					}
				}
			}else{
				if((formToTest.elements[elementNamn].type=="checkbox" || formToTest.elements[elementNamn].type=="radio") && !formToTest.elements[elementNamn].disabled){
					if(formToTest.elements[elementNamn].checked){
						varde = formToTest.elements[elementNamn].value;
					}
				}else if(!formToTest.elements[elementNamn].disabled){
					varde = formToTest.elements[elementNamn].value;
				}
			}

			if(validTyp.exec){
				if(!(varde.match(validTyp) != null || varde.length == 0)){
					isValid = false;
					break;
				}
			}else if(validTyp == 'notNull'){
				if(!validateNotNull(varde)){
					isValid = false;
					break;
				}
			}else if(validTyp == 'nummer'){
				if(!validateNumber(varde)){
					isValid = false;
					break;
				}
			}else if(validTyp == 'heltal'){
				if(!validateHeltal(varde)){
					isValid = false;
					break;
				}
			}else if(validTyp == 'bit'){
				if(!validateBit(varde)){
					isValid = false;
					break;
				}
			}else if(validTyp == 'kontonummer'){
				if(!(varde.length==0 || Number(varde))){
					isValid = false;
					break;
				}
			}else if(validTyp == 'postnr'){
				if(!validatePostnr(varde)){
					isValid = false;
					break;
				}
			}else if(validTyp == 'telnummer'){
				if(!validateTelNumber(varde)){
					isValid = false;
					break;
				}
			}else if(validTyp == 'epost'){
				if(!validateEmail(varde)){
					isValid = false;
					break;
				}
			}else if(validTyp == 'datum'){
				if(!validateDate(varde)){
					isValid = false;
					break;
				}
			}else if(validTyp == 'klocka'){
				if(!validateKlocka(varde)){
					isValid = false;
					break;
				}
			}else if(validTyp == 'datum2'){
				if(!validateDate(varde)){
					isValid = false;
					break;
				}
			}else if(validTyp == 'datumtid'){
				if(!validateDateTime(varde)){
					isValid = false;
					break;
				}
			}else if(validTyp.substr(0,6) == 'langd='){
				langd = validTyp.substring(validTyp.indexOf("=")+1,validTyp.length);
				if(!validateLength(varde,langd)){
					isValid = false;
					break;
				}
			}else if(validTyp.substr(0,9) == 'maxlangd='){
				langd = validTyp.substring(validTyp.indexOf("=")+1,validTyp.length);
				if(!validateMaxLength(varde,langd)){
					isValid = false;
					break;
				}
			}else if(validTyp.substr(0,9) == 'minlangd='){
				langd = validTyp.substring(validTyp.indexOf("=")+1,validTyp.length);
				if(!validateMinLength(varde,langd)){
					isValid = false;
					break;
				}
			}else if(validTyp.substr(0,7) == 'minnum='){
				langd = validTyp.substring(validTyp.indexOf("=")+1,validTyp.length);
				if(!validateMinNum(varde,langd)){
					isValid = false;
					break;
				}
			}else if(validTyp.substr(0,7) == 'maxnum='){
				langd = validTyp.substring(validTyp.indexOf("=")+1,validTyp.length);
				if(!validateMaxNum(varde,langd)){
					isValid = false;
					break;
				}
			}else if(validTyp.substr(0,8) == 'mindate='){
				langd = validTyp.substring(validTyp.indexOf("=")+1,validTyp.length);
				if(!validateMinDate(varde,langd)){
					isValid = false;
					break;
				}
			}else if(validTyp.substr(0,8) == 'maxdate='){
				langd = validTyp.substring(validTyp.indexOf("=")+1,validTyp.length);
				if(!validateMaxDate(varde,langd)){
					isValid = false;
					break;
				}
			}else if(validTyp == 'idnummer'){
				if(!validateIdNum(varde)){
					isValid = false;
					break;
				}
			}else if(validTyp == 'creditcard'){
				if(!validateCreditCard(varde)){
					isValid = false;
					break;
				}
			}else{
				isValid = false;
				break;
			}
		}

		return isValid;
	}

	function validateNotNull(str){
		return (str.length > 0)
	}

	function validateLength(str,langd){
		return (str.length == langd || str.length == 0)
	}

	function validatePostnr(str){
		var numPat = /^(\d){3}(\s){1}(\d){2}$/
		var tmp = str.match(numPat);
		return(tmp != null || str.length==0)
	}

	function validateMaxLength(str,langd){
		return (str.length <= langd)
	}

	function validateMinLength(str,langd){
		return (str.length >= langd)
	}

	function validateMinNum(str, minNum){
		return validateInt(str)?(Number(str) >= minNum || str.length==0):false;
	}

	function validateMaxNum(str, maxNum){
		return validateInt(str)?(Number(str) <= maxNum || str.length==0):false;
	}

	function validateInt(str){
		return (Number(str) || str.length==0);
	}

	function validateNumber(str){
		var numPat = /^-?(\d+((\.|,)?))*(\d+)$/
		var tmp = str.match(numPat);
		return(tmp != null || str.length == 0);
	}

	function validateHeltal(str){
		var numPat = /^(\d+)$/
		var tmp = str.match(numPat);
		return(tmp != null || str.length == 0);
	}

	function validateBit(str){
		str += ""; 
		var numPat = /^([0-1]){1}$/
		var tmp = str.match(numPat);
		return(tmp != null || str.length == 0);
	}

	function validateTelNumber(str){
//		var numPat = /^((\+){1}(\d){1,4}(\s){1}((\(){1}(\d){1}(\)){1}(\s)?)?)?(\d+)((\s|-){1}\d+)*$/
		var numPat = /^((\+){1}(\d){1,4}(\s)?((\(){1}(\d){1}(\)){1}(\s)?)?)?(\d+)((\s|\s?-\s?){1}\d+)*$/
		var tmp = str.match(numPat);
		return (tmp != null || str.length == 0);
	}

	function validateEmail(emailStr){
		var emPat = /^[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)*@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/
		var tmp = emailStr.match(emPat);
		return (tmp != null || emailStr.length == 0);
	}

	function validateMinDate(varde, minDate){
		if(varde.length==0 || minDate.length==0){
			return true;
		}else if(!( (validateDate(varde) || validateDateTime(varde)) && (validateDate(minDate) || validateDateTime(minDate)) )){
			return false;
		}
		
		return ((new Date(varde.replace(/-/g,'/'))) >= (new Date(minDate.replace(/-/g,'/'))));
	}

	function validateMaxDate(varde, maxDate){
		if(varde.length==0 || maxDate.length==0){
			return true;
		}else if(!( (validateDate(varde) || validateDateTime(varde)) && (validateDate(maxDate) || validateDateTime(maxDate)) )){
			return false;
		}

		return ((new Date(varde.replace(/-/g,'/'))) <= (new Date(maxDate.replace(/-/g,'/'))));
	}

	function validateKlocka(klocka){
		var clockPat = /^(([0-1][0-9])|([2][0-3]))(\:)([0-5][0-9])(\:[0-5][0-9](\.\d{3})?)?$/
		var tmp = klocka.match(clockPat);
		return (tmp != null || klocka.length == 0);
	}

	function validateDate(datum){
		if (datum.length == 0){return true;}
		
		var datPat = /^(\d+)([-\/])(\d+)(\2)(\d+)$/
		var mArray = datum.match(datPat);

		if (mArray == null){
			return false;
		}else{
			var day = mArray[2]=="-"?mArray[5]:mArray[3];
			var month = mArray[2]=="-"?mArray[3]:mArray[1];
			var year = mArray[2]=="-"?mArray[1]:mArray[5];

			if(day < 1 || day > 31 || month < 1 || month > 12){return false;}
			if((month == 4 || month == 6 || month == 9 || month == 11) && day > 30){return false;}
			if(month == 2){
				var skott = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)); 
				if(day > 29 || (day > 28 && !skott)){return false;}
			}
			return true;
		}
	}

	function validateDateTime(longDate){
		if(longDate.length == 0){return true;}
		var datArr = longDate.split(' ');

		if(datArr.length != 2){return false;}
		var test1 = validateDate(datArr[0]);
		var test2 = validateKlocka(datArr[1]);
		return (test1 && test2);
	}

	function validateIdNum(idNum){
		if(idNum.length == 0){return true;}
		var numPat = /(\d{6})-?\d{4}/
		var numArr = idNum.match(numPat);

		if(numArr == null){return false}
		
		var tmp = idNum.replace('-','');
		
		var sum 	= 0;
		var totSum 	= 0;
		for(var i=0; i < tmp.length-1; i++){
			sum = parseInt(tmp.substr(i,1));
			if((i % 2)==0) {
				sum = (parseInt(tmp.substr(i,1))*2)
				if(sum.toString().length>1){
					sum = parseInt(sum.toString().substr(0,1))+parseInt(sum.toString().substr(1,1))
				}
			}
			totSum += sum;
		}
		
		var chksiffra = totSum.toString().substr(totSum.toString().length-1);
		if(parseInt(chksiffra) > 0){
			chksiffra = 10-parseInt(chksiffra);
		}
		
		return (chksiffra==parseInt(tmp.substr(tmp.length-1)));
	}

	function validateCreditCard(ccnum) {
		if(ccnum.length == 0)
			return true;
		
		//Ta bort alla "-" och " "

		ccnum = ccnum.replace(/[-\s]/,'');
		var cardPatArr = new Array(
			"^4(\\d{12}|\\d{15})$", //visa
			"^5[1-5]\\d{14}$", //MasterCard
			"^6011\\d{12}$", //Discover
			"^3[47]\\d{13}$", //AmEx
			"^(30[1-5]\\d{11})|(3[68]\\d{12})$" //Diners
		);
		
		var isValid = false;
		
		for(var i = 0; i < cardPatArr.length; i++){
			if(ccnum.match(new RegExp(cardPatArr[i])) != null){
				isValid = true;
				break;
			}
		}
		
		if(!isValid){
			return isValid;
		}
			
	   // Add even digits in even length strings or odd digits in odd length strings.
	   var checksum = 0;
	   for (var i=(2-(ccnum.length % 2)); i<=ccnum.length; i+=2) {
	      checksum += parseInt(ccnum.charAt(i-1));
	   }
	   // Analyze odd digits in even length strings or even digits in odd length strings.
	   for (var i=(ccnum.length % 2) + 1; i<ccnum.length; i+=2) {
	      var digit = parseInt(ccnum.charAt(i-1)) * 2;
	      if (digit < 10) { checksum += digit; } else { checksum += (digit-9); }
	   }
	   
	   // Kontrollera om checksumman är jämnt delbart med 10 ("Mod 10"), returnera resultat
		return ((checksum % 10) == 0);

	}
