// ----------------------------------------------------------------------
// Javascript form validation routines.
//
// Author:	Marko Pust
// Date:	maj 2007
//
// Modified: Gregor Pollak
// Date:	 april 2008
//
//Modifed for use of slonic.net
// ----------------------------------------------------------------------

// RegExs
var emptyStr =	/^\s*$/ ;						//empty string
var alphaExp = 	/^[0-9a-zA-Z]+$/;					//alphanumeric
var numExp =	/^[0-9]+$/;						//numeric
var postalExp = /^[0-9]{4}$/;
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 taxExp = 	/^DS=[0-9]{8,}$/;					//12365498

var fldReqMsg = 	"Obvezen vnos! ";						//field required error msg
var invalidSyntax = 	"Napačna oblika! ";
var invalidSyntaxVat =  "(SI12345678) ";
var invalidSyntaxTax = 	"Napačna oblika!   (12365498)";
var invalidSyntaxPost = "Napačna oblika! (1000)";
var invalidMail = 	"(ime@domena.com)";
var invalidPhone = 	"(+386.XXXXXXXX)";

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

// ----------------------------------------------------------------------
// 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
{


valfld = document.getElementById(valfld);

	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 preveriSplosno(valfld, infofld){
	var stat = commonCheck (valfld, infofld, true);
        if(stat != proceed) return stat;

	var val = document.getElementById(valfld);
	var val1 = trim(val.value);
	val.value = val1;
	if(val1.length == 0){
		msg_span(infofld, fldReqMsg);
		return false;	
	}else if(val1.length > 0){
		msg_span(infofld, "");
		return true;
	}
}
// ----------------------------------------------------------------------
// Validate if contact was selected
// ----------------------------------------------------------------------

function validateOseba(valfld, infofld, reg){
	var os1  = document.getElementById('oseba1');
        var os1v = os1.checked;
        var os2 = document.getElementById('oseba2');
        var os2v = os2.checked;

	if(os1v == false && os2v == false){
		msg_span(infofld, "Izberite status");	
		return false;
	}
	else{
		msg_span(infofld, "");
		return true;
	}

}
//--------------------------------------------------------------------
// Validate if string is numeric - postal code
// ----------------------------------------------------------------------
function preveriPostal(valfld, infofld, reg){
	var stat = commonCheck (valfld, infofld, reg);
		if(stat != proceed) return stat;
	
	valfld = document.getElementById(valfld);
	var num = valfld.value;

	if(num.length > 3){
		if(!postalExp.test(num)){
			msg_span(infofld, invalidSyntaxPost);
			return false;
		}else{
			msg_span(infofld, "");
        	return true;	
		}
	}else if(num.length == 0){
		if(reg){
			msg_span(infofld, fldReqMsg);	
			return false;
		}else{
			msg_span(infofld, "");
			return true;
		}	
	}else{
		msg_span(infofld, invalidSyntaxPost);
		return false;
	}
}
// ----------------------------------------------------------------------
// Validate if string is valid password
//		must be alphanumeric, must not be numeric
// ----------------------------------------------------------------------
function validateUserStr(valfld, infofld){

	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 and replace local chars
// ----------------------------------------------------------------------
function validateTextNoLocal (valfld, infofld, req) {
	var stat = commonCheck (valfld, infofld, req);
    if(stat != proceed) return stat;

	valfld = document.getElementById(valfld);
	
	var rpl_value = rplLocalChars(valfld.value);
	//valfld.value = rpl_value;
	msg_span(infofld, "");	
	return true;
}

// ----------------------------------------------------------------------
// Validate telephon number
// ----------------------------------------------------------------------
function preveriTel (valfld, infofld, req) {
	
	var stat = commonCheck (valfld, infofld, req);
	    if(stat != proceed) return stat;	
	valfld = document.getElementById(valfld);
	
	var num = trim(valfld.value);
	var zac = num.substr(0,5);
	 if(zac == "+386 "){
                num = "+386."+num.substr(5);
        }
	num = num.replace(/ /g, "");
	if(num.substring(0,2) == "00")
		num = "+" + num.substring(2);
	zac = num.substring(0,1);
	if(zac == "0" && num.length == 9){
		var tel = num.substr(1);
		num = "+386."+tel;
	}

	valfld.value=num;
	
	if (!telExp.test(num)) {
		msg_span(infofld, invalidPhone);
		return false;
	}
	else {
		msg_span(infofld, "");
		return true;
	}
}

// ----------------------------------------------------------------------
// Validate email address
// ----------------------------------------------------------------------
function preveriMail(valfld, infofld, req) {
	var stat = commonCheck (valfld, infofld, req);
    if(stat != proceed) return stat;
	
	valfld = document.getElementById(valfld);

	var num = trim(valfld.value);
	num = num.toLowerCase();
	valfld.value=num;
	
	if (!mailExp.test(num)) {
		msg_span(infofld, invalidMail);
		return false;
	}
	else {
		msg_span(infofld, "");
		return true;
	}
	
}
// ----------------------------------------------------------------------
// Validate VAT number
// ----------------------------------------------------------------------
function preveriVat(valfld, infofld, req) {

        var stat = commonCheck (valfld, infofld, req);
    	if(stat != proceed) return stat;

	valfld = document.getElementById(valfld);
	valfld.value = trim(valfld.value);
       	if(valfld.value.length == 8 && numExp.test(valfld.value)){
		valfld.value = "SI"+valfld.value;
	}


	 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 MAT number
// ----------------------------------------------------------------------
function preveriMat(valfld, infofld, req){

	 var stat = commonCheck (valfld, infofld, req);
        if(stat != proceed) return stat;

        valfld = document.getElementById(valfld);
	valfld.value = trim(valfld.value);
	var mat = trim(valfld.value);

	if(!numExp.test(mat)){
		msg_span(infofld, "Napačna oblika - 1234567");
		return false;
	}else{
		var subs = mat.substring(mat.length-3,mat.length);
		if(mat.length == 7){
		msg_span(infofld, "");
                return true;
		}else if(mat.length == 10 && subs == "000"){
		msg_span(infofld, "");
                return true;
		}
		else{
		msg_span(infofld, "Napačna oblika - 1234567");
                return false;
		}
	}

}

function preveriOrg(valfld, infofld, req){
	if(validateTextNoLocal(valfld,infofld,req)){
		valfld = document.getElementById(valfld);
		valfld.value = trim(valfld.value);
		if(valfld.value == "osebno"){
			msg_span(infofld, "napačno ime organizacije!");
	                return false;
		}else{
	                msg_span(infofld, "");
	                return true;
		}
	}else{
		return false;
	}



}

// ----------------------------------------------------------------------
// 	Replace š, č, ž, ć, đ with s, c, z, c, d, z
// ----------------------------------------------------------------------
function rplLocalChars(str) {
	var localChr=new Array("č","Č","š","Š","ž","Ž","ć","Ć","đ","Đ");
	var localRpl=new Array("c","C","s","S","z","Z","c","C","dz","Dz");
	var string=str;
	
	for(i=0; i<10; i++) {
		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, '');
}


// ----------------------------------------------------------------------
// ----------------------------------------------------------------------
// ----------------------------------------------------------------------
// ----------------------------------------------------------------------
// ----------------------------------------------------------------------
// CUSTOM FUNCTIONS
// 
//
//
// ----------------------------------------------------------------------















