﻿/*

VALIDERING AV FORMULÄR

En allroundfunktion för att validera olika typer av fält i ett formulär. Vid överträdelse skickar scriptet upp en alert och sätter fokus till det aktuella fältet...

GÖR SÅ HÄR:
1.	Skapa ett formulär med namnet "formen"

2. 	Inkludera detta script (<script src="checkaForm.js"></script>

3. 	Ange attributet "onsubmit" i form-taggen till "return checkaForm"

4.	Deklarera en array som heter "obligatoriska" inom <script>-taggar
	var obligatoriska=new Array();

5.	Fyll på med värden i arrayen enligt följande formel:
	obligatoriska[Nuffra*]=new Array("Fältnamn*","Titel*","Valideringstyp*","Extraflagga*");
	
	* Nuffra: Ska börja med 0 och adderas med 1 för varje ny rad
	
	* Fältnamn: Värdet av fältets name-attribut
	
	* Titel: Hur fältet ska beskrivas, t.ex. "Förnamn". Används i alerts vid överträdelse
	
	* Valideringstyp: Vilken typ av validering som ska utföras på fältet. Finns olika fördefinerade värden;
		* "tomt" - Kollar så fältet inte är tomt
		* "select" - Kollar så att ett värde är valt i en select
		* "numeriskt" - Kollar så att fältet bara innehåller numeriska tecken samt + eller -
		* "mail" - Kollar via en tilläggsfunktion så att en e-post adress är utformad enligt xxxx@xxxx.xx
		* "jamfor" - Jämför två fält med varandra och se så att de är lika, t.ex. vid lösenordskontroll
		
	* Extraflagga: Används på olika sätt beroende på Valideringstyp. Om behovet av den inte finns lämnar man det blankt;
		* "0" används vid typerna "numeriskt" och "mail". Om "0" så får fältet inte vara tomt, annars görs kollen enbart om ett värde finns.
		* Vid typen "jamfor" skall extraflaggan sättas till namnet på det fält som man ska jämföra med.

EXEMPEL PÅ ARRAY
var obligatoriska=new Array();
obligatoriska[0]=new Array("anvandarnamn","Användarnamn","tomt"); - KOMMER KOLLA SÅ ATT FÄLTET INTE ÄR TOMT
obligatoriska[1]=new Array("losenord","Lösenord","losen","losenord2"); - KOMMER KOLLA FÄLTEN LOSENORD OCH LOSENORD2 SÅ ATT DE ÄR LIKA (MEN INTE TOMMA)
obligatoriska[2]=new Array("epostadress","E-post","mail","0"); - KOMMER KOLLA SÅ ATT FÄLTET INTE ÄR TOMT OCH ATT DEN INNEHÅLLER EN GILTIG E-POSTADRESS
obligatoriska[3]=new Array("telefon","Telefonnummer hem","numeriskt"); - KOMMER KOLLA SÅ ATT FÄLTET ÄR NUMERISKT IFYLLT OM ETT VÄRDE HAR FYLLTS I


Kreatör: Johan Normén, johan.normen@positionett.se
*/

function checkaForm(){
	var i; //används i loopen nedan...

	for (i in obligatoriska) {
		var vardet=document.kalender[obligatoriska[i][0]].value;
		var faltet=document.kalender[obligatoriska[i][0]];
		var checktyp=obligatoriska[i][2];
		
		//Om av checktyp "tomt"
		if(checktyp=="tomt"){
			//Om fältet är tomt
			if(vardet==""){
				alert(obligatoriska[i][1]+": Fyll i ett värde");
				faltet.focus();
				return false;
			}
		}
		//Om av checktyp "select"
		if(checktyp=="select"){
			//Om fältet är tomt
			if(vardet==""){
				alert(obligatoriska[i][1]+": Välj ett värde i listan");
				faltet.focus();
				return false;
			}
		}
		
		//Om av checktyp "numeriskt"
		if(checktyp=="numeriskt"){
			//Om det numeriska fältet måste innehålla ett värde
			if(obligatoriska[i][3]=="0"){
				//Om fältet är tomt...
				if(vardet==""){
					alert(obligatoriska[i][1]+": Fyll i ett värde");
					faltet.focus();
					return false;
				}
				//...annars...
				else {
					var giltiga= vardet.search("[^0-9+-]");
					//...kollar vi om värdet är giltigt
					if(giltiga >= 0) { 
						alert(obligatoriska[i][1]+": Fältet får bara innehålla siffrorna 0-9 samt + och -");  
						faltet.focus();            
						return false; 
					}
				}
			}
			//Om fältet inte måste innehålla ett värde
			else {
				//Om fältet INTE är tomt...
				if(vardet!=""){
					var giltiga= vardet.search("[^0-9+-]");
					//Gör vi koll så att det är korrekta nuffror...
					if(giltiga >= 0) { 
						alert(obligatoriska[i][1]+": Fältet får bara innehålla siffrorna 0-9 samt + och -");
						faltet.focus();             
						return false; 
					}
				}
			}
		}
		//Om av checktyp "mail"
		if(checktyp=="mail"){
			//Om vi INTE tillåter tomt
			if(obligatoriska[i][3]=="0"){
				//Om fältet är tomt
				if(vardet==""){
					alert(obligatoriska[i][1]+": Fyll i ett värde");
					faltet.focus();
					return false;
				}
				//Om fältet inte är tomt
				else{
					//Kollar så att e-postadressen är giltig
					if(!valideraEpost(vardet)){
						alert(obligatoriska[i][1]+": Fältet måste innehålla en giltig e-postadress, t.ex. namn@domän.se"); 
						faltet.focus();             
						return false; 
					}
				}
			}
			//Om vi faktiskt TILLÅTER tomt
			else {
				//Om ett värde finns....
				if(vardet!=""){
					//...kollar vi så att värdet är giltigt
					if(!valideraEpost(vardet)){
						alert(obligatoriska[i][1]+": Fältet måste innehålla en giltig e-postadress, t.ex. namn@domän.se");    
						faltet.focus();          
						return false; 
					}
				}
			}
		}
		//Om av checktyp "jamfor"
		if(checktyp=="jamfor"){
			//Om fältet är tomt...
			if(vardet==""){
				alert(obligatoriska[i][1]+": Du måste ange ett lösenord");
				return false;
			}
			//...annars jämför vi lösenordsfälten med varandra...
			if(vardet!=document.kalender[obligatoriska[i][3]].value){
				alert(obligatoriska[i][1]+": Du måste ange samma lösenord i bägge fälten");
				faltet.focus();
				return false;
			}
			
		}
	}
//Om inga fel hittades ovan returnerar vi true och formuläret postas...
return true;
}

function valideraEpost(epost) {
//Funktion jag hittade på nätet för att validera e-postadresser, kan kompletteras med toppdomänskoll om man vill...
    var splitted = epost.match("^(.+)@(.+)$");
    if(splitted == null){
		return false;
	}
    if(splitted[1]!=null) {
      var regexp_user=/^\"?[\w-_\.]*\"?$/;
      if(splitted[1].match(regexp_user) == null) return false;
    }
    if(splitted[2] != null) {
      var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;
      if(splitted[2].match(regexp_domain) == null) {
	    var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
	    if(splitted[2].match(regexp_ip) == null) return false;
      }
      return true;
    }
return false;
}
/*
Tidsfördriv under telefonsamtal, ett bältdjur! :)

            ,.-----__
         ,:::://///,:::-.
        /:''/////// ``:::`;/|/
       /'   ||||||     :://'`\
     .' ,   ||||||     `/(  e \
-===~__-'\__X_`````\_____/~`-. `.
            ~~        ~~      `~-'



*/