/* 전역 변수 */

var IS_NAV = (navigator.appName == "Netscape");
var IS_IE = (navigator.appName == "Microsoft Internet Explorer");

var IS_WIN = (navigator.userAgent.indexOf("Win") != -1);
var IS_MAC = (navigator.userAgent.indexOf("Mac") != -1);
var IS_UNIX = (navigator.userAgent.indexOf("X11") != -1);

/**
 * 쿠키에 저장된 값을 반환한다.
 * @param name 쿠키 이름
 * @return 쿠키 이름에 대한 값을 반환. 없는 경우에는 ""를 반환.
 */
function getCookie(name) {
    var arg = name + "=";
    var alen = arg.length;
    var clen = document.cookie.length;
    var i = 0;
    while (i < clen) {
        var j = i + alen;
        if (document.cookie.substring(i, j) == arg) {
            return getCookieVal(j);
        }
        i = document.cookie.indexOf(" ", i) + 1;
        if (i == 0) break;
    }
    return "";
}


/**
 * 쿠키를 저장한다.
 * @param name 쿠키 이름
 * @param value 쿠키 값
 * @param expires 쿠키의 유효 일
 * @param path
 * @param domain
 * @param secure
 */
function setCookie(name, value, expires, path, domain, secure) {
    if (!path) {
        path = "/";
    }
    document.cookie = name + "=" + escape (value) +
                    ((expires) ? "; expires=" + expires : "") +
                    ((path) ? "; path=" + path : "") +
                    ((domain) ? "; domain=" + domain : "") +
                    ((secure) ? "; secure" : "");
}


/**
 * 쿠키를 삭제한다.
 * @param name 삭제할 쿠키 이름
 * @param path
 * @param domain
 */
function deleteCookie(name, path, domain) {
    if (!path) {
        path = "/";
    }
    if (getCookie(name)) {
        document.cookie = name + "=" +
            ((path) ? "; path=" + path : "") +
            ((domain) ? "; domain=" + domain : "") + 
            "; expires=Thu, 01-Jan-70 00:00:01 GMT";
    }
}


/**
 * 쿠키를 저장할 때 필요한 적합한 형식의 유효기간을 반환한다.
 * @days 쿠키가 유효할 일 (예를 들어 3 일 동안 유효해야 하면 3을 입력)
 * @hours 쿠키가 유효할 시간 (예를 들어 2 시간 동안 유효해야 하면 2를 입력)
 * @minutes 쿠키가 유효할 분 (예를 들어 30 분 동안 유효해야 하면 30을 입력)
 */
function getExpDate(days, hours, minutes) {
    var expDate = new Date( );
    if (typeof days == "number" && typeof hours == "number" &&
        typeof hours == "number") {
        expDate.setDate(expDate.getDate( ) + parseInt(days));
        expDate.setHours(expDate.getHours( ) + parseInt(hours));
        expDate.setMinutes(expDate.getMinutes( ) +
        parseInt(minutes));
        return expDate.toGMTString( );
    }
}


/**
 * 쿠키 값을 읽을 때 사용하는 보조 함수
 */
function getCookieVal(offset) {
    var endstr = document.cookie.indexOf (";", offset);
    if (endstr == -1) {
        endstr = document.cookie.length;
    }
    return unescape(document.cookie.substring(offset, endstr));
}

/**
 * 입력받을 수 있는 값을 필터링한다.
 * ex : <input type="text" ..... onkeypress="filterKey('[0-9]')"> ; 숫자만 키입력이 가능한 text filed
 * ex : <input type="text" ..... onkeypress="filterKey('[0-9a-zA-Z]')"> ; 영문,숫자만 키입력이 가능한 text filed
 * @param filter : 필터링할 정규표현식 ex) '[0-9]':0~9의 값만 허용, '[a-zA-Z]':알파벳만 허용
 * @return 
 */
function filterInputData(filter) {
//임시로 만들었음...나중에 본사에 연락해서 손봐야함

	var tmp1 = new RegExp(filter);	
	var tmp2 = '/[0-9]/';
	
    if (tmp1!=tmp2) {
    
        var sKey = String.fromCharCode(event.keyCode);
        var re = new RegExp(filter);
        if (!re.test(sKey)) {
            event.returnValue = false;
        }
    }else{
  
     e = window.event; //윈도우의 event를 잡는것입니다. 그냥 써주심됩니당.
 

        //숫자열 0 ~ 9 : 48 ~ 57, 키패드 0 ~ 9 : 96 ~ 105 ,8 : backspace, 46 : delete -->키코드값을 구분합니다. 저것들이 숫자랍니다.

        if(e.keyCode >= 48 && e.keyCode <= 57 || e.keyCode >= 96 && e.keyCode <= 105 || e.keyCode == 8 || e.keyCode == 46)

        {

            if(e.keyCode == 48 || e.keyCode == 96)//0을 눌렀을경우

            {

                if(txtMileage.value == "" ) //아무것도 없는상태에서 0을 눌렀을경우

                    e.returnValue=false; //-->입력되지않는다.

                else //다른숫자뒤에오는 0은

                    return; //-->입력시킨다.

            }

            else //0이 아닌숫자

                return; //-->입력시킨다.

        }

        else //숫자가 아니면 넣을수 없다.

            e.returnValue=false;

	}
		
}


/**
 * 주어진 텍스트(source)에 특정 문자(query)가 나타나는 횟수를 반환한다.
 * @param source 대상이 되는 텍스트
 * @param query 검색하려는 텍스트
 * @return 주어진 텍스트에 특정 문자가 나타나는 횟수
 */
function countInstances(source, query) {
    var re = new RegExp(query, "g");
    var result = source.match(re);
    return (result) ? result.length : 0;
}

/**
 * <div> 태그의 내용 중 특정 텍스트(before)를 특정 텍스트(after)로 변경한다.
 * @param id <div> 태그의 id 속성 값
 * @param before 변경 전 텍스트
 * @param after 변경 후 텍스트
 */
function replaceTextInDiv(id, before, after) {
    var element = document.getElementById(id).firstChild;
    var re = new RegExp(before, "g");
    element.nodeValue = element.nodeValue.replace(re, after);
    return false;
}

function writeTextInElement(id, text) {
    var element = document.getElementById(id);
    if (element.firstChild) {
        element.firstChild.nodeValue = text;
    } else {
        var child = document.createTextNode(text);
        element.appendChild(child);
    }
    return false;
}

/**
 * 입력 변수에 3 자리마다 콤마(,)를 붙여 반환한다.
 * @param field 콤마를 붙일 값
 */
function formatCommas(numString) {
    var re = /,|\s+/g;
    numString = numString.replace(re, "");

    re = /(-?\d+)(\d{3})/;
    while (re.test(numString)) {
        numString = numString.replace(re, "$1,$2");
    }
    return numString;
}

function stripCommas(numString) {
    var re = /,/g;
    return numString.replace(re, "");
}

/**
 * 텍스트 필드에 입력한 값에 3자리마다 콤마(,)를 붙인다.
 * 텍스트 필드에 아래를 기입한다. onkeyup="toMoney(this)"
 * @param field 텍스트 필드
 */
function toMoney(field) {
    var value = field.value;
    var indexOfPoint = value.indexOf(".");
    if (indexOfPoint == -1) {
        field.value = formatCommas(value);
    } else {
        field.value = formatCommas(value.substring(0, indexOfPoint)) +
                        value.substring(indexOfPoint, value.length);
    }
}


/**
 * 두 날짜 사이의 일수를 계산하여 반환한다.
 * @param date1 문자열 데이터로 '20041012' 형식
 * @param date2 문자열 데이터로 '20041012' 형식
 */
function daysBetween(date1, date2) {
    date1 = new Date(date1.substring(0, 4), date1.substring(4, 6)-1, date1.substring(6,8));
    date2 = new Date(date2.substring(0, 4), date2.substring(4, 6)-1, date2.substring(6,8));
    var DSTAdjust = 0;
    oneMinute = 1000 * 60;
    var oneDay = oneMinute * 60 * 24;
    date1.setHours(0);
    date1.setMinutes(0);
    date1.setSeconds(0);
    date2.setHours(0);
    date2.setMinutes(0);
    date2.setSeconds(0);
    DSTAdjust = (date2.getTimezoneOffset( ) - 
                     date1.getTimezoneOffset( )) * oneMinute;
    var diff = date2.getTime( ) - date1.getTime() - DSTAdjust;
    return Math.ceil(diff/oneDay);
}


/**
 * 특정 노드가 가지고 있는 모든 속성을 TEXTAREA에 출력한다. 개발 편의를 위해서
 * 제공되는 함수이다.
 * @param obj 속성 값을 알고자 하는 노드
 */
function listProperties(obj) {
    var objName;

    if (obj.nodeName) {
        objName = obj.nodeName;
    } else {
        objName = "navigator";
    }

    var result = "";
    for (var i in obj) {
        result += objName + "." + i + "=" + obj[i] + "\n";
    }

    var area = document.createElement("textarea");
    area.rows = 20;
    area.cols = 50;
    var body = document.getElementsByTagName("BODY");
    if (body) {
        body[0].appendChild(area);
    } else {
        alert("body 태그가 있어야 합니다.");
        return false;
    }
    area.value = result;
    return false;
}

function getQueryString() {
    var result = "";
    var queryTags = document.getElementsByTagName("input");
    for (var i = 0; i < queryTags.length; i++) {
        var name = queryTags[i].name;
		if (name && name.substring(0, 2) == "q_" || name == "pageNo") {
		    result += "&" + name + "=" + queryTags[i].value;
		}
    }

    queryTags = document.getElementsByTagName("select");
    for (var i = 0; i < queryTags.length; i++) {
        var name = queryTags[i].name;
		if (name && name.substring(0, 2) == "q_" || name == "pageNo") {
		    result += "&" + name + "=" + queryTags[i].value;
		}
    }
    return result;
}


/**
 * 텍스트 필드에 입력한 값에 6자리 이후에 대시(-)를 붙인다.
 * 텍스트 필드에 아래를 기입한다. onkeyup="toSsn(this)"
 * @param field 텍스트 필드
 */
function toSsn(field) {
    var number = String(field.value);
    number = number.replace(/-|\s+/g, "");

    var length = number.length;

    if (length < 6) {
        field.value = number;
    } else {
        var result = number.substring(0, 6) + "-";
        result += number.substring(6, length);
        field.value = result;
    }
}

/**
 * window.onload의 수행할 함수가 많을 때 사용한다.
 * ex) addOnLoadEvent(firstFunction);
 *     addOnLoadEvent(secondFunction);
 *           ... to nth function
 *     onload에 수행할 함수들을 script의 맨 위에서 ex)처럼 수행시킨다.
 * @param field: onload시 수행할 함수명
 */
function addOnLoadEvent(func) {
    var oldonload = window.onload;
    
    if (typeof func != 'undefined') {
        if (typeof window.onload != 'function') {
            window.onload = func;
        } else {
            window.onload = function() {
                                oldonload();
                                func();
            }
        } 
    }
}
