/*
	$Header: cvc_checkForm.js,v 0.8.1 2008/10/15 14:32:31 matteo Exp $

	CaViCcHi check Form: Copyright 2008

	This program is free software: you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation, either version 3 of the License, or
	(at your option) any later version.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with this program.  If not, see <http://www.gnu.org/licenses/>.

	=== New in 0.8.1:
	- Added support nested for radiobutton check

*/
function CVCmFieldsCheck(formname){
	var problems = '';
	var mailExp = new RegExp("^[a-zA-Z0-9_.-]{1,}\@[a-zA-Z0-9]{2,}\\.[a-zA-Z.]{1,}$");
	var isNumeric = new RegExp("^[0-9]{1,}$");
	var tmpBorder = Array();

	if(eval(document.forms[formname].elements['CVC_mFields_border'])){
		tmpBorder = document.forms[formname].elements['CVC_mFields_border'].value.split("|");
		var enableBorder = true;
		var beforeBorder = Array();
		var afterBorder = Array();
	        beforeBorder = tmpBorder[1].split(",");
	        afterBorder = tmpBorder[0].split(",");
	}else{
		var enableBorder = false;
	}

	if(document.forms[formname].elements['CVC_mFields'].value.length > 2){
	        var fieldsType = Array();
	        var functions = Array();
	        var tmpStuff = Array();
	        var tmpElements = Array();
	        fieldsType = document.forms[formname].elements['CVC_mFields'].value.split("*");
	        //alert(fieldsType);
	 	for(j=0;j<fieldsType.length;j++){
                        tmpStuff = fieldsType[j].split("|",2);

			tmpElements = tmpStuff[1].split(",");
			if(tmpElements.length < 1){
				problems = "ERROR: Configuration for section "+tmpStuff[0];
				return false;
			}
                        if(isNumeric.test(tmpStuff[0])){
			 	for(k=0;k<tmpElements.length;k++){
					var newString = tmpElements[k].replace("form_","");
					if(!eval(document.forms[formname].elements[tmpElements[k]])){ alert("Error: Are you sure about this item: '"+tmpElements[k]+"'?\ncause I am really not sure it is part of the form...");return false;}
					if(document.forms[formname].elements[tmpElements[k]].value == undefined && document.forms[formname].elements[tmpElements[k]].length != undefined){
					        var checkRadio = false;
						for(g=0;g<document.forms[formname].elements[tmpElements[k]].length;g++){ //This is a radio Button so I will just check his evaluation
						        if(document.forms[formname].elements[tmpElements[k]][g].checked){
						                checkRadio = true;
						                break;
						        }
						}
						if(checkRadio == false) problems += '- Missing ' + newString.replace("_"," ")+'\n';
					}else if(document.forms[formname].elements[tmpElements[k]].value.length < tmpStuff[0]){
		                                if(!eval(document.forms[formname].elements['CVC_mFields_giveInfoFields'])){
							problems += '- Missing ' + newString.replace("_"," ") + ' it should be at least '+tmpStuff[0]+' chars\n';
						}else{
							problems += '- Missing ' + newString.replace("_"," ")+'\n';
						}
						if(enableBorder)giveFocus(document.forms[formname].elements[tmpElements[k]],beforeBorder,afterBorder);
					}
					newString=null;
				}
				tmpElements=Array();
			}else{
			        switch(tmpStuff[0]){
                        	        case 'email': // Check email integrity *email|form_email1,form_email2...form_emailN
                        	        	for(k=0;k<tmpElements.length;k++){
                        	        		if(!mailExp.test(document.forms[formname].elements[tmpElements[k]].value)){
								problems += '- Invalid E-Mail format\n';
								if(enableBorder)giveFocus(document.forms[formname].elements[tmpElements[k]],beforeBorder,afterBorder);
							}
						}
                        	        break;
                        	        case 'strcmp': // Compare between 2 strings *strcmp|form_str1,form_str2
						var newString = tmpElements[0].replace("form_","");
						var newString1 = tmpElements[1].replace("form_","");
                        	        		if(document.forms[formname].elements[tmpElements[0]].value != document.forms[formname].elements[tmpElements[1]].value){
								problems += '- The two fields ' + newString.replace("_"," ") + ' and ' + newString1.replace("_"," ") + ' don\'t match!\n';
								if(enableBorder)giveFocus(document.forms[formname].elements[tmpElements[0]],beforeBorder,afterBorder);
								if(enableBorder)giveFocus(document.forms[formname].elements[tmpElements[1]],beforeBorder,afterBorder);
							}
                        	        break;
									case 'morethan': // check if the value of the second parameter higher than the first parameter
						var guests = parseInt(document.forms[formname].elements[tmpElements[0]].value);
						var limit = 9;
											if((!isNumeric.test(guests)) || (guests == 0)) {
								problems += '- Please correct the number of guest\n';
								if(enableBorder)giveFocus(document.forms[formname].elements[tmpElements[0]],beforeBorder,afterBorder);
							}				
	                      	        		if(guests > limit){
								problems += '- We are sorry; due to the size of your party,\n  you will need to speak with our Reservations Dept.\n  to provide additional information.\n  Please call (323) 785-5000. Thank you.\n';
								if(enableBorder)giveFocus(document.forms[formname].elements[tmpElements[0]],beforeBorder,afterBorder);
							}
                        	        break;
                        	        default:
                        	                problems += "WARNING: What is "+tmpStuff[0]+"??\n";
                        	        break;
                        	}
			}
		}
	}
	// Too Dangerous
	/*
	if(document.forms[formname].elements['CVC_mFields_addFunctions'].value.length > 2){ // function1,function2,function3...functionN
		functions = document.forms[formname].elements['CVC_mFields_addFunctions'].value.split(",");
		for(j=0;j<functions.length;j++){
		        eval(functions[j]);
		}
	}
	*/

	if(problems.length > 0){
		alert(problems);
		return false;
	}
	return true;
}
function deFocus(obj,beforeBorder){
	//obj.setAttribute("style",beforeBorder[0]+":"+beforeBorder[1]+"px solid #"+beforeBorder[2]); // Doesn't work on IE!
	var tmpVal = beforeBorder[1]+"px solid #"+beforeBorder[2];
	if(beforeBorder[0]=='all'){
	        var border="border";
	}else{
		var border="border"+_ucfirst(beforeBorder[0]);
	}
	eval("obj.style."+border+"='"+tmpVal+"'");
	obj.onfocus = function(){};
}
function giveFocus(obj,beforeBorder,afterBorder){
	//obj.setAttribute("style",afterBorder[0]+":"+afterBorder[1]+"px solid #"+afterBorder[2]); // Doesn't work on IE!
	var tmpVal = afterBorder[1]+"px solid #"+afterBorder[2];
	if(afterBorder[0]=='all'){
	        var border="border";
	}else{
		var border="border"+_ucfirst(afterBorder[0]);
	}
	eval("obj.style."+border+"='"+tmpVal+"'");
	obj.onfocus = function(){deFocus(obj,beforeBorder)};
}

/* His Functions */
function _ucfirst(str) {
	var f = str.charAt(0).toUpperCase();
	return f + str.substr(1, str.length-1);
}