﻿//document.oncontextmenu = function(){return false}
//document.onselectstart = function(){return false} 
//document.ondragstart = function(){return false} 
//if(document.layers)
//{ 
//  window.captureEvents(Event.MOUSEDOWN); 
//  window.onmousedown = function(e){ 
//    if(e.target==document)  return false; 
//  }
//} 
//else
//{ 
//  document.onmousedown = function(){return false} 
//} 

//******************************************************
// Public 클래스 선언부
//******************************************************
Public = function()
{
    this.Grid;
    this.Control;
    this.WebServicePath;
}

// 기본 경로 속성 값 할당
Public.WebServicePath = "/Library/WebServices/";

//// GSM 절대 경로
//Public.GSMPath = GetGsmUrl();
//Public.GSMAppPath = GetGsmAppPath();
//Public.GSMPathNET = GetGsmNetUrl();

//// FRONT 절대경로
//Public.FRONTPath = GetFrontUrl();

//// Image절대경로
//Public.IMAGEPath = GetImagePath();

//// UploadImage절대경로
//Public.UploadIMAGEPath = GetUploadImagePath();

Public.LastRequestTime = new Date();

//******************************************************
//Public 클래스의 속성으로 Control 클래스 정의
//******************************************************
Public.Control = function()
{
    this.ENABLED_COLOR;     
    this.DISABLED_COLOR;
    this.READONLY_COLOR;
    this.MENU_BAR_COLOR;
    this.TITLE_BAR_COLOR;
    this.SUBTITLE_BAR_COLOR;
}

//******************************************************
//Public 클래스의 속성으로 Grid 클래스 정의
//******************************************************
Public.Grid = function()
{

}

    
// Control 클래스 속성 초기화
Public.Control.ENABLED_COLOR = "#FFFFFF";
Public.Control.DISABLED_COLOR = "#A9A9A9";
Public.Control.READONLY_COLOR = "#E6E6E6";
Public.Control.MENU_BAR_COLOR = "#00008B";
Public.Control.TITLE_BAR_COLOR = "#688CCE";
Public.Control.SUBTITLE_BAR_COLOR = "#00008B";


//******************************************************
//[공통] Grid 클래스 메서드 : VSFlexGrid 를 출력하는 함수
//******************************************************
Public.Grid.RenderEmbedGrid = function (gridName, width, height)
{
    var snippet =   "<OBJECT classid =\'clsid:5220cb21-c88d-11cf-b347-00aa00a28331\' VIEWASTEXT>" +
                    "<PARAM Name=\'LPKpath\' VALUE=\'/library/ocx/vsflex8u.lpk\'></OBJECT>" +
                    "<OBJECT CLASSID='clsid:3705B4E2-8FCB-4A21-8CCE-5D6A98C32456' id='" + gridName + "'" +
                    " codebase='/library/ocx/vsflex8u.cab#version=8.0.20051.216' " +
                    " style='LEFT: 0px; TOP: 0px; WIDTH: " +  width + "px; " + 
                    " HEIGHT: " + height + "px'>" + 
                    " <PARAM NAME='AllowUserResizing' VALUE='1'> " +
                    " <PARAM NAME='wmode' VALUE='transparent'> " +
                    " <PARAM NAME='BackColorBkg' VALUE='16777215'></OBJECT>";

    document.write(snippet);    
} 

//******************************************************
//[공통] Grid 클래스 메서드 : 그리드의 특정셀을 편집모드로 변경한다
//******************************************************
Public.Grid.SetEditCell = function(gridID, columnArray)
{
  var grid = document.getElementById(gridID);
  if(grid.rows == 1) return;
  if(columnArray.length == 0) return;
  
  var col = grid.col;
  for(var i = 0; i < columnArray.length; i++)
  {
    if(col == columnArray[i])
    {
        grid.editcell();
    }
  }
}


//*****************************************************
//[선택(추천)] 그리드 기본설정값 그리드명 , 구분자(설정하지 않으면 TAB으로 설정)
//******************************************************
Public.Grid.InitializeLayout = function(targetgrid_id)
{
  var targetgrid = document.getElementById(targetgrid_id);
  
  targetgrid.FontName = "돋움";
	targetgrid.FontSize = 10;
	targetgrid.Editable = 1;        //flexEDKbdMouse
	targetgrid.SelectionMode = 1;
	targetgrid.ExplorerBar = 3;      //flexExSortAndMove : 그리드 정렬
	targetgrid.Rows = 1;
	
	targetgrid.ClipSeparators = "\r\n";

	targetgrid.RowHeight(0) = 300;
	targetgrid.ColWidth(0) = 200;
}


//******************************************************
//[선택(추천)] 그리드의 row 사이즈를 pixel 단위로 설정
//******************************************************
Public.Grid.ResetColumnsSize = function (targetgrid_id)
{
  var targetgrid = document.getElementById(targetgrid_id);  
  var colcount;
  
  colcount = targetgrid.Cols;
  
  for(var i = 1; i <= colcount-1; i++)
  {
    targetgrid.ColWidth(i) =  targetgrid.ColWidth(i) * 12;
  }
}


//************************************************************************
//[선택(추천)] 그리드의 특정컬럼의 BACKCOLOR를 변경, underline (cogito 추가)
//SetOptionInventoryQuantityResult
//*************************************************************************
Public.Grid.FillCellBackColor = function (Grid_id, Row, sCol, eCol, backcolor, Rowheight)
{
  var Grid = document.getElementById(Grid_id);  
  
	//if (backcolor == "") backcolor = "12632256";
	
	Grid.Select(Row,sCol,Row,eCol);
	Grid.FillStyle = 1;
	Grid.CellBackColor = backcolor;
	Grid.Select(1,1);
	if (Rowheight != "")  Grid.RowHeight(Row) = Rowheight;
}


//************************************************************************
//[선택(추천)] 그리드의 특정컬럼의 FORECOLOR를 변경, underline (cogito 추가)
//SetOptionInventoryQuantityResult
//*************************************************************************
Public.Grid.FillCellForeColor = function (Grid_id, Row, sCol, eCol, forecolor, Rowheight)
{
  var Grid = document.getElementById(Grid_id);  
  
	//if (backcolor == "") backcolor = "12632256";
	
	Grid.Select(Row,sCol,Row,eCol);
	Grid.FillStyle = 1;
	Grid.CellFontUnderLine = true;
	Grid.CellForeColor = forecolor;
	Grid.Select(1,1);
	if (Rowheight != "")  Grid.RowHeight(Row) = Rowheight;
}


//************************************************************************
//[선택(추천)] 그리드의 타이틀 셋팅
//*************************************************************************
Public.Grid.MakeGridTitle = function (Grid_id, cols, title)
{
	var i, pos, pretitle;
  var strTitle = title.split("\r");
  var Grid = document.getElementById(Grid_id);  
  	
	for (i = 1; i <= cols; i++)
	{
		Grid.TextMatrix(0, i) = Utils.Trim(strTitle[i - 1]);
		Grid.Select(0, i, 0, i);
		Grid.CellAlignment = 1;
		Grid.Colkey(i) = Utils.Trim(strTitle[i - 1]);
	}
}


//******************************************************
//[공통] Ajax 호출 시, 예외발생하면 호출되는 콜백 함수
//******************************************************
Public.OnAjaxCallFailed = function (error, userContext, methodName) 
{
    if(error !== null) 
    {        
        var stackTrace = error.get_stackTrace();
        var message = error.get_message();
        var statusCode = error.get_statusCode();
        var exceptionType = error.get_exceptionType();
        var timedout = error.get_timedOut();
        
        //alert("An error occurred: " + message);
//        top.location.reload();
//        
//        if (message == "Authentication failed.")
//        {
//            top.location.reload();
//        }
//        else
//        {
//            top.location.reload();
//        }
       
        // Display the error.    
        var RsltElem = 
            document.getElementById("Results");
        if(RsltElem)
        {
            RsltElem.innerHTML = 
            "Stack Trace: " +  stackTrace + "<br/>" +
            "Service Error: " + message + "<br/>" +
            "Status Code: " + statusCode + "<br/>" +
            "Exception Type: " + exceptionType + "<br/>" +
            "Timedout: " + timedout;
        }
    }
}

//******************************************************
//[공통] 브라우저에 내장된 XMLHTTP 개체를 반환하는 메서드(직접 호출하지 말 것)
//******************************************************
Public.GetXMLHTTP = function()
{
    //Firefox를 위한 코드
    if(window.XMLHTTPRequest) return new XMLHTTPRequest();

    // IE 6이하를 위한 코드
    var versions = [  
      "MSXML2.XMLHTTP.5.0",
      "MSXML2.XMLHTTP.4.0",
      "MSXML2.XMLHTTP.3.0",
      "MSXML2.XMLHTTP",
      "Microsoft.XMLHTTP"
    ];

    for(var i = 0; i < versions.length; i++)
    {
      try
      {
        var oXMLHTTP = new ActiveXObject(versions[i]);
        return oXMLHTTP;
      }
      catch(e){}
    }

    throw new Error("No XMLHTTP");
}    

//******************************************************
//[공통] 특정 URL로 동기적인 Get 호출을 수행한 후 결과 HTML을 받아오는 메서드
//******************************************************
Public.HttpRequestSync = function(url)
{
    //var url = "http://gsm.gmarket.co.kr/gsm_new/util/getServerTime.asp";
    
    var xmlHttp = Public.GetXMLHTTP();
    xmlHttp.open("GET", url, false);
    xmlHttp.send(null);
    
    return xmlHttp.responseText;
}


//******************************************************
//[공통] 특정 웹 메서드로 동기적인 Post 호출을 수행한 후 결과 XML을 받아오는 메서드
//******************************************************
Public.CallWebMethodSync = function(pageName, webMethodName, argument)
{
    var svc = Public.WebServicePath + pageName + "/" + webMethodName;
    
    var xmlHttp = Public.GetXMLHTTP();
    xmlHttp.open("POST", svc, false);
    xmlHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');

    xmlHttp.send(argument);
    
    var xml = Public.ParseXml(xmlHttp.responseText);
    json = xml2json(xml);
    json = json.replace("undefined","");
    
    var result = eval( "(" + json + ")" );

    return result;
}

//******************************************************
//[공통] 특정 웹 메서드로 동기적인 Post 호출을 수행한 후 결과 JSON을 받아오는 메서드
// argument의 포맷은 params = '{"good_no":"109980284","cust_no":"100326027"}';
//******************************************************
Public.CallWebServiceToGetJSON = function(pageName, webMethodName, argument)
{
    //잘 동작하지만, 매번 동기호출 시마다 수행되므로 성능 문제가 있음
//    var currentCheckTime = new Date();
//    var timespan = currentCheckTime - Public.LastRequestTime;
//    timespan = timespan/1000;
//    if(timespan > 10)
//    {
//        debugger
        //var bFlag = Public.HttpRequestSync(Public.GSMPathNET + "/GMKT.GSM.Web/IsAuthenticated.aspx");
        //alert(bFlag);
        //세션이 끊긴 사용자라면
        //if(bFlag == "False")
        {
        //    top.location.reload();
        //    return;
        }    
//        //세션이 유지된 사용자라면
//        Public.LastRequestTime = new Date();
//    }
       
    var result;
    var svc = Public.WebServicePath + pageName + "/" + webMethodName;    
   
    var xmlHttp = Public.GetXMLHTTP();
    xmlHttp.open("POST", svc, false);
    xmlHttp.setRequestHeader('Content-Type','application/json');

    //try 
    //{
	    xmlHttp.send(argument);
	    result = eval( "(" + xmlHttp.responseText + ")" );
    /*}
    catch (e) {
        if(e.number == "-2146697208")
        {
            //지정된 리소스를 다운로드할 수 없습니다. 에러
            //alert("서버에 잠시 이상이 생겨 호출이 실패하였습니다");
            alert(e.description);
            return;
        }
    }*/
    
    return result;
}


//******************************************************
//[내부] XML 문자열을 실제 XML DOM으로 변환하는 메서드
//******************************************************
Public.ParseXml = function(xml) {
   var dom = null;
   if (window.DOMParser) {
      try { 
         dom = (new DOMParser()).parseFromString(xml, "text/xml"); 
      } 
      catch (e) { dom = null; }
   }
   else if (window.ActiveXObject) {
      try {
         dom = new ActiveXObject('Microsoft.XMLDOM');
         dom.async = false;
         if (!dom.loadXML(xml)) // parse error ..

            window.alert(dom.parseError.reason + dom.parseError.srcText);
      } 
      catch (e) { dom = null; }
   }
   else
      alert("cannot parse xml string!");
   return dom;
}


/*-------------------------------------------------------------
  Function Name : DisabledAnchor
  Parameter     : ctrlID - 컨트롤 ID
                  strhref - href
                  isdisaled - true, false
  Description   : anchor 컨트롤이 disabled 될때 href 이벤트를 막는다.
  Control       : 
  Revision His. : 
-------------------------------------------------------------*/
Public.DisabledAnchor = function (ctrlID, strhref, isdisaled)
{
  var ctrlObj = document.getElementById(ctrlID);
  
  if(isdisaled)
  {
    ctrlObj.href = "javascript:Utils.Dummy()";
    ctrlObj.style.cursor = "default";
    ctrlObj.disabled = true;
  }
  else
  {
    ctrlObj.href = strhref;
    ctrlObj.style.cursor = "hand";
    ctrlObj.disabled = false;
  }
}
