/*===================================================================================================*/

var sPOSTNUMMER_ERROR = "Postnummer har fel format.";
var sEPOST_ERROR = "Felaktig epostadress.";
var sPERSNUMMER_ERROR = "Personnummer har fel format.\nRätt format ÅÅÅÅMMDDKKKK";
var sOBLIGATORISKA_FALT_ERROR = "Obligatoriska fält (*) saknas.";
var sERRORTEXT_HEADING = "Följande information är felaktig:";
var sHELTAL_ERROR = "Endast heltal får anges.";

/*	checkZipCode 
		Kontrollerar att giltig postadress är inmatad
		Kan vara på formatet nnnnn eller nnn nn
	Params
		objZipCode	Postnummerelementet som ska kontrolleras
		objError	Array där feltext och postnummerelemtet läggs in om fel hittas
	Return value
		true		Giltigt postnummer
		false		Ogiltigt postnummer
*/
function checkZipCode(objZipCode, objError)
{		
	if(!checkZipCodeString(objZipCode.value))
	{		
		objError.set(sPOSTNUMMER_ERROR, objZipCode);
		return false;		
	}
	
	return true;	
}

/*	checkZipCodeString
		Kontrollerar att giltig postadress är inmatad
		Kan vara på formatet nnnnn eller nnn nn
	Params
		sZipCode	Postnummer som ska kontrolleras
	Return value
		true		Giltigt postnummer
		false		Ogiltigt postnummer
*/
function checkZipCodeString(sZipCode)
{
	var regExp = new RegExp(/^\d{5}$|^\d{3}\s\d{2}$/);
	if(!regExp.test(sZipCode))
		return false;		
	else	
		return true;	
}
/*===================================================================================================*/

/*	checkEmail 
		Kontrollerar att giltig e-postadress är inmatad
	Params
		objEmail	Emailelementet som ska kontrolleras
		objError	Array där feltext och emailelementet läggs in om fel hittas
	Return value
		true		Giltig adress
		false		Ogiltig adress
*/
function checkEmail(objEmail, objError) 
{
	if(!checkEmailString(objEmail.value))
	{
		objError.set(sEPOST_ERROR, objEmail);	
		return false;
	}
	
	return true;
}

/*	checkEmailString
		Kontrollerar att giltig e-postadress är inmatad
	Params
		strValue	Email som ska kontrolleras
	Return value
		true		Giltig adress
		false		Ogiltig adress
*/
function checkEmailString(strValue) 
{
  if(strValue.search( /\w+((-\w+)|(\.\w+)|(\_\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z]{2,5}$/ ) == 0)
		return true;
	else
		return false;
}

function checkTal(objTal, objError)
{			
	if (!ValidateChars(objTal.value,"0123456789"))	
	{
		objError.set(sHELTAL_ERROR, objTal);
		return false;		
	}
	else		
		return true;	
}

function checkTalString(objTal, objError)
{			
	if (!ValidateChars(objTal,"0123456789"))	
		return false;		
	else		
		return true;	
}


/*	checkRequiredFields 
		Kontrollerar att medskickade värden inte är tomma.
	Params
		objItems	Array med element som ska kontrolleras
		objError	Array där feltext och element med fel läggs in om fel hittas
	Return value
		true		Värden finns
		false		Något av inskickade saknar värde
*/
function checkRequiredFields(objItems, objError)
{	
	for(i = 0; i < objItems.length; i++)
	{				  
		if(!validateNotEmpty(objItems[i].value))
		{
			objError.set(sOBLIGATORISKA_FALT_ERROR, objItems[i]);
			return false;				
		}					
		
		if(!validateText(objItems[i].value))
		{
		  objError.set("Var vänlig och skriv inte in sqlsatser!", objItems[i]);
			return false;			
		}
	}		
	return true;	
}

function ValidateChars(sString,sValidChars)
{
	for (var i=0;i<sString.length;i++)
	{
		var ch=sString.charAt(i);
		for (j=0;j<sValidChars.length;j++)
			if (ch==sValidChars.charAt(j))
				break;
		if (j==sValidChars.length)
			return false;
	}
	return true;
}

function checkPersNumber(objPersNummer, objError)
{
	if(!checkPersNumberString(objPersNummer.value, true))
	{
		objError.set(sPERSNUMMER_ERROR, objPersNummer);
		return false;
	}
	
	return true;
}

/*	checkPersNumberString
		Kontrollerar att giltigt personnummer är inmatat
		Personnnummer kan vara på formatet (ÅÅ)ÅÅMMDDNNNN eller (ÅÅ)ÅÅMMDD-NNNN
	Params
		sPnrIn		Personnummer som ska kontrolleras
		bCentury	Om sekel ska vara med i indata
	Return value
		true		Giltigt personnummer
		false		Ogiltigt personnummer
*/
function checkPersNumberString(sPnrIn, bCentury)
{
	var i, iSum = 0, iNumb = 0, iCheck = 0; 
	var iMultiplier = 1;
	var iPos = sPnrIn.indexOf("-");
	var sPnr;
	var sCheckNo;
	
	if ( sPnrIn.length < 10 || sPnrIn.length > 13 )
		return false;

	if(iPos >= 0) //bindestreck funnet
	{
		if ( sPnrIn.length - (iPos + 1) < 4 )
			return false;
			
		if (sPnrIn.length == 13)
			sPnr = sPnrIn.substr(0, 7) + sPnrIn.substr(9, 12); //personnummer med sekel och bindestreck

		if (sPnrIn.length == 11)
			sPnr = sPnrIn.substr(0, 6) + sPnrIn.substr(7, 10); //personnummer utan sekel och bindestreck
	}
	else
	{
		if(bCentury)
			sPnr = sPnrIn.substr(2); //personnummer utan sekel
		else
			sPnr = sPnrIn;
	}	
			
	sCheckNo = sPnr.substr(6, 10); 
	
	//Validate "syntax"
	if (!ValidateChars(sCheckNo,"0123456789"))
		return false;
	
	if(sCheckNo.length != 4)
		return false;

    chksum = 0;
    for (i=0; i<9; i++)
    {
		siffra = parseInt(sPnr.substr(i, 1));
		if (i % 2 == 0)
		{
			siffra = siffra * 2;
            strSiffra = siffra.toString();
            if (strSiffra.length == 2)
				siffra = parseInt(strSiffra.substr(0,1)) + parseInt(strSiffra.substr(1,1));
		}
		chksum = chksum + parseInt(siffra);
    }

    chksum = chksum % 10;
    if (chksum != 0)
    {
        chksum = 10 - chksum;
    }

	if ( chksum != sPnr.substr(sPnr.length - 1, 1) )
		return false;
			
	return true;
}

/*===================================================================================================*/

/*	showErrors 
		Sammanställer felmeddelanden och visar i en alert.
		Sätter focus till första elementet i objError
	Params
		objError	Array med feltexter och element. 
*/
function showErrors(objError)
{		
	var objInput;
	if(objError.length > 0)
	{
		var sError = sERRORTEXT_HEADING + "\n";
		for(i = 0;i < objError.length;i++)
		{			
			sError = sError + objError.value[i] + "\n";			
		}
		alert(sError);		
		objInput = objError.index[0];		
		try
		{
			objInput.select(); //vissa element stödjer inte detta
		}
		catch(e){}
		try
		{
			objInput.focus(); 
		}
		catch(e){}
	}		
}

/*===================================================================================================*/

/*	showFirstError
		Sammanställer felmeddelande och visar i en alert.
		Sätter focus till första elementet i objError
	Params
		objError	Array med feltexter och element. 
*/
function showFirstError(objError)
{		
	var objInput;
	if(objError.length > 0)
	{
		var sError = sERRORTEXT_HEADING + "\n";
				
		sError = sError + objError.value[0] + "\n";			
		
		alert(sError);		
		objInput = objError.index[0];		
		try
		{
			objInput.select(); //vissa element stödjer inte detta
		}
		catch(e){}
		try
		{
			objInput.focus(); 
		}
		catch(e){}
	}		
}

/*===================================================================================================*/

/*==== Funktion för att hantera keyboardpress ====*/

/*	validKey 
		Kontrollerar vilken tangent som tryckts ner.
		Beroende på FaltTyp godkännes vissa tecken.
	Params
		FaltTyp		1, endast siffror godkännes
					2, siffror och mellanslag godkännes
					3, siffror och bindestreck godkännes
					4, siffror, punkt, komma och procenttecken godkännes
					5, siffror och punkt godkännes
					6, siffror, mellanslag, bindestreck, kolon och punkt godkännes (datum YYYY-MM-DD hh:mm:ss.ms)
	Return value
		false		Om tecken inte godkänns
*/
function validKey(FaltTyp)
{
	if (FaltTyp == 1)
	{
		if (event.keyCode<48||event.keyCode>57)
		{
			return false;
		}
	}
	else if (FaltTyp == 2)
	{		
		if ((event.keyCode<48||event.keyCode>57)&&(event.keyCode != 32))
		{
			return false;
		}
	}	
	else if (FaltTyp == 3)
	{		
		if ((event.keyCode<48||event.keyCode>57)&&(event.keyCode != 45))
		{
			return false;
		}
	}	
	else if (FaltTyp == 4)
	{		
		if ((event.keyCode<48||event.keyCode>57)&&(event.keyCode != 46)&&(event.keyCode != 44)&&(event.keyCode != 37))
		{
			return false;
		}
	}	
	else if (FaltTyp == 5)
	{		
		if ((event.keyCode<48||event.keyCode>57)&&(event.keyCode != 44))
		{
			return false;
		}
	}		
	else if (FaltTyp == 6)
	{
		if ((event.keyCode<48||event.keyCode>57)&&(event.keyCode != 32)&&(event.keyCode != 44)&&(event.keyCode != 45)&&(event.keyCode != 46)&&(event.keyCode != 58))
		{
			return false;
		}
	}			
}

/*===================================================================================================*/

/*==== Klass för egen hashtable === */
function Hashtable(len) 
{
	this.value = new Array(len);
	this.index = new Array(len);
	this.length = len;
 
	this.set = HashtableSet;
	this.get = HashtableGet;
}

function HashtableSet(val, name) 
{
	var i = 0;
	while (this.value[i] != null) i++;
	this.value[i] = val;
	this.index[i] = name;
	this.length = this.index.length;
}

function HashtableGet(name) 
{
	var t = -1;
	for (i=0;i<this.length;i++) 
	{
		if (this.index[i] == name) 
			t = i;
	}
	if (t>-1) 
		return this.value[t];
	else 
		return false;
}


/*===================================================================================================*/

function validateEmail( strValue) {

	return ( strValue.search( /\w+((-\w+)|(\.\w+)|(\_\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z]{2,5}/ ) != -1); 
	
}
/*===================================================================================================*/


// handleWait - Låser musklick när action neråt är begärd så användaren måste vänta.
function handleWait()
{
	window.document.onclick=handleButton;		
	document.body.style.cursor  = "wait";
	function handleButton()
	{		
		window.status = "Var god vänta tills sidan laddat klart";			
					
		return false;
	}
}

/*===================================================================================================*/

function validateNotEmpty( strValue ) {
   var strTemp = strValue;
   
   strTemp = trimAll(strTemp);
   if(strTemp.length > 0){
     return true;
   }  
   return false;
}
/*===================================================================================================*/
function trimAll( strValue ) 
{
	var strTemp = strValue;
	var i = 0;
	var j = strTemp.length - 1;

	//Trim Left
	for( i = 0; i < strTemp.length; i++ )
	{
		if( strTemp.substr( i, 1 ) != " " && strTemp.substr( i, 1 ) != "\t")
		 break;
	}
	//Right
	for( j = strTemp.length - 1; j >= 0; j-- )
	{
		if( strTemp.substr( j, 1 ) != " " && strTemp.substr( j, 1 ) != "\t")
		break;
	}

    if( i <= j )
		return( strTemp.substr( i, (j+1)-i ) );
    else
		return("");
}
/*===================================================================================================*/

function validateText(sText)
{
  if(sText.indexOf("delete") != -1 || sText.indexOf("update") != -1 || sText.indexOf("insert") != -1 || sText.indexOf("select") != -1)
    return false;
  
  return true;
}

function sendData(pXml, pParameters)
{
	var xmlhttp = GetXmlHttpObject();
	
	xmlhttp.open("POST", "action.asp" + pParameters, false);
	
	xmlhttp.send();

	return xmlhttp.responseText;
}

function GetXmlHttpObject()
{
  var xmlHttp=null;
  try
    {
    // Firefox, Opera 8.0+, Safari
    xmlHttp=new XMLHttpRequest();
    }
  catch (e)
    {
    // Internet Explorer
    try
      {
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
      }
    catch (e)
      {

					try
					{
      			xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
					}
					catch(e)
						{
							alert("Fel: Din browser stödjer inte xmlhttp.");
						}
      }
    }
  return xmlHttp;
}

