// ----------------------------------------------------------------------
// 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,5}$/;
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;
}


function validateDomain(valfld, infofld, reg){
	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(val.value.substring(0,4) == "www."){
		val.value = val.value.substring(4);
	}

	if(checkDomain(val.value)){
		msg_span(infofld, "");
		return true;
	}else{
		msg_span(infofld,"Nepravilna oblika domene!");
		return false;
	}


}
// ----------------------------------------------------------------------
// 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;
	var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
	
	if (!reg.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
// 
//
//
// ----------------------------------------------------------------------





function checkDomain(nname)
{
var arr = new Array(
'.com','.net','.org','.biz','.coop','.info','.museum','.name',
'.pro','.edu','.gov','.int','.mil','.ac','.ad','.ae','.af','.ag',
'.ai','.al','.am','.an','.ao','.aq','.ar','.as','.at','.au','.aw',
'.az','.ba','.bb','.bd','.be','.bf','.bg','.bh','.bi','.bj','.bm',
'.bn','.bo','.br','.bs','.bt','.bv','.bw','.by','.bz','.ca','.cc',
'.cd','.cf','.cg','.ch','.ci','.ck','.cl','.cm','.cn','.co','.cr',
'.cu','.cv','.cx','.cy','.cz','.de','.dj','.dk','.dm','.do','.dz',
'.ec','.ee','.eg','.eh','.er','.es','.et','.fi','.fj','.fk','.fm',
'.fo','.fr','.ga','.gd','.ge','.gf','.gg','.gh','.gi','.gl','.gm',
'.gn','.gp','.gq','.gr','.gs','.gt','.gu','.gv','.gy','.hk','.hm',
'.hn','.hr','.ht','.hu','.id','.ie','.il','.im','.in','.io','.iq',
'.ir','.is','.it','.je','.jm','.jo','.jp','.ke','.kg','.kh','.ki',
'.km','.kn','.kp','.kr','.kw','.ky','.kz','.la','.lb','.lc','.li',
'.lk','.lr','.ls','.lt','.lu','.lv','.ly','.ma','.mc','.md','.mg',
'.mh','.mk','.ml','.mm','.mn','.mo','.mp','.mq','.mr','.ms','.mt',
'.mu','.mv','.mw','.mx','.my','.mz','.na','.nc','.ne','.nf','.ng',
'.ni','.nl','.no','.np','.nr','.nu','.nz','.om','.pa','.pe','.pf',
'.pg','.ph','.pk','.pl','.pm','.pn','.pr','.ps','.pt','.pw','.py',
'.qa','.re','.ro','.rw','.ru','.sa','.sb','.sc','.sd','.se','.sg',
'.sh','.si','.sj','.sk','.sl','.sm','.sn','.so','.sr','.st','.sv',
'.sy','.sz','.tc','.td','.tf','.tg','.th','.tj','.tk','.tm','.tn',
'.to','.tp','.tr','.tt','.tv','.tw','.tz','.ua','.ug','.uk','.um',
'.us','.uy','.uz','.va','.vc','.ve','.vg','.vi','.vn','.vu','.ws',
'.wf','.ye','.yt','.yu','.za','.zm','.zw');

var mai = nname;
var val = true;

var dot = mai.lastIndexOf(".");
var dname = mai.substring(0,dot);
var ext = mai.substring(dot,mai.length);
//alert(ext);
	
if(dot>2 && dot<57)
{
	for(var i=0; i<arr.length; i++)
	{
	  if(ext == arr[i])
	  {
	 	val = true;
		break;
	  }	
	  else
	  {
	 	val = false;
	  }
	}
	if(val == false)
	{
		 return false;
	}
	else
	{
		for(var j=0; j<dname.length; j++)
		{
		  var dh = dname.charAt(j);
		  var hh = dh.charCodeAt(0);
		  if((hh > 47 && hh<59) || (hh > 64 && hh<91) || (hh > 96 && hh<123) || hh==45 || hh==46)
		  {
			 if((j==0 || j==dname.length-1) && hh == 45)	
		  	 {
			      return false;
		 	 }
		  }
		else	{
			 return false;
		  }
		}
	}
}
else
{
 return false;
}	

return true;
}









