/**
* @copyright MENEA &copy; 2003, http://www.menea.cz
* @author Jiri Nemec <jiri.nemec@menea.cz>
* @package MENEASHOP
* @category backend
* @version $Id: formValidator.js 2 2004-08-03 16:11:31Z jirka $
*/

var minPasswordLentgh = 5;			// minimal password length
var maxPasswordLentgh = 30;			// maximal password length
var minLoginLentgh		= 5;			// minimal login length
var maxLoginLentgh		= 30;			// maximal login length 
var minInteger 				= 0;	// minimal integer
var maxInteger 				= 32767;	// minimal integer
//var showLabels 				= false;		// show error labels

// hlavni funkce, je volana pres validateForm(formpointer)
function checkLabels(theForm){
	var i = 0;
	var errs = new Array();
		
	clearLabels(theForm);
				
	for(i; i < theForm.elements.length; i++){

		var alt = theForm.elements[i].getAttribute("alt");
		var index = errs.length;
		
		// Je pozadovana kontrola				
		if(!isEmpty(alt)){
				
			var pointer = theForm.elements[i];
		
			var type = pointer.getAttribute("type");
			var name = pointer.getAttribute("name");
			var value = pointer.value;
			
			var ele = alt.split("|");			
			
			var theSwitch = (ele[1]==undefined) ? alt :ele[0] ;

			switch(theSwitch){
			
				case "empty_pwd_equals":
					
					var equalValue = document.getElementById(ele[1]).value;
					
					if(!isEmpty(value) || !isEmpty(equalValue)){
					
						var equalName = ele[1];				
						var minLength = ele[2] == undefined ? minPasswordLentgh : ele[2];
						var maxLength = ele[3] == undefined ? maxPasswordLentgh : ele[3];			
									 																		 
						if(!isPassword(value, minLength, maxLength)){				
							setErrorLabel(name);
							errs[index] = true;
						}
						
						if(value != equalValue){														
							setErrorLabel(equalName);
							errs[index] = true;					
						}							
					
					}
				
				break;
						
				case "pwd_equals":
												 
					var equalValue = document.getElementById(ele[1]).value;
					var equalName = ele[1];				
					var minLength = ele[2] == undefined ? minPasswordLentgh : ele[2];
					var maxLength = ele[3] == undefined ? maxPasswordLentgh : ele[3];			
					
					//alert(minLength);
								 																		 
					if(!isPassword(value, minLength, maxLength)){				
						setErrorLabel(name);
						errs[index] = true;
					}
					
					if(value != equalValue){														
						setErrorLabel(equalName);
						errs[index] = true;					
					}							 						
										 
				break;
			
				case 'number':
								
					if(!isNumber(value)){
						setErrorLabel(name);
						errs[index] = true;						
					}				
				
				break;
				
				case "selection":

				var pointer = document.getElementById(name);
			
				if(pointer.selectedIndex == -1){
					setErrorLabel(name);				
					errs[index] = true;										
				}
				
				break;
				
				case "integer":
				
				var minLength = ele[1] == undefined ? minInteger : ele[1];
				var maxLength = ele[2] == undefined ? maxInteger : ele[2];							
				
					if(!isInteger(value, minLength, maxLength)){
						setErrorLabel(name);
						errs[index] = true;						
					}				
				
				break;
				
				case "phone":
				
					if(!isPhone(value)){
						setErrorLabel(name);
						errs[index] = true;						
					}				
				
				break;						
				
				case "ic":
				
					if(!isIC(value)){
						setErrorLabel(name);
						errs[index] = true;						
					}				
				
				break;		
				
				case "dic":
				
					if(!isDIC(value)){
						setErrorLabel(name);
						errs[index] = true;						
					}				
				
				break;								

				case "zip":
				
					if(!isZip(value)){														
						setErrorLabel(name);
						errs[index] = true;												
					}				
				
				break;			

				case "login":
				
					var minLength = ele[1] == undefined ? minLoginLentgh : ele[1];
					var maxLength = ele[1] == undefined ? maxLoginLentgh : ele[2];							
				
					if(!isLogin(value, minLength, maxLength)){														
						setErrorLabel(name);
						errs[index] = true;												
					}														
				
				break;
				
				case "arr_empty":
								
				errs[index] = true;																
				
				break;

				case "empty":
				case "file":

					if(isEmpty(value)){														
						setErrorLabel(name);
						errs[index] = true;												
					}										
											
				break;
				
				case "email":
					if(!isValidEmail(value)){
						setErrorLabel(name);
						errs[index] = true;												
					}
				break;
				
			}
			
		}
		
	}
	
	return errs;
}

function showLegend(theDiv){
	
	var legend = document.getElementById(theDiv+"_l");
	if(legend != null){
		legend.style.display = "block";
	}

}

//fce navazana na submit
function validateForm(theForm){

	var arr = checkLabels(theForm);
			
	if(arr.length >0){
		var errMess;
		//alert("Opravte, prosím, zvýrazněné položky ve formuláři.");
		return false;
	}else{
		return true;	
	}
}

// todo: fce havaruje pokud se ma hodit focus na input file		
function selectFirstErrorInput(){
  var objLabels = document.getElementsByTagName("label");
	
	for (var i = 0; i < objLabels.length; i++) { 
		var thePointer = objLabels[i];
		var idLabel = thePointer.getAttribute("htmlFor")
				
		if(thePointer.className=="labelKo"){
			return document.getElementById(idLabel).focus();
		}
	}
}

// Funcke nastavi dany label na error stav
function setErrorLabel(labelName){

  var objLabels = document.getElementsByTagName("label");
			
	for (var i = 0; i < objLabels.length; i++) { 
		var thePointer = objLabels[i];
		if(objLabels[i].htmlFor == labelName){
			if(showLabels==true) showLegend(labelName);
			thePointer.className = "ko";
		}
	}
}
		
// Funcke ziska z labelu jeho text
function getLabelText(forname){
  var objLabels = document.getElementsByTagName("label");

	for (var i = 0; i < objLabels.length; i++) { 
		var thePointer = objLabels[i];
		
		//alert(forname);
		
		if(thePointer.getAttribute("htmlForm") == forname){
			return thePointer.innerHTML;
		}
	}	
	return "NA";				
}

// Funcke je volana pri spusteni validace, nasatvi vsechny 
//labely na defaultni, no error, stav.
function clearLabels(forname){

  var objLabels = document.getElementsByTagName("label");
			
	for (var i = 0; i < objLabels.length; i++) { 
		var thePointer = objLabels[i];
		thePointer.className = "labelOk";
	}
		
	if(showLabels==true){	
		
	  var objLabels = document.getElementsByTagName("div");
				
		for (var i = 0; i < objLabels.length; i++) { 
			var thePointer = objLabels[i];
			//alert(thePointer.style.display);
			thePointer.style.display = "none";
			//alert(thePointer.style.display);
		}
	
	}
				
}

/*
*	Validacni funkce
*/

function isValidEmail(email) {
    if(email.length <= 0)
	{
	  return false;
	}
    var splitted = email.match("^(.+)@(.+)$");
    if(splitted == null) return false;
    if(splitted[1] != null )
    {
      var regexp_user=/^\"?[\w-_\.]*\"?$/;
      if(splitted[1].match(regexp_user) == null) return false;
    }
    if(splitted[2] != null)
    {
      var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;
      if(splitted[2].match(regexp_domain) == null) 
      {
	    var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
	    if(splitted[2].match(regexp_ip) == null) return false;
      }// if
      return true;
    }
return false;
}		

function isEmpty(theString){
	return theString=="" || theString == null || theString==0;
}

function isPhone(phone){

	if(isEmpty(phone)){
		return false;
	}

	return doesContain(phone, "+012345678 9/");

}

function isNull(theString){
	return theString=="" || theString == null;
}

function isZip(theString){

	if(isEmpty(theString)){
		return false;
	}

	return doesContain(theString, "0123456789");
}

function isInteger(theInt, minLength, maxLength){
	var theInt = parseInt(theInt);
	return (theInt >= minLength && theInt <= maxLength);
}

function isLogin(theString, minLength, maxLength){
	
	if(isEmpty(theString) || theString.length < minLength || theString.length > maxLength){
		return false;
	}
	
	return doesContain(theString, "0123456789abcdefghchijklmnopqrstuvwxyzABCDEFGHCHIJKLMNOPQRSTUVWXYZ");
}

function isIC(ic){

	if(isEmpty(ic)){
		return false;
	}

	return doesContain(ic, "0123456789");
}

function isDIC(dic){

	if(isEmpty(dic)){
		return false;
	}

	return doesContain(dic, "CZ0123456789");
}

function isNumber(theString){
	if(isNull(theString)){
		return false;
	}
	return doesContain(theString, "0123456789.,");
}


function isPassword(theString, minLength, maxLength){
	
	if(isEmpty(theString) || theString.length < minLength || theString.length > maxLength){
		return false;
	}
	
	return doesContain(theString, "0123456789abcdefghchijklmnopqrstuvwxyzABCDEFGHCHIJKLMNOPQRSTUVWXYZ");
}

// funkce zkontroluje, jestli se string obsahuje pouze znaky z checkString
function doesContain(theString, checkString){
	for(i = 0; i<theString.length; i++){
		if(checkString.indexOf(theString.charAt(i))<0) return false;
	}
	return true;
}

