/*
/////////////////////////////////////////////////////////////////////////////////////////////////////
||Project Name     : MANIX Js Helper																   ||
||Author	       : B.ManiKandan <creative_manix@rediffmail.com>								   ||
||Created On       : 11.05.05																	   ||
||Description      : Please View The Detail Description below									   ||
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
*/
/*
Description:

Functions:
	This JS Have so many functions to validate ur webpage.

Watchers:(supports netscape also)
	Watchers are the new concepts, u can add watcher for u r Html controls.,
	that will watch the control, accroding to the condition what u have specified in the watcher.
	for example: if u add the "numbersOnly" watcher to u r Html control like textarea or textbox,
				 This watcher never allow to enter the alphapatic character.
				 
				 Syntax:
				 	maximumLength=50;	
					addWatcher("maxLength",document.frm.ta1,maximumLength,"error text");
					addWatcher("numbersOnly",document.frm.ta1);
				
				 << document.frm.ta1 >> : textarea control;
				
				warning:
		 			must add the watcher at ur last of the page.
*/

function check(chkType,arg,arg1,arg2,arg3,arg4)
	{
		var result;
		var txt;
		var txt1;
		var txt2;
		var minrange="";
		var minrange="";
		
		switch (chkType)
			{
				  case 'require':
						{
						return chkNull(arg,arg1);
						break;
						}
				  case 'compare':
						{
						return chkEqual(arg,arg1,arg2);
						break;
						}
				  case 'numeric':
						{
						return chkNumeric(arg,arg1);
						break;					
						}
				  case 'integer':
						{
						return chkInteger(arg,arg1);
						break;					
						}
				  case 'float':
						{
						return chkFloat(arg,arg1);
						break;					
						}
				   case 'price':
						{
						return chkPrice(arg,arg1);
						break;					
						}
				  case 'alphanumeric':
						{
						return chkAlphaNumeric(arg,arg1);
						break;
				 		}
				  case 'image':
						{
						return chkImage(arg,arg1);
						break;
						}
				  case 'length':
				  		{
						return chkLength(arg,arg1,arg2,arg3,arg4);
						break;
						}
				  case 'range':
				  		{
						return chkRange(arg,arg1,arg2,arg3,arg4);
						break;
						}
				  case 'checkgroup':
				  		{
						return chkCheckGroup(arg,arg1,arg2);
						break;
						}
				  case 'isperiod':
				  		{
						return isPeriod(arg,arg1,arg2);
						break;
						}
				  case 'isdate':
				  		{
						return isDate(arg,arg1);
						break;
						}
			}
			
	return true;
	}




//START:Function's Used By This JS
function cancel_event(e)
	{
	
	if(navigator.appName=="Netscape")
			{
		e.cancelBubble=true;
		e.cancelBubble;
			}
	else
		{
		event.returnValue=false;
		}
	//alert(e.cancelBubble);
	}

function accept_event(e)
	{
	if(navigator.appName=="Netscape")
		e.cancelBubble=false;
	else
		event.returnValue=true;
	}
	
function get_keycode(e)
	{
	if(navigator.appName=="Netscape")
		return e.charCode;
	else
		return event.keyCode;
	}

function getValue(obj)
	{
		if(obj.tagName=="TEXTAREA")
		 return obj.innerHTML;
		else
		 return obj.value;
	}
function sendError(arg,errorText)
	{
		if(errorText=="def")
			//START : Send The Alert Message
				if(!Null(arg.name))
					alert("Please Enter The "+arg.name);
				else 
					alert("Please Enter The "+arg.id);
			//END : Send The Alert Message				
		else
			alert(errorText);
		arg.focus();
		return false;
	}
//END:Function's Used By This JS

//START:Validation Functions*********************************************************************************************************
function chkNull(obj1,errorText)
	{
				txt=getValue(obj1);
				if(txt!=="")
					return true;
				else 
					return sendError(obj1,errorText);
	}

function chkEqual(obj1,obj2,errorText)
	{
			txt1=obj1.value;
			txt2=obj2.value;
			if(txt1!==txt2)
				return sendError(obj1,errorText);
			return true;
	}

function chkNumeric(obj,errorText)
	{
			txt=getValue(obj);
			if(txt!=="")
				{
			myRe1=new RegExp(/(^\d*$)/);
			myRe2=new RegExp(/^(\d{0,})(\.{0,1})(\d){1,}$/);
			if(myRe1.test(txt)||myRe2.test(txt)) return true;
			return sendError(obj,errorText);
				}
			return true;
	}

function chkInteger(obj,errorText)
	{
		txt=getValue(obj);
		if(txt!=="")
			{
		myRe=new RegExp(/(^\d*$)/);
		if(myRe.test(txt))return true;
		return sendError(obj,errorText);
			}
		return true;
	}

function chkFloat(obj,errorText)
	{
		
		txt=getValue(obj);
		
		if(txt!=="")
			{
		myRe=new RegExp(/^\d*(\.)(\d{1,})$/);
		if(myRe.test(txt)) return true;		
		return sendError(obj,errorText);
			}
		return true;
	}

function chkAlphaNumeric(obj,errorText)
	{
		txt=getValue(obj);
		if(txt!=="")
			{
		myRe=new RegExp(/^\w*$/);
		if(myRe.test(txt)) return true;
		return sendError(obj,errorText);
			}
		return true;
	}
function chkImage(obj,errorText)
	{
		txt=getValue(obj);
		if(txt!=="")
			{
		myRe=new RegExp(/^\w*\.(jpg|gif|png|jpeg|bmp)$/);
		if(myRe.test(txt.toLowerCase())) return true;
		return sendError(obj,errorText);
			}
		return true;
	}	

function chkLength(obj,arg1,errorText1,arg2,errorText2)
	{
		txt=getValue(obj);
		if(txt!=="")
			{
		minrange=arg1;
		maxrange=arg2;
		if(txt.length<minrange && minrange!=="")
			return sendError(obj,errorText1);
		if(txt.length>maxrange && maxrange!=="")
			return sendError(obj,errorText2);								
			}	
		return true;
	}

function chkRange(obj,arg1,errorText1,arg2,errorText2)
	{
		txt=getValue(obj);
		if(txt!=="")
			{
		minrange=arg1;
		maxrange=arg2;
		if(txt<minrange && minrange!=="")
			return sendError(obj,errorText1);
		if(txt>maxrange && maxrange!=="")
			return sendError(obj,errorText2);								
			}
		return true;
	}

function chkPrice(obj,errorText)
	{
		
		txt=getValue(obj);
		if(txt!=="")
			{
		myRe1=new RegExp(/(^\d*$)/);
		myRe2=new RegExp(/^(\d{0,})(\.{0,1})(\d){1,2}$/);
		if(myRe1.test(txt)||myRe2.test(txt)) return true;
		return sendError(obj,errorText);
			}
		return true;
	}
/*-----------------------------------------------DATE FUNCTIONS----------------------------------------------------------*/
function formatDate(date,currentFormat,targetFormat)
	{
		var dd,mm,yyyy,result;
		result="";
		currentFormat=currentFormat.split("/");
		targetFormat=targetFormat.split("/");
		currentDate=date.split("/");
		for(i=0;i<=currentFormat.length-1;i++)
			{
				if(currentFormat[i]=="dd")
					dd=currentDate[i];
				else if(currentFormat[i]=="mm")
					mm=currentDate[i];
				else if(currentFormat[i]=="yyyy")
					yyyy=currentDate[i];
			}
		for(i=0;i<=targetFormat.length-1;i++)
			{
				if(targetFormat[i]=="dd")
					result+=dd;
				else if(targetFormat[i]=="mm")
					result+=mm;
				else if(targetFormat[i]=="yyyy")
					result+=yyyy;
				if(i<=targetFormat.length-2)result+="/";
			}
	return result;
	}
function date(dateFormat)
		{
			var result;
			result="";
		    d = new Date();
			format=dateFormat.split("/");
			for(i=0;i<=format.length-1;i++)
				{
				if(format[i]=="dd")
					result+=d.getDate();
				else if(format[i]=="mm")
					result+=d.getMonth()+1;
				else if(format[i]=="yyyy")
					result+=d.getYear();
				else if(format[i]=="YY")
						{
						temp=d.getYear();
						temp=temp.toString();
						temp=temp.substr(2,3);
						result+=temp;
						}
				if(i<=format.length-2)result+="/";
				}
			return result;
		}		

function daysFinder(testdate)
		{
		  var d, s, t;
		  var MinMilli = 1000 * 60;
		  var HrMilli = MinMilli * 60;
		  var DyMilli = HrMilli * 24;
		  d = new Date();
		  t = Date.parse(testdate);
		  s = Math.round(Math.abs(t / DyMilli))
		  return(s);
		}

function dateDiff(date1,date2,currentFormat)
	{
		date1=formatDate(date1,currentFormat,"mm/dd/yyyy")
		date2=formatDate(date2,currentFormat,"mm/dd/yyyy")
		return daysFinder(date2)-daysFinder(date1);
	}
function _isDate(date)
	{
		if(date >=1 && date<=31) return true;
		return false;
	}
function isMonth(month)
	{
		if(month >=1 && month<=12) return true;
		return false;
	}
function isYear(year)
	{
		year=year.toString();
		if(year.length==4) return true;
		return false;
	}
function isDate(date,dateFormat)
	{
		date=date.toString();
		result1=false;result2=false;result3=false;
		format=dateFormat.split("/");
		dates=date.split("/");
		if(dates.length!=3) return false; 
			for(i=0;i<=format.length-1;i++)
				{
				if(format[i]=="dd")
					result1=_isDate(dates[i]);
				else if(format[i]=="mm")
					result2=isMonth(dates[i]);
				else if(format[i]=="yyyy")
					result3=isYear(dates[i]);
				}
		if(result1&&result2&&result3)
			return true;
		return false;
	}
function isPeriod(date1,date2,dateFormat)
	{
		
		
		date1=formatDate(date1,dateFormat,"dd/mm/yyyy");
		date2=formatDate(date2,dateFormat,"dd/mm/yyyy");
		if(dateDiff(date1,date2,"dd/mm/yyyy") >=0) return true;
		return false;
	}
/*-----------------------------------------------DATE FUNCTIONS----------------------------------------------------------*/
function chkCheckGroup(obj,errorText1,errorText2)
	{
	Flg=false;

		if(obj.length)
		{
		
				for(iC=0;iC<obj.length;iC++)
					{
						if(obj[iC].checked==true)
							{
							Flg=true;
							}
					}
					if(Flg==false)
						{
							alert(errorText1);
							return false;
						}
					else if(Flg==true)
							return true;
			
		}
		else 
				{
					
					if(obj.checked==true)
						return true;
					else 
					{
						alert(errorText2);
						return false;		
					}
				}
	}
//END:Validation Functions*********************************************************************************************************

//START:Watcher Functions**********************************************************************************************************
var OBJ;
	//For Netscape Purpose
	var tmpTxt=new Array;
	var index;
	index=0;
	
function addWatcher(watchType,obj,arg1,arg2,arg3)
	{
		

		if(obj._watchType)
			{
		if(obj._watchType!=="") 
		obj._watchType=obj._watchType+"&"+watchType;
			 }
	    else
		  obj._watchType=watchType;
		 

			flags=watchType.split("&");
//alert(flags.length);
			for (i=0;i<=flags.length;i++)
				{
						
					
						if(flags[i]=="maxLength")
								{
															
							obj.CHK_MAX_LEN=1;
							obj._maxLength=arg1;
							obj._maxLength_E=arg2;
							obj.onkeypress=OBJ_KEYPRESS;
							obj.onpaste=OBJ_PASTE;
							if(navigator.appName=="Netscape")					
							obj.onchange=OBJ_CHANGE;
							//alert(obj.onkeypress);
								}
						if(flags[i]=="numbersOnly")
								{
							
							obj.CHK_NUM_ONLY=1;
							obj.onkeypress=OBJ_KEYPRESS;
							obj.onpaste=OBJ_PASTE;
							if(navigator.appName=="Netscape")					
							obj.onchange=OBJ_CHANGE;
								}
						if(flags[i]=="alphaOnly")
							{
							obj.CHK_ALPHA_ONLY=1;
							obj.onkeypress=OBJ_KEYPRESS;
							obj.onpaste=OBJ_PASTE;
							}
						if(flags[i]=="noSymbols")
							{
							 obj.CHK_NO_SYMBOL=1;
							 obj.onkeypress=OBJ_KEYPRESS;
 							 obj.onpaste=OBJ_PASTE;
							}
						index++;
						tmpTxt[index]="";
						obj.tmpTxt_index=index;
				}
		 
	}

function OBJ_KEYPRESS(e)
	{
	
	if(navigator.appName=="Netscape")
	obj=e.target;
	else
	obj=window.event.srcElement;
		
	
	if(obj.CHK_MAX_LEN==1)
		{
		if(Watch_maxLen_KEYPRESS(obj,obj._maxLength,obj._maxLength_E,e))
		return;
		}
	if(obj.CHK_NUM_ONLY==1)
		{
		Watch_Keys_1_KEYPRESS(e);
		}
	if(obj.CHK_ALPHA_ONLY==1)
		{
		Watch_Keys_2_KEYPRESS(e);
		}
	if(obj.CHK_NO_SYMBOL==1)
		{
		Watch_Keys_3_KEYPRESS(e);
		}
	}
function OBJ_PASTE(e)
	{
	if(navigator.appName=="Netscape")
	obj=e.target;
	else
	obj=window.event.srcElement;
	
	if(obj.CHK_MAX_LEN==1)
		{
		if(Watch_maxLen_PASTE(obj,obj._maxLength,obj._maxLength_E,e))
		return;
		}
	if(obj.CHK_NUM_ONLY==1)
		{
		Watch_Keys_1_PASTE(e);
		}
	if(obj.CHK_ALPHA_ONLY==1)
		{
		Watch_Keys_2_PASTE(e);
		}
	if(obj.CHK_NO_SYMBOL==1)
		{
		Watch_Keys_3_PASTE(e);
		}
	}
function OBJ_CHANGE(e)
	{
	 
	 if(obj.CHK_NUM_ONLY==1)
		{
		NS_Watch_Keys_1_PASTE(e);
		}
	if(obj.CHK_MAX_LEN==1)
		{
			NS_Watch_maxLen_PASTE(e,e.target._maxLength);
		}
	}
function proxy_event(e,option)
	{
		if(navigator.appName=="Netscape")
		{	
		if(e.ctrlKey==true && e.charCode==118)
			{
				switch(option)
					{
					case 1:
						OBJ_CHANGE(e);//For Only Numbers
						break;
					case 2:
						break;
					}
			}
		}
	}
function Watch_Keys_1_KEYPRESS(e) //Only Numbers
	{
		flag=false;
		code=get_keycode(e);
		proxy_event(e,1);
		if(navigator.appName=="Netscape")
			if (e.ctrlKey==true && code==118) flag=true;
			if(code >= 48 && code <= 57 ||code ==32 || code == 13|| (code == 0) || flag)
						accept_event(e);
					else
						cancel_event(e);
	}	

function Watch_Keys_1_PASTE(e)//Only Numbers  :IE
	{
			
			txt=clipboardData.getData("Text");
			if(txt!=="")
				{
			myRe1=new RegExp(/(^(\d|[" "])*$)/);
			myRe2=new RegExp(/^(\d{0,})(\.{0,1})(\d){1,}$/);
			if(myRe1.test(txt)||myRe2.test(txt)) {accept_event(e);return;};
			code=get_keycode(e);
			cancel_event(e);
			return;
				}
			accept_event(e);
			return;
	}	


function NS_Watch_Keys_1_PASTE(e)//Only Numbers  :NS
	{
//	alert(obj.tmpTxt_index);
	txt=e.target.value;
	//alert(txt);
	myRe1=new RegExp(/(^(\d|[" "])*$)/);
	myRe2=new RegExp(/^(\d{0,})(\.{0,1})(\d){1,}$/);
	//alert(">"+myRe1.test(txt)+"<"+myRe2.test(txt));
	if(myRe1.test(txt) || myRe2.test(txt)) 
			tmpTxt[e.target.tmpTxt_index] =txt;
	else e.target.value=tmpTxt[e.target.tmpTxt_index];
	}
	
function Watch_Keys_2_KEYPRESS(e)//Only Alphas includes _
	{
			//alert(event.keyCode);
			code=get_keycode(e);
			//alert(code);
			if((code >= 65 && code <= 90) || (code >= 97 && code <= 122) || (code == 32) ||(code== 13)||(code == 95) || (code == 0))
						accept_event(e);
					else
						cancel_event(e);
					
	}

function Watch_Keys_2_PASTE(e)//Only Alphas includes _
	{
			txt=clipboardData.getData("Text");
			if(txt!=="")
				{
			myRe=new RegExp(/^([a-z]|[A-Z]|[" "]|[\_])*$/);
			if(myRe.test(txt)) {accept_event(e);return;};
			cancel_event(e);
			return;
				}
			accept_event(e);
			return;
	}

function Watch_Keys_3_KEYPRESS(e)//No Symbols (Alpha Numeric)
	{
			code=get_keycode(e);
			if((code >= 48 && code <= 57)||(code >= 65 && code <= 90) || (code >= 97 && code <= 122) || (code== 32) ||(code == 13)||(code == 95)|| (code == 0))
						accept_event(e);
					else
						cancel_event(e);
					
	}

function Watch_Keys_3_PASTE(e)
	{
			txt=clipboardData.getData("Text");
			if(txt!=="")
				{
			myRe=new RegExp(/^([a-z]|[A-Z]|[0-9]|[" "]|[\_])*$/);
			if(myRe.test(txt)) {accept_event(e);return;};
			cancel_event(e);
			return;
				}
			accept_event(e);
			return;
	}

function Watch_maxLen_KEYPRESS(obj,len,errorText,e) 
	{
		
		if(obj.value.length>=len && get_keycode(e)!==0)
				{
				cancel_event(e);
				sendError(obj,errorText);
				return true;
				}
			
	}

function Watch_maxLen_PASTE(obj,len,errorText,e) //For Ie
	{
		if(obj.value.length+clipboardData.getData("Text").length>len)
				{
			cancel_event(e);
			return true;
				}
	}
function NS_Watch_maxLen_PASTE(e,len) //For Ie
	{
		txt=e.target.value;
	if(txt.length<len) 
				{
			tmpTxt[e.target.tmpTxt_index] =txt;
			
				}
	else e.target.value=tmpTxt[e.target.tmpTxt_index];
	
	}

//END:Watcher Functions************************************************************************************************************