/******************************************************************************
 * Filename     : InputCheck.js
 * Function     : JavaScript function to check input value
 * Comment      :
 * History      : 2003/05/21, v1.0, Created
 * Version      : 1.0
 *****************************************************************************/

	/**
	* Function      : Check Email
	*               :
	* @param        : formName    - Check Form Name
	*               : item        - Check Field Name
	* @return       : boolean
	*/
	function isEmail(formName, item, msg)
	{
		var form = document.forms[formName];
		var value = null;

		value = trimmed(form[item].value);

		// regular expression
		var supported = 0;
		if (window.RegExp)
		{
			var tempStr = "a";
			var tempReg = new RegExp(tempStr);
			if (tempReg.test(tempStr)) supported = 1;
		}

		if (!supported)
			return (value.indexOf(".") > 2) && (value.indexOf("@") > 0);

		var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
		var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$");

		if (form[item].value.length >0 && !(!r1.test(value) && r2.test(value)))
		{
			alert( form[item].alt + " : " + msg);
			form[item].focus();
			return false;
		}

		return true;
	}

	/**
	* Function      : Check Essensial Item
	*               :
	* @param        : formName    - Check Target Form Name
	*               : items       - Check Target Field Name Array
	* @return       : boolean
	*/
	function checkEssentialInput(formName, items, msg)
	{
		var form = document.forms[formName];
		var value = null;
		var eleName = null;

		for(var i=0; i<items.length; i++)
		{
		value = trimmed(form[items[i]].value);

			if(value == "" )
			{
				eleName = form[items[i]].alt;

				alert(eleName + " : " + msg);
				form[items[i]].focus();
				return false;
		}
		}

		return true;
	}

	/**
	* Function      : Check Enssensial Item
	*               :
	* @param        : formName    - Check Form Name
	*               : items       - Check Field Name Array
	*               : idx         - Array Index
	* @return       : boolean
	*/
	function checkEssentialInputs(formName, items, idx, msg)
	{
		var form = document.forms[formName];
		var value = null;
		var eleName = null;

		for(var i=0; i<items.length; i++)
		{
			value = trimmed(form[items[i]][idx].value);

			if(value == "" )
			{
				eleName = form[items[i]][idx].alt;
				alert(eleName + " : " + msg);
				form[items[i]][idx].focus();
				return false;
			}
		}

		return true;
	}


	/**
	* Function      : Check Date
	*               :  Ex) 20020410
	* @param        : formName    - Check Form Name
	*               : fields      - Check Field Name Array
	* @return       : boolean
	*/
	function checkDate(formName, fields, msg)
	{
		var objForm = document.forms[formName];

		for(var i=0; i<fields.length ; i++)
		{
			if(objForm[fields[i]].value.length >0 && !isValidDate(objForm[fields[i]].value))
			{
				alert(objForm[fields[i]].alt + " : " + msg);
				objForm[fields[i]].focus();
				return false;
			}
		}

		return true;
	}

	/**
	* Function      : Check Date
	*               : Ex) 20020410
	*               :
	* @param        : formName    - Check Form Name
	*               : fields      - Check Field Name Array
	*               : idx         - Array Index
	* @return       : boolean
	*/
	function checkDates(formName, fields, idx, msg)
	{
		var objForm = document.forms[formName];

		for(var i=0; i<fields.length ; i++)
		{
			if(objForm[fields[i]][idx].value.length >0 && !isValidDate(objForm[fields[i]][idx].value))
			{
				alert(objForm[fields[i]][idx].alt + " : " + msg);
				objForm[fields[i]][idx].focus();
				return false;
			}
		}

		return true;
	}


	/**
	* Function      : Check Date
	*               : Ex) 2002, 04, 10
	* @param        : formName    - Check Form Name
	*               : fields      - Check Field Name Array, field2, field3
	* @return       : boolean
	*/
	function checkSplitDate(formName, fields)
	{
	    var objForm = document.forms[formName];

	    for(var i=0; i<fields.length ; i++)
	    {

	        var ymd = objForm[fields[i]].value + objForm[fields[i]+"2"].value + objForm[fields[i]+"3"].value;

	        if(ymd.length >0 && !isValidDate(ymd))
	        {
	            objForm[fields[i]].focus();
	            return false;
	        }
	    }

	    return true;
	}

	/**
	* Function      : Check Date
	*               : ex) 2002, 04, 10
	*               :
	* @param        : formName    - Check Form Name
	*               : fields      - Check Field Name Array, field2, field3
	*               : idx         - Array Index
	* @return       : boolean
	*/
	function checkSplitDates(formName, fields, idx)
	{
		var objForm = document.forms[formName];

		for(var i=0; i<fields.length ; i++)
		{
			var ymd = objForm[fields[i][idx]].value + objForm[fields[i][idx]+"2"].value + objForm[fields[i][idx]+"3"].value;

			if(ymd.length >0 && !isValidDate(ymd))
			{
				objForm[fields[i]][idx].focus();
				return false;
			}
		}

		return true;
	}


	/**
	* Function      : Check DateTime
	*               : ex) 20020410120210
	* @param        : formName    - Check Form Name
	*               : fields      - Check Field Name Array
	* @return       : boolean
	*/
	function checkDateTime(formName, fields)
	{
		var objForm = document.forms[formName];

		for(var i=0; i<fields.length ; i++)
		{
			if(objForm[fields[i]].value.length >0 && !isValidDate(objForm[fields[i]].value))
			{
				objForm[fields[i]].focus();
				return false;
			}
		}

		return true;
	}

	/**
	* Function      : Check Number
	* @param        : formName    - Check Form Name
	*               : field      - Check Field Name not Array
	* @return       : boolean
	*/
	function checkNumber(formName, field){
		var objForm = document.forms[formName];
		var x = objForm[field].value;

		var anum=/(^\d+$)|(^\d+\.\d+$)/;
		if (anum.test(x))
			testResult = true;
		else{
			testResult = false;
		}
		return (testResult)
	}

	/**
	* Function      : Check Numbers
	* @param        : formName    - Check Form Name
	*               : fields      - Check Field Name Array
	* @return       : boolean
	*/
	var numFormatMsg = "¼ýÀÚ Çü½ÄÀ¸·Î ÀÔ·ÂÇÏ½Ê½Ã¿À.";
	var minNumMsg = "1 ÀÌ»óÀÇ °ªÀ» ÀÔ·ÂÇÏ½Ê½Ã¿À.";

	function checkNumbers(formName, fields, msg)
	{
		var objForm = document.forms[formName];
		for(var i=0; i<fields.length ; i++)
		{
			var decimalIdx = (objForm[fields[i]].value).indexOf(".");
			if(decimalIdx != -1)
			{
				alert(objForm[fields[i]].alt + " : " + numFormatMsg);
				objForm[fields[i]].focus();
				return false;
			}

			if(objForm[fields[i]].value.length>0)
			{
				if(isNaN(objForm[fields[i]].value))
				{
					alert(objForm[fields[i]].alt + " : " + numFormatMsg);
					objForm[fields[i]].focus();
					return false;
				}

				else if(objForm[fields[i]].value <= 0)
				{
					alert(objForm[fields[i]].alt + " : " + minNumMsg);
					objForm[fields[i]].focus();
					return false;
				}
			}
		}

		return true;
	}


	/**
	* Function      : Check Number
	*               :
	* @param        : formName    - Check Form Name
	*               : fields      - Check Field Name Array
	*               : idx         - Array Index
	* @return       : boolean
	*/
	function checkNumbers(formName, fields, idx, msg)
	{
		var objForm = document.forms[formName];
		for(var i=0; i<fields.length ; i++)
		{
			var decimalIdx = (objForm[fields[i]][idx].value).indexOf(".");
			if(decimalIdx != -1)
			{
				alert(objForm[fields[i]][idx].alt + " : " + numFormatMsg);
				objForm[fields[i]][idx].focus();
				return false;
			}

			if(objForm[fields[i]][idx].value.length>0)
			{
				if(isNaN(objForm[fields[i]][idx].value))
				{
					alert(objForm[fields[i]][idx].alt + " : " + numFormatMsg);
					objForm[fields[i]][idx].focus();
					return false;
				}

				else if(objForm[fields[i]][idx].value <= 0)
				{
					alert(objForm[fields[i]][idx].alt + " : " + minNumMsg);
					objForm[fields[i]][idx].focus();
					return false;
				}
			}

		}

		return true;
	}


	/**
	* Function      : Check Date
	* @param        : startDate   - Check Start Date
	*               : endDate     - Check End Date
	* @return       : boolean
	*/
	function checkPeriodDate(startDate, endDate)
	{
		return true;
	}


	/**
	* Function      : Check Dash("-") Number
	* @param        : formName    - Check Form Name
	*               : fields      - Check Field Name Array
	* @return       : boolean
	*/
	function checkDashNum(formName, fields, msg)
	{
		var objForm = document.forms[formName];

		for(var i=0; i<fields.length ; i++)
		{
			if(objForm[fields[i]].value.length>0 && !isValidDashNum(objForm[fields[i]].value))
			{
				alert(objForm[fields[i]].alt + " : " + msg);
				objForm[fields[i]].focus();
				return false;
			}
		}

		return true;
	}

	/**
	* Function      : Check Dash("-") Number
	*               :
	* @param        : formName    - Check Form Name
	*               : fields      - Check Field Name Array
	*               : idx         - Array Index
	* @return       : boolean
	*/
	function checkDashNums(formName, fields, idx, msg)
	{
		var objForm = document.forms[formName];

		for(var i=0; i<fields.length ; i++)
		{
			if(objForm[fields[i]][idx].value.length>0 && !isValidDashNum(objForm[fields[i]][idx].value))
			{
				alert(objForm[fields[i]][idx].alt + " : " + msg);
				objForm[fields[i]][idx].focus();
				return false;
			}
		}

		return true;
	}


	/**
	* Function      : Check date
	* @param        : date      - Check date
	* @return       : boolean
	*/
	function isValidDate(date)
	{
		var year, month, day;

		if(date.length<8) return false;
		if(isNaN(date)) return false;
		if(date.length<8) return false;

		year    = date.substring(0,4);
		month    = date.substring(4,6);
		day        = date.substring(6);

		if(month==0 || month>12) return false;

		if(day==0 || day>getDaysInMonth(year, month)) return false;

		return true;
	}


	/**
	* Function      : Check datetime
	* @param        : dateTime  - Check datetime
	* @return       : boolean
	*/
	function checkDateTime(dateTime)
	{
		var hour, minute, seconds;

		if(dateTime.length<14) return false;
		if(isNaN(dateTime)) return false;

		if(!isValidDate(dateTime.substring(0,8))) return false;

		hour    = dateTime.substring(8,10);
		minute    = dateTime.substring(10,12);
		seconds = dateTime.substring(12,14);

		if(hour>23) return false;
		if(minute>59) return false;
		if(seconds>59) return false;

		return true;
	}


	/**
	* Function      : Check
	* @param        : year      -
	*               : month     -
	* @return       : days      -
	*/
	function getDaysInMonth(year,month)
	{
		var days;
		if (month==1 || month==3 || month==5 || month==7 || month==8 ||
			month==10 || month==12)  days=31;
		else if (month==4 || month==6 || month==9 || month==11) days=30;
		else if (month==2)
		{
			if (leapYear (year)==1)  days=29;
			else days=28;
		}

		return (days);
	}


	/**
	* Function      : Check Yun Year
	* @param        : year      -
	*               : month     -
	* @return       :
	*/
	function leapYear (Year)
	{
		if (((Year % 4)==0) && ((Year % 100)!=0) || ((Year % 400)==0))
			return (1);
		else
			return (0);
	}


	/**
	* Function      : Check Dash("-")Number
	* @param        : value       - Check data
	* @return       : boolean
	*/
	function isValidDashNum(value)
	{
		var tmp = "0123456789-";
		var cnt = value.length;

		for(var i=0; i < cnt; i++)
		{
			if(tmp.indexOf(value.charAt(i)) < 0 ) return false;
		}

		return true;
	}


	/**
	* Function      : Check NUmber & English
	* @param        : value       - Check data
	* @return       : boolean
	*/
	function isValidNumEngChar(value)
	{
		var tmp = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
		var cnt = value.length;

		for(var i=0; i < cnt; i++)
		{
			if(tmp.indexOf(value.charAt(i)) < 0 ) return false;
		}

		return true;
	}


	/**
	* Function      : Check restricted special charactor (' and ")
	* @param        : formName    - Check Form Name
	*               : fields      - Check Field Name Array
	* @return       : boolean
	*/
	function checkSpecialChar(formName, fields, msg)
	{
		var objForm = document.forms[formName];
		for (var i=0; i<fields.length ; i++)
		{
			if ( objForm[fields[i]].value.search("\['\"\]") >= 0 )
			{
				alert(objForm[fields[i]].alt + " : " + msg);
				objForm[fields[i]].focus();
				return false;
			}
		}

		return true;
	}

	/**
	* Function      : Replace restricted special charactor (' and " ==> `)
	* @param        : value     - String
	* @return       : replaced string
	*/
	function replaceSpecialChar(value)
	{
		value = value.replace(/\"|\'/g, "`");
		return value;
	}

	/**
	* Function      : Erase space
	* @param        : value
	* @return       :
	*/
	function trimmed(value)
	{
		value = value.replace(/^\s+/, "");  // remove leading white spaces
		value = value.replace(/\s+$/g, ""); // remove trailing while spaces
		return value;
	}

	/**
	* Function      : Check Menu
	* @param        : compare1
	* @return       : boolean
	*/
	function chkUsePwer(compare1, compare2)
	{

		if(compare1 != compare2)
		{
			return false;
		}

		return true;
	}

	function deleteChar(str, the)
	{
		var dest = "";
		for(i = 0; i < str.length; i++)
		{
			var tmp = str.charAt(i)
			if(tmp != the)
			{
				dest += tmp;
			}
		}
		return dest;
	}

	function getByteLen(input)
	{
		var byteLength = 0;
		for (var inx = 0; inx < input.value.length; inx++)
		{
			var oneChar = escape(input.value.charAt(inx));

			if ( oneChar.length == 1 )
			{
				byteLength ++;
			}
			else if (oneChar.indexOf("%u") != -1)
			{
				byteLength += 2;
			}
			else if (oneChar.indexOf("%") != -1)
			{
				byteLength += oneChar.length/3;
			}
		}

		return byteLength;
	}

	/**
	* Function		: Check Length of TextArea
	* @param	: formName	- Form name
	* @param	: maxlen		- Max Length of TextArea
	* @param	: msg		- Notice message about over length
	* @return		: boolean
	*/
	function checkTxtAreaLength(formName, item, maxlen, msg)
	{
		var form = document.forms[formName];
		if ( getByteLen(form[item]) > maxlen )
		{
			alert(form[item].alt + " : ÇÑ±Û 2000ÀÚ (¿µ¹® 4000ÀÚ) " + msg);
			form[item].focus();
			return false;
		}
		else
			return true;
	}
