/*
DESC : 범용적으로 쓸 수 있는 자바스크립트 함수
	   이곳의 함수들은 모두 단독으로 실행가능해야 한다.
주의 : 어떤 웹페이지에서도 동작가능한 function들만 존재해야 한다
       특정 URL과 특정 tag명등이 하드코딩되어있는 function들은 절대 있어선 않된다*/

function trim(s){
	s = s.replace(/^\s*/,'').replace(/\s*$/, '');
	return s;
} 

/*
String.prototype.trim = function () {

        return this.replace( /^\s*(\S*(\s+\S+)*)\s*$/, "$1");

    }
*/    

/*
Email유효성 체크
true 또는 false를 리턴한다
*/
function validateEmail(email) {
	var re = /(\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)/;
	//var re = new RegExp("(\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)");
	
	return re.test(email);
}

/*
[DESC]
인자로 넘어온 스트링중에서 공백은 제거한다음 숫자가 아닌 첫번째 문자를 리턴한다.
만약 숫자가 아닌 문자가 없으면 null을 리턴한다
[사용법]
if (validateNumber("123-456") != null){
	alert("숫자만 허용됩니다");
}
*/
function validateNumber(str){
	return trim(str).match(/\D/); //숫자가 아닌 것을 찾는다. [^0-9]와 같은 지정이다. /\D/는 "hi5"에서 "h"를 검색한다. 
}

/*
[사용법]
formatDate('20030202','9999-99-99') ▶ 결과값2003-02-02 
*/
/*
function formatDate(str, mask){

	var sStr = str.replace( /($|^|*|(|)|+|.|?||{|}|||[|]|-|:|s)/g,"");	
	var tStr="";
	var i;
	var j=0;
	var tLen = sStr.length +1 ;

	for(i=0; i< sStr.length; i++){
		tStr += sStr.charAt(i);
		j++;
		if (j < mask.length && mask.charAt(j)!="9") tStr += mask.charAt(j++);
	}
	return tStr;
}
*/

//A 문자열이 B 라는 문자열로 끝나면 A중에서 B를 제거한다
function cutoffendwith(source, ending){
	var _return = source;
	
	if ((source != undefined) && (ending != undefined)){
		if ((source.length-ending.length)>0){
			_return = source;
			if (source.lastIndexOf(ending) == (source.length-ending.length)){
				_return = source.substring(0,source.length-ending.length);
			}
		}
	}
	
	return _return;
}



//bSwitch에 boolean값에 따라
//divObj.style.display의 값을 변경시킨다
function switchObjStyleDisplay(bSwitch , divObj){
	divObj.style.display = (bSwitch ? "block" : "none");
}

var imgObj4popup = new Image();
//이미지크기에 맞게 팝업창을 띄운다
function openImageWindow(imgurl, title) { 
	
	imgObj4popup.src = imgurl;

	setTimeout("createImgWin(imgObj4popup , '...')", 100);
} 



function createImgWin(imgObj4popup ,title)
{
    if (! imgObj4popup.complete)
    {
        setTimeout("createImgWin(imgObj4popup)", 100);
        return;
    }

    var imageWin = window.open("", "imageWin", "width=" + imgObj4popup.width + ",height=" + imgObj4popup.height); 

	imageWin.document.write("<html><body style='margin:0'>"); 
	imageWin.document.write("<img src='" + imgObj4popup.src + "'>"); 
	imageWin.document.write("</body><html>"); 
	if (title != undefined){
		imageWin.document.title = title; 	
	}else{
		imageWin.document.title = imgObj4popup.src; 
	}
}
/*
[desc]
팝업창을 스크린의 정중앙에 띄운다

[param]
url : 대상url
pWidth : 팝업 width
pHeight : 팝업 height
4번째param : (Optional) 팝업 인스턴스명
5번째param : (Optional) 스크롤바 사용여부
*/	
function popupWindow(url, pWidth, pHeight)
{	
	var param=popupWindow.arguments;
	var HandleName = param[3] == undefined ? "DisposableWindow" : param[3];
	var bScrollBars = param[4] == undefined ? "yes" : param[4];
	var resizable = param[5] == undefined ? "no" : param[5];
	var toolbar = param[6] == undefined ? "no" : param[6];
	
	var option = "scrollbars=" + bScrollBars + ",toolbar=" + toolbar + ",resizable=" + resizable + ",width=" + pWidth + ",height=" + pHeight + ",top=" + (screen.availHeight-pHeight)/2 + ",left=" + (screen.availWidth-pWidth)/2;
	
	var oNewWindow = window.open(url, HandleName, option);
	oNewWindow.focus();
}


function popupWindowHide(url)
{	
	var param=popupWindow.arguments;
	var option = "scrollbars=no,toolbar=no,resizable=no,width=5,height=5,top=2000,left=2000";
	var oNewWindowHide = window.open(url, '', option);
	oNewWindowHide.focus();
}

/*
[desc]
현재 페이지에서 인자값 ID에 해당하는 체크박스를 모두 checked 또는 unchecked한다

[param]
part_of_id - 서버컨트롤id(clientid가 아니다)
                    이 파라메터가 없으면 현재페이지의 모두 checkbox가 영향을 받게 된다. 있을수 없는 상황이다
bAbsolute  - true:checked   false:unchecked
					이 파라메터가 없으면 첫번째 checkbox의 상태와 반대로 모두선택되거나 모두해제된다

[return]
없음

[remark]
asp.net에서 CheckBox 서버컨트롤로 랜더링된 checkbox들을 모두 선택하기 위한 function
서버컨트롤이 랜더링되면 암호처럼(ex> _ctl2_tbSetEMail3) 되는바
그것을 client side에서 자바스크립트가 핸들링하기 위해 id의 일부분으로 객체를 찾는다
*/
function checkAll(part_of_id, bAbsolute){
	var bChk = (bAbsolute==undefined ? false : bAbsolute);	
	var CntMatch = 0;
	
	var obj = document.getElementsByTagName("INPUT");
	if ((obj != null) && (obj.length != null)){		
		for (i = 0; i < obj.length; i++){
			if ((obj[i].tagName == "INPUT") && (obj[i].type == "checkbox") && (obj[i].id.indexOf(part_of_id) != -1)){

				if (CntMatch == 0){
					if ((bAbsolute != false) && (bAbsolute != true)){
						if (obj[i].checked) {
							bChk = false;
						}else{
							bChk = true;
						}
						CntMatch = 1;
					}
				}				

				obj[i].checked = bChk;
			}
		}
	}
}

/*
[desc]
여러개의 체크박스중에서 자기자신의 상태와는 반대로 나머지 체크박스들이 변경되어야 될때 쓴다
예를들어서 검색페이지의 컨텐츠유형선택은 자기자신이 선택되었다면 다른 모든 컨텐츠유형(전체포함)은 선택해제되어야 한다
*/
function checkAllOthers(part_of_id, thisObj){
	var bSwitch = !thisObj.checked; //다른 체크박스들은 현재 체크박스의 반대로 설정되어야 한다
	checkAll(part_of_id , bSwitch); //현재 체크박스포함에서 모든 체크박스의 checked속성을 변경한다
	thisObj.checked = !bSwitch; //현재 체크박스는 다시 원래 상태로 환원시킨다
}

/*
[desc]
get방식으로 여러개의 value들을 보내는등의 목적에 쓴다.
EX) makeValueString("chkCID" , "I") -> '321|23|56' 또는 '453'

[parameter]
key_id    : 객체이름
delimiter : 구분자
all_scope : 체크박스에 체크되어있는지 여부와 상관없이 key_id에 해당하는 모든 객체를 대상으로 한다

[remark]
서버사이드컨트롤인경우에는 못쓴다
*/
/*
function makeValueString(key_id , delimiter , all_scope){
	var bAllScope = (all_scope==undefined ? false : all_scope);
	var valueString = "";

	var cnt = 0;
	var obj = document.all[key_id];
	if (obj != null){		
		if (obj.length != null){			
			for (i = 0; i < obj.length; i++){				
				if (obj[i].checked || bAllScope)
				{
					if( cnt == 0){
						valueString += obj[i].value;
						cnt++;
					}else{
						valueString += (delimiter+obj[i].value);
					}
				}				
			}
		}else{
			valueString += obj.value;
		}
	}
	
	return valueStrng;
}
*/

/*
[desc]
get방식으로 여러개의 value들을 보내는등의 목적에 쓴다.
EX) makeValueString("chkCID" , "I") -> '321|23|56' 또는 '453'

[param]
part_of_id - 서버컨트롤id(clientid가 아니다)
              이 파라메터가 없으면 현재페이지의 모두 checkbox가 영향을 받게 된다. 있을수 없는 상황이다       
delimiter : 구분자
all_scope : 체크박스에 체크되어있는지 여부와 상관없이 key_id에 해당하는 모든 객체를 대상으로 한다 
attr_name : 어떤 attribute의 value을 가져올것인가
            ex) 체크박스로 선택된 cid와 title 두개를 모두 알아야 할경우 
                각각 checkbox.value와 checkbox.title에 데이타를 관리할 수 있다

[return]
value  + "|" + value  + "|" + .......

[remark]
서버사이드컨트롤인 경우에도 쓸 수 있다
*/
function makeValueString(part_of_id , delimiter , all_scope , attr_name){
	var bAllScope = (all_scope==undefined ? false : all_scope);	
	var attrName = (attr_name==undefined ? "value" : attr_name);
	var valueString = "";

	var obj = document.getElementsByTagName("INPUT");
	if ((obj != null) && (obj.length != null)){		
		for (i = 0; i < obj.length; i++){
			if ((obj[i].tagName == "INPUT") && (obj[i].type == "checkbox") && (obj[i].id.indexOf(part_of_id) != -1)){
				if (obj[i].checked || bAllScope) {
					//valueString += obj[i].value + delimiter ;
					//valueString += eval("obj[i]" + attrName) + delimiter ;
					valueString += obj[i].getAttribute(attrName) + delimiter ;					
				}
			}
		}
	}
	//만약 delimiter(ex - "|")로 끝나면 delimiter(ex - "|")를 삭제한다
	valueString = cutoffendwith(valueString, delimiter);
	return valueString;
}


/*
[remark]
ASPNET공용
*/
function getCountChecked(part_of_id){
	var obj;
	var cnt = 0;

	obj = document.getElementsByTagName("INPUT");
	if ((obj != null) && (obj.length != null)){		
		for (i = 0; i < obj.length; i++){
			if ((obj[i].tagName == "INPUT") && (obj[i].type == "checkbox") && (obj[i].id.indexOf(part_of_id) != -1)){
				if (obj[i].checked) {
					cnt++ ;
				}
			}
		}
	}
	
	return cnt;
}





function checkAllTreeViewNodes(arrayChildren){
    var currentChild;
    for (var i = 0; i < arrayChildren.length; i++){
        currentChild = arrayChildren[i];

		//주의 currentChild.Checked = true로는 동작하지 않는다
        currentChild.setAttribute("Checked" , true);//Server Side에서 Checked가 인식되지 못한다.	
        currentChild.Checked = true;
        checkAllTreeViewNodes(currentChild.getChildren());
   }
} 


function listBoxRemove(oList) {
	if (oList.selectedIndex != -1){
		oList.remove(oList.selectedIndex);
	}
	
	return true;
}

function listBoxRemoveAdd(oSource, oDestination){
	if (oSource.selectedIndex != -1){
		var oOption = document.createElement("OPTION");				
		oDestination.options.add(oOption);
		oOption.innerText = oSource[oSource.selectedIndex].text;
		oOption.value = oSource[oSource.selectedIndex].value;		
		
		oSource.remove(oSource.selectedIndex);
	}
	
	return false;
}


// 항목 위로 이동.
function listBoxUpItem(oList) {
	var bufValue
	var bufText
	if (oList.selectedIndex > 0) {
	
		bufValue = oList[oList.selectedIndex -1].value;
		bufText = oList[oList.selectedIndex -1].text;
		
		oList[oList.selectedIndex-1].value = oList[oList.selectedIndex].value;
		oList[oList.selectedIndex-1].text = oList[oList.selectedIndex].text;
		oList[oList.selectedIndex].value = bufValue;
		oList[oList.selectedIndex].text = bufText;
		oList.selectedIndex = oList.selectedIndex-1;
	}
	
	return false;
}


// 보기항목 아래로 이동.
function listBoxDownItem(oList) {
	var bufValue
	var bufText
	if ((oList.selectedIndex < (oList.length - 1)) && (oList.selectedIndex != -1)) {
		
		bufValue = oList[oList.selectedIndex +1].value;
		bufText = oList[oList.selectedIndex +1].text;
		
		oList[oList.selectedIndex+1].value = oList[oList.selectedIndex].value;
		oList[oList.selectedIndex+1].text = oList[oList.selectedIndex].text;
		oList[oList.selectedIndex].value = bufValue;
		oList[oList.selectedIndex].text = bufText;
		oList.selectedIndex = oList.selectedIndex+1;
		
	}
	
	return false;
}


/*
DESC : Cookie관련 자바 스크립트

참고사이트
http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/cookie.asp
http://www.yespia.net/proboard/read.asp?table=javascript_tip&page=1&m_no=70&str1=&str2=
http://www.microsoft.com/korea/msdn/library/dv_vstechart/html/vbtchASPNETCookies101.asp#vbtchaspnetcookies101anchor9
*/
// Retrieve the value of the cookie with the specified name.
function getCookie(sName)
{
  // cookies are separated by semicolons
  var aCookie = document.cookie.split(";");
  
  for (var i=0; i < aCookie.length; i++)
  {
    // a name/value pair (a crumb) is separated by an equal sign
    var aCrumb = aCookie[i].split("=");
    
    if (sName == trim(aCrumb[0])){
		/*
		escape() 함수는 알파벳과 숫자 및 *, @, -, _, +, ., / 를 제외한 문자를 모두 16진수 문자로 바꾸어 줍니다. 
		이 함수는 쉼표와 세미콜론 같은 문자가 쿠키문자열과의 충돌을 피하기 위해 사용됩니다.
        이렇게 16진수 문자열로 변환된 문자열은 unescape()함수로 다시 되돌려줄수 있습니다
		*/
		var _return;
		if ((aCrumb[1] == null) || (aCrumb[1] == undefined)){
			_return = null;
		}else{
			//_return = unescape(aCrumb[1]);
			_return = aCrumb[1];
		}
		return _return;
    }
  }

  // a cookie with the requested name does not exist
  return null;
}

// Create a cookie with the specified name and value.
// The cookie expires at the end of the 20th century.
function setCookie(sName, sValue)
{
  date = new Date();
  // Set expiration to 60 days from now
  date.setTime (date.getTime() + 60 * (24 * 60 * 60 * 1000));
  /*
  만약 path 옵션이 누락되면
  쿠키를 만든 url/subdir/이하로만 쿠키를 공유할 수 있다
  즉 url/anothersubdir/all.aspx에서는 쿠키를 찾지 못한다.
  따라서 항상 '/'로 셋팅한다.
  */
  
  var valueString = sName + "=" + sValue + " ; expires=" + date.toGMTString() + " ; path=/";
  
  var domain = setCookie.arguments[2]; //3번째 인자(Domain)
  if (domain != undefined && domain != ''){ valueString += " ; domain=" + domain; }
  document.cookie = valueString;
}

// Delete the cookie with the specified name.
function delCookie(sName)
{
	date = new Date();
	date.setTime(date.getTime()-1);
	var sValue = getCookie(sName)
	//document.cookie = sName + "=" + escape(sValue) + "; expires=Fri, 31 Dec 1999 23:59:59 GMT;";
	document.cookie = sName + "=" + sValue + "; expires=" + date.toGMTString() + " ; path=/";
}

function unManagedSubmit( frm , action , target )
{ 

    var preTarget = frm.target; 

    var preaction = frm.action; 

    var preViewState = document.createElement("hidden");

    var preEntTarget = document.createElement("hidden"); 

    var preEntArg = document.createElement("hidden"); 

    if( frm.__VIEWSTATE != undefined ) 

    { 

        //ViewState의 복제된 객체를 생성한다. 

        preViewState = frm.__VIEWSTATE.cloneNode(); 

        //Viewstate를 제거한다. 

        frm.removeChild(frm.elements("__VIEWSTATE")); 

    } 

    if(frm.__EVENTTARGET != undefined ) 

    { 

        preEntTarget = frm.__EVENTTARGET.cloneNode(); 

        preEntArg = frm.__EVENTARGUMENT.cloneNode(); 

        frm.removeChild(frm.elements("__EVENTTARGET")); 

        frm.removeChild(frm.elements("__EVENTARGUMENT")); 

    }

    frm.target = target; 

    frm.action = action; 

    frm.submit(); 

    frm.target = preTarget; 

    frm.action = preaction; 

    //복제된 ViewState를 form에 다시 추가 한다. 

    frm.insertBefore(preViewState); 

    frm.insertBefore(preEntTarget); 

    frm.insertBefore(preEntArg);
}

/*
pausecomp(1250);
alert("back again");
*/
function pausecomp(Amount)
{
	d = new Date() //today's date
	while (1)
	{
		mill=new Date() // Date Now
		diff = mill-d //difference in milliseconds
		if( diff > Amount ) {break;}
	}
}

/*
iframe의 width와 height는 초기값이 1px씩이여야 한다. 이후에 resizeIframe()메소드가 호출되면서 정상적인 크기가 된다.
만약 width와 height의 값이 100%등이면 최초에 한번 display되고 다시 resizeIframe()호출되면서 리사이징되기 때문에 보기 않좋게된다.
<iframe name="ifPart1" src='http://www.empas.com' width=1px height=1px frameborder=0 scrolling=no></iframe>	    
<script for=window event=onload> <- 항상 iframe에 document가 로딩된 이후에 resizeIframe()메소드가 발생해야한다
	resizeIframe('ifPart1');
</script>
*/
/*======================
IFrame에 Embed되는 document에서 호출해야 한다.
Domain이 다르면 Access Denied발생한다
======================*/
function resizeIFrame(name)
{
	try
	{
		var oBody = document.body;
        var oIFrame = parent.document.all(name);
        
        /*
		var oIFrame = document.all(name);
		//var oBody   = document.all(name).document.body;		//이것과
		var oBody   = eval(name + '.document.body');			//이것은 다른다. 왜?
		*/
		
		
		
		oIFrame.style.height = oBody.scrollHeight + (oBody.offsetHeight - oBody.clientHeight);
		oIFrame.style.width = oBody.scrollWidth + (oBody.offsetWidth - oBody.clientWidth);

	}
	catch (e)
	{
		//alert("IFrame Resize Error");
		window.status = "IFrame[" + name +"] "; // + e.toString();
	}
}

/*
엔터키 발생되었을때 postback발생 방지
usage : document.onkeypress = checkCR;
*/
function checkCR(evt) {

    var evt  = (evt) ? evt : ((event) ? event : null);

    var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);

    //if ((evt.keyCode == 13) && (node.type=="text")) {return false;}    
	if ((evt.keyCode == 13) && !(node.type=="textarea")) {return false;}
}
document.onkeypress = checkCR;

function setFocus(obj){		
	if (obj != null && obj != 'undefined'){
		//alert("debug1");
		obj.focus();
		//alert("debug2");
	}
}

function setValue2OpenerObject(pTarget , pId , pValue){
	var obj = getOpenerObject(pTarget , pId);
	if (obj != null){ obj.value = pValue; }
//alert(pId + "|" + obj);
}

/*
WebServerControl도 커버하기 위해서 다음과 같이 한다
Opener html dom중에서 INPUT테그를 찾고 그중에서 waitingfor의 value가 현재 인자값인것을 찾는다
*/
function getOpenerObject(property_of_waitingfor , id_of_waitingfor){			
			
	var obj_founded;
	var obj_all = opener.document.getElementsByTagName("INPUT");
	if ((obj_all != null) && (obj_all.length != null)){		
		for (i = 0; i < obj_all.length; i++){					
			if ((obj_all[i][property_of_waitingfor] != 'undefined') &&
				(obj_all[i][property_of_waitingfor] == id_of_waitingfor)){						
				obj_founded = obj_all[i];
			}
		}
	}
	return obj_founded;
}

function findPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft;
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop;
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}

/*
[desc]
상단에 따라다니는 메뉴등을 구성할때 쓴다
*/
function moveTopRecursively(obj) {
	obj.style.pixelTop = document.body.scrollTop;
	
	/*
		ABOUT scrollTop
		Sets or retrieves the distance between the top of the object and the topmost portion of the content currently visible in the window. 
	*/
	setTimeout("moveTopRecursively(" + obj.id + ")",10);		
}

/*
[desc]
체크박스들의 그룹을 체크할때 현재 체크된 체크박스가 
전체면 전체를 제외한 모든 체크박스가 언체크되고
전체가 아니면 전체 체크박스가 언체크되게 한다
*/
function checkingCheckBox(obj)
{
	var objArray = document.getElementsByName(obj.name);
//alert(obj.value);
//alert(objArray.length);		
	//전체 선택시 다른 항목들 uncheck
	if(obj.value == "ALL") 
	{
		for(i=1; i< objArray.length; i++)
		{
			objArray[i].checked = false;			
		}
	}
	//개별항목 선택시 "전체" 항목 uncheck
	else
	{
		objArray[0].checked = false;
	}
}

function ajaxGet(wsURL , s , func) {
	var param=ajaxGet.arguments;
	var httpReq = (param[3] != undefined) ? param[3] : xmlReq;
	
	httpReq.open("GET", wsURL + '?' + s, true);
	httpReq.onreadystatechange = func;
	httpReq.send(null);
}

function ajaxPost(wsURL , s , func) {
	var param=ajaxPost.arguments;
	var httpReq = (param[3] != undefined) ? param[3] : xmlReq;
	
	httpReq.open("POST", wsURL, true);
	httpReq.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
	httpReq.onreadystatechange = func;
	httpReq.send(s);  
}

function getHTTPObject() {
  var xmlhttp;
  try {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
     try {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
     } catch (E) {
        xmlhttp = false;
     }
  }

  if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
    try {
      xmlhttp = new XMLHttpRequest();
    } catch (e) {
      xmlhttp = false;
    }
  }

  return xmlhttp;
}


function getXMLDom(xml)
{
	var xmlDoc
	// code for IE
	if (window.ActiveXObject)
	{
		xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async=false;
		xmlDoc.loadXML(xml);
	
	}
	// code for Mozilla, etc.
	else if (document.implementation &&	document.implementation.createDocument)
	{
		xmlDoc= document.implementation.createDocument("","",null);
		xmlDoc.loadXML(xml);
	
	}
	else
	{
		alert('Your browser cannot handle this script');
	}
	
	return xmlDoc;
}

//document.write("leftPad('1234', '0', 10) = " + leftPad('1234', '0', 10));
function leftPad(str, fillChar, length) {

	if (fillChar.length != 1) {
	alert('fillChar must be a single character');
	return "";
	}

	if (str.length > length)
	return str;

	var returnStr = "";
	var i;
	for (i = str.length; i < length; i++) {
	returnStr = returnStr + fillChar;
	}

	returnStr = returnStr + str;

	return returnStr;
}

//document.write("rightPad('1234', '0', 10) = " + rightPad('1234', '0', 10));
function rightPad(str, fillChar, length) {

	if (fillChar.length != 1) {
	alert('fillChar must be a single character');
	return "";
	}

	if (str.length > length)
	return str;

	var returnStr = str;
	var i;
	for (i = str.length; i < length; i++) {
	returnStr = returnStr + fillChar;
	}

	return returnStr;
}

//javascript: var adf=dateAdd(-7); alert(adf.toLocaleString()); alert(adf.getYear() + leftPad((adf.getMonth()+1) + '' ,'0',2) + leftPad(adf.getDate()+'','0',2));
function dateAdd(day){
	var d = new Date();
	var dt = d - ((day*-1)*24*60*60*1000);
	var nd = new Date(dt);

	return nd;
/* 
	alert(nd.toString());
	alert(nd.toGMTString());
	alert(nd.toLocaleString());
	alert(nd.toString("yyyyMMdd"));
	alert(nd.getYear());
	alert(nd.getMonth()+1);
	alert(nd.getDate());
*/
 }
 
 
function displayLayers() { //v3.0
  var i,p,v,obj,args=displayLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'block':(v='hide')?'none':v; }
    obj.display=v; }
}
 
function namosw_goto_byselect(sel, targetstr)
{
  var index = sel.selectedIndex;
  if (sel.options[index].value != '') {
       window.open(sel.options[index].value, targetstr);
     }
}

function juminNo_check( t1, t2 ) {
		if ( t1.length != 6 || t2.length != 7 )	{
			return false;
		}
		re = /\D/;
		if ( re.test(t1) || re.test(t2) ) {
			return false;
		}
		arr1 = new Array();
		arr2 = new Array();
		for ( i=0; i<6; i++ ) {
			arr1[i] = Number(t1.charAt(i)) * (i+2);
		}
		for ( i=0; i<6; i++ ) {
			if ( (i == 0) || (i == 1) ) {
				arr2[i] = Number(t2.charAt(i)) * (i+8);
			}
			else {
				arr2[i] = Number(t2.charAt(i)) * i;
			}
		}
		var tmp = 0;	
		for ( i=0; i<6; i++ ) {
			tmp += ( arr1[i] + arr2[i] );
		}
		ch = Number(t2.charAt(6));
		if( (11-(tmp%11)) == 11 ) {
			if ( ch != 1 ) {
				return false;
			}
		}
		else if ( (11-(tmp%11) == 10) ) {
			if ( ch != 0 ) {
				return false;
			}
		}
		else {
			if ( (11-(tmp%11)) != ch ) {
				return false;
			}
		}

		return true;
	}
	
	
	
function check_jumin(juminno) 
{
	var jumin1 = juminno.substr(0,6);
	var jumin2 = juminno.substr(6,7);
	var yy     = jumin1.substr(0,2);        // 년도
	var mm     = jumin1.substr(2,2);        // 월
	var dd     = jumin1.substr(4,2);        // 일
	var genda  = jumin2.substr(0,1);        // 성별
	var msg, ss, cc;
	var chk = true;

	// 숫자가 아닌 것을 입력한 경우
	if (!isNumeric(juminno)) {
		chk = false;
	}

	// 첫번째 자료에서 연월일(YYMMDD) 형식 중 기본 구성 검사
	if (yy < "00" || yy > "99" || mm < "01" || mm > "12" || dd < "01" || dd > "31") {
		chk = false;
	}

	// 성별부분이 1 ~ 4 가 아닌 경우
	if (genda < "1" || genda > "4") {
		chk = false;
	}
	
	// 연도 계산 - 1 또는 2: 1900년대, 3 또는 4: 2000년대
	cc = (genda == "1" || genda == "2") ? "19" : "20";
	
	// 첫번째 자료에서 연월일(YYMMDD) 형식 중 날짜 형식 검사
	if (isYYYYMMDD(parseInt(cc+yy), parseInt(mm), parseInt(dd)) == false) {
		chk = false;
	}
	
	// Check Digit 검사
	if (!isSSN(jumin1, jumin2)) {
		chk = false;
	}	
	
	return chk;
}

function isYYYYMMDD(y, m, d) { 
	switch (m) { 
	case 2: // 2월의 경우 
	if (d > 29) return false; 
	if (d == 29) { 
	// 2월 29의 경우 당해가 윤년인지를 확인 
	if ((y % 4 != 0) || (y % 100 == 0) && (y % 400 != 0)) 
	return false; 
	} 
	break; 
	case 4: // 작은 달의 경우 
	case 6: 
	case 9: 
	case 11: 
	if (d == 31) return false; 
	} 
	// 큰 달의 경우 
	return true; 
} 

function isNumeric(s) { 
	for (i=0; i<s.length; i++) { 
	c = s.substr(i, 1); 
	if (c < "0" || c > "9") return false; 
	} 
	return true; 
}

function isSSN(s1, s2) {
	n = 2;
	sum = 0;
	for (i=0; i<s1.length; i++)
	sum += parseInt(s1.substr(i, 1)) * n++;
	for (i=0; i<s2.length-1; i++) {
	sum += parseInt(s2.substr(i, 1)) * n++;
	if (n == 10) n = 2;
	}
	c = 11 - sum % 11;
	if (c == 11) c = 1;
	if (c == 10) c = 0;
	if (c != parseInt(s2.substr(6, 1))) return false;
	else return true;
}