
/****************************************************/
/*           OpenPath PageBuilder                   */
/*       WRITTEN BY Chih-Shyang Chang               */
/*           2000/12/13                             */
/*      本程式受著作權法保護，侵權必究              */
/****************************************************/
// Purpose: Implement XMLHTTP submission mechanism

var __xmlhttp_serverConnecting = false;
/********************************************************************/
/* submitObject Handling Function                                   */
/********************************************************************/
function submitObject()
{
  /* properties */
  this.sourceFrame = window.name;
  this.targetWindow = '';
  this.outputStyle = 'Modal Dialog';
  this.progID = '';
  this.command = '';
  this.actionURL = '';
  this.dialogProp = '';
  this.msgToSubmit = null;
  this.queryStrings = new Array();
  this.showProgBar = true;
  this.responseText = '';
  this.responseXML = null;

  /* methods */
  this.addQueryString = __addQueryString;
  this.removeQueryString = __removeQueryString;
  this.getQueryStringValue = __getQueryStringValue;
  this.submitCommand = __submitCommand; // return a XML string
}

  // SAMPLE DATA:
  // <UniMSG>
  //    <submitObject>
  //       <sourceFrame></sourceFrame>
  //       <targetWindow></targetWindow>
  //       <outputStyle></outputStyle>
  //       <progID></progID>
  //       <command></command>
  //       <actionURL></actionURL>
  //       <dialogProp></dialogProp>
  //       <queryStrings>
  //         <Name1>Value1</Name1>
  //         <Name2>Value2</Name2>
  //         ...
  //       </queryStrings>
  //    </submitObject>
  //    ....   User data
  // </UniMSG>

function __submitCommand()
{
  if (this.actionURL == '') return null;

  var objXML = null;
  if (this.msgToSubmit == null)
    objXML = new OpenPathXML();
  else
    objXML = this.msgToSubmit;

  //fnAppendProfile(objXML);
  objXML.generatePath('submitObject');
  objXML.generate('submitObject/sourceFrame', this.sourceFrame);
  objXML.generate('submitObject/targetWindow', this.targetWindow);
  objXML.generate('submitObject/outputStyle', this.outputStyle);
  objXML.generate('submitObject/progID', this.progID);
  objXML.generate('submitObject/command', this.command);
  objXML.generate('submitObject/actionURL', this.actionURL);
  objXML.generate('submitObject/dialogProp', this.dialogProp);

  objXML.generatePath('submitObject/QueryStrings');
  for (var i=0; this.queryStrings != null && i < this.queryStrings.length; i++)
    objXML.generate('submitObject/QueryStrings/' + this.queryStrings[i].name, this.queryStrings[i].value);

  switch (this.outputStyle.toLowerCase())
  {
    case 'current page': // current page
      __xmlhttp_serverConnecting = true;
      if (this.showProgBar) {
          var lang = "";
          switch (document.defaultCharset)
          {
            case 'big5': // Chinese
              lang = "";
              break;
            case 'iso-8859-1':
              lang = "_ENG";
              break;
            default:
              lang = "_ENG";
              break;
          }
          window.showModelessDialog("/OPPBHome/lib/dhtmlobjs/progbar/progbar" + lang + ".htm", window, "center:yes;help:no;resizable:no;status:no;scrollbars:0");
      }
      // 透過 XMLHTTP 物件呼叫 Server 端的 ASP Page 來執行存檔作業
      var objHTTPRequest = new ActiveXObject("Microsoft.XMLHTTP");

      // Open a http connection to the URL in strURL
      objHTTPRequest.Open("POST", this.actionURL, false, null, null);
      var res = objXML.getXML();
      if (__isASP(this.actionURL)) {
        objHTTPRequest.send(res);
        var xmlDoc = objHTTPRequest.responseXML;
        this.responseText = objHTTPRequest.responseText;

        __xmlhttp_serverConnecting = false;
        return xmlDoc.xml;
      } else {
        res = "xUniMSG=" + urlencoding(res);
        objHTTPRequest.setRequestHeader("CONTENT-TYPE","application/x-www-form-urlencoded");
        objHTTPRequest.send(res);
      	this.responseText = objHTTPRequest.responseText;
        this.responseXML = objHTTPRequest.responseXML;

        __xmlhttp_serverConnecting = false;
        return bytes2bstr(objHTTPRequest.responseBody);
      }
    case 'new page': // new page
      if (mFormSubmit == null) return null;
      if (mFormSubmit.xUniMSG == null) return null;
      mFormSubmit.xUniMSG.innerText = objXML.getXML();
      mFormSubmit.action = this.actionURL;
      //mFormSubmit.target = this.sourceFrame;
      mFormSubmit.target = this.sourceFrame;
      mFormSubmit.submit();
      return null;
    case 'modal dialog': // modal dialog
      var aURL = __prepareURL(this.actionURL, objXML.getXML());
      if (aURL.length > 2370) {
        alert("SERIOUS ERROR!!! URL length is larger than 2370 bytes. Please contact technical support team!");
        return null;
      }
      var ret = window.showModalDialog(aURL, window, "center:yes;help:no;resizable:no;status:no;");
      return ret;
    case 'new window': // new window
       if(this.actionURL.indexOf('.mht') > 0 || this.actionURL.indexOf('.eml') > 0){//2006-11-30 修正 無法正常檢視mht 及 eml的問題
       		//alert("mht");
       		var aURL1 = this.actionURL;
       		//aURL1 = aURL1.replace('CustomerAttach','IISCustAttach'); //外部來信的附件改由 IIS 設的虛擬目錄來開啟 
       		//aURL1 = aURL1.replace('OperatorAttach','IISOprAttach'); //承辦人回信的附件改透過 IIS 設的虛擬目錄來開啟
	        var newwin1 = window.open(aURL1, this.targetWindow, this.dialogProp, true);
	        return newwin1;
       }else{
   
	      var aURL = __prepareURL(this.actionURL, urlencoding(objXML.getXML()));
	      if (aURL.length > 2370) {
	        alert("SERIOUS ERROR!!! URL length is larger than 2370 bytes. Please contact technical support team!");
	        return null;
	      }
      
	      var newwin = window.open(aURL, this.targetWindow, this.dialogProp, true);
	      return newwin;
      }
    default:
      return null;
  }
}

function __isASP(aURL)
{
  var idx = aURL.toLowerCase().indexOf(".asp");
  if (idx > 0) return true;
  else return false;
}

function __prepareURL(aURL, xmlStr)
{
  var mk = (aURL.indexOf('?', 0) > 0) ? '&' : '?';
  return aURL + mk + 'xUniMSG=' + xmlStr;
}

function __queryString(name, value)
{
  this.name = name;
  this.value = value;
}

function __addQueryString(name, value)
{
  var qs = new __queryString(name, value);
  /* IE 5.5 supported */
  /*this.queryStrings.push(qs);*/

  var newary = new Array(this.queryStrings.length + 1);
  for (var i=0; i < this.queryStrings.length; i++)
    newary[i] = this.queryStrings[i];
  newary[newary.length -1] = qs;
  this.queryStrings = newary;
}

/* remove first element that match the name */
function __removeQueryString(name)
{
  var idx = -1;
  for (var i=0; i < this.queryStrings.length; i++) {
    if (this.queryStrings[i].name == name) {
      idx = -1;
      break;
    }
  }

  if (idx >= 0) {
    var newAry = new Array(this.queryStrings.length - 1);
    var j = 0;
    for (var i=0; i < this.queryStrings.length; i++) {
      if (i != idx) {
        newAry[j] = this.queryStrings[i];
        j++;
      }
    }
    this.queryStrings = newAry;
  }
}

function __showProgressBar()
{
  __xmlhttp_serverConnecting = true;
  window.showModalDialog("/OPPBHome/lib/dhtmlobjs/progbar/progbar.htm", window, "center:yes;help:no;resizable:no;status:no;scrollbars:0");
  __xmlhttp_serverConnecting = false;
}

function __getQueryStringValue(name)
{
  var idx = -1;
  for (var i=0; i < this.queryStrings.length; i++) {
    if (this.queryStrings[i].name == name) {
      return this.queryStrings[i].value;
    }
  }

  return '';
}


function fnAppendProfile(objXML)
{
	try
	{
		if(window.parent.frames("AssistingFrame"))
		{
			var obj=window.parent.frames("AssistingFrame");
			objXML.generateAttribute("/UniMSG","UserID",obj.fnReqProfile("UserID"));
			objXML.generateAttribute("/UniMSG","RoleID",obj.fnReqProfile("RoleID"));
			objXML.generateAttribute("/UniMSG","UnitID",obj.fnReqProfile("UnitID"));
		}
	}
	catch(e)
	{
	}
}