﻿/**************************************************
파 일 명     :  /Scripts/Util.js
최초작성내역 :  인터데브 정재권(2007년 03월 20일) 
작성목적     :   자주 사용하는 함수를 모아놓은 파일
**************************************************/

/*******************************************************
작 성 자  :  인터데브 정재권(2007년 03월 20일)
작성목적  :  개발자가 입력한 URL로 이동하는 함수
Parameter :
                     url (string : 이동하기 위한 URL)
반환 값   : 
사용예    :  MovePage('/main.aspx');     
*******************************************************/
 function MovePage(url)
{
		self.location.href = url;
}

/*******************************************************
작 성 자  :  인터데브 정재권(2007년 03월 20일)
작성목적  :  현재 컴퓨터의 날짜를 리턴하는 함수
Parameter :
                     formatFlag (string : 'N'과 'F' 두 개 중의 하나를 선택
                                                 'N' --> NoFormat(yyyymmdd) 
                                                 'F' --> Format (yyyy-mm-dd) )
반환 값   :  string (현재 날짜)
사용예    :  document.all.htxtNoFormatOnlyDate.value = GetNowDate('N');
*******************************************************/
function GetNowDate(formatFlag) // flag 종류 'n','f'
{
    var oDate, strYear, strMonth, strDay;
    var iTemp  = 0;
    var strReturn = "";     

    try
   { 
		oDate = new Date();
		var strYear = oDate.getYear().toString();		
		
		iTemp = oDate.getMonth() + 1;
		if (iTemp < 10)
			strMonth = "0" + iTemp.toString();
		else
		    strMonth = iTemp.toString();
			
		iTemp = oDate.getDate();		
		if (iTemp < 10)
			strDay = "0" + iTemp.toString();
        else
            strDay = iTemp.toString();			
        
        if 	(formatFlag == 'F' || formatFlag == 'f')
    		strReturn =  strYear + "-" + strMonth + "-" + strDay;
    	else
    		strReturn =  strYear + strMonth + strDay;    	
    	
		return strReturn;
	}
	catch(exception)
	{
		OpenErrorMessage(exception.description);
	}	
	return strReturn;
}

/*******************************************************
작 성 자  :  인터데브 정재권(2007년 03월 20일)
작성목적  :  현재 컴퓨터의 시간(시분)를 리턴하는 함수
Parameter :
                     formatFlag (string : 'N'과 'F' 두 개 중의 하나를 선택
                                                 'N' --> NoFormat(HHMI) 
                                                 'F' --> Format (HH:MI) )
반환 값   :  string (현재 시분)
사용예    :  document.all.htxtNoFormatOnlyTime.value = GetNowTime('N');
*******************************************************/
function GetNowTime(formatFlag)
{
    var oDate, strHours, strMinutes;
    var iTemp  = 0;    
    var strReturn = "";     
    
    try
   {
		oDate = new Date();
		
		iTemp = oDate.getHours().toString();
		if (iTemp < 10) 
			strHours = "0" + iTemp.toString();	
        else
			strHours = iTemp.toString();	        
        				
		iTemp = oDate.getMinutes();
		if (iTemp < 10) 
			strMinutes = "0" + iTemp.toString();
        else
            strMinutes = iTemp.toString();
			
        if 	(formatFlag == 'F' || formatFlag == 'f')
			strReturn = " " +  strHours + ":" + strMinutes; 			
		else
			strReturn =  strHours + strMinutes;
					
		return strReturn;	   
   }
	catch(exception)
	{
		OpenErrorMessage(exception.description);
	}	  
	return strReturn;	 
}

/*******************************************************
작 성 자  :  인터데브 정재권(2007년 03월 20일)
작성목적  :  현재 컴퓨터의 시간(시분초)를 리턴하는 함수
Parameter :
                     formatFlag (string : 'N'과 'F' 두 개 중의 하나를 선택
                                                 'N' --> NoFormat(HHMISS) 
                                                 'F' --> Format (HH:MI:SS) )
반환 값   :  string (현재 시분초)
사용예    :  document.all.htxtNoFormatFullTime.value = GetNowFullTime('F');
*******************************************************/
function GetNowFullTime(formatFlag)
{
    var oDate, strHours, strMinutes, strSeconds;
    var iTemp  = 0;        
    var strReturn = "";     
    
    try
   {
		oDate = new Date();
		
		iTemp = oDate.getHours();
		if (iTemp < 10) 
			strHours = "0" + iTemp.toString();		
        else
			strHours = iTemp.toString();		        			
		
		iTemp = oDate.getMinutes();
		if (iTemp < 10) 
			strMinutes = "0" + iTemp.toString();
	    else
	        strMinutes = iTemp.toString();
	    
			
		iTemp = oDate.getSeconds();
		if (iTemp < 10) 
			strSeconds = "0" + iTemp.toString();
		else
		    strSeconds = iTemp.toString();

        if 	(formatFlag == 'F' || formatFlag == 'f')
			strReturn = " " +  strHours + ":" + strMinutes + ":" + strSeconds; 			
		else
			strReturn =   strHours + strMinutes + strSeconds ;
					
		return strReturn;	   
   }
	catch(exception)
	{
		OpenErrorMessage(exception.description);
	}	     
 
	return strReturn;	
}

/*******************************************************
작 성 자  :  인터데브 정재권(2007년 03월 20일)
작성목적  :  현재 컴퓨터의 시간(년월일시분)를 리턴하는 함수
Parameter :
                     formatFlag (string : 'N'과 'F' 두 개 중의 하나를 선택
                                                 'N' --> NoFormat(yyyymmddHHMI) 
                                                 'F' --> Format (yyyy-mm-dd HH:MI) )
반환 값   :  string (현재 년월일시분)
사용예    :  document.all.htxtFormatDateTime.value = GetNowDateTime('F');
*******************************************************/
function GetNowDateTime(formatFlag)
{
    var strReturn = ""; 
    
    try
   {
        if 	(formatFlag == 'F' || formatFlag == 'f')
			strReturn = GetNowDate('F') + GetNowTime('F') 
		else
			strReturn = GetNowDate('N') + GetNowTime('N') 
   } 
	catch(exception)
	{
		OpenErrorMessage(exception.description);
	}	
	return strReturn;	
}

/*******************************************************
작 성 자  :  인터데브 정재권(2007년 03월 20일)
작성목적  :  현재 컴퓨터의 시간(년월일시분초)를 리턴하는 함수
Parameter :
                     formatFlag (string : 'N'과 'F' 두 개 중의 하나를 선택
                                                 'N' --> NoFormat(yyyymmddHHMISS) 
                                                 'F' --> Format (yyyy-mm-dd HH:MI:SS) )
반환 값   :  string (현재 년월일시분초)
사용예    :  document.all.htxtFormatFullDateTime.value = GetFullNowDateTime('F');
*******************************************************/
function GetFullNowDateTime(formatFlag)
{
    var strReturn = ""; 

    try
   {
        if 	(formatFlag == 'F' || formatFlag == 'f')
			strReturn = GetNowDate('F') + GetNowFullTime('F') 
		else
			strReturn = GetNowDate('N') + GetNowFullTime('N')    
   }
	catch(exception)
	{
		OpenErrorMessage(exception.description);
	}	
	return strReturn;	
}

/*******************************************************
작 성 자  :  인터데브 정재권(2007년 03월 20일)
작성목적  :  컨트롤안에 지정한 문자가 입력된 후 다음 컨트롤로 이동하는 함수
Parameter :
                     control          (object : 입력할 Control Object)
                     limitLength      (int : 입력할 컨트롤의 문자열 길이)
                     event            (object : event) 
반환 값   : 
사용예    :  <input  name="txtJuminOne" id="txtJuminOne" type="text" MaxLength="6"  onkeyup="return AutoTab(this, 6, event);"/>
                     <input name="txtJuminTwo" id="txtJuminTwo" type="text" MaxLength="7"  />
*******************************************************/
function AutoTab(control, limitLength, event)
{
	var isNavigator = (navigator.appName.indexOf("Netscape")!=-1);
	
	var keyCode = (isNavigator) ? event.which : event.keyCode; 
	var filter = (isNavigator) ? [0,8,9] : [0,8,9,16,17,18,37,38,39,40,46];
	
	if(control.value.length >= limitLength && ! ContainsElement(filter,keyCode)) 
	{
		control.value = control.value.slice(0, limitLength);
		control.form[(GetIndex(control)+1) % control.form.length].focus();
	}

	return true;
}

function ContainsElement(arrayControl, controlElement) 
{
	var bReturn = false;
	var iCount = 0;
	
	while(!bReturn && iCount < arrayControl.length)
		if(arrayControl[iCount] == controlElement)
			bReturn = true;
		else
			iCount++;
			
	return bReturn;
}

function GetIndex(control) {
	var index = -1
	var iCount = 0;
	
	while (iCount < control.form.length && index == -1)
		if (control.form[iCount] == control)
			index = iCount;
		else 
			iCount++;
			
	return index;
}

/*******************************************************
작 성 자  :  인터데브 정재권(2007년 03월 20일)
작성목적  :  GridViewUtil에서 사용하는 링크 함수
Parameter :
                     linkMethod    (string : 팝업창 형태)
                     linkURL       (string : 링크 URL)
                     linkParam     (string : Parameter) 
반환 값   : 
사용예    :  
*******************************************************/
function GridCellLink_onClick(linkMethod, linkURL, linkParam)
{
    if(linkMethod == "POPUP")
    {
        window.open(linkURL + "?" + linkParam);
    }
    else if(linkMethod == "SELF")
    {
        self.location.href = linkURL + "?" + linkParam;
    }
    else if(linkMethod == "REDIRECT")
    {
        document.location.href= linkURL + "?" + linkParam;
    }         
}

/*******************************************************
작 성 자  :  (주)인터데브 정재권(2007년 04월 26일)
작성목적  :  체크박스 전체선택/해제
Parameter   :  spanChk : 체크박스
                gridId : 그리드아이디
반환 값   :  
*******************************************************/
function SelectAllCheckboxes(spanChk,gridId)
{	
    try
	{
        var oItem = spanChk.children;
        var theBox=(spanChk.type=="checkbox")?spanChk:spanChk.children.item[0];
        xState=theBox.checked;
        elm=theBox.form.elements;
        for(i=0;i<elm.length;i++)
        {
            if(elm[i].type=="checkbox" && elm[i].id!=theBox.id)
            {
                if(elm[i].checked!=xState && elm[i].id.split('_')[0] == gridId)
                    elm[i].click();
            }
        }
    }
	catch(exception)
	{
		OpenErrorMessage(exception.desription);
	}
}

/*******************************************************
작 성 자  :  (주)아프로 김헌순 (2011년 01월 27일)
작성목적  :  날짜에 일수를 더한 몇일 뒤의 날짜를 계산한다.
Parameter :
                     ymd (string : yyyy-mm-dd형식의 날짜)
                     v_day ( int : 숫자  몇일뒤)
반환 값   :  ymd 날짜에서 v_day 만큼 지난 날짜
사용예    :  dtToDate = date_add('2011-01-27', 3);
*******************************************************/
function AddDay(scheDate, v_day){
    var datelist = scheDate.split("-");

    var datestr = new Date(datelist[0]+"/"+datelist[1]+"/"+datelist[2]);
    datestr.setDate(datestr.getDate() + v_day);

    var nextdate = datestr.getDate();
    var nextmonth = datestr.getMonth() + 1;
    var nextyear = datestr.getFullYear();

    nextdate = make_two_digit(nextdate);
    nextmonth = make_two_digit(nextmonth);

    var fullnextdate = nextyear + "-" + nextmonth + "-" + nextdate;
    return fullnextdate;
}
//2008-00-00형식으로 맞춰주는 함수
function make_two_digit(x) {
 if (x.toString().length == 1) return "0"+x; else return x;
}




/*******************************************************
작 성 자  :  (주)아프로 김헌순 (2011년 01월 27일)
작성목적  :  날짜에 일수를 더한 몇일 뒤의 날짜를 계산한다.
Parameter :
                     param val1 - 조회 시작일(날짜 ex.2002-01-01)
                     param val2 - 조회 종료일(날짜 ex.2002-01-01)
                     
반환 값   :  기간에 해당하는 일 수
사용예    :  intDateCnt = calDateRange('2011-01-27', '2011-01-30');
*******************************************************/
function calDateRange(val1, val2)
{
    var FORMAT = "-";

    // FORMAT을 포함한 길이 체크
    if (val1.length != 10 || val2.length != 10)
        return null;

    // FORMAT이 있는지 체크
    if (val1.indexOf(FORMAT) < 0 || val2.indexOf(FORMAT) < 0)
        return null;

    // 년도, 월, 일로 분리
    var start_dt = val1.split(FORMAT);
    var end_dt = val2.split(FORMAT);

    // 월 - 1(자바스크립트는 월이 0부터 시작하기 때문에...)
    // Number()를 이용하여 08, 09월을 10진수로 인식하게 함.
    start_dt[1] = (Number(start_dt[1]) - 1) + "";
    end_dt[1] = (Number(end_dt[1]) - 1) + "";

    var from_dt = new Date(start_dt[0], start_dt[1], start_dt[2]);
    var to_dt = new Date(end_dt[0], end_dt[1], end_dt[2]);

    return (to_dt.getTime() - from_dt.getTime()) / 1000 / 60 / 60 / 24;
}

/*******************************************************
작 성 자  :  (주)아프로 김헌순 (2011년 01월 27일)
작성목적  :  webDateChooser value값을 2010-01-01 형태로 잡아줌
Parameter :
                     param val - yyyy-m-d 날짜
                     
반환 값   :  yyyy-mm-dd형태의 날짜
사용예    :  fromDate = DtCheck('2011-1-3');
*******************************************************/
function DtCheck(val)
{
    var tmp = val.split("-"); 
    var year = tmp[0];
    var month = "";
    var day = "";
     
    if(String(tmp[1].length) == 1)
    {
        month = "0" + tmp[1];
    }
    else
    {
        month = tmp[1];
    }
    
    if(String(tmp[2].length) == 1)
    {
        day = "0" + tmp[2];
    }
    else
    {
        day = tmp[2];
    }
    
    return year + "-" + month + "-" +  day;
}
