/*
* Description		: ClientÀÔ·Â°ªÀ» Ã³¸®ÇÏ±â À§ÇÑ ÄÚµå
* Writer				: À±È£¼±
* Work Date		: 2003/08/12 ~ 2003/08/14
* Ãß°¡¿¹Á¤»çÇ×	: 
* Update Date	: 2005/11/08
* º¯°æÀÌ·Â
* - 2004-01-06/À±È£¼±/Length °Ë»ç¸¦ TextBox ¿¡ ´ëÇØ¼­¸¸ ¼öÇàÇÏµµ·Ï ¼öÁ¤
* - 2004-01-06/À±È£¼±/ExCheckBoxList , ExRadioButtonList ÀÇ Required ¼öÇàÇÏµµ·Ï ¼öÁ¤
* - 2004-01-07/À±È£¼±/SubmitButton ÁöÁ¤½Ã submit½Ã Validation ¼öÇàÇÏµµ·Ï ¼öÁ¤ÁøÇàÁß
* - 2004-02-19/À±È£¼±/Validation ¿µ¿ª ¼³Á¤ºÎºÐ¸¸  Validation Ã³¸®ÇÏµµ·Ï ¼öÁ¤ÁøÇàÁß
* - 2004-03-19/À±È£¼±/¿©·¯ Group¿¡ ´ëÇØ¼­µµ Validation ½ÇÇàÇÏµµ·Ï ¼öÁ¤
* - 2005-11-08/À±È£¼±/ MultilineÀÏ °æ¿ì ÇÊ¼öÃ¼Å© ¿¡·¯ ¼öÁ¤
* - 2005-11-23/À±È£¼±/¿µ¿ªÀ» ÁöÁ¤ÇÒ ¼ö ÀÖµµ·Ï ¼öÁ¤
*/

var _isDebug = false;
var _isValidated = false;

function ClientValidate(ctlID)
{
	var senderID = document.activeElement.id;
	var validationRegion = "";
	var sender;
	var toolBar;
	
	try
	{
		if ( senderID  != null )
		{
			sender = document.getElementById(senderID);
			
			if ( sender.nocheck != null  )
			{
				return true;
			}
	
			if ( sender.parentElement != null )
			{
				toolBar = sender.parentElement;
			
				if  ( toolBar.ValidationRegion != null && toolBar.ValidationRegion != "" )
				{
					validationRegion = toolBar.ValidationRegion;
					ctlID = validationRegion;
				}
			}
		} 
	}
	catch(x)
	{
		return true;
	}
	
	var formObj;
	
	if ( ctlID == undefined) 
	{
		formObj = document.forms(0).all;
	}
	else
	{
		_isValidated = true;
		
		var ctl = document.getElementById(ctlID);
		
		if ( ctl == undefined )
		{
			alert( ctlID + " ÄÁÅ×ÀÌ³Ê ÄÁÆ®·ÑÀ» Ã£À»¼ö ¾ø½À´Ï´Ù.");
			return false;
		}
		else
		{
			formObj = ctl.all;
			document.forms[0].onsubmit = '';
		}
	}
	
	for(var i=0; i<formObj.length; i++)
	{
	
		if ( formObj(i).id != "" && formObj(i).id != null && formObj(i).Group != null)
		{
			var obj = formObj(i);
			if (document.activeElement.id != null && IsGroup(obj) )
			{
				//==========================================================
				//RadioButton°ú ¿¬°èµÇ¾î ÀÖÀ» °æ¿ì¿¡´Â RadioButtonÀÌ CheckµÇ¾î ÀÖÀ» °æ¿ì¿¡¸¸ 
				//ValidationÃ³¸®
				//==========================================================
				if (obj.RequiredControl != null && obj.RequiredControl != "")
				{
					if (document.forms(0).all(obj.RequiredControl).checked == false)
						continue;
				}		   			    
			   
				var Linker = obj.LinkControls;
				//==========================================================
				//Required Handling
				//==========================================================
				if (obj.Required != null && obj.Required == "True")
				{	
					var msg = "Àº(´Â) ÇÊ¼öÇ×¸ñ ÀÔ´Ï´Ù.";				
					if (! CheckRequired(obj, obj.Description + msg) )
					{				
						return false;			
					}

					//Link Controls - Required
					if (Linker != "" && Linker != null)
					{
						var linked = Linker.split(':')
						for(var ii=0; ii<linked.length; ii++)
						{
							var linkObj = document.forms[0].item(linked[ii]);
							if (! CheckRequired(linkObj, obj.Description + msg) )
								return false;				
						}
					}			
				}
				
				//==========================================================
				//Specification Type Handling
				//==========================================================
				if (obj.RegType != null && obj.RegType != "None" && obj.value.trim() != "")
				{
					var exp_str = "";
					var exp_msg = obj.Description + " Çü½ÄÀÌ Àß¸øµÇ¾ú½À´Ï´Ù.";
					var objValue = obj.value.trim();
					
					//Link Controls - Regular Expression
					objValue = RegularExpLinker(obj);					
					
					switch(obj.RegType)
					{
						//------------------------------------------------------------------------------------------------
						//Date Type Check
						//Ex) 2003/08/12 or 20030812
						case "Date" :								
								if (! CheckDate(obj, objValue) )
									return false;
								
								if (obj.EndDateControl != "" && obj.EndDateControl != null)
								{
									var EndObj = document.forms(0).all(obj.EndDateControl);
									var EndObjLinker = EndObj.LinkControls;		
									var EndObjValue = EndObj.value.trim();									
									
									//Link Controls - Regular Expression 
									EndObjValue = RegularExpLinker(EndObj);			
					
									if (! CheckDate(EndObj, EndObjValue) )
										return false;
								
									sd = obj.value.replace(DATE_SEPARATOR,'/')
									ed = EndObj.value.replace(DATE_SEPARATOR,'/')
								
									var StartDate = new Date(sd.replace(DATE_SEPARATOR,'/'));
									var EndDate = new Date(ed.replace(DATE_SEPARATOR,'/'));
									
									if ((EndDate-StartDate) < 0)
										return AlertMessage(EndObj, "¿Ã¹Ù¸¥ ±â°£À» ÀÔ·ÂÇÏ¼¼¿ä.");
								}
						break;
						//------------------------------------------------------------------------------------------------
						//JuminNo Type Check
						//Ex) 123456-1234567 or 1234561234567
						case "JuminNo" :								
								exp_str = "\\d{6}" + obj.Separator +"?\\d{7}";
								exp_msg += " ¿¹)123456" + obj.Separator +"1234567";				
								
								if (!CheckMatch(obj, objValue, exp_str, exp_msg))
									return false;
								
								var sum = 0;
								var psNumber = objValue.replace(obj.Separator, '');

								for (idx = 0, jdx=2; jdx < 10; idx++, jdx++)
								{
									sum = sum + ( psNumber.charAt(idx) * jdx );
								}
								for (idx = 8, jdx=2; jdx < 6; idx++, jdx++)
								{
									sum = sum + ( psNumber.charAt(idx) * jdx );
								}

								var nam = sum % 11;
								var checkDigit = 11 - nam ;
								checkDigit = (checkDigit >= 10 ) ? checkDigit-10:checkDigit;

								if (psNumber.charAt(12) != checkDigit)
									return AlertMessage(obj, exp_msg);
						break;
						//------------------------------------------------------------------------------------------------
						//Account Type Check					
						case "AccountNo" :
								exp_str = "";
								exp_msg = "";
								if (!CheckMatch(obj, objValue, exp_str, exp_msg))
									return false;
						break;
						//------------------------------------------------------------------------------------------------
						//E-Mail Type Check		
						//Ex) webmaster@uwin.co.kr			
						case "EMail" :
								exp_str = "\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
								exp_msg += " ¿¹)webmaster@uwin.co.kr";
								if (!CheckMatch(obj, objValue, exp_str, exp_msg))
									return false;							
						break;
						//------------------------------------------------------------------------------------------------
						//StudentNo Type Check					
						case "StuNo" :
								exp_str = "";
								exp_msg = "";
								if (!CheckMatch(obj, objValue, exp_str, exp_msg))
									return false;							
						break;
						//------------------------------------------------------------------------------------------------
						//Employee Type Check					
						case "EmpNo" :
								exp_str = "";
								exp_msg = "";
								if (!CheckMatch(obj, objValue, exp_str, exp_msg))
									return false;							
						break;
						//------------------------------------------------------------------------------------------------
						//Telephone Type Check
						case "PhoneNo" :
								exp_str = "0\\d{1,3}[-)]\\d{3,4}[-]\\d{4}";
								exp_msg += " ¿¹)012-123-1234 ¶Ç´Â 052)123-1234";
								if (!CheckMatch(obj, objValue, exp_str, exp_msg))
									return false;							
						break;
						//------------------------------------------------------------------------------------------------
						//PostCode Type Check
						case "PostNo" :
								exp_str = "\\d{3}-\\d{3}";
								exp_msg += " ¿¹)123-123";
								if (!CheckMatch(obj, objValue, exp_str, exp_msg))
									return false;
						break;
						//------------------------------------------------------------------------------------------------
						//Number Type Check
						case "Numeric" :
							
								if (obj.Cipher != 0)
								{
									exp_str = "\\d{1,}([.]\\d{1," + obj.Cipher +"})*";
									exp_msg = "¼ýÀÚ¿Í ¼Ò¼öÁ¡¸¸ ÀÔ·ÂÇÏ¼Å¾ß ÇÕ´Ï´Ù.";
								}
								else
								{								
									exp_str = "\\d+";
									exp_msg = "¼ýÀÚ¸¸ ÀÔ·ÂÇÏ¼Å¾ß ÇÕ´Ï´Ù.";
								}
								var tmp = objValue.split(',');
								objValue=tmp.join("");
								
								if (!CheckMatch(obj, objValue, exp_str, exp_msg))
									return false;
						break;
						//------------------------------------------------------------------------------------------------
						//Alpabetic Type Check
						case "Alpha" :
								exp_str = "[a-zA-Z]+";
								exp_msg = "¹®ÀÚ¸¸ ÀÔ·ÂÇÏ¼Å¾ß ÇÕ´Ï´Ù.";
								if (!CheckMatch(obj, objValue, exp_str, exp_msg))
									return false;
						break;
					}
				}
								
				if (obj.RegType == "Date" && obj.value.trim() == "") 
				{
					if (obj.EndDateControl != "" && obj.EndDateControl != null)
					{
						var EndObj = document.forms(0).all(obj.EndDateControl);
						
						if (EndObj.value.trim() != "")
						{						
							if (! CheckDate(obj, objValue) )
								return false;
						}
					}
				}

				// ExTextBox ¿¡ ´ëÇØ¼­¸¸ Ã³¸® by À±È£¼±/2003-01-06
				if ( obj.type == "text" )
				{			
					//==========================================================
					//Length Handling
					//==========================================================
					if (obj.value.trim() != "")
					{
						//FixLength Check		
						if (obj.FixLength != null && obj.FixLength != "0")
						{
							if(obj.value.length != obj.FixLength)
							{
								var exp_msg = obj.Description + "Àº(´Â) ¹Ýµå½Ã " + obj.FixLength + "ÀÚ¸® ÀÌ¾î¾ß ÇÕ´Ï´Ù."					
								return AlertMessage(obj, exp_msg);
							}
						}		
						else 
						{
							//MinLength Check		
							if (obj.MinLength != null && obj.MinLength != "0")
							{
								if(obj.value.length < obj.MinLength)
								{
									var exp_msg = "¹Ýµå½Ã " + obj.MinLength + "ÀÚ¸® ÀÌ»óÀÌ¾î¾ß ÇÕ´Ï´Ù."					
									return AlertMessage(obj, exp_msg);
								}
							}		
						}			
					}//if 
					//*************************************************************************
				}
			}
		}
	}
	return true;
} 

// µð¹ö±ë ¸ðµåÀÏ °æ¿ì¿¡¸¸ alert ¸¦ ¶ç¿î´Ù.
/*******************************************/
// µð¹ö±ë ¸ðµåÀÏ °æ¿ì¿¡¸¸ °æ°íÃ¢À» ¶ç¿ò
function DebugAlert(message)
{
	if ( GetIsDebug() )
	{
		alert(message);
	}
}
// µð¹ö±ë ¸ðµå ¼³Á¤
function SetIsDebug(isDebug)
{
	_isDebug = isDebug;
}
// µð¹ö±ë ¸ðµå °¡Á®¿È
function GetIsDebug()
{
	return _isDebug;
}
/********************************************/

function IsGroup(obj)
{
	// ´ÙÁß ±×·ì Çã¿ë Ã³¸® Ãß°¡ tbr_Save;tbr_Etc1 ½ÄÀ¸·Î Group ÁöÁ¤
	DebugAlert("Group : " + obj.Group);
	var groups = obj.Group.split(";");		
	var isGroup = false;
	DebugAlert(groups.length);

	for(var i = 0; i < groups.length; i++)
	{
		if ( groups[i].toUpperCase() == document.activeElement.id.toUpperCase()	)
		{
			DebugAlert(isGroup);
			isGroup |= true;		 // ÇÏ³ª¶óµµ ¸ÂÀ¸¸é µÊ								
		}							
	}
	return isGroup;
}

//Check RegularExpression
function CheckMatch(obj, objValue, exp_str, exp_msg)
{
	var r = new RegExp(exp_str, "g");
	var matches = r.exec(objValue);
	//alert(matches);
	if (matches == null  || objValue != matches[0]) 
	{
		if (matches != null)
		{
			if (obj.Cipher != null && obj.Cipher != 0)
			{
				var cipherValue = objValue.split('.');
				if (obj.Cipher != cipherValue[1].length)
				{
					exp_msg = "¼Ò¼öÁ¡ ÀÚ¸®¼ö´Â " + obj.Cipher + "ÀÚ¸® ÀÌ¾î¾ß ÇÕ´Ï´Ù.";
					return AlertMessage(obj, exp_msg);	
				}
			}
		}
		return AlertMessage(obj, exp_msg);	
	}
	return true;
}

//Check Required - Type 
function CheckRequired(obj, msg)
{
	if ( obj.tagName == "TEXTAREA" ) // TextArea ¼öÁ¤
	{
			if(obj.value.trim() =="")
					return AlertMessage(obj, msg);	
	}
	else
	{
		switch(obj.type)
		{
			case "text" : 
					if(obj.value.trim() =="")
						return AlertMessage(obj, msg);	
			break;
			
			case "select-one" :
					if (obj.value.trim() == "")
						return AlertMessage(obj, msg);		
						
			break;

			default : 
					//RadioButtonList, CheckBoxList - Default. 
					//(RadioButtonList¿Í CheckBoxList´Â typeÀ» ¾Ë¼ö°¡ ¾øÀ½- <table>ÅÂ±×·Î ³ªÅ¸³²)
					var result;
					
					var count = document.forms(0).all(obj.id).length;
					if ( obj.type ==  "ExRadioButtonList" )
					{
						count--;
					} 
					for(var i=0; i< count; i++)
					{
						if (document.forms(0).all(obj.id + "_" + i).checked == true)
							return true;
						else
							result = false;					
					}				
					return AlertMessage(obj, msg);
			break;	
		}
	}
	return true;
}

//Error Message
function AlertMessage(obj, Msg)
{
	var addMsg;
	addMsg = obj.Description;
	if (Msg.indexOf(addMsg) == -1)
		alert(obj.Description + "Àº(´Â) " + Msg);
	else
		alert(Msg);
		
	try {
		obj.focus();
		//Exception------------------
		if (obj.type == "text")
			obj.select();
		//-----------------------------
	}
	catch (e)   
	{
		// ¿¹¿ÜÃ³¸®´Â ¾Æ¹« µ¿ÀÛµµ ÇÏÁö ¾ÊÀ½.
	}
	return false;	
}

//Enter Key¸¦ ´­·¶À»¶§ ´ÙÀ½ÄÁÆ®·Ñ·Î Æ÷Ä¿½º ÀÌµ¿
function EnterKeyPress(nextObj)
{
	try
	{
		if (event.keyCode == 13) 
		{ 
			//2009.07.20 DataGrid ¶Ç´Â DataListÀÇ ÅÛÇÃ¸´Ä®·³ ÅØ½ºÆ®¹Ú½ºÀÇ ¸ÖÆ¼¶óÀÎ ¼Ó¼ºÀÌ µ¿ÀÛÇÏÁö ¾Ê¾Æ¼­ »èÁ¦Ã³¸®ÇÔ.			
			//var ctl = document.getElementById(nextObj);
			//if ( ctl == null )
			//{
				//alert(nextObj + "¶ó´Â ID¸¦ °¡Áø ÄÁÆ®·ÑÀÌ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù.");
			//}
			//else
			//{
			//	ctl.focus();
			//}
			//return false; 
			return true;
		}
		else
			return true;
	}
	catch(x)
	{
		
	}
}

function RegularExpLinker(Obj)
{
	var objValue = Obj.value.trim();
	//¿¬°áµÈ ÄÁÆ®·Ñ Çü½ÄÀÎ °æ¿ì Regular Expression Ã³¸®
	if (Obj.LinkControls != "" && Obj.LinkControls != null)
	{
		var linked = Obj.LinkControls.split(':')
		for(var i=0; i<linked.length; i++)
		{
			var linkObj = document.forms[0].item(linked[i]);
			objValue += Obj.Separator + linkObj.value.trim();
		}
	}
	return objValue;
}

//³¯Â¥ Validate Check
function CheckDate(chkObj, objValue)
{
	var exp_str = "";
	var exp_msg = chkObj.Description + " Çü½ÄÀÌ Àß¸øµÇ¾ú½À´Ï´Ù.";
	var objValue = chkObj.value.trim();
	
	exp_str = "\\d{4}"+chkObj.Separator+"?[0-1]?[0-9]"+chkObj.Separator+"?[0-3]?[0-9]{1}";
	exp_msg += " ¿¹)2003"+chkObj.Separator+"01"+chkObj.Separator+"01";								
	if(! CheckMatch(chkObj, objValue, exp_str, exp_msg))
		return false;

	//Àß¸øµÈ ³¯Â¥ Çü½ÄÀ» °Å¸¥´Ù.
	var iYear	= null;
	var iMonth	= null;
	var iDay	= null;
	var iDaysInMonth = null;
	var aDaysInMonth = new Array(31,28,31,30,31,30,31,31,30,31,30,31);

	if (chkObj.Separator != "") {
		var sDate = objValue.split(chkObj.Separator)
		iYear		= sDate[0];
		iMonth	= sDate[1];
		iDay		= sDate[2];
	}
	else {
		iYear		= objValue.substring(0, 4);
		iMonth	= objValue.substring(4, 6);
		iDay		= objValue.substring(6, 8);
	}

	iDaysInMonth = (iMonth != 2) ? aDaysInMonth[iMonth-1] : (( iYear%4 == 0 && iYear%100 != 0 || iYear % 400==0 ) ? 29 : 28 );
	if( iDay==null || iMonth==null || iYear==null  || iMonth > 12 || iMonth < 1 || iDay < 1 || iDay > iDaysInMonth )
		return AlertMessage(chkObj, exp_msg);	
	
	return true;
}

//*****************************************************
//Date Masking (YYYY-MM-DD)
//*****************************************************
function DateMask(DateObj)
{
	//FilterOnMask(DateObj);

	var DateValue=DateOffMask(DateObj);
	DateObj.value=DateOnMask(DateValue, DateObj);
}
//-----------------------------------------------
function DateOffMask(DateObj)
{
	var tmp=DateObj.value.split(DateObj.Separator);
 	tmp=tmp.join("");
	return tmp;
}
//-----------------------------------------------
function DateOnMask(DateValue, DateObj)
{
	var table = new Array(3);
	table[0] = 4; table[1] = 2; table[2] = 2;
	
	if(DateValue.length > 3){
 		var c=0; var k=0;
 		var myArray=new Array();
 		for(var j=0; j<table.length; j++)
 		{
   			for(var i=k;i<DateValue.length;i=i+table[j])
   			{
   				k = k + table[j];
   				myArray[c++]=DateValue.substring(i,i+table[j]);
   				break;
  	 		}
  	 	}
  	 	DateValue = myArray.join(DateObj.Separator);
 	}
	return DateValue;
}

//*****************************************************
//Currency Masking (0,000,000)
//*****************************************************
function CurrencyMask(CurrencyObj)
{
	//FilterOnMask(CurrencyObj);

	var CurrencyValue=CurrencyOffMask(CurrencyObj.value);
	CurrencyObj.value=CurrencyOnMask(CurrencyValue);
}
//-----------------------------------------------
function CurrencyOffMask(CurrencyValue){
	var tmp=CurrencyValue.split(",");
 	tmp=tmp.join("");
	return tmp;
}
//-----------------------------------------------
function CurrencyOnMask(CurrencyValue)
{
	var tmpH;
	var tmp;
	var tmp1 = ''; // Á¤¼öºÎºÐ °ª
	var tmp2 = ''; // ¼Ò¼öºÎºÐ °ª
	var flag= true;
	if(CurrencyValue.charAt(0)=="-"){//À½¼ö°¡ µé¾î¿ÔÀ»¶§ '-'¸¦ »©°íÀû¿ëµÇ°Ô..
		tmpH=CurrencyValue.substring(0,1);
		CurrencyValue=CurrencyValue.substring(1,CurrencyValue.length);
	}	//me.indexOf('-')
	
	// . ¼Ò¼öÁ¡Àº Mask Ã³¸®¾ÈÇÏµµ·Ï ÇÔ
	for(i=0; i < CurrencyValue.length;i++)
	{
        if('.' == CurrencyValue.charAt(i)){
            flag= false;
            continue;
        }
        if(flag==true)
            tmp1 += CurrencyValue.charAt(i);
        else
            tmp2 += CurrencyValue.charAt(i);
    }
   
	CurrencyValue = tmp1;
	
 	if(CurrencyValue.length > 3){
 		var c=0;
 		var myArray=new Array();
   		for(var i=CurrencyValue.length;i>0;i=i-3){
    			myArray[c++]=CurrencyValue.substring(i-3,i);
  	 	}
   		myArray.reverse();
  	 	CurrencyValue=myArray.join(",");
 	}
 	
 	if(tmpH){
 	 	CurrencyValue=tmpH+CurrencyValue;
 	}
 	
 	if ( tmp2.length > 0 || flag == false)
 	{
 		tmp2 = "." + tmp2;
 	}
 	
 	CurrencyValue = CurrencyValue + tmp2;
 	
	return CurrencyValue
}

String.prototype.trim = function()
{
	return this.replace(/(^\s*)|(\s*$)/g, "");
}

/*
AccountNo,	//°èÁÂ¹øÈ£
Alpha,			//¹®ÀÚ
Date,				//³¯Â¥Çü
EMail,			//E-MailÁÖ¼Ò
EmpNo,			//»ç¹ø
JuminNo,		//ÁÖ¹Îµî·Ï¹øÈ£
None,			//°Ë»çÇÏÁö ¾ÊÀ½
Numeric,		//¼ýÀÚ
PhoneNo,		//ÀüÈ­¹øÈ£
PostNo,			//¿ìÆí¹øÈ£
StuNo			//ÇÐ¹ø
*/
function FilterOnMask(obj){
	
  var sFilter ;

  switch(obj.RegType){     	
    case "Date" :
	case "EmpNo":
		sFilter="[0-9]";
		break;
    case "JuminNo" : 	
	case "PostNo":
		sFilter="[0-9-]";
		break;
    case "PhoneNo":
		sFilter="[0-9)-]";
		break;
    case "Numeric" :
		if ( obj.Cipher != 0 )
		{
			sFilter="[-.0-9]";
		}
		else
		{
			sFilter="[0-9]";
		}
        break;
    case "Alpha" :
		sFilter="[a-zA-Z]";
		break;
  }	
 
  if(sFilter){    
      var sKey=String.fromCharCode(event.keyCode);    
      var re=new RegExp(sFilter);      
      if(sKey!="\r" && !re.test(sKey)) event.returnValue=false;    
      
   }
} 

function FilterOnKeyPress()
{
	try
	{
		var obj = event.srcElement;
		if ( obj.tagName == "INPUT" && obj.type == "text" && obj.RegType != null && obj.RegType != "")
		{	
			FilterOnMask(obj);
		} 
	}
	catch(x)
	{
		alert(x.message);
	}
	
}

document.onkeypress = FilterOnKeyPress;
