/*var regxnumber = new RegExp(/\d/);

	function foo (ob) {
		alert(ob.value)
		alert(eval('regx'+ob.validation+'.test(ob.value)'))
	}
*/

function FieldsCheck(frm)
{
	return checkFields(frm,true);
}

function checkFields(frm, isAlert)
{
	var allElements = frm.elements;
	var err=false;
	var firstError = 0 ;
	clearErrorMessages (allElements)
	for(j=0;j < allElements.length;j++)
	{
		if(allElements[j].disabled == false && allElements[j].style.display != "none" && allElements[j].type != "hidden" )
		{
			var dontCheckGroup = false
			if(allElements[j].group == 1)
			{
				var GroupElem = "";
				GroupElem = document.getElementById(allElements[j].linkedTo);
				if(GroupElem.style.display != "none")
					dontCheckGroup = false;
				else
					dontCheckGroup = true;
			}
			if(dontCheckGroup==false)
			{
				if(allElements[j].radioGroup == 1)
				{
					var groupArr;
					var checkedGroup=false;
					groupArr=document.getElementsByName(allElements[j].linkedToRadio);
					radInd = document.getElementById(allElements[j].radioNo)*1;
					for (i=0;i<groupArr.length;i++)
					{
						if ( groupArr[radInd].checked )
						{
							checkedGroup=true;
							break;
						}
					}
					if(checkedGroup)
					{
						err = AllCheck(allElements[j],err);
					}
					else if(allElements[j].type != "hidden" && allElements[j].required=="true")
						document.getElementById(allElements[j].ErrDivName).style.display='none';
				}
				else
				{
					err = AllCheck(allElements[j],err);
				}

			}//if(dontCheckGroup==false) end
		}//if(allElements[j].disabled == false && allElements[j].style.display != "none") end
		if (err && firstError==0)
		{
			firstError = j;
		}
	}// for end

	if (err && isAlert)
	{
		alert('נא לבדוק את הנתונים שהזנת');
		allElements[firstError].focus();

	}

	return err;
}

function clearErrorMessages(elmnts)
{
	if (document.getElementById("ErrDiv")!=null)
	{
		for (var i = 0; i < document.getElementsByName("ErrDiv").length ; i++)
		{
			document.getElementsByName("ErrDiv")[i].style.display='none';			
		}
	}
}

function showAlert(elem,str)
{
	//alert(elem.parentElement.innerHTML);
	if(elem.parentElement!=null)
		elem.parentElement.innerHTML = elem.parentElement.innerHTML +'<div name="ErrDiv" id="ErrDiv" class="FormErrorClass">'+str+'</div>';

}

function AllCheck(elem,err)
{
	var str = "" ;
	//------- Empty Field Check -------
	if( (elem.required=="1") && (elem.value==null || elem.value=="") )
	{
		if (elem.errorOnRequired!=null){
			str = elem.errorOnRequired;
		}else{
			str = "חובה למלא "+elem.title;
		}
		showAlert(elem,str);
		//document.getElementById(elem.ErrDivName).style.display='block';
		err=true;
	}
	//else if(elem.required=="1")
	//	document.getElementById(elem.ErrDivName).style.display='none';

	//------- Number Fieald Check -------
	if( elem.fieldType == "number" && (elem.value!=null && elem.value!="") && isNaN(elem.value) )
	{
		str = elem.title+" חייב להיות מספר"
		if (elem.errorOnValidate!=null)
		{
			str = elem.errorOnValidate;
		}
		
		showAlert(elem,str)
		//document.getElementById(elem.ErrDivName).style.display='block';
		err=true;
	}

	//------- lowerThenMaxNumber Fieald Check -------
	if( elem.fieldType == "lowerThenMaxNumber" && (elem.value!=null && elem.value!="") && ( isNaN(elem.value) || (elem.value > (elem.MaxNumber*1)) ) )
	{
		str = elem.title+" חייב להיות מספר"+" קטן מ "+((elem.MaxNumber*1)+1)
		if (elem.errorOnValidate!=null)
		{
			str = elem.errorOnValidate;
		}
		
		showAlert(elem,str)
		//document.getElementById(elem.ErrDivName).style.display='block';
		err=true;
	}

	//------- startDate Fieald Check -------
	if (elem.fieldType== "startDate"  && (elem.value!=null && elem.value!="") )
	{
		if( !DateCheck(elem.value) ){
			showAlert(elem,"תאריך לא חוקי פורמט התאריך צריך להיות: dd/mm/yyyy");
			//document.getElementById(elem.ErrDivName).style.display='block';
			err=true;
		}else{
			var sDate = elem.value ; 
			var eDate = document.getElementById(elem.relatedField).value;
		
			if (dateCompare(sDate,eDate)!=2)
			{
				showAlert(elem,"תחום תאריכים לא חוקי");
				showAlert( document.getElementById(elem.relatedField),"תחום תאריכים לא חוקי");
				err=true;
			}
		}
	}

	//------- Credit Card Number Fieald Check -------
	if( elem.fieldType == "creditCardNumber" && (elem.value!=null && elem.value!="") )
	{
		var ccReg = "^\\d{8,16}$";
		var Reg = new RegExp(ccReg);
		var checkCard = verifyCardNumber(elem.value,elem.cardType)
		if(!Reg.test(elem.value) || isNaN(elem.value) || !checkCard)
		{
			showAlert(elem, "מספר כרטיס האשראי אינו תקין");
			//document.getElementById(elem.ErrDivName).style.display='block';
			err=true;
		}
	}
	
	//------- Related Dates Fiealds Check -------
	if( elem.fieldType == "rDates" && (elem.value!=null && elem.value!="") )
	{
		//RelatedDates="upToYear_upToMonthSelect_"
		var RelatedDatesArr = (elem.RelatedDates).split("_");
		var dateErr=false;
		var toDay = new Date();
		var nowDay = toDay.getDate()+"";
		var nowMonth = (toDay.getMonth()+1)+"";
		var nowYear = toDay.getYear();
		var year = nowYear;
		if(RelatedDatesArr[0]!=null || RelatedDatesArr[0]!="")
			year = document.getElementById(RelatedDatesArr[0]).value;
		var month = "01";
		if(RelatedDatesArr[1]!=null || RelatedDatesArr[1]!="")
			month = document.getElementById(RelatedDatesArr[1]).value;
		var day = "01";
		if(RelatedDatesArr[2]!=null && RelatedDatesArr[2]!="")
			day = document.getElementById(RelatedDatesArr[2]).value;

		var compare = dateCompare( (year+"/"+month+"/"+day),(nowYear+"/"+nowMonth+"/"+nowDay) );

		if(compare == 2 || compare == 0)
			dateErr = true;

		if(year==null || year=="" || isNaN(year) || (year*1)<0 || (year*1)>2500)
			dateErr = true;

		if(day==null ||day=="")
			dateErr = true;

		if(month==null || month=="")
			dateErr = true;

		if(dateErr)
		{
			showAlert(elem,"תאריך לא חוקי");
			
			//document.getElementById(elem.ErrDivName).style.display='block';
			err=true;
		}
	}
	
	//------- ID Number Check -------
	if( elem.fieldType == "idNumber"  )
	{
		if(CheckIdNumber(elem) != true){
			showAlert(elem,'תז. לא תקינה');
			err = true;
		}
	}

	//------- Phone Number Check -------
	if( document.getElementById(elem.PreName)!= null && elem.fieldType == "phoneNumber" && (elem.value!=null && elem.value!="") ) 
	{
		var telNumber = (elem.value)*1;

		
		var preNumber = (document.getElementById(elem.PreName).value)*1;
		

		if(preNumber == -1)
		{
			showAlert(elem, "נא בחר קידומת");
			//document.getElementById(elem.ErrDivName).style.display='block';
			err=true;
		}

		if (preNumber == 18)
		{
			//pLength = '6';
			lowBound = 100000;
			hiBound = 999999;
		} 	
		else if (preNumber < 50 )
		{
			//pLength = '7';
			lowBound = 1000000;
			hiBound = 9999999;
		}
		else
		{
		  //pLength = '6 - 7';
		  lowBound = 100000;
		  hiBound = 9999999;    
		}
		
		//alert( "lowBound"+lowBound+"hiBound" + hiBound +"preNumber"+ preNumber )
	    if( (telNumber < lowBound) || (telNumber > hiBound) || isNaN(elem.value) )
	    {
			showAlert(elem, "טלפון לא חוקי");
			//document.getElementById(elem.ErrDivName).style.display='block';
			err=true;
	    }
	}

	if( document.getElementById(elem.PreName)== null && elem.fieldType == "phoneNumber" && (elem.value!=null && elem.value!="") ) 
	{
		var phoneExp =  /^(\d+\s?-?\s?)+\d+$/;
		if(!(phoneExp.test(elem.value))) 
		{
			showAlert(elem,"טלפון לא חוקי");
			err=true;
		}
	}

	//------- EMail Check -------
	if( elem.fieldType == "email" && (elem.value!=null && elem.value!="") ) 
	{
		var EmailReg = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;
		if(!(EmailReg.test(elem.value)))
		{
			showAlert(elem, "דואר האלקטרוני אינו חוקי");
			//document.getElementById(elem.ErrDivName).style.display='block';
			err=true;
		}
		
	}

	//------- Date Check -------
	if( elem.fieldType == "date" && (elem.value!=null && elem.value!="") ) 
	{
		if( !DateCheck(elem.value) )
		{
			showAlert(elem,"תאריך לא חוקי פורמט התאריך צריך להיות: dd/mm/yyyy");
			//document.getElementById(elem.ErrDivName).style.display='block';
			err=true;
		}
	}

	//------- Time Check -------
	if( elem.fieldType == "time" && (elem.value!=null && elem.value!="") ) 
	{
		//var objDateValid = /^((([0]?[1-9]|1[0-2])(:|\.)[0-5][0-9]((:|\.)[0-5][0-9])?( )?(AM|am|aM|Am|PM|pm|pM|Pm))|(([0]?[0-9]|1[0-9]|2[0-3])(:|\.)[0-5][0-9]((:|\.)[0-5][0-9])?))$/;
		var objDateValid = /^((([0]?[1-9]|1[0-2])(:|\.)[0-5][0-9]((:|\.)[0-5][0-9])?( )?(AM|am|aM|Am|PM|pm|pM|Pm))|(([0]?[0-9]|1[0-9]|2[0-3])((:|\.)[0-5][0-9])?((:|\.)[0-5][0-9])?))$/;

		if( !objDateValid.test(elem.value) )
		{
			showAlert(elem,"פורמט השעה לא חוקי");
			//document.getElementById(elem.ErrDivName).style.display='block';
			err=true;
		}
	}
	
	//------- spacial Number Check -------
	if( elem.fieldType == "spacialNumber" ) 
	{
		if(elem.value!=null && elem.value!="")
		{
			if( isNaN(elem.value) ){
				str = elem.title+" "+"חייב להיות מספר"
				showAlert(elem,str);
				err=true;
			}
			else if( elem.multipleBy!="" && elem.value%elem.multipleBy!=0 ){
				str = elem.title+" "+"חייב להיות מספר"+" "+"המתחלק ב"+" "+elem.multipleBy
				showAlert(elem,str);
				err=true;
			}
			else if( elem.minValue!="" && elem.value*1<elem.minValue*1 ){
				str = elem.title+" "+"חייב להיות מספר"+" "+"הגדול מ"+" "+((elem.minValue*1)-1);
				showAlert(elem,str);
				err=true;
			}
			else if( elem.maxValue!="" && elem.value*1>elem.maxValue*1 ){
				str = elem.title+" "+"חייב להיות מספר"+" "+"הקטן מ"+" "+((elem.maxValue*1)+1);
				showAlert(elem,str);
				err=true;
			}
		}
	}

	return err;
}

function DateCheck(dateStr)
{
	if(dateStr==null || dateStr=="")
		return false;

	var objDateValid = /((([0][1-9]|[12][\d])|[3][01])[/]([0][13578]|[1][02])[/][1-9]\d\d\d)|((([0][1-9]|[12][\d])|[3][0])[/]([0][13456789]|[1][012])[/][1-9]\d\d\d)|(([0][1-9]|[12][\d])[/][0][2][/][1-9]\d([02468][048]|[13579][26]))|(([0][1-9]|[12][0-8])[/][0][2][/][1-9]\d\d\d)/;
	return objDateValid.test(dateStr);
}

function verifyCardNumber(CardNumber,creditTypeField)
{
	var cTypesName = document.getElementById(creditTypeField);
	var cTypeVal = document.getElementById(creditTypeField).value;

	var length = CardNumber.length;
	switch (cTypesName[cTypeVal*1].innerText+"")
	{
		case "ישראכרט":
			if ((length == 16) && ((CardNumber.substring(0,1)==5)||(CardNumber.substring(0,1)==6)))
				 return (checknumber(CardNumber,1));
			if (length == 8)
			{
				CardNumber = 0 + CardNumber;
				return (checknumber(CardNumber,0));
			}
			else if (length==9)
				 {
					 CardNumber = 0 + CardNumber;
					 return (checknumber(CardNumber,0));
				 }
				 else
					 return false;
					
			break;
				
		case "מאסטרקרד":
			if ((length == 16) && ((CardNumber.substring(0,1) == 5)||(CardNumber.substring(0,1) == 6)))
				 return (checknumber(CardNumber,1));
			if (length == 8)
			{
				CardNumber = 0 + CardNumber;
				return (checknumber(CardNumber,0));
			}
			else if (length == 9)
				 {
					 CardNumber = 0 + CardNumber;
					 return (checknumber(CardNumber,0));
				 }
				 else
					 return false;
					
			break;
				
		 case "ויזה כ.א.ל":
			  if ((length == 16) && (CardNumber.substring(0,1) == 4))
					 return (checknumber(CardNumber,1));
			  else
					 return false;
			  break;
					
		 case "לאומי קארד":
			  if (length == 16)
			  {
				  if ((CardNumber.substring(0,6)==458003)||(CardNumber.substring(0,6)==458010))//||(CardNumber.substring(0,6)==458011)||(CardNumber.substring(0,6)==458012))
					  return (checknumber(CardNumber,1));
			  }
			  else
				 return false;
			  break;
		  case "לאומי ויזה":
			  if (length == 16)
			  {
				  if ((CardNumber.substring(0,6)==458003)||(CardNumber.substring(0,6)==458010)||(CardNumber.substring(0,6)==458011)||(CardNumber.substring(0,6)==458012))
					  return (true);
			  }
			  else
				 return false;
			  break;			 	  
		  
		 case "ויזה אלפא":
			 if (length == 16)
			 {
				 if (CardNumber.substring(0,6)==427713)
					 return (checknumber(CardNumber,1));
				 else if (CardNumber.substring(0,6)==427776)
						  return (checknumber(CardNumber,1));
					  else if (CardNumber.substring(0,6)==440300)
							   return (checknumber(CardNumber,1));
						   else if (CardNumber.substring(0,6)==440301)
									return (checknumber(CardNumber,1));
								else if (CardNumber.substring(0,6)==440302)
										 return (checknumber(CardNumber,1));
									 else if (CardNumber.substring(0,6)==440303)
											  return (checknumber(CardNumber,1));
										  else if (CardNumber.substring(0,6)==440391)
												   return (checknumber(CardNumber,1));
											   else if (CardNumber.substring(0,6)==440392)
														return (checknumber(CardNumber,1));
													else if (CardNumber.substring(0,6)==440393)
															 return (checknumber(CardNumber,1));
														 else if (CardNumber.substring(0,6)==440394)
																  return (checknumber(CardNumber,1));
															  else if (CardNumber.substring(0,6)==440395)
																		return (checknumber(CardNumber,1));
																   else if (CardNumber.substring(0,6)==458036)
																			return (checknumber(CardNumber,1));
																		else if (CardNumber.substring(0,6)==458037)
																				 return (checknumber(CardNumber,1));
																			 else if (CardNumber.substring(0,6)==458038)
																					  return (checknumber(CardNumber,1));
			 }
			 else
				 return false;
			 break;	    
					 
		 case "דיינרס":
			 if (length == 14)
			 {
				 if ((CardNumber.substring(0,1)==3)||(CardNumber.substring(0,1)==6))
					  return (checknumber(CardNumber,1));
			 }
			 return false;
			 break;
		  
		 case "אמריקן אקספרס":
			 if (length == 15)
			 {
				 if( CardNumber.substring(0,3)==375 )
					 return (checknumber(CardNumber,1));
			 }    
			 return false;
			 break;
		  
		 default:
			 return false;
			 break;			
	}

	return false;
}

function CheckIdNumber(elem)
{
	var strValue;
	var idnumber = elem.value*1;
	
	if(idnumber==null || idnumber=="")
	{
		showAlert(elem,"עליך למלא את השדה");
		//document.getElementById(elem.ErrDivName).style.display='block';
		return false;
    }
	else
	 strValue = idnumber+"";
	 
	var leng = strValue.length;
	var sum = 0; 
	var mul=1;
	var strID = strValue;
	var objRegExp = new RegExp("[^0-9]","g");
	
	if (objRegExp.test(strValue)) 
	{
		showAlert(elem, "שדה מספר זהות מכיל תווים לא חוקיים");
		//document.getElementById(elem.ErrDivName).style.display='block';
		return false;
	}	
    else if((leng > 9)) 
    {
		showAlert(elem,"שדה מספר זהות מכיל יותר מ-9 תווים");
		//document.getElementById(elem.ErrDivName).style.display='block';
		return false;
	}
   	else if ((leng < 9 ) && (leng >4))//checking for leading zero 
	{
		
		var addNull = 9-leng;
		var addn="0";
		for (i=1;i<=addNull-1;i++)
		    addn=addn + "0";
		strID = addn + idnumber;
		leng = strID.length;
	}
	else
	{
		if (leng <= 4 )
		{
			showAlert(elem, "שדה מספר זהות מכיל פחות מ-5 תווים");
			//document.getElementById(elem.ErrDivName).style.display='block';
			return false;
		}
	}
		
//----- Algorithm CheckID Number ---------------------------------------
	for (var i = 0;i<=leng-2;i++)
	{
		sum2 = (mul * (1*(strID.substr(i,1))));
		if (sum2 > 9)
			sum2 = sum2 - 9;
		sum = sum + sum2;
		mul = 3 - mul;
	 }
	 
	sum = sum%10;
	var result = 10 - sum;
	if (result == 10)
		result=0;

	if ( (1*(strID.substr(i,1))) != result)
	{
		showAlert(elem, "סיפרת הביקורת אינה תואמת למספר תעודת הזהות");
		//document.getElementById(elem.ErrDivName).style.display='block';
		return false;
	}
	 //ID passed successfuly
	 return true;
}




function dateCompare(date1,date2)
/**
Parameters: date1 , date2 : dates to compare
Output: 0 - dates are equal
		1 - date 1 is bigger
		2 - date 2 is bigger
**/
{
	var time1;
	var time2;
	/** Added By RamiK **/
	if (date1.indexOf(' ')!=-1 && date2.indexOf(' ')!=-1)
	{
		
		var tempDate=date1.split(" ");
		date1=tempDate[0];
		time1=tempDate[1];
		
		tempDate=date2.split(" ");
		date2=tempDate[0];
		time2=tempDate[1];
	}
	else{
		time1="00:00:00";
		time2="00:00:00";
	}/** Done By RamiK **/


	var date_1=date1.split("/");
	var date_2=date2.split("/");

	
		
	var time_1=time1.split(":");/** Added By RamiK **/
	var time_2=time2.split(":");/** Added By RamiK **/
	
	if(date_1[2]*1 > date_2[2]*1)//year1
	{	
		return 1;
	}
	else if(date_1[2]*1 < date_2[2]*1)//year2
	{
		return 2;
	}
	else if(date_1[1]*1 > date_2[1]*1)//month1
	{
		return 1;
	}
	else if(date_1[1]*1 < date_2[1]*1)//month2
	{
		return 2;
	}
	else if(date_1[0]*1 > date_2[0]*1)//day1
	{
		return 1;
	}
	else if(date_1[0]*1 < date_2[0]*1)//day2
	{
		return 2;
	}/** Added By RamiK **/
	else if(time_1[0]*1 > time_2[0]*1)//hour1
	{
		return 1;
	}
	else if(time_1[0]*1 < time_2[0]*1)//hour2
	{
		return 2;
	}
	else if(time_1[1]*1 > time_2[1]*1)//minute1
	{
		return 1;
	}
	else if(time_1[1]*1 < time_2[1]*1)//minute2
	{
		return 2;
	}
	else if(time_1[3]*1 > time_2[3]*1)//second1
	{
		return 1;
	}
	else if(time_1[3]*1 < time_2[3]*1)//second2
	{
		return 2;
	}/** Done By RamiK**/
	else
	{
		
				return 0;
	}

}

function fieldState(fieldType , state , fieldValue)
{

	if(state != null || state != "")
	{
		for(var i=0;i<state.length;i++)
		{
			if(state[i]==fieldValue)
			{
				if(fieldType=="select")
					return "selected";	
				else
					return "checked";
			}
		}
	}
	return "";
}

function checknumber(CardNumber,company)
{
 
	if (company == 0)//ישראכרט 8 או 9 ספרות
	{
		var sum = 0;
		var length = CardNumber.length;
		for (i=0;i<length;i++)
		{
			index = length - i;
			number = CardNumber.substring(i,i+1);
			sum = sum + (number * index);
		}
		return(sum%11==0);
	}
	else  // כל השאר
	{
	    var multiplyer = 1;
		var sum = 0;
		var length = CardNumber.length;
		
		for(i=0;i<length;i++)
		{
			index = length-i;
			number = CardNumber.substring(index,index-1);
			MultyResult = number * multiplyer;
			if (MultyResult > 9)
			{
				MultyResult = MultyResult.toString();
				MultyResult = parseInt(MultyResult.substring(0,1))+parseInt(MultyResult.substring(1,2));
			}
			sum = sum + MultyResult;
		
			if (multiplyer == 1)
				multiplyer = 2;
			else
				multiplyer = 1;
		}
		return(sum%10==0);
	}
}
