// 쿠키 설정
function setCookie( name, value, expiredays )
{
	var todayDate = new Date();
	todayDate.setDate( todayDate.getDate() + expiredays );
	document.cookie = name + "=" + escape( value ) + "; path=/; expires=" + todayDate.toGMTString() + ";"
}

// 필드 포커스 이동
function next_focus(vNum, vObj, vNextObj) {
	if(vObj.value.length == vNum){
		vNextObj.focus();
	}else{
		return;
	}
}

 /*************************************************************************
* xmlHttp 객체 리턴
*************************************************************************/
function rtn_xmlhttp()
{
	if (window.ActiveXObject) {
		xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
	}
	else if (window.XMLHttpRequest) {
		xmlHttp = new XMLHttpRequest();
	}

	return xmlHttp;
}

 /*************************************************************************
* // 크로스 브라우징을 위해 XML 파서 구분
*************************************************************************/
function getXMLDOMFromString(str) {
	var xmlDoc;
	if(window.ActiveXObject) {
		xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async="false";
		xmlDoc.loadXML(str);
	} else {
		var parser = new DOMParser();
		xmlDoc = parser.parseFromString(str, "text/xml");
	}

	return xmlDoc;
}

 /*************************************************************************
* // XML NodeValue NULL 체크
*************************************************************************/
function rtnNull(obj)
{
	if(obj != null)
		return obj.nodeValue;
	else
		return "";
}


 /*************************************************************************
* //공백을 모두 없앤다.
*************************************************************************/
function CheckSpaceAll(str){
	var index;
	var len;
	
	while(true) {
		index=str.value.indexOf(" ");
		if(index==-1) break;
		len=str.value.length;
		str.value = str.value.substring(0,index) + 
                str.value.substring((index+1),len);
	}	
	return str.value;
}

/*************************************************************************
* 숫자에 3자리마다 , 를 찍어서 반환
* @return : String
*************************************************************************/
String.prototype.money = function() {
	var num = this.trim();
	while((/(-?[0-9]+)([0-9]{3})/).test(num)) {
		num = num.replace((/(-?[0-9]+)([0-9]{3})/), "$1,$2");
	}
	return num;
}

/*#######################################################################################################

*  유효성 검사 함수 시작

#######################################################################################################*/

/*************************************************************************
* 정규식에 쓰이는 특수문자를 찾아서 이스케이프 한다.
* @return : String
*************************************************************************/

String.prototype.meta = function() {
	var str = this;
	var result = ""
	for(var i = 0; i < str.length; i++) {
		if((/([\$\(\)\*\+\.\[\]\?\\\^\{\}\|]{1})/).test(str.charAt(i))) {
			result += str.charAt(i).replace((/([\$\(\)\*\+\.\[\]\?\\\^\{\}\|]{1})/), "\\$1");
		}
		else {
			result += str.charAt(i);
		}
	}
	return result;
}

/*************************************************************************
// 정규식에 쓰이는 특수문자를 찾아서 이스케이프 한다.
// @return : String
*************************************************************************/
String.prototype.remove = function(pattern) {
	return (pattern == null) ? this : eval("this.replace(/[" + pattern.meta() + "]/g, \"\")");
}

/*************************************************************************
* 최소 최대 길이인지 검증
* str.isLength(min [,max])
* @return : boolean
*************************************************************************/
String.prototype.isLength = function() {
	var min = arguments[0];
	var max = arguments[1] ? arguments[1] : null;
	var success = true;
	if(this.length < min) {
		success = false;
	}
	if(max && this.length > max) {
		success = false;
	}
	return success;
}

/*************************************************************************
* 최소 최대 바이트인지 검증
* str.isByteLength(min [,max])
* @return : boolean
*************************************************************************/
String.prototype.isByteLength = function() {
	
	var min = arguments[0];
	var max = arguments[1] ? arguments[1] : null;
	var success = true;

	if(this.byte() < min) {
		success = false;
	}

	if(max && this.byte() > max) {
		success = false;
	}

	return success;

}

/*************************************************************************
* 공백이나 널인지 확인
* @return : boolean
*************************************************************************/

String.prototype.isNull = function() {
	var str = this.trim();
	for(var i = 0; i < str.length; i++) {
		if ((str.charAt(i) != "\t") && (str.charAt(i) != "\n") && (str.charAt(i)!="\r")) {
			return false;
		}
	}
	return true;
}

/*************************************************************************
* 숫자로 구성되어 있는지 학인
* arguments[0] : 허용할 문자셋
* @return : boolean
*************************************************************************/

String.prototype.isNum = function() {
	return (/^[0-9]+$/).test(this.remove(arguments[0])) ? true : false;
}

/*************************************************************************
* 영어만 허용 - arguments[0] : 추가 허용할 문자들
* @return : boolean
*************************************************************************/

String.prototype.isEng = function() {
	return (/^[a-zA-Z]+$/).test(this.remove(arguments[0])) ? true : false;
}

/*************************************************************************
* 숫자와 영어만 허용 - arguments[0] : 추가 허용할 문자들
* @return : boolean
*************************************************************************/

String.prototype.isEngNum = function() {
	return (/^[0-9a-zA-Z]+$/).test(this.remove(arguments[0])) ? true : false;
}

/*************************************************************************
* 한글 체크 - arguments[0] : 추가 허용할 문자들
* @return : boolean
*************************************************************************/

String.prototype.isKor = function() {
	return (/^[가-힣]+$/).test(this.remove(arguments[0])) ? true : false;
}

/*************************************************************************
// 주민번호 체크 - arguments[0] : 주민번호 구분자
// XXXXXX-XXXXXXX
// @return : boolean
*************************************************************************/

String.prototype.isJumin = function() {

	var arg = arguments[0] ? arguments[0] : "";

	var jumin = eval("this.match(/[0-9]{2}[01]{1}[0-9]{1}[0123]{1}[0-9]{1}" + arg + "[1234]{1}[0-9]{6}$/)");

	if(jumin == null) {
		return false;
	} else {
		jumin = jumin.toString().num().toString();
	}

	// 생년월일 체크
	var birthYY = (parseInt(jumin.charAt(6)) == (1 ||2)) ? "19" : "20";
	birthYY += jumin.substr(0, 2);
	var birthMM = jumin.substr(2, 2) - 1;
	var birthDD = jumin.substr(4, 2);
	var birthDay = new Date(birthYY, birthMM, birthDD);
	if(birthDay.getYear() % 100 != jumin.substr(0,2) || birthDay.getMonth() != birthMM || birthDay.getDate() != birthDD) {
		return false;
	}        

	var sum = 0;
	var num = [2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5]
	var last = parseInt(jumin.charAt(12));
	for(var i = 0; i < 12; i++) {
		sum += parseInt(jumin.charAt(i)) * num[i];
	}

	return ((11 - sum % 11) % 10 == last) ? true : false;

}

/*************************************************************************
* 외국인 등록번호 체크 - arguments[0] : 등록번호 구분자
* XXXXXX-XXXXXXX
* @return : boolean
*************************************************************************/

String.prototype.isForeign = function() {

	var arg = arguments[0] ? arguments[0] : "";
	var jumin = eval("this.match(/[0-9]{2}[01]{1}[0-9]{1}[0123]{1}[0-9]{1}" + arg + "[5678]{1}[0-9]{1}[02468]{1}[0-9]{2}[6789]{1}[0-9]{1}$/)");

	if(jumin == null) {
		return false;
	}
	else {
		jumin = jumin.toString().num().toString();
	}

	alert(jumin);

	// 생년월일 체크

	var birthYY = (parseInt(jumin.charAt(6)) == (5 || 6)) ? "19" : "20";
	birthYY += jumin.substr(0, 2);
	var birthMM = jumin.substr(2, 2) - 1;
	var birthDD = jumin.substr(4, 2);
	var birthDay = new Date(birthYY, birthMM, birthDD);

	if(birthDay.getYear() % 100 != jumin.substr(0,2) || birthDay.getMonth() != birthMM || birthDay.getDate() != birthDD) {
		return false;
	}

	if((parseInt(jumin.charAt(7)) * 10 + parseInt(jumin.charAt(8))) % 2 != 0) {
		return false;
	}

	var sum = 0;
	var num = [2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5]
	var last = parseInt(jumin.charAt(12));

	for(var i = 0; i < 12; i++) {
		sum += parseInt(jumin.charAt(i)) * num[i];
	}

	return (((11 - sum % 11) % 10) + 2 == last) ? true : false;
}    

/*************************************************************************
* 사업자번호 체크 - arguments[0] : 등록번호 구분자
* XX-XXX-XXXXX
* @return : boolean
*************************************************************************/

String.prototype.isBiznum = function() {

	var arg = arguments[0] ? arguments[0] : "";
	var biznum = eval("this.match(/[0-9]{3}" + arg + "[0-9]{2}" + arg + "[0-9]{5}$/)");

	if(biznum == null) {
		return false;
	}
	else {
		biznum = biznum.toString().num().toString();
	}

	var sum = parseInt(biznum.charAt(0));
	var num = [0, 3, 7, 1, 3, 7, 1, 3];
	for(var i = 1; i < 8; i++) sum += (parseInt(biznum.charAt(i)) * num[i]) % 10;
	sum += Math.floor(parseInt(parseInt(biznum.charAt(8))) * 5 / 10);
	sum += (parseInt(biznum.charAt(8)) * 5) % 10 + parseInt(biznum.charAt(9));
	return (sum % 10 == 0) ? true : false;

}

/*************************************************************************
* 법인 등록번호 체크 - arguments[0] : 등록번호 구분자
* XXXXXX-XXXXXXX
* @return : boolean
*************************************************************************/

String.prototype.isCorpnum = function() {
	var arg = arguments[0] ? arguments[0] : "";
	var corpnum = eval("this.match(/[0-9]{6}" + arg + "[0-9]{7}$/)");

	if(corpnum == null) {
		return false;
	}
	else {
		corpnum = corpnum.toString().num().toString();
	}

	var sum = 0;
	var num = [1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2]
	var last = parseInt(corpnum.charAt(12));

	for(var i = 0; i < 12; i++) {
		sum += parseInt(corpnum.charAt(i)) * num[i];
	}

	return ((10 - sum % 10) % 10 == last) ? true : false;
}

/*************************************************************************
* 이메일의 유효성을 체크
* @return : boolean
*************************************************************************/

String.prototype.isEmail = function() {
	return (/\w+([-+.]\w+)*@\w+([-.]\w+)*\.[a-zA-Z]{2,4}$/).test(this.trim());
}

/*************************************************************************
* 전화번호 체크 - arguments[0] : 전화번호 구분자
* @return : boolean
*************************************************************************/

String.prototype.isPhone = function() {
	var arg = arguments[0] ? arguments[0] : "";
	return eval("(/(02|0[3-9]{1}[0-9]{1})" + arg + "[1-9]{1}[0-9]{2,3}" + arg + "[0-9]{4}$/).test(this)");
}

/*************************************************************************
* 핸드폰번호 체크 - arguments[0] : 핸드폰 구분자
* @return : boolean
*************************************************************************/

String.prototype.isMobile = function() {
	var arg = arguments[0] ? arguments[0] : "";
	return eval("(/01[016789]" + arg + "[1-9]{1}[0-9]{2,3}" + arg + "[0-9]{4}$/).test(this)");
}


/*#######################################################################################################

*  유효성 검사 함수 끝

#######################################################################################################*/


/*#######################################################################################################

* 기본공통함수 시작

#######################################################################################################*/


/*************************************************************************
// 문자의 좌, 우 공백 제거
// @return : String
*************************************************************************/
String.prototype.trim = function() {
	return this.replace(/(^\s*)|(\s*$)/g, "");
}

/*************************************************************************
* 문자의 좌 공백 제거
* @return : String
*************************************************************************/
String.prototype.ltrim = function() {
	return this.replace(/(^\s*)/, "");
}

/*************************************************************************
* 문자의 우 공백 제거
* @return : String
*************************************************************************/
String.prototype.rtrim = function() {
	return this.replace(/(\s*$)/, ""); 
}

/*************************************************************************
* 정수형으로 변환
* @return : String
*************************************************************************/
String.prototype.int = function() {
	if(!isNaN(this)) {
		return parseInt(this);
	}
	else {
		return null;    
	}
}

/*************************************************************************
* 문자열의 byte 길이 반환
* @return : int
*************************************************************************/
String.prototype.byte = function() {
	var cnt = 0;

	for (var i = 0; i < this.length; i++) {
		if (this.charCodeAt(i) > 127)
			cnt += 2;
		else
			cnt++;
	}

	return cnt;
}


/*************************************************************************
* 숫자만 가져 오기
* @return : String
*************************************************************************/
String.prototype.num = function() {
	return (this.trim().replace(/[^0-9]/g, ""));
}

/*************************************************************************
* 숫자에 3자리마다 , 를 찍어서 반환
* @return : String
*************************************************************************/
String.prototype.money = function() {
	var num = this.trim();
	while((/(-?[0-9]+)([0-9]{3})/).test(num)) {
		num = num.replace((/(-?[0-9]+)([0-9]{3})/), "$1,$2");
	}
	return num;
}

/*************************************************************************
* 파일 확장자만 가져오기
* @return : String
*************************************************************************/
String.prototype.ext = function() {
	return (this.indexOf(".") < 0) ? "" : this.substring(this.lastIndexOf(".") + 1, this.length);
}

/*************************************************************************
* URL에서 파라메터 제거한 순수한 url 얻기
* @return : String
*************************************************************************/
String.prototype.uri = function() {
	var arr = this.split("?");
	arr = arr[0].split("#");
	return arr[0]; 
}

/*************************************************************************
* 입력값에 특정 문자(chars)가 있는지 체크 
* 특정 문자를 허용하지 않으려 할 때 사용 
* ex) if (form.name.containsChars("!,*&^%$#@~;")) { 
* alert!("이름 필드에는 특수 문자를 사용할 수 없습니다."); 
* } 
*************************************************************************/ 
String.prototype.containsChars = function(chars) { 
	for (var inx = 0; inx < this.length; inx++) { 
		if (chars.indexOf(this.charAt(inx)) != -1) 
			return true;
	} 
	return false; 
} 

/*************************************************************************
* 입력값이 특정 문자(chars)만으로 되어있는지 체크 
* 특정 문자만 허용하려 할 때 사용 
* ex) if (!form.blood.containsCharsOnly("ABO")) { 
* alert!("혈액형 필드에는 A,B,O 문자만 사용할 수 있습니다."); 
* } 
*************************************************************************/ 
String.prototype.containsCharsOnly = function(chars) { 
	for (var inx = 0; inx < this.length; inx++) { 
		if (chars.indexOf(this.charAt(inx)) == -1) 
			return false; 
	} 
	return true; 
}

/*************************************************************************
* 입력값에서 콤마를 없앤다. 
*************************************************************************/ 
String.prototype.removeComma = function() { 
	return this.replace(/,/gi,""); 
} 

/*************************************************************************
* 선택된 라디오버튼이 있는지 체크 
* input 은 라디오버튼 객체
* ex) <input type='radio' name='rdo'>
*		hasCheckedRadio(rdo);
*************************************************************************/ 
function hasCheckedRadio(rdo) { 
	if (rdo.length > 1) { 
		for (var inx = 0; inx < rdo.length; inx++) { 
			if (rdo[inx].checked) return true; 
		} 
	} else { 
		if (rdo.checked) return true; 
	} 
	return false; 
}

/*************************************************************************
* 선택된 체크박스가 있는지 체크
* input 은 체크박스 객체
* ex) <input type='checkbox' name='chk'>
*		hasCheckedBox(chk);
*************************************************************************/ 
function hasCheckedBox(chk) { 
	return hasCheckedRadio(chk); 
} 

/*************************************************************************
* Select Form 값 가져오기
*************************************************************************/
function getSelectValue(sset) {
	for (var i = 0; i < sset.length; i++ ) {
		if ( sset.options[i].selected ) {
			return (sset[i].value);
		}
	}
	return "";
}

 /*************************************************************************
* Radio Form 값 가져오기
*************************************************************************/
function getRadioValue(rset) {
	if (rset.length) {
		for (var i = 0; i < rset.length; i++ ) {
			if ( rset[i].checked ) {
				return (rset[i].value);
			}
		}
		return ""; 
	} else {
		if (rset.checked) {
			return rset.value;
		} else {
			return "";
		} 
	}
}

/*************************************************************************
* Checkbox Form 값 가져오기
*************************************************************************/
function getCheckboxValue(cset) {
	if (cset.length) {
		for (var i = 0; i < cset.length; i++ ) {
			if ( cset[i].checked ) {
				return (cset[i].value);
			}
		}
		return "";
	} else {
		if (cset.checked) {
			return cset.value;
		} else {
			return "";
		}
	}
}


/*************************************************************************
* Gray 창 띄우기
*************************************************************************/
GB_myShow = function(caption, url, /* optional */ width, height, callback_fn) {
    var options = {
        caption: caption,
        height: height || 500,
        width: width || 500,
        fullscreen: false,
        show_loading: false,
        callback_fn: callback_fn
    }
    var win = new GB_Window(options);
    return win.show(url);
}

/*#######################################################################################################

* 기본 공통함수 끝

#######################################################################################################*/



/*#######################################################################################################

* 날짜관련 공통함수 시작

#######################################################################################################*/

/*************************************************************************
* 유효한(존재하는) 일(日)인지 체크
*************************************************************************/
function isValidDay(yyyy, mm, dd) {
    var m = parseInt(mm,10) - 1;
    var d = parseInt(dd,10);

    var end = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
    if ((yyyy % 4 == 0 && yyyy % 100 != 0) || yyyy % 400 == 0) {
        end[1] = 29;
    }

    return (d >= 1 && d <= end[m]);
}


/*************************************************************************
* Time 스트링을 자바스크립트 Date 객체로 변환
* parameter time: Time 형식의 String
* ex) toTimeObject('20080325');				// 일자까지
*		toTimeObject('200803251245');		// 일자 + 시분
*************************************************************************/
function toTimeObject(time) { 
    var year  = time.substr(0,4);
    var month = time.substr(4,2) - 1; // 1월=0,12월=11
    var day   = time.substr(6,2);
    var hour;
    var min;

	if(time.length > 8) {
		hour  = time.substr(8,2);
		min   = time.substr(10,2);

		return new Date(year,month,day,hour,min);

	} else {
		return new Date(year,month,day);
	}
}

/*************************************************************************
* 자바스크립트 Date 객체를 Time 스트링으로 변환
* parameter date: JavaScript Date Object
*************************************************************************/
function toTimeString(date) {
    var year  = date.getFullYear();
    var month = date.getMonth() + 1; // 1월=0,12월=11이므로 1 더함
    var day   = date.getDate();
    var hour  = date.getHours();
    var min   = date.getMinutes();

    if (("" + month).length == 1) { month = "0" + month; }
    if (("" + day).length   == 1) { day   = "0" + day;   }
    if (("" + hour).length  == 1) { hour  = "0" + hour;  }
    if (("" + min).length   == 1) { min   = "0" + min;   }

    return ("" + year + month + day + hour + min)
}

/*************************************************************************
* Time이 현재시각 이후(미래)인지 체크
*************************************************************************/
function isFutureTime(time) {
    return (toTimeObject(time) > new Date());
}

/*************************************************************************
* 주어진 Time 과 y년 m월 d일 h시 차이나는 Time을 리턴
* ex) var time = form.time.value; //'20000101000'
*     alert(shiftTime(time,0,0,-100,0));
*     => 2000/01/01 00:00 으로부터 100일 전 Time
*************************************************************************/
function shiftTime(time,y,m,d,h) {
    var date = toTimeObject(time);

    date.setFullYear(date.getFullYear() + y); //y년을 더함
    date.setMonth(date.getMonth() + m);       //m월을 더함
    date.setDate(date.getDate() + d);         //d일을 더함
    date.setHours(date.getHours() + h);       //h시를 더함

    return toTimeString(date);
}

/*************************************************************************
* 두 Time이 몇 개월 차이나는지 구함
* time1이 time2보다 크면(미래면) minus(-)
*************************************************************************/
function getMonthInterval(time1,time2) { 
    var date1 = toTimeObject(time1);
    var date2 = toTimeObject(time2);

    var years  = date2.getFullYear() - date1.getFullYear();
    var months = date2.getMonth() - date1.getMonth();
    var days   = date2.getDate() - date1.getDate();

    return (years * 12 + months + (days >= 0 ? 0 : -1) );
}

/*************************************************************************
* 두 Time이 며칠 차이나는지 구함
* time1이 time2보다 크면(미래면) minus(-)
*************************************************************************/
function getDayInterval(time1,time2) {
    var date1 = toTimeObject(time1);
    var date2 = toTimeObject(time2);
    var day   = 1000 * 3600 * 24; //24시간

    return parseInt((date2 - date1) / day, 10);
}

/*************************************************************************
* 두 Time이 몇 시간 차이나는지 구함
* time1이 time2보다 크면(미래면) minus(-)
*************************************************************************/
function getHourInterval(time1,time2) {
    var date1 = toTimeObject(time1);
    var date2 = toTimeObject(time2);
    var hour  = 1000 * 3600; //1시간

    return parseInt((date2 - date1) / hour, 10);
}

/*************************************************************************
* 현재 시각을 Time 형식으로 리턴
*************************************************************************/
function getCurrentTime() {
    return toTimeString(new Date());
}


/*************************************************************************
* 현재 年을 YYYY형식으로 리턴
*************************************************************************/
function getYear() {
    return getCurrentTime().substr(0,4);
}

/*************************************************************************
* 현재 月을 MM형식으로 리턴
*************************************************************************/
function getMonth() {
    return getCurrentTime().substr(4,2);
}

/*************************************************************************
* 현재 日을 DD형식으로 리턴
*************************************************************************/
function getDay() {
    return getCurrentTime().substr(6,2);
}

/*************************************************************************
* 현재 時를 HH형식으로 리턴
*************************************************************************/
function getHour() {
    return getCurrentTime().substr(8,2);
}

/*************************************************************************
* 특정일자 요일 리턴
* ex) alert('오늘은 ' + getDayOfWeek() + '요일입니다.');
* 특정 날짜의 요일을 구하려면? => 여러분이 직접 만들어 보세요.
*************************************************************************/
function getDayOfWeek(time) {
    var now = toTimeObject(time);
    var day = now.getDay();
    var week = new Array('일','월','화','수','목','금','토');
    return week[day];
}

/*#######################################################################################################

* 날짜관련 공통함수 끝

#######################################################################################################*/
