		// RegularExpression 
		// Writen by :Le Khanh son
		
		// Fixed bug(10/10/2004) by Quang Minh, Vu
		// Position of invalid output Message 
		
		// Add 'CurrencyReg' (10/11/2004) by Le Khanh son
		

        ///////////////////////////////////////////////////////////////////////////
		//	6 pattern to check 
		//
		//	dateOrBlankReg:   allow null data, if value not null, that is must valid date format
		//	numberOrBlankReg: allow null data, if value not null, that is must valid number format
		//	dateReg		
		//	numberReg	: number require
		//	nonSpecialCharacterReg	: a-z, 1-9 or underscore character only
		//	notNullReg	: not allow null
		//	CurrencyReg	: currency format   ###,###,###.## or ###########,..
		
		///////////////////////////////////////////////////////////////////////////

			var dateReg	= /^(?:(?:0?[1-9]|1\d|2[0-8])(\/|-)(?:0?[1-9]|1[0-2]))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(?:(?:31(\/|-)(?:0?[13578]|1[02]))|(?:(?:29|30)(\/|-)(?:0?[1,3-9]|1[0-2])))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(29(\/|-)0?2)(\/|-)(?:(?:0[48]00|[13579][26]00|[2468][048]00)|(?:\d\d)?(?:0[48]|[2468][048]|[13579][26]))$/;
			var numberReg	= /^\d+$/;
			var word_requireReg= /^\w+$/;
			var emailReg=/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;
			var CurrencyReg = /^\s*\d+(\,\d{3})*(\.\d+)?\s*$/
			
			var msgEmailReg		="Email không hợp lệ";
			var msgNumberReg	= "Bạn phải nhập chữ số!";
			var msgRequireReg	= "Bạn phải nhập dữ liệu!";
			var msgDateReg		= "Bạn phải nhập dữ liệu kiểu ngày!";
			var msgCurrencyReg	= "Bạn phải nhập dữ liệu kiểu tiền tệ! (###,###,###.## or ######### )";
			
			//	print 
			document.write("<div id='RegularExpression' "
							+"style="
							+"'"
							+"CLEAR: left;"
							+"DISPLAY: none;"
							+"FONT-VARIANT: normal; "
							+"FONT-WEIGHT: normal;"
							+"FONT-SIZE: 11px;"
							+"Z-INDEX: +999;"
							+"LEFT: 336px;"
							+"TOP: 56px; "
							+"FLOAT: left; "
							+"MARGIN: 1px; "
							+"COLOR: DarkRed;"
							+"BACKGROUND-COLOR: #FFFFBE;"
							+"BORDER-RIGHT: red 1px solid; "
							+"BORDER-TOP: red 1px solid;"
							+"BORDER-LEFT: red 1px solid; "
							+"BORDER-BOTTOM: red 1px solid;"
							+"FONT-FAMILY: Tahoma;"							
							+"POSITION: absolute; "
							+"'"
							+">"
							+"</div>"
						);
			
			/***** BEGIN for normal web control ****************************/
			function Validation(strCollection){
				
				var arrCollection	= new Array();
				var arrObject		= new Array();
				var arrPattern		= new Array();
				var index_arrObject = 0, index_arrPattern=0;
				
				arrCollection = strCollection.split('#');
				
				for (var index_arrCollection = 0 ; index_arrCollection < arrCollection.length ; index_arrCollection ++ ){
					if (index_arrCollection % 2 == 0){
						arrObject[index_arrObject]	 = document.getElementById(arrCollection[index_arrCollection]);
						index_arrObject ++;
					}else {
						arrPattern[index_arrPattern] = arrCollection[index_arrCollection];
						index_arrPattern ++
					}
				}
				if (fCheck(arrObject, arrPattern) ==false ){
					return false;
				}else return true;
				return false;
			}

			function fCheck(aObj, aPattern){
				
				var arrObjSender = new Array();
				var arrPattern   = new Array();
				
				var flagBoo = false;
				
				arrObjSender = aObj;
				arrPattern   = aPattern;
				
				//
				//				
				for (var i = 0 ; i < arrObjSender.length ; i++){					
					if (arrPattern[i] == 'dateReg')
					{//	if check date time -------------------------------------------------------------------------
						if (setDisplay_fCheck(arrObjSender[i], dateReg, msgDateReg) == false){
							flagBoo = false;
							break;
						}else {
							flagBoo = true;
						}
					}//	end check if date time format ---------------------------------------------------------------
					else
						if (arrPattern[i] == 'numberReg')
					{// if check number format --------------------------------------------------
							if (setDisplay_fCheck(arrObjSender[i], numberReg, msgNumberReg) == false){
								flagBoo = false;
								break;
							}else {
								flagBoo = true;								
							}
					}// end check if number format ----------------------------------------
					else
						if(arrPattern[i] == 'emailReg')
					{//	----------------------if check email-----------------------------------------
							if (setDisplay_fCheck(arrObjSender[i], emailReg, msgEmailReg) == false){
								flagBoo = false;
								break;
							}else {
								flagBoo = true;								
							}

					}//	end check ---------if check email-----------------------------------------
					else
						if (arrPattern[i] == 'word-require')
					{//	---------------- if check word ..--------------------------------------------
							if (setDisplay_fCheck(arrObjSender[i], word_requireReg, 'require') == false){
								flagBoo = false;
								break;
							}else	
								flagBoo = true;
					}//	end check ----------- if check word ..---------------------------
					else
						if (arrPattern[i] == 'requireReg')
					{//	------------------------------- --- require value  --------------------
							if (arrObjSender[i].value.length == 0){
								enableMsg(arrObjSender[i], msgRequireReg);
								flagBoo = false;
								break;
							}else
								flagBoo = true;
					}//	end check --- require value  --------------------
					else
						if (arrPattern[i] == 'numberOrBlankReg')
					{//	----------------------------allow null or valid number format-------------------------
							//	if value not null
							var tempV = trim(arrObjSender[i].value);
							if (tempV.length != 0){
								//	validing 
								if (setDisplay_fCheck(arrObjSender[i], numberReg, msgNumberReg) == false){
									flagBoo = false;
									break;
								}else {
									flagBoo = true;
								}
							}
							// if null, set value to 0
							else{
								arrObjSender[i].value = 0;
								flagBoo = true;
							}
					}//	end if numberOrBlankReg call
					else 
						if (arrPattern[i] == 'dateOrBlankReg')
					{// ----------------------allow null or valid date format-----------------------
							//	if value not null
		           			var tempV = trim(arrObjSender[i].value);
				   			if (tempV.length != 0){
								//	validing 
								if (setDisplay_fCheck(arrObjSender[i], dateReg, msgDateReg) == false){
									flagBoo = false;
									break;
								}else {
									flagBoo = true;
								}
							}
							// if null value 
							else{
								flagBoo = true;
							}
					}//	end if dateOrBlankReg call
					else 
						if (arrPattern[i] == 'CurrencyReg')
					{//	----------- currency format ------------------------------	
							var tempV = trim(arrObjSender[i].value);
							if (tempV.length != 0){
								//	validing
								if (setDisplay_fCheck(arrObjSender[i], CurrencyReg, msgCurrencyReg) == false ){
									flagBoo = false;
									break;
								}else
									flagBoo = true;
							}else {
								flagBoo = false;
								break;
							}
					}//	end check ----------- currency format ------------------------------
									
				}//	end for loop
				return flagBoo ;
			}

			function setDisplay_fCheck(objSender, reg, msg){
				var value_need = trim (objSender.value);
				//value_need = value_need.Replate(
				//alert(document.form1.ProductName.value);
				if (reg.test(objSender.value) == false){
					enableMsg(objSender, msg);
					
					return false;
				}else {
					disableMsg();
					return true;					
				}
			}			
			
			function enableMsg(objSender, msg){
								
				var topP	= getTop(objSender);
				
				var heightP	= objSender.offsetHeight;
								
				var leftP	= getLeft(objSender);
				var topDIV_P	= (topP + heightP);
				var leftDIV_P	= leftP;
								
				objSender.select();
				objSender.focus();
				
				RegularExpression.style.left = leftDIV_P;
				RegularExpression.style.top  = topDIV_P;
				
				RegularExpression.innerText  = ''+msg;
				RegularExpression.style.display = 'block';
			}			
			
			function disableMsg(){
				RegularExpression.style.display = 'none';
			}
			
			/****************use function ***********************************************************/
			
			function ltrim(s) {
				return s.replace( /^\s*/, "" );
			}
			
			function rtrim(s) {
				return s.replace( /\s*$/, "" );
			}
			
			function trim (s) {
				return rtrim(ltrim(s));
			}
		

			function getTop(obj){
				var fileTop=0;
					 while (obj.offsetParent){
								fileTop+=obj.offsetTop;
								obj=obj.offsetParent;
							}
				 return fileTop;	
				}
 
			function getLeft(obj){
				 var fileLeft=0;
					while (obj.offsetParent){
						fileLeft+=obj.offsetLeft;
						obj=obj.offsetParent;
									}
				return fileLeft;
				}                                                                                              