/*
validateTxt(oTxt, sAlert, iMaxLength)
validateNumeric(oTxt, sAlert, iMin, iMax)
validateEmail(oTxt, sAlert, iMaxLength)
validatePwd(oTxt1, oTxt2)
validateSlc(oSlc, sAlert) 
validateSlcMultiple(oSlc, sAlert)
validateDate(oTxt, sAlert) //Kollar format: yyyy-mm-dd
validateCivicRegNr(oTxt, sAlert)
validateChk(sCheckName, sAlert)
checkDate(date)
trim(obj)
*/

function validateTxt(oTxt, sAlert, iMaxLength) {

	oTxt = trim(oTxt);
	
	if (oTxt.value == "") {
		alert(sAlert);
		oTxt.focus();
		return false;
	}
	
	if (iMaxLength) {
		if (oTxt.value.length > iMaxLength) {
			alert("Du har angett för många tecken (" + oTxt.value.length + ")\nMax antal tecken är " + iMaxLength);
			oTxt.focus();
			return;
		}
	}
	
	return true;
}

function validateNumeric(oTxt, sAlert, iMin, iMax) {

	oTxt = trim(oTxt);
	
	if (oTxt.value == "") {
		alert(sAlert);
		oTxt.focus();
		return false;
	}
	
	if (isNaN(oTxt.value)) {
		alert("Ange ett heltal");
		oTxt.focus();
		return false;
	}
	
	var iNum = parseInt(oTxt.value);
	
	if (iMin) {
		if (iNum < iMin) {
			alert("Minsta tillåtna värde är " + iMin);
			oTxt.focus();
			return false;
		}
	}

	if (iMax) {
		if (iNum > iMax) {
			alert("Största tillåtna värde är " + iMax);
			oTxt.focus();
			return false;
		}
	}

	return true;
}

function validateEmail(oTxt, sAlert, iMaxLength) {

    oTxt = trim(oTxt);
    var sPat = /^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
    var re = new RegExp(sPat);
    if (!re.test(oTxt.value)) {
        alert(sAlert);
        try {
            oTxt.focus();
        } catch (e) { }
        return false;
    }
    
    if (iMaxLength) {
        if (oTxt.value.length > iMaxLength) {
            alert("Du har angett för många tecken (" + oTxt.value.length + ")\nMax antal tecken är " + iMaxLength);
            try {
                oTxt.focus();
            } catch (e) { }
            return false;
        }
    }

    return true;
}

function validatePwd(oTxt1, oTxt2) {

	oTxt1 = trim(oTxt1);
	
	if (oTxt1.value == "") {
		alert("Ange lösenord");
		oTxt1.focus();
		return false;
	}
	
	if (oTxt1.value != oTxt2.value) {
		alert("Det nya lösenordet bekräftades inte korrekt.\nKontrollera att nytt och bekräftat lösenord stämmer överens.");
		oTxt2.focus();
		return false;
	}
	
	return true;
}

function validateSlc(oSlc, sAlert) {

	var iDx = oSlc.selectedIndex;
	var sVal = oSlc.options[iDx].value;
	
	if (sVal == "0" || sVal == "") {
		alert(sAlert);
		oSlc.focus();
		return false;
	}
	
	return true;
}

function validateSlcMultiple(oSlc, sAlert) {

	var iDx;
	var bSelected = false;
	
	for (iDx = 0; iDx < oSlc.options.length; iDx++) {
		if (oSlc.options[iDx].selected) bSelected = true;		
	} 
	
	if (!bSelected) {
		alert(sAlert);
		oSlc.focus();
	}
	
	return bSelected;
	
}

function validateChk(sCheckName, sAlert) {
		
	var i;
	var bChecked = false;
	var colCheck = document.getElementsByName(sCheckName);
			
	for (i = 0; i < colCheck.length; i++) {				
		if (colCheck[i].checked == true)
			bChecked = true;
	}
	
	if (!bChecked) {
		alert(sAlert);
		try {
			colCheck[0].focus();
		} catch(e){}
		return false;
	}
	
	return true;
}

function validateDate(oTxt, sAlert) {

	if (!checkDate(oTxt.value)) {
		alert(sAlert);
		oTxt.focus();
		return false;
	}
	return true;
	
}

function checkDate(date) {

	//Kollar format: yyyy-mm-dd
		
	if (date.length != 10 || date.charAt(4) != '-' || date.charAt(7) != '-')
		return false;

	var year = date.substring(0, 4);
	var month = date.substring(5, 7);
	var day = date.substring(8, 10);
	
	if (isNaN(year) || isNaN(month) || isNaN(day))
		return false;

	if (year < 1900 || year > 2100)
		return false;

	if (month < 01 || month > 12)
		return false;
		
	if (month==4 || month==6 || month==9 || month==11) {	
		if (day < 01 || day > 30)
			return false; 
	}
	
	if (month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12) {	
		if (day < 01 || day > 31)
			return false; 
	}
		
	if (month==2) {	
		if (year%4) {
			if (day < 01 || day > 28)
				return false; 
		}
		else { //skottår
			if (day < 01 || day > 29)
				return false; 		
		}
	}
	
	return true;	
}


function validateCivicRegNr(oTxt, sAlert) {

	if (oTxt.value == "") {
		alert(sAlert);
		oTxt.focus();
		return false;
	}

	var sInput = oTxt.value.replace("-","");
	
	if (isNaN(sInput) || sInput.length != 10) {
		alert(sAlert);
		oTxt.focus();
		return false;
	}
	
	//spara de 9 första siffrorna för beräkning
	var sCheck = sInput.substring(0,9);
	
	//spara angiven kontrollsiffra
	var iInputLast = parseInt(sInput.charAt(sInput.length-1));
	
	var iN, iDx, iResult;
	var bTwo = false;
	sResult = new String;
	
	//multiplicera varje enskild siffra i sCheck växelvis med 2 och 1
	//produkterna läggs efter varandra i en sträng
	for (iDx = 0; iDx < 9; iDx++) {
		bTwo = !bTwo;
		iN = parseInt(sCheck.charAt(iDx));
		if (bTwo)
			sResult += iN * 2
		else
			sResult += iN * 1
	}
	
	var iSum = 0;
	var iLen = sResult.length;
	
	//addera siffrorna i strängen. 12 räknas som 1+2...
	for (iDx = 0; iDx < iLen; iDx++) {
		iSum += parseInt(sResult.charAt(iDx));
	}
			
	//Differensen upp till närmaste 10-tal 
	var sSum = iSum.toString();			
	var iLast = 10 - parseInt(sSum.charAt(sSum.length-1));
	
	if (iLast == 10) iLast = 0;
	
	//kolla om angiven kontrollsiffra är korrekt, dvs
	//att personnumret är korrekt...
			
	if (iInputLast != iLast) {
		alert("Felaktigt personnummer!");
		oTxt.focus();
		return false;
	}
	
	return true;

}

function trim(obj){
		
	sInstring = obj.value;
	
	while (sInstring.charAt(0) == " ")
		sInstring = sInstring.substring(1);
			
	while (sInstring.charAt(sInstring.length-1) == " ")
		sInstring = sInstring.substr(0,sInstring.length-1);

	obj.value = sInstring;
					
	return obj;
}
