// constants
var sServicePage = "WebService.asp";
var sProgID_XMLHTTP = "Msxml2.XMLHTTP";

var iMinSize = 8192;
//private functions
function IXDom(blThreadMode)
{
  this.isFreeThreaded = blThreadMode;
  if (this.isFreeThreaded) this.xObject = createClientFTXMLDOMDocument();
  else if (!this.isFreeThreaded) this.xObject = createClientSTXMLDOMDocument();
  this.currentNode = "";
  this.nodeLists = "";
  this.loadXML = loadXMLStream;
  this.createRoot = createXRoot;
  this.selectNode = selectElements;
  this.getNamedValue = getValuebySelection;
  this.addNode = addXNode;
  this.addAttr = addXAttr;
}

function IUpload(sFileName) //Upload file interface.
{
  this.fileName = sFileName;
  this.file = null;
  this.fileSize = 0;
  this.steps = 0;
  this.fileOpen = initializeFileObject;
  this.fileClose = finalizeFileObject;
  this.sendfilefragment = sendingStream;
  this.fragmentSize = 8192;   
  this.refreshPBar = refreshProgressBar;

  function initializeFileObject()
  {
    this.file = new ActiveXObject("ADODB.Stream");
    this.file.Type = 1;
    this.file.Open();
    this.file.LoadFromFile(this.fileName);
    this.fileSize = this.file.Size;
    this.steps = (this.fileSize-(this.fileSize % this.fragmentSize))/this.fragmentSize+1;
    oReq = new IComm("startUpload"); 
    oReq.send();
    oReq = null;
  }
  
  function finalizeFileObject()
  {
  	this.file.Close();
  	this.file = null;
  	this.fileSize = 0;
  	this.steps = 0;
    oReq = new IComm("endUpload"); 
    oReq.send();
    oReq = null;
  }
  
  function sendingStream()
  {
  	var xStream, xNode;
    xStream = new ActiveXObject("Msxml2.DOMDocument");
    xNode = xStream.createNode(1,"file","");
    xStream.documentElement = xNode;
    xStream.documentElement.setAttribute("xmlns:dt", "urn:schemas-microsoft-com:datatypes");
    xNode = xStream.createNode(1, "stream", "");
    try {
      xNode.dataType = "bin.base64";
      xNode.nodeTypedValue = this.file.Read(this.fragmentSize);
    } catch(e) {alert(e.description);}
    xStream.documentElement.appendChild(xNode);
    oReq = new IComm("sendingStream", xStream); 
    oReq.send();
    return oReq.Response;
    xStream = xNode = null;
  }

  function refreshProgressBar(iNow)
  {
    var iInd = ((iNow+1)/this.steps*100)-(((iNow+1)/this.steps*100)%1);
    var sPBar = "<div id='pBar'align='center' style='color:yellow; background-color:blue; z-index:1; position:relative; top:0; width:"+iInd*3+"'>"+iInd+"%</div>";
	progressBar.innerHTML = sPBar;
  }
}

function IComm(sAction, oXForm)
{
  this.URL = sServicePage;
  this.Action = sAction;
  this.Form = oXForm;
  this.Response = "";
  this.send = sendXMLHTTP;
  
  function sendXMLHTTP() {
    var oXObj = new ActiveXObject(sProgID_XMLHTTP);
    oXObj.Open("post", this.URL+"?Action="+this.Action, false);
    if (this.Form!=null) oXObj.Send(this.Form);
    else if (this.Form==null) oXObj.Send();
    this.Response = oXObj.responseText;
  }
}

function hasError(sResponse)
{
  var iError = new IXDom(false);
  try {
    iError.loadXML(sResponse);
    if (iError.xObject.documentElement.nodeName=="error") {
  	  var oError = new Error();
  	  oError.name = iError.getNamedValue("/error/name");
  	  oError.number = iError.getNamedValue("/error/number");
 	  oError.description = iError.getNamedValue("/error/description");
  	  oError.message = iError.getNamedValue("/error/message");
      
      if (oError.number < 4112) Contents.innerHTML = "<p align='center'><span style='color:red'>"+oError.description+"</span></p>";
  	  else if ((4112 < oError.number) && (oError.number < 4352)) alert(oError.description);
  	  else if ( oError.number > 4352 ) { sReturnValue = window.confirm(oError.description); return sReturnValue*1+2;}
  	  else Contents.innerHTML = sResponse;
  	  return true;
    } else return false;
  } catch(e) {return;}
  iError = oError = null;
}

function requestForm(sMethod)
{
  this.Interface = new IXDom(false);
  this.Interface.createRoot("form");
  var sAction  = (arguments.length > 1) ? arguments[1] : false; 
  if (sAction) this.Interface.addAttr("Action", sAction);
  var aSel = document.all.tags("input");
  switch (sMethod) {
    case "checked" : {
      for (i=0; i<aSel.length; i++) {
        if ((aSel[i].className=="dataField")&&(aSel[i].type=="checkbox")&&(aSel[i].checked)) this.Interface.addNode(aSel[i].name, aSel[i].value);
  	  } break;
    }
    case "download" : {
      this.Interface.addAttr(document.getElementById("companyID").id, document.getElementById("companyID").value);
      for (i=0; i<aSel.length; i++) {
        if ((aSel[i].className=="dataField")&&(aSel[i].type=="checkbox")&&(aSel[i].checked)) this.Interface.addNode(aSel[i].name, aSel[i].value);
  	  } break;
    }
    default : {
	  for (i=0; i<aSel.length-1; i++) {
  	    if (aSel[i].className=="dataField") this.Interface.addNode(aSel[i].name, aSel[i].value);
      } break;
    }
  } this.Form = this.Interface.xObject;
  sAction = aSel = null;
}

function gotoURL(sURL)
{
  if (sURL != null) {
  window.location =sURL;
  } else return;
}

function actClearInput()
{
  var aDataFields = document.all.tags("input");
  for (i=0; i<aDataFields.length-1; i++) {
  	if (aDataFields[i].className=="dataField") aDataFields[i].value="";
  } aDataFields = null;
}

function getUserIDs()
{
  var oReq = new IComm("getUserIDs");
  oReq.send();
  if (hasError(oReq.Response)) return;
  var iUser = new IXDom(false);
  iUser.loadXML(oReq.Response);
  iUser.selectNode("//user");
  for (i=0; i<iUser.nodeLists.length; i++) {
    var oOption = document.createElement("option")
    Customer.options.add(oOption);
    oOption.value = iUser.nodeLists.item(i).getAttribute("id");
    oOption.innerText= iUser.nodeLists.item(i).getAttribute("displayName");
  } iUser = oReq = oOption = null;
}
//public functions
function fireAction()
{
  var sAction = event.srcElement.getAttribute("action");
  var sURL = event.srcElement.getAttribute("url");
  switch (sAction) {
    case "actLogin" : { actLogin(); break; }
    case "actLogout" : { actLogout(); break; }
    case "actCancel" : { actClearInput(); break; }
    case "actUploadFile" : { actUploadFile(); break;}
    case "actSubmitNewDownload" : { actSubmitNewDownload("newDownload"); break; }
    case "actDeleteFiles" : { actDeleteFiles("deleteFile"); break; }
    case "actSubmitPasswordChange" : { actSubmitPasswordChange(); break; }
    case "actSubmitNewAccount" : { actSubmitNewAccount(); break; }
	case "actDeleteAccounts" : { actDeleteAccounts(); break; }
    case "actResetPassword" : { actResetPassword(); break; }
    case "getDownLoadList" : { getDownLoadList(); break; }
    case "actSetToValid" : { actSetToValid(); break; }
    case "actSetToInvalid" : { actSetToInvalid(); break; }
    case "actDeleteDownloads" : { actDeleteDownloads(); break; }
    default : gotoURL(sURL);
  }
}

function actLogin()
{
  var iForm, oReq;
  iForm = new requestForm();
  oReq = new IComm("actLogin", iForm.Form);
  oReq.send();
  hasError(oReq.Response);
  if (oReq.Response == true) gotoURL("index.htm");
  iForm = oReq = null;
}

function actLogout()
{
  var oReq = new IComm("actLogout");
  oReq.send();
  gotoURL("index.htm");
  oReq = null;
}

function actSubmitPasswordChange()
{
  var iForm, oReq;
  iForm = new requestForm();
  oReq = new IComm("actSubmitPasswordChange", iForm.Form);
  oReq.send();
  hasError(oReq.Response);
  if (oReq.Response == true) gotoURL("OK.htm");
  iForm = oReq = null;
}

function isAdmin()
{
  var oReq = new IComm("isAdmin");
  oReq.send();
  hasError(oReq.Response);
  if (oReq.Response == true) return;
  oReq = null;
}

function isUser()
{
  var oReq = new IComm("isUser");
  oReq.send();
  hasError(oReq.Response);
  if (oReq.Response == true) return;
  oReq = null;
}

function checkLogin()//check login user.
{
  var oReq = new IComm("checkLogin"); 
  oReq.send();
  if (oReq.Response == false) return;
  else if (oReq.Response != false) PageHead.innerHTML = oReq.Response;
  oReq = null;
}

function getSiteMenu()//get SiteMenu according to the user.
{
  var oReq = new IComm("getSiteMenu"); 
  oReq.send();
  if (oReq.Response == false) alert(oReq.Response);
  else if (oReq.Response != false) MenuBar.innerHTML = oReq.Response;
  oReq = null;
}

function initPage()//initialization of the site.
{
  checkLogin();
  getSiteMenu();
}

function showDownload(iPageNumber)
{
  var oReq = new IComm("showDownload&iPage="+iPageNumber); 
  oReq.send();
  if (hasError(oReq.Response)) return;
  else Contents.innerHTML = oReq.Response;
  oReq = null;
}

function showAccounts(iPageNumber)
{
  var oReq = new IComm("showAccounts&iPage="+iPageNumber); 
  oReq.send();
  if (hasError(oReq.Response)) return;
  else if(document.getElementById("Content")) Content.innerHTML = oReq.Response;
  oReq = null;
}

function actDeleteTempfile()
{
  var oReq = new IComm("actDeleteTempfile"); 
  oReq.send();
  oReq = null;
}

function getChangePasswordForm()
{
  var oReq = new IComm("getChangePasswordForm"); 
  oReq.send();
  if (hasError(oReq.Response)) return;
  else Contents.innerHTML = oReq.Response;
  oReq = null;
}

function actSubmitNewAccount()
{
  var iForm, oReq;
  iForm = new requestForm();
  oReq = new IComm("actSubmitNewAccount", iForm.Form);
  oReq.send();
  hasError(oReq.Response);
  if (oReq.Response == true) gotoURL("admin_OK.htm");
  iForm = oReq = null;
}

function actResetPassword()
{
  var iForm, oReq;
  iForm = new requestForm("checked");
  oReq = new IComm("actResetPassword", iForm.Form);
  oReq.send();
  hasError(oReq.Response);
  if (oReq.Response == true) gotoURL("admin_OK.htm");
  iForm = oReq = null;
}

function actDeleteAccounts()
{
  var iForm, oReq;
  iForm = new requestForm("checked");
  oReq = new IComm("actDeleteAccounts", iForm.Form);
  oReq.send();
  hasError(oReq.Response);
  if (oReq.Response == true) gotoURL("admin_OK.htm");
  iForm = oReq = null;
}

function actUploadFile()
{
  if (fileName.value != "") {
    var oFile = new IUpload(fileName.value);
    oFile.fileOpen();
    for (i=0; i<oFile.steps; i++) {
      sResult = oFile.sendfilefragment();
      if (sResult==true) oFile.refreshPBar(i);
    }
    oFile.fileClose();
  }else return;
}

function actSubmitNewDownload(sAction)
{
  var iForm, oReq;
  iForm = new requestForm("", sAction);
  oReq = new IComm("actSubmitNewDownload", iForm.Form);
  oReq.send();
  sRValue = hasError(oReq.Response);
  if (sRValue == 3) { iForm = oReq = null; actSubmitNewDownload("newDownloadAW"); return;}
  else if (sRValue == 2) return;
  else if (oReq.Response == true) gotoURL("admin_OK.htm");
  iForm = oReq = null;
}

function getDownLoadList()
{
  if (UserID.value!="null") {
  var oReq = new IComm("getDownLoadList&sUserID="+UserID.value); 
  oReq.send();
  if (hasError(oReq.Response)) return;
  else Content.innerHTML = oReq.Response;
  oReq = null;
  } else alert("please select user.");
}

function actDeleteFiles(sAction)
{
  var iForm, oReq;
  iForm = new requestForm("checked", sAction);
  oReq = new IComm("actDeleteFiles", iForm.Form);
  oReq.send();
  sRValue = hasError(oReq.Response);
  if (sRValue == 3) { iForm = oReq = null; actDeleteFiles("deleteFileAW"); return;}
  else if (sRValue == 2) return;
  if (oReq.Response == true) gotoURL("admin_OK.htm");
  iForm = oReq = null;
}

function getFileList()
{
  var oReq = new IComm("getFileList");
  oReq.send();
  if (hasError(oReq.Response)) return;
  else Content.innerHTML = oReq.Response;
  oReq = null;
}

function actSetToInvalid()
{
  var iForm, oReq;
  if (document.getElementById("companyID")) {
    iForm = new requestForm("download");
    oReq = new IComm("actSetToInvalid", iForm.Form);
    oReq.send();
    hasError(oReq.Response);
    if (oReq.Response == true) gotoURL("admin_OK.htm");
    iForm = oReq = null;
  } else return;
}

function actSetToValid()
{
  var iForm, oReq;
  if (document.getElementById("companyID")) {
    iForm = new requestForm("download");
    oReq = new IComm("actSetToValid", iForm.Form);
    oReq.send();
    hasError(oReq.Response);
    if (oReq.Response == true) gotoURL("admin_OK.htm");
    iForm = oReq = null;
  } else return;
}

function actDeleteDownloads()
{
  var iForm, oReq;
  if (document.getElementById("companyID")) {
    iForm = new requestForm("download");
    oReq = new IComm("actDeleteDownloads", iForm.Form);
    oReq.send();
    hasError(oReq.Response);
    if (oReq.Response == true) gotoURL("admin_OK.htm");
    iForm = oReq = null;
  } else return;
}