var strAtgard = "min variabel";
// ##############################################################################
// # 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="Alla fält markerade med * måste fyllas i, försök igen";
			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="Sökfältet måste fyllas i, försök igen";
			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="Lösenordet måste vara minst 4 tecken långt, försök igen";
			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="Lösenordet är inte likadant i båda fälten, försök igen.";
				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="Fel i valideringen!\n\nFilfamilj saknas för funktionen CheckUpload\nKontakta 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="E-postadressen: " + document.forms[strFormToCheck].elements[strActiveField].value + " verkar inte vara korrekt.";
				return strError;

			}
		}
	}

}
// Slut på e-postkoll -------------------------------

if (strTypeOfAction.toLowerCase()=="radera"){
return confirm("Är du säker att du vill radera posten?");
}
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
//#############################################################