// ----------------------------------------------------------------------
// Javascript form validation routines.
//
// Author:	Marko Pust
// Date:	maj 2007
// ----------------------------------------------------------------------

// RegExs
var emptyStr =	/^\s*$/ ;						//empty string
var alphaExp = 	/^[0-9a-zA-Z]+$/;					//alphanumeric
var numExp =	/^[0-9]+$/;						//numeric
var telExp = 	/^\+[0-9]{2,3}[.][0-9]{8,12}$/;				//tel num (+386.12123123)
var mailExp = 	/^[a-z0-9._-]+@[a-z0-9.-]+\.[a-z]{2,4}$/;		//email address
var vatExp=	/^[A-Z]{2}[0-9]{8,}$/; 					//SI12345678
var zipExp=		/^[0-9]{4}$/;

var fldReqMsg = 		" (obvezen vnos)";						//field required error msg
var passwdInvalChr = 	"Geslo vsebuje nedovoljene znake! ";	//invalid char in password
var passwdOnlyNum =		"Geslo ne sme vsebovati samo ¹tevilk! ";//only numbers in password
var passwdToShort =		"Geslo je prekratko!";
var passwdMismatch = 	"Gesli nista enaki! ";
var invalidSyntax = 	" (napačna oblika!)";
var invalidSyntaxVat =     "Napačna oblika!  (SI12345678) ";
var invalidSyntaxZip =     " (¹tirimestno ¹tevilo!)";

var userInvalChr = 		"Ime vsebuje nedovoljene znake! ";	//invalid char in password
var userOnlyNum =		"Ime ne sme vsebovati samo ¹tevilk! ";//only numbers in password
var userToShort =		"Ime je prekratko!";

// ----------------------------------------------------------------------
// Common code for all validation routines.
// Returns true (validation passed), 
//         false (validation failed) or 
//         proceed (don't know yet) 
// ----------------------------------------------------------------------
var proceed = 2;
function commonCheck	(valfld,	//element to be validated
			 infofld,	//id of element to recieve error msg
			 req)		//true if required
{
	if(emptyStr.test(valfld.value)) {
		if(req) {
			msg_span(infofld, fldReqMsg);
			return false;
		}
		else {
			msg_span(infofld, "");
			return true;
		}
	}
	return proceed;
}

// ----------------------------------------------------------------------
// Validate if something has been entered 
// ----------------------------------------------------------------------
function validatePresent(valfld, infofld){
	
	var stat = commonCheck (valfld, infofld, true);
	if(stat != proceed) return stat;

	msg_span(infofld, "");	
	return true;
}

// ----------------------------------------------------------------------
// Validate if string is valid password
//		must be alphanumeric, must not be numeric
// ----------------------------------------------------------------------
function validatePassStr(valfld, infofld){
	var stat = commonCheck (valfld, infofld, true);
        if(stat != proceed) return stat;

	if( !alphaExp.test(valfld.value) ) {
		msg_span(infofld, passwdInvalChr);
        return false;
	}
	else if( numExp.test(valfld.value) ) {
		msg_span(infofld, passwdOnlyNum);
        return false;
	}
	else if( valfld.value.length < 4 ) {
		msg_span(infofld, passwdToShort);
        return false;
	}
	else {
		msg_span(infofld, "");
        return true;
	}
}

function validateUserStr(valfld, infofld){
	var stat = commonCheck (valfld, infofld, true);
        if(stat != proceed) return stat;

	if( !alphaExp.test(valfld.value) ) {
		msg_span(infofld, userInvalChr);
        return false;
	}
	else if( numExp.test(valfld.value) ) {
		msg_span(infofld, userOnlyNum);
        return false;
	}
	else if( valfld.value.length < 4 ) {
		msg_span(infofld, userToShort);
        return false;
	}
	else {
		msg_span(infofld, "");
        return true;
	}
}


// ----------------------------------------------------------------------
// Validate if two paswords are equal
// ----------------------------------------------------------------------
function validatePass (passfld1, passfld2, infofld1, infofld2) {
	var stat = validatePassStr(passfld1, infofld1);
	
	if(!stat) {
		msg_span(infofld2, "");
		return false;
	}
	else {
		if (passfld1.value == passfld2.value) {
			msg_span(infofld1, "");
			msg_span(infofld2, "");
			return true;
		}
		else {
			msg_span(infofld2, passwdMismatch);
			return false;
		}
	}
}

// ----------------------------------------------------------------------
// Validate and replace local chars
// ----------------------------------------------------------------------
function validateTextNoLocal (valfld, infofld, req) {
	var stat = commonCheck (valfld, infofld, req);
    if(stat != proceed) return stat;
	
	var rpl_value = rplLocalChars(valfld.value);
	valfld.value = rpl_value;
	msg_span(infofld, "");	
	return true;
}

// ----------------------------------------------------------------------
// Validate telephon number
// ----------------------------------------------------------------------
function validateTel (valfld, infofld, req) {
	var stat = commonCheck (valfld, infofld, req);
    if(stat != proceed) return stat;
	
	var num = trim(valfld.value);
	num = num.replace(/ /g, "");
	if(num.substring(0,2) == "00")
		num = "+" + num.substring(2);
	
	valfld.value=num;
	
	if (!telExp.test(num)) {
		msg_span(infofld, invalidSyntax);
		return false;
	}
	else {
		msg_span(infofld, "");
		return true;
	}
}

// ----------------------------------------------------------------------
// Validate email address
// ----------------------------------------------------------------------
function validateMail(valfld, infofld, req) {
	var stat = commonCheck (valfld, infofld, req);
    if(stat != proceed) return stat;
	
	var num = trim(valfld.value);
	num = num.toLowerCase();
	valfld.value=num;
	
	if (!mailExp.test(num)) {
		msg_span(infofld, invalidSyntax);
		return false;
	}
	else {
		msg_span(infofld, "");
		return true;
	}
	
}
// ----------------------------------------------------------------------
// Validate VAT number
// ----------------------------------------------------------------------
function validateVat(valfld, infofld, req) {
        var stat = commonCheck (valfld, infofld, req);
    	if(stat != proceed) return stat;

        var vat = trim(valfld.value);
        vat = vat.toUpperCase();
        valfld.value=vat;

        if (!vatExp.test(vat)) {
                msg_span(infofld, invalidSyntaxVat);
                return false;
        }
        else {
                msg_span(infofld, "");
                return true;
        }

}

// ----------------------------------------------------------------------
// Validate ZIP number
// ----------------------------------------------------------------------
function validateZIP (valfld, infofld, req) {
        var stat = commonCheck (valfld, infofld, req);
    	if(stat != proceed) return stat;

        var zip = trim(valfld.value);

        if (!zipExp.test(zip)) {
                msg_span(infofld, invalidSyntaxZip);
                return false;
        }
        else {
                msg_span(infofld, "");
                return true;
        }

}

// ----------------------------------------------------------------------
// 	Replace 1, e, ?, a, ? with s, c, z, c, d, z
// ----------------------------------------------------------------------
function rplLocalChars(str) {
	var localChr=new Array("č","Č","¹","©","¾","®","ę","Ę","š","D");
	var localRpl=new Array("c","C","s","S","z","Z","c","C","dz","Dz");
	var string=str;
	
	for (i in localChr) {
		string = string.replace(eval("/"+localChr[i]+"/g"), localRpl[i]);
	}
	
	return string;
}

// ----------------------------------------------------------------------
// Display warn/error message in HTML span element.
// ----------------------------------------------------------------------
function msg_span(id,		//id of span element to display message in
		  message)	//string to display
{
	if (document.getElementById(id).firstChild == null)
		document.getElementById(id).appendChild(document.createTextNode(message));

	else 
		document.getElementById(id).firstChild.nodeValue = message;
}

// ----------------------------------------------------------------------
// Trim leading/trailing whitespace off string
// ----------------------------------------------------------------------
function trim(str)
{
  return str.replace(/^\s+|\s+$/g, '');
}
