// ##############################################################################
// # Funktion för att flytta formulärobjekt på sidan om besökaren har NS
// # så att dessa inte överlappar menylagren. Med andra ord för att kompensera
// # för en bugg i NS.
// # 
// # Funktionen kallas från HTML-koden som följer;
// # Under sidrubriken i t.ex. en tabellrad läggs följande in:
// # <script language="javascript">
// #  NSLayerFix();
// # </script>
// #
// ##############################################################################

function NSLayerFix(){
	if (navigator.appName=="Netscape") {
		document.write ("<br><br><br><br><br><br>");
	}
} // Slut på funktionen

// ###############################################################################
// # Här slutar buggfixen för NS
// ###############################################################################

// ##############################################################################
// # POP - Funktion för att öppna ett hjälpfönster med filen /admin/hjalp_falt.asp
// # Funtkionen kallas på via en länk i html-koden
// # Exempel: <a href="javascript:pop(30,'Ovrigt')">?</a>
// # 
// # Där 30 är databasnumret och Ovrigt är fältnamnet man vill beskriva.
// # Databasnr: Adminnivaer=10, Branscher=20, Foretag=30, Foretagkat=40
// #            Luncher=50, Nyheter=60, Personer=70, Personbehorighet=80
// #            Projekt=90, Projektmedlemmar=100, Nyhetsbrev=110
// ##############################################################################

function pop (varde1,varde2) { 
	lank="/admin/hjalp_falt.asp?Databas=" + varde1 + "&Datafaltnamn=" + varde2;
	ReviewWindow = window.open(lank,"Ovrigt","toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=no,width=600,height=550");
} // Slut på funktionen

// ###############################################################################
// # Här slutar funtkionen POP
// ###############################################################################



// ##############################################################################
// # Funktion för att kolla så att alla fält är rätt ifyllda innan vi skickar 
// # iväg till servern. 
// #
// # Funktionen kallas från HTML-koden med följande syntax;
// # 	onSubmit="javascript:return HelKoll('Åtgärd','Fältnamn?Kod,Fältnamn?Kod,osv...')"
// #
// # Koppla in och ur;
// #  Funktionen kopplas bort t.ex. om man vill radera en post genom att 'Åtgärd'
// #  sätts till "Radera". Detta för att vi inte vill få upp information om att
// #  något är felaktigt när vi ändå håller på att ta bort posten.
// #
// #  ex. <body onSubmit="return Helkoll(strAtgard,'Efternamn?10,Epost?30');">
// #      <input type="submit" name="Atgard" value="Ta bort post" onClick="javascript:strAtgard='Radera';">
// #
// #  OBS! Om flera submit förekommer måste dessa tilldela strAtgard ett 
// #       annat värde än "Radera" på onClick för att testen ska köras
// #       vid submit.            
// #  
// #
// # Tillgängliga tester;
// # 	Kontrollera att fält är ifyllt				Kod: 10
// # 	Kontrollera att lösenord är minst 4 tecken		Kod: 20
// # 	Kontrollera e-postadress ex. namn@doman.se		Kod: 30
// # 	Kontrollera datumformat ex. 2000-05-24			Kod: 40
// #  Kontrollera antal tecken i fält				Kod: 50
// #  Kontrollera filändelse i fält för upload			Kod: 60
// # 	Kontrollera att sökfältet är ifyllt				Kod: 70
// #   
// #	ex. return Helkoll('Uppdatera','Efternamn?10,Epost?30')
// #
// #
// # Specialtest;
// # 	Lösenordsverifiering ex. är Lösenord=Lösenordsverifiering
// #	Detta kommer både att testa om lösenord är minst 4 tecken
// #	samt om fälten innehåller samma värden.
// #	Syntax: Lösenfält|Verifieringsfält?20
// #
// #	ex. return Helkoll('Infoga','Efternamn?10,Epost?30,Losen|Losenver?20')
// #
// #  Antal tecken i fält
// #  Syntax: fält|5?50
// #
// #  ex. return Helkoll('Infoga','Anvnamn|10?50')
// #
// #  Filändelse i fält
// #  Syntax: fält|filfamilj?60
// #
// #   Filfamiljer:
// #   WebGraphics:	.jpg .gif
// #   OfficeDocs:	.doc .xls .ppt
// #   MiscDocs:		.doc .xls .pdf
// #
// #  ex. return Helkoll('Infoga','Upload|WebGraphics?60')
// #
// #
// # Specialfall;
// #	Om sidan innehåller flera formulär kommer funktionen anta
// #	att du vill validera det första formuläret på sidan.
// #	Om man nu hellre vill kolla ett annat formulär på sidan, skickar
// #	man med antingen namnet eller numret på formuläret man vill
// #	testa.
// #
// #	ex. return Helkoll('Uppdatera','Efternamn?10,Epost?30,Losen|Losenver?20','RegForm')
// #	
// ###########################################################################


function HelKoll(strTypeOfAction,strFieldActions,strFormToCheck){

// Variabel som kommer innehålla eventuella felmeddelanden
var strError=""


// Kollar att valda fält är ifyllda -----------

function CheckIfEmpty(strActiveField){

	if (strActiveField){

		// Kontrollerar om fältet är tomt
		if (document.forms[strFormToCheck].elements[strActiveField].value==""){

			strError="You have to fill in all fields marked *, try again";
			return strError; // Returnerar felmeddelande

		}

	}

}
// Slut på koll om valda fält är ifyllda --------


// Kollar att sökfät är ifyllt -----------

function CheckSearchIfEmpty(strActiveField){

	if (strActiveField){

		// Kontrollerar om fältet är tomt
		if (document.forms[strFormToCheck].elements[strActiveField].value==""){

			strError="You have to fill in the search-field, try again";
			return strError; // Returnerar felmeddelande

		}

	}

}
// Slut på koll om sökfältet --------


// Kollar att valda fält är minst x tecken långt -----------

function CheckLength(strActiveField){

	if (strActiveField){

		// Delar upp inskickad sträng i en vektor med 2 delar - fält och fältlängd
		arrayFields = strActiveField.split("|")

		// Kontrollerar att fältet är minst x tecken långt
		if (document.forms[strFormToCheck].elements[arrayFields[0]].value.length < arrayFields[1]){

			strError="Fält " + document.forms[strFormToCheck].elements[arrayFields[0]].name + " måste vara minst " + arrayFields[1] + " tecken långt, försök igen";
			return strError; // Returnerar felmeddelande

		}

	}

}
// Slut på koll om valda fält är ifyllda --------









// Kollar lösenordsfälten -----------------------

function CheckPassword(strActiveField){

	if (strActiveField){

		// Delar upp inskickad sträng i en vektor med 2 delar - lösenord och lösenordsverifiering
		arrayFields = strActiveField.split("|")

		// Kontrollerar att lösenordet är minst 4 tecken långt
		if (document.forms[strFormToCheck].elements[arrayFields[0]].value.length < 4){

			strError="The password has to be at least 4 characters, try again";
			return strError; // Returnerar felmeddelande

		}

		// Om vi vill testa lösenordet mot verifieringen har vi förhoppningsvis delat strängen med "|"
		if (arrayFields.length>1){

			// Kontrollerar att lösenordsverifieringen är ok
			if (document.forms[strFormToCheck].elements[arrayFields[0]].value != document.forms[strFormToCheck].elements[arrayFields[1]].value){

				strError="The password didn't verify corectly, try again.";
				return strError; // Returnerar felmeddelande

			}

		}

	}


}
// Slut på lösenordskoll --------------------------


// Kollar uploadfält -----------------------

function CheckUpload(strActiveField){

	// Definerar "filfamiljer"
	arrayWebGraphics = new Array(".jpg",".gif");
	arrayOfficeDocs = new Array(".doc",".xls",".ppt");
	arrayMiscDocs = new Array(".doc",".xls",".pdf");

	if (strActiveField){

		// Delar upp inskickad sträng i en vektor med 2 delar - Fältnamn och Filfamilj
		arrayFields = strActiveField.split("|")

		// Om fältet är blankt bör vi inte bråka om att filändelsen är fel
		if(document.forms[strFormToCheck].elements[arrayFields[0]].value!=""){

			// Vi ser vilken filfamilj vi vill formuläret ska innehålla
			switch(arrayFields[1].toLowerCase()){

				case "webgraphics":
					arrayFileFamily=arrayWebGraphics;
				break;
				case "officedocs":
					arrayFileFamily=arrayOfficeDocs;
				break;
				case "miscdocs":
					arrayFileFamily=arrayMiscDocs;
				break;
				default:
					strError="Error in validation!\n\nFile-family is missing for the function to operate.\nPlease contact webmaster.";
					return strError; // Returnerar felmeddelande

			}

			// Vi tar ut filändelsen i uploadfältet
			strFileExt=document.forms[strFormToCheck].elements[arrayFields[0]].value.substr(document.forms[strFormToCheck].elements[arrayFields[0]].value.lastIndexOf("."),4);

			// Nu jämför vi filändelsen med filändelserna vi har i den valda filfamiljen
			var i=0;
			FileExtLoop:
			for(i=0;i<arrayFileFamily.length;i++){
				if(strFileExt==arrayFileFamily[i]){
					break FileExtLoop;
				}
			}

			// Om vi inte hittade rätt filändelse är värdet på i lika med antalet filändelser i filfamiljen
			if(i==arrayFileFamily.length){
				strError="Filen du försöker skicka till servern är inte i ett giltigt format";
				return strError; // Returnerar felmeddelande
			}

		}
	}


}
// Slut på uploadfältskoll --------------------------


// Kollar formatet i datumfält(en) ------------------

function CheckDate(strActiveField){

	if (strActiveField){
      
		// En variabel som används för att veta vilket eventuellt fel som har uppstått
		var intError=0 

		// Först hämtar vi in datumet från formuläret
		dateString=document.forms[strFormToCheck].elements[strActiveField].value 

		// Sedan delar vi upp datumet och lägger de olika delarna i egna variabler
		if (dateString.length != 10) intError=1
		intYear = dateString.substring(0, 4)// år
		chrFirstDevider = dateString.substring(4, 5)// '-' 
		intMonth = dateString.substring(5, 7)// månad 
		chrSecondDevider = dateString.substring(7, 8)// '-' 
		intDay = dateString.substring(8, 10)// dag 

		// Först kollar vi att de olika delarna verkar ligga inom rimliga spann 
		if (intMonth<1 || intMonth>12) intError=1 
		if (chrSecondDevider != '-') intError=1
		if (intDay<1 || intDay>31) intError=1
		if (chrFirstDevider != '-') intError=1
		if (intYear<1900 || intYear>2099) intError=1
         
		// Sedan gör vi lite mer ingående tester

		// Om det är en månad med 30 dagar bör 31 inte kunna anges 
		if (intMonth==4 || intMonth==6 || intMonth==9 || intMonth==11){ 

			if (intDay==31) intError=2

		} 

		// Om det är februari bör man inte kunna ange högre än 28 såvida det inte är skottår då 29 bör godkännas
		if (intMonth==2){ 

			// februari 
			var g=parseInt(intYear/4) 
			if (isNaN(g)) { 

				intError=3

			} 

			if (intDay>29) intError=3
			if (intDay==29 && ((intYear/4)!=parseInt(intYear/4))) intError=3

		}


		// Här översätter vi eventuella felkoder till begripliga strängar
		switch(intError) {
			case 1 :
				strError="Datum måste anges i formatet: ÅÅÅÅ-MM-DD";
				return strError;
				break;

			case 2 :
				// En Case-sats som översätter "korta" månader till bokstäver
				switch (intMonth) { 
					case "04" : 
						var strMonth="April";
						break; 
					case "06" : 
						var strMonth="Juni";
						break; 
					case "09" : 
						var strMonth="September";
						break;
					case "11" : 
						var strMonth="November";
						break;  
					//default : 
				} 

				strError=strMonth+" har bara 30 dagar";
				return strError;
				break; 

			case 3 :
				strError="Februari har bara 28 dagar "+intYear;
				return strError;
				break;

		} //Här är översättningen färdig

	}
return true;
}
// Slut på datumkoll -------------------------------

// Kollar att e-postadressen ----------------------

function CheckEmail(strActiveField){

	if (strActiveField){

		// Om fältet är tomt bör vi fråga om det ska vara på det viset
		if (document.forms[strFormToCheck].elements[strActiveField].value!=""){

			// Bestämmer längden på adressen
			intAddressLength=document.forms[strFormToCheck].elements[strActiveField].value.length;
				
			// Kollar var första "@"-tecknet finns
			chrAt=document.forms[strFormToCheck].elements[strActiveField].value.indexOf("@");
	
			// Kollar var det sista "@-tecknet finns
			chrLastAt=document.forms[strFormToCheck].elements[strActiveField].value.lastIndexOf("@");

			// Kollar var den sista punkten finns
			chrDot=document.forms[strFormToCheck].elements[strActiveField].value.lastIndexOf(".");

			// Bestämmer längden på topdomänen
			intTopDomainLength=((intAddressLength-1)-chrDot);

			// Jämför positionerna med varandra och kollar om det är rimligt
			if(chrAt<1 || chrAt!=chrLastAt || chrDot<chrAt || intTopDomainLength<2){

				// Om det inte verkar stämma frågar vi vad besökaren tycker
				strError="The emailaddress: [" + document.forms[strFormToCheck].elements[strActiveField].value + "] does not seem to be correct.";
				return strError;

			}
		}
	}

}
// Slut på e-postkoll -------------------------------

if (strTypeOfAction.toLowerCase()=="radera"){
return confirm("Are You sure that You want to delete the record?");
}
else{

	// Om vi inte angett namnet på formuläret vi vill testa
	if (!strFormToCheck){

		strFormToCheck=0;

	}


	// Först delar vi upp den inskickade strängen i "paket" i en vektor
	arrayPackages = strFieldActions.split(",")

	// För varje "paket" i vektorn skall en test göras
	Package:
	for (intCounter=0;intCounter<arrayPackages.length;intCounter++){

		// Vi delar upp varje "paket" i fält och åtgärd
		intPackageDevider = arrayPackages[intCounter].indexOf("?");
		strField = arrayPackages[intCounter].substring(0,intPackageDevider);
		strAction = arrayPackages[intCounter].substring(intPackageDevider+1,arrayPackages[intCounter].length);

		// Beroende på vilken åtgärd som begärts skickar vi vidare till olika tester
		switch (strAction) { 
			case "10" : 
				CheckIfEmpty(strField);
				if (strError>""){ 

					alert(strError);
					return false;

				}
				break;

			case "20" : 
				CheckPassword(strField);
				if (strError>""){ 

					alert(strError);
					return false;
				}
				break;

			case "30" : 
				CheckEmail(strField);
				if (strError>""){ 

					alert(strError);
					return false;
				}
				break;

			case "40" : 
				CheckDate(strField);
				if (strError>""){ 

					alert(strError);
					return false;

				}
				break;

			case "50" : 
				CheckLength(strField);
				if (strError>""){ 

					alert(strError);
					return false;

				}
				break;

			case "60" : 
				CheckUpload(strField);
				if (strError>""){ 

					alert(strError);
					return false;

				}
				break;
			
			case "70" : 
				CheckSearchIfEmpty(strField);
				if (strError>""){ 

					alert(strError);
					return false;

				}
				break;

			//default : 
		} 

	} //Slut på loopen Package

// Om inget fel har uppstått skickar vi tillbaka klartecken
return true;
}
} //Slut på HelKoll

//#############################################################
//# Här slutar formulärvalideringen
//#############################################################