﻿/***************************************************************************************************/
var GJS;

GJS = new CGJS();

/***************************************************************************************************/

//공통 스크립트
function CGJS()
{
    // 웹서비스 ReturnSet 속성	****************************************
    this.SOF = "";
    this.EFR = "";
    this.ACT = "";
    this.EMS = "";
    this.DS = "";

    this.Action = {
          None: "NONE"
		, Reload: "RELOAD"
		, Add: "ADD"
		, Edit: "EDIT"
		, Delete: "DELETE"
		, Get: "GET"
    }
    //******************************************************************

    // 원도우 열기		********************************************************************************
    this.OpenWindow = function(type, url, name, features, width, height, left, top)
    {
        /*
        Features 예제 : "toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=no,width=350,height=430,top=100,left=100"
        */
        if (type == "A")			// window 를 기준으로 화면중앙
        {
            left = (window.screen.width / 2) - (width / 2);
            top = (window.screen.height / 2) - (height / 2);
        }
        else if (type == "B")			// document를 기준으로 화면중앙
        {
            left = (document.body.clientWidth / 2) - (width / 2);
            top = (document.body.clientHeight / 2) - (height / 2);
        }
        else if (type == "C")
        {
            left = (window.screen.width / 2) - (width / 2);
            top = (window.screen.height / 2) - (height / 2);
            features = "toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes";
        }
        window.open(url, name, features + ",width=" + width + ",height=" + height + ",left=" + left + ",top=" + top + ",screenX=" + left + ",screenY=" + top);
    }

    // 원도우 닫기		********************************************************************************
    this.CloseWindow = function(type)
    {
        try
        {
            if (type == "A")
            {
                opener.focus();
            } else if (type == "B")
            {
                opener.location.reload();		//윈도우창을 닫고 폼을 리로드 시킴.
            }
        }
        catch (e)
        {
            this.ShowError("GJS.CloseWindow()", e);
        }
        window.close();
    }

    // 모달원도우 열기		****************************************************************************
    this.OpenWindowModal = function(url, obj, width, height, center, help, status, scroll, resizable)
    {
        var Features;

        //window.clipboardData.setData('Text', unescape(url));		// 디버깅을 위한 주소 복사

        Features = "dialogWidth:" + width + "px;dialogHeight:" + height + "px;center:" + center + ";help:" + help + ";status:" + status + ";scroll:" + scroll + ";resizable:" + resizable;

        if (obj == null)
        {
            obj = window;
        }

        return window.showModalDialog(url, obj, Features);
    }

    // 모달원도우 닫기		****************************************************************************
    this.CloseWindowModal = function(value)
    {
        window.returnValue = value;
        window.close();
    }

    // DHTML 원도우 - 열기		********************************************************************
    this.OpenDhtmlWindows = function (rootObjID, objID, title, width, height, scrollType)
    {
        if (this.GetObjById(objID + "_V") == null)
        {
            var BodyWidth = parseInt(document.body.clientWidth);
            var BodyHeight = parseInt(document.body.clientHeight);

            var Width = parseInt(width);
            var Height = parseInt(height);

            var ObjLeft = (BodyWidth / 2) - (Width / 2);
            var ObjTop = (BodyHeight / 2) - (Height / 2) + document.documentElement.scrollTop;

            scrollType = (scrollType == null) ? "auto" : scrollType; 	// auto / scroll / hidden

            var Obj = document.createElement("<div id=\"" + objID + "_V\" style=\"position:absolute;width:" + Width + "px;height:" + Height + "px;left:" + ObjLeft + "px;top:" + ObjTop + "px;background-color:#ffffff;border:solid 1px #666666;display:block;text-align:left;padding:1px;margin:0px;z-index:" + ++this.MovingObjZIndex + "\" ondragstart=\"return false\">"); ;

            var ObjTitle = document.createElement("<div style=\"width:" + (Width - 1) + "px;height:24px;background-color:#003366;border:1px solid #cacaca;border-right:0px solid #003366;margin:0px;padding:0px;display:table-cell;vertical-align:middle;\" ondragstart=\"return false\" onselectstart=\"return false\">");
            var ObjTitleLeft = document.createElement("<div style=\"width:" + (Width - 22) + "px;height:24px;float:left;margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;color:#ffffff;font-weight:bold;font-size:12px;display:table-cell;vertical-align:middle;background-color:transparent;\" onmousedown=\"GJS.MouseDownTitleObject(this)\" ondragstart=\"return false\" onselectstart=\"return false;\">");
            var ObjTitleRight = document.createElement("<div style=\"width:18px;height:20px;float:right;margin:4px 0px 0px 0px;padding:0px 0px 0px 0px;\">");

            ObjTitleLeft.appendChild(document.createElement("<img src=\"/Image/null.gif\" style=\"position:absolute;width:" + (Width - 22) + "px;height:18px;padding:0px;margin:0px;z-index:1;background-color:transparent;\" />"));
            ObjTitleLeft.appendChild(document.createElement("<img src=\"/Image/Icon_DhtmlWindowTitle.png\" style=\"width:18px;height:18px;padding:0px;margin:0px 5px 0px 5px;\" />"));
            ObjTitleLeft.appendChild(document.createTextNode(title));
            ObjTitleRight.appendChild(document.createElement("<img src=\"/Image/btnX.gif\" id=\"\" style=\"width:16px;height:14px;margin:2px 4px 0px 0px;cursor:pointer;\" onmousedown=\"javascript:this.src='/Image/btnXDown.gif';\" onmouseup=\"javascript:this.src='/Image/btnX.gif';GJS.RemoveDhtmlWindows(this, '" + rootObjID + "', '" + objID + "');\" onmouseout=\"javascript:this.src='/Image/btnX.gif';\" alt=\"\" />"));

            ObjTitle.appendChild(ObjTitleLeft);
            ObjTitle.appendChild(ObjTitleRight);

            Obj.appendChild(ObjTitle);

            var ObjContents = document.createElement("<div style=\"width:" + (Width - 2) + "px;height:" + (Height - 28) + "px;background-color:#ffffff;border:1px solid menu;display:block;overflow-y:" + scrollType + "\">");
            ObjContents.appendChild(this.GetObjById(objID));

            Obj.appendChild(ObjContents);

            document.body.appendChild(Obj);
            window.event.cancelBubble = true;
        }
    }

    // DHTML 원도우 - 닫기		********************************************************************
    this.RemoveDhtmlWindows = function (obj, rootObjID, objID)
    {
        var RootObj = this.GetObjById(rootObjID);
        var IncludedObj = this.GetObjById(objID);

        RootObj.appendChild(IncludedObj);

        obj.parentElement.parentElement.parentElement.removeNode(true);

        window.event.cancelBubble = true;
    }

    // DHTML 원도우 - 외부에서 닫기	****************************************************************
    this.RemoveDhtmlWindows_Force = function (rootObjID, objID)
    {
        var RootObj = this.GetObjById(rootObjID);
        var IncludedObj = this.GetObjById(objID);

        RootObj.appendChild(IncludedObj);

        this.GetObjById(objID + "_V").removeNode(true);

        window.event.cancelBubble = true;
    }


    // 웹서비스 호출 결과 체크		****************************************************************
    this.CheckWSResult = function(result)
    {
        if (result.error)
        {
            var xfaultcode = result.errorDetail.code;
            var xfaultstring = result.errorDetail.string;
            var xfaultsoap = result.errorDetail.raw;

            alert(xfaultcode + " \n\n " + xfaultstring + " \n\n " + xfaultsoap);
            return false;
        }
        else
        {
            GJS.SetResultSet(result);

            if (GJS.SOF == "F")
            {
                alert("ERROR : 웹서비스 처리 에러 \n\n" + GJS.EMS)
                return false;
            }
            else {
                return true;
            }
        }
    }

    // 웹서비스의 리턴셋을 객체화하여 GJS에 세팅		************************************************
    this.SetResultSet = function (resultXml) {
        var XmlDoc;
        var DocRoot;

        this.SOF = $.xmlDOM(resultXml).find("Root > SOF").text();
        this.EFR = $.xmlDOM(resultXml).find("Root > EFR").text();
        this.ACT = $.xmlDOM(resultXml).find("Root > ACT").text();
        this.EMS = $.xmlDOM(resultXml).find("Root > EMS").text();

        var parser = new DOMParser();
        XmlDoc = parser.parseFromString(resultXml, "text/xml");
        var XmlDT = XmlDoc.getElementsByTagName("DT");
        this.DS = XmlDT;

//        if ($.browser.msie) {
//            XmlDoc = new ActiveXObject("Microsoft.XMLDOM");
//            XmlDoc.async = false;
//            XmlDoc.loadXML(resultXml);
//            DocRoot = XmlDoc;
//            this.DS = DocRoot.childNodes[4];
//        }
//        else {
//            var parser = new DOMParser();
//            XmlDoc = parser.parseFromString(resultXml, "text/xml");
//            var XmlDT = XmlDoc.getElementsByTagName("DT");
//            this.DS = XmlDT;
//        }

        // this.DS = DocRoot.childNodes[4];

        //        this.SOF = DocRoot.childNodes[0].text;
        //        this.EFR = DocRoot.childNodes[1].text;
        //        this.ACT = DocRoot.childNodes[2].text;
        //        this.EMS = DocRoot.childNodes[3].text;
        //        this.DS = DocRoot.childNodes[4];
    }

    // XML 리턴셋을 생성		************************************************************************
    this.CreateResultSet = function (sof, efr, act, ems, dts)
    {
        return "<?xml version='1.0' encoding='euc-kr'?><Root><SOF>" + sof + "</SOF><EFR>" + efr + "</EFR><ACT>" + act + "</ACT><EMS>" + ems + "</EMS><DS>" + dts + "</DS></Root>";
    }

    // 일반적으로 발생된 에러		********************************************************************
    function ShowError(methodName, e)
    {
        alert("Error Method = " + methodNamed
				+ "\n\nDescription = " + e.description
				+ "\nMessage = " + e.message
				+ "\nName = " + e.name
				+ "\nNumber = " + e.number
		);
    }

    // 일반적으로 발생된 에러		********************************************************************
    function Error(message)
    {
        alert(message);
    }

    //	객체의 ID를 통해 객체 반환		************************************************************
    this.GetObjById = function (id)
    {
        return document.getElementById(id);
    }

    //	객체의 Name 통해 객체 반환		************************************************************
    this.GetObjsByName = function (name)
    {
        return document.getElementsByName(name);
    }

    //	유효성검사 - 숫자형		************************************************************
    this.ValidOnlyNumeric = function (obj)
    {
        if (obj.value != '' && obj.value.match(/[0-9-]+/g) != obj.value)
        {
            alert('숫자만 사용할 수 있습니다');
            obj.value = ''
            obj.focus()
            return;
        }
    }

    // 유효성검사 - 한글입력 불가  ***************************************************************
    this.ValidNoString = function (obj)
    {
        var reg = /[A-Za-z0-9]/;

        if (reg.exec(obj.value))
        {
            return true;
        }
        else
        {
            alert("한글을 입력할수 없습니다.");
            obj.value = '';
            obj.focus();
            return false;
        }
    }

    // 유효성 검사 - 빈공백 불가 ******************************************************************
    this.ValidBlank = function (obj)
    {
        var reg = /\s$/;

        if (reg.exec(obj.value))
        {
            return true;
        }
        else
        {
            alert("공백은 허용하지 않습니다.");
            obj.value = '';
            obj.focus();
            return false;
        }
    }

    // 유효성 검사 - 빈공백 불가/영문/숫자만 가능 ***************************************************
    this.ValidOnlyNumEng = function (obj)
    {
        //var reg = /^[A-Za-z0-9]{4,10}$/;
        var chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

        if (GJS.ContainsCharsOnly(obj, chars))
        {
            return true;
        }
        else
        {
            alert("영문/숫자 조합을 사용하세요");
            obj.value = '';
            obj.focus();
            return false;
        }
    }

    // 연속4개의 값을 친거 확인 ********************************************************
    this.ValidateDupCount = function (obj)
    {
        var Dupcount = 1;
        var temp;
        var BeforeTemp;

        for (var i = 1; i < obj.value.length; i++)
        {
            temp = "" + obj.value.substring(i, i + 1);
            BeforeTemp = "" + obj.value.substring(i - 1, i);

            if (BeforeTemp == temp)
            {
                Dupcount = Dupcount + 1;
                if (Dupcount >= 4)
                {
                    alert("연속된 문자를 입력하시면 안됩니다.");
                    obj.focus();
                    return false;
                }
            }
            else
            {
                Dupcount = 1;
            }
        }
        return true;
    }

    /****************************************************************************
        유효성검사 - 유저ID 체크 유효성 검사 

        유저ID는 6자이상 ~ 20자 이하로 영문, 숫자 조합으로 아이디를 체크함
    ****************************************************************************/
    this.ValidUserID = function (obj)
    {
    	if(obj.value.length < 6 || obj.value.length > 20)
    	{
    		alert("아이디는 6~20자리 입니다.");
    		obj.value = "";
    		return false;
    	}

    	if(GJS.ValidNoString(obj) && GJS.ValidOnlyNumEng(obj))
    	{
    		return true;
    	}
    	else
    	{
    		return false;
    	}
    }

    // 패스워드 확인 ********************************************************
    this.ValiduserPwd = function (obj)
    {
        if (GJS.ValidNoString(obj) && GJS.ValidOnlyNumEng(obj) && GJS.ValidateDupCount(obj))
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    /******************************************************************************
      입력값이 특정 문자(chars)만으로 되어있는지 체크

      특정 문자만 허용하려 할 때 사용
      ex) if (!containsCharsOnly(form.blood,"ABO")) 
          {
             alert("혈액형 필드에는 A,B,O 문자만 사용할 수 있습니다.");
          }
    *********************************************************************************/
    this.ContainsCharsOnly = function(input, chars)
    {
        for (var inx = 0; inx < input.value.length; inx++)
        {
            if (chars.indexOf(input.value.charAt(inx)) == -1)
                return false;
        }
        return true;
    }

    //   입력값이 알파벳 대문자인지 체크  ************************************************************
    this.IsUpperCase = function(input)
    {
        var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        return GJS.ContainsCharsOnly(input, chars);
    }

    //   입력값이 알파벳 소문자인지 체크  ***********************************************************
    this.IsLowerCase = function(input)
    {
        var chars = "abcdefghijklmnopqrstuvwxyz";
        return GJS.ContainsCharsOnly(input, chars);
    }

    //   입력값에 숫자만 있는지 체크    ************************************************************
    this.IsNumber = function(input)
    {
        var chars = "0123456789";
        return GJS.ContainsCharsOnly(input, chars);
    }

    //   입력값이 이메일 형식인지 체크 ************************************************************
    this.IsValidEmail = function (input)
    {
    	var regExp = /^((\w|[\-\.])+)@((\w|[\-\.])+)\.([A-Za-z]+)$/;

    	if(!regExp.test(input))
    	{
    		return false;
    	}
    	else
    	{
    		return true;
    	}
    }

    //   입력값이 전화번호 형식(숫자-숫자-숫자)인지 체크    ******************************************
    this.isValidPhone = function(input)
    {
        var format = /^(\d+)-(\d+)-(\d+)$/;
        return isValidFormat(input, format);
    }

    //  닷넷 라디오버튼 리스트 컨트롤 선택된값 ******************************************
    this.GetRadioButtonValue = function(obj)
    {
        var rtnVal = "";
        var input = obj.getElementsByTagName("input");

        for (var i = 0; i < input.length; i++)
        {
            if (input.item(i).checked)
                rtnVal = input.item(i).value;
        }

        return rtnVal;
    }

    // '개발중' 팝업호출 ******************************************
    this.GetTest = function ()
    {
        alert("개발중");
        location
        return false;
    }

    // 경로이동  **************************************************
    this.Location = function (href)
    {
        location.href = href;
    }

    // TR 객체의 RollOver		************************************************************************
    this.RollOver = function (obj, number)
    {
        var EventType = event.type;

        if (EventType == "mouseover")
        {
            obj.className = "Over_" + number;
        }
        else
        {
            obj.className = "Out_" + number;
        }
        event.cancelBubble = true;
    }

    // TR 객체의 RollOver		****************************************************************
    this.RollOver01 = function (obj)
    {
        var EventType = event.type;

        if (EventType == "mouseover")
        {
            obj.style.backgroundColor = "#eaf2f8";
        }
        else
        {	
            obj.style.backgroundColor = "transparent";
        }
        event.cancelBubble = true;
    }

    // 레이블 열기   *******************************************************************************
    this.CoverPopup = function()
    {
    	document.getElementById('mybus_layer').style.display = "block";
    }

    // 레이블 닫기   *****************************************************************************
    this.CoverHide = function()
    {
        document.getElementById('mybus_layer').style.display = "none";
    }

    /********************************************************************************************
       특정 길이 이상일 경우 선택한 객체로 포커스를 이동 시킴.
       obj1         : 길이를 검색할 객체
       , obj2       : 포커스를 이동시킬 객체
       , length     : 길이

    *********************************************************************************************/
    this.RemoveFocus = function (obj1, obj2, length)
    {
        if (obj1.value.length == length)
        {
            obj2.focus();
        }
    }
}

