﻿//string functions begin
  
function vbTrim(v) {
  var sc = "";
  if (typeof(vb_Trim) == "undefined") {
    sc += "Function vb_Trim(v)\n";
    sc += "  vb_Trim = Trim(v)\n";
    sc += "End Function\n";
    window.execScript(sc, "vbScript");
  }
  return vb_Trim(v);
}

function trim(v) {
  var s = v;
  while (s.length > 0) {
    if (s.substr(0, 1) == " ") s = s.substr(1); else break;
  }
  while (s.length > 0) {
    if (s.substr(s.length - 1, 1) == " ") s = s.substr(0, s.length - 1); else break;
  }
  return s;
}

function swapSymbol(source, find, replace) {
  var s = source;
  while (s.indexOf(find) != -1)
    s.replace(find, replace);
}

function convertChineseSymbol(v) {
  var s = v;
  s = s.replace(/Ａ/g, "A");
  s = s.replace(/Ｂ/g, "B");
  s = s.replace(/Ｃ/g, "C");
  s = s.replace(/Ｄ/g, "D");
  s = s.replace(/Ｅ/g, "E");
  s = s.replace(/Ｆ/g, "F");
  s = s.replace(/Ｇ/g, "G");
  s = s.replace(/Ｈ/g, "H");
  s = s.replace(/Ｉ/g, "I");
  s = s.replace(/Ｊ/g, "J");
  s = s.replace(/Ｋ/g, "K");
  s = s.replace(/Ｌ/g, "L");
  s = s.replace(/Ｍ/g, "M");
  s = s.replace(/Ｎ/g, "N");
  s = s.replace(/Ｏ/g, "O");
  s = s.replace(/Ｐ/g, "P");
  s = s.replace(/Ｑ/g, "Q");
  s = s.replace(/Ｒ/g, "R");
  s = s.replace(/Ｓ/g, "S");
  s = s.replace(/Ｔ/g, "T");
  s = s.replace(/Ｕ/g, "U");
  s = s.replace(/Ｖ/g, "V");
  s = s.replace(/Ｗ/g, "W");
  s = s.replace(/Ｘ/g, "X");
  s = s.replace(/Ｙ/g, "Y");
  s = s.replace(/Ｚ/g, "Z");
  
  s = s.replace(/ａ/g, "a");
  s = s.replace(/ｂ/g, "b");
  s = s.replace(/ｃ/g, "c");
  s = s.replace(/ｄ/g, "d");
  s = s.replace(/ｅ/g, "e");
  s = s.replace(/ｆ/g, "f");
  s = s.replace(/ｇ/g, "g");
  s = s.replace(/ｈ/g, "h");
  s = s.replace(/ｉ/g, "i");
  s = s.replace(/ｊ/g, "j");
  s = s.replace(/ｋ/g, "k");
  s = s.replace(/ｌ/g, "l");
  s = s.replace(/ｍ/g, "m");
  s = s.replace(/ｎ/g, "n");
  s = s.replace(/ｏ/g, "o");
  s = s.replace(/ｐ/g, "p");
  s = s.replace(/ｑ/g, "q");
  s = s.replace(/ｒ/g, "r");
  s = s.replace(/ｓ/g, "s");
  s = s.replace(/ｔ/g, "t");
  s = s.replace(/ｕ/g, "u");
  s = s.replace(/ｖ/g, "v");
  s = s.replace(/ｗ/g, "w");
  s = s.replace(/ｘ/g, "x");
  s = s.replace(/ｙ/g, "y");
  s = s.replace(/ｚ/g, "z");
  
  s = s.replace(/０/g, "0");
  s = s.replace(/１/g, "1");
  s = s.replace(/２/g, "2");
  s = s.replace(/３/g, "3");
  s = s.replace(/４/g, "4");
  s = s.replace(/５/g, "5");
  s = s.replace(/６/g, "6");
  s = s.replace(/７/g, "7");
  s = s.replace(/８/g, "8");
  s = s.replace(/９/g, "9");
  
  s = s.replace(/＠/g, "@");
  s = s.replace(/．/g, ".");
  
  return s;
}

function startswith(s, t) {
  return s.substr(0, t.length) == t;
}

function checkID(idStr) {
  var letters = new Array('A', 'B', 'C', 'D',
      'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M',
      'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
      'X', 'Y', 'W', 'Z', 'I', 'O');
  var multiply = new Array(1, 9, 8, 7, 6, 5,
                           4, 3, 2, 1);
  var nums = new Array(2);
  var firstChar;
  var firstNum;
  var lastNum;
  var total = 0;
  var regExpID=/^[a-z](1|2)\d{8}$/i;
  if (idStr.search(regExpID)==-1) {
   return false;
  } 
  else {
    firstChar = idStr.charAt(0).toUpperCase();
    lastNum = idStr.charAt(9);
  }
  for (var i=0; i<26; i++) {
  	if (firstChar == letters[i]) {
  	  firstNum = i + 10;
  	  nums[0] = Math.floor(firstNum / 10);
  	  nums[1] = firstNum - (nums[0] * 10);
  	  break;
  	}
  }
  for(var i=0; i<multiply.length; i++){
    if (i<2) {
      total += nums[i] * multiply[i];
    } 
    else {
      total += parseInt(idStr.charAt(i-1)) *
               multiply[i];
    }
  }
  if (lastNum==0) {
      if (total%10!=0) return false;
  }
  else {
      if ((10 - (total % 10))!= lastNum) {
        return false;
      }
  }
  return true;
}

function checkHKID(sid) {
    var s1=trim(sid).toUpperCase();
    if(s1.length!=8) return false; // invalid length
    var n1=s1.charCodeAt(0)-64;
    if(n1<1 || n1>26) return false;
    if(!isDigital(s1.substr(1,7))) return false;
    var n2=n1*8;
    for(var i=1;i<s1.length-1;i++){
        n2+=parseInt(s1.substr(i,1))*(8-i);
    }
    return (n2%11==0);
}                           

//use regular express someday

function isAlpha(v) {
  var br = true;
  for (var i = 0; i < v.length; i++) {
    var n = v.charCodeAt(i);
    if (n >= 65 && n <= 90) continue;
    if (n >= 97 && n <= 122) continue;
    br = false;
    break;
  }
  return br;
}

function isDigital(v) {
  var br = true;
  for (var i = 0; i < v.length; i++) {
    var n = v.charCodeAt(i);
    if (n >= 48 && n <= 57) continue;
    br = false;
    break;
  }
  return br;
}

function isNonChineseWord(v) {
  var br = true;
  for (var i = 0; i < v.length; i++) {
    var n = v.charCodeAt(i);
    if (n >= 32 && n <= 127) continue;
    br = false;
    break;
  }
  return br;
}

//string functions end
  
//datetime functions begin

function checkDate(y, m, d) {
  var ndate;
  try {
    ndate = new Date(y, m - 1, d);
    return ndate.getFullYear() == y && (ndate.getMonth() + 1) == m && ndate.getDate() == d;
  }
  catch (e) {
    return false;
  }
  return true;
}

//datetime functions end
  
//Message & Redirect begin

function dieRedirect(msg, url) {
  alert(msg);
  location.href = url;
}

//Message & Redirect end
  
// other Modules
  
function favority() {
  var name = getBrowser();
  var title = "星城Online";
  var url = "http://192.168.1.3";
  if (name == "firefox") {
    window.sidebar.addPanel(title, url, "");
    return;
  }
  if (name == "ie") {
    alert("ie");
    window.external.AddFavorite(url, title);
    return;
  }
}

function getBrowser() {
  if (window.sidebar) return "firefox";
  if (window.external) return "ie";
  if (window.opera && window.print) return "opera";
  if (window.name == "Netscape") return "netscape";
  return "unknown";
}
  
//

//DOM implementation begin

function isXMLReady() {
  var bcomp1 = window.ActiveXObject || window.XMLHttpRequest;
  var bcomp2 = window.ActiveXObject || document.implementation.createDocument;
  var bcomp3 = window.ActiveXObject || window.DOMParser;
  var bcomp4 = window.ActiveXObject || window.XMLSerializer;
  return bcomp1 && bcomp2 && bcomp3 && bcomp4;
}

function createXMLHttp() {
  if (window.ActiveXObject) return new ActiveXObject("Microsoft.XMLHTTP");
  if (window.XMLHttpRequest) return new XMLHttpRequest();
  return null;
}

function createXMLDOM() {
  var objxml;
  var objparser;
  var xmlstring;
  if (arguments.length == 0) xmlstring = "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?><root/>"; else xmlstring = arguments[0];
  if (!isXMLReady()) return null;
  if (window.ActiveXObject) {
    var objxml = new ActiveXObject("Microsoft.XMLDOM");
    objxml.loadXML(xmlstring);
    return objxml;
  }
  else {
    objparser = new DOMParser();
    objxml = objparser.parseFromString(xmlstring, "text/xml");
    return objxml;
  }
  return null;
}

function createXMLParas() {
  //Arguments: name, value, name, value... etc
  if (arguments.length == 0) return null;
  if (arguments.length % 2 != 0) return null;
  if (!isXMLReady()) return null;
  var objxml = createXMLDOM();
  var objroot;
  var objchild;
  if (window.ActiveXObject) {
    objroot = objxml.selectSingleNode("//root");
    for (var i = 0; i < arguments.length; i += 2) {
      objchild = objxml.createElement("PARAMETER");
      objchild.setAttribute("name", arguments[i]);
      objchild.setAttribute("value", arguments[i + 1]);
      objroot.appendChild(objchild.cloneNode(true));
    }
  }
  else {
    objroot = objxml.documentElement;
    for (var i = 0; i < arguments.length; i += 2) {
      objchild = document.createElement("PARAMETER");
      objchild.setAttribute("name", arguments[i]);
      objchild.setAttribute("value", arguments[i + 1]);
      objroot.appendChild(objchild);
    }
  }
  return objxml;
}

function getResult(SourceDOM) {
  if (!isXMLReady()) return false;
  var objresult;
  var objattr;
  if (window.ActiveXObject) {
    objresult = SourceDOM.selectSingleNode("//root/result");
    if (objresult == null) return false;
    objattr = objresult.attributes.getNamedItem("number");
    if (objattr == null) return false;
    return objattr.text == "1";
  }
  else {
    objresult = SourceDOM.getElementsByTagName("result");
    if (objresult == null) return false;
    if (objresult.length == 0) return false;
    objattr = objresult[0].attributes.getNamedItem("number");
    if (objattr == null) return false;
    return objattr.nodeValue == "1";
  }
  return false;
}

function getDescription(SourceDOM) {
  if (!isXMLReady()) return "您的瀏覽器不支援本功能!!\n請使用 Internet Explorer 6.0 SP1 以上版本\n或 Mozilla/Firefox 2.0 以上版本";
  var objresult;
  var objattr;
  if (window.ActiveXObject) {
    objresult = SourceDOM.selectSingleNode("//root/result");
    if (objresult == null) return "發生無法預期的錯誤";
    objattr = objresult.attributes.getNamedItem("description");
    if (objattr == null) return "發生無法預期的錯誤";
    return objattr.value;
  }
  else {
    objresult = SourceDOM.getElementsByTagName("result");
    if (objresult == null) return "發生無法預期的錯誤";
    if (objresult.length == 0) return "發生無法預期的錯誤";
    objattr = objresult[0].attributes.getNamedItem("description");
    if (objattr == null) return "發生無法預期的錯誤";
    return objattr.nodeValue;
  }
  return "發生無法預期的錯誤!!";
}

function getPara(SourceDOM, vname, vdefault) {
  if (!isXMLReady()) return vdefault;
  var objresult;
  var objattr;
  if (window.ActiveXObject) {
    objresult = SourceDOM.selectSingleNode("//root/PARAMETER[@name='" + vname + "']");
    if (objresult == null) return vdefault;
    objattr = objresult.attributes.getNamedItem("value");
    if (objattr == null) return vdefault;
    return objattr.value;
  }
  else {
    var objroot = SourceDOM.documentElement;
    objresult = objroot.getElementsByTagName("PARAMETER");
    if (objresult == null) return vdefault;
    if (objresult.length == 0) return vdefault;
    for (var i = 0; i < objresult.length; i++) {
      var objelement = objresult[i];
      objattr = objelement.attributes.getNamedItem("name");
      if (objattr == null) continue;
      if (objattr.nodeValue == vname) {
        objattr = objelement.attributes.getNamedItem("value");
        if (objattr == null) continue;
        return objattr.nodeValue;
      }
    }
    return vdefault;
  }
  return vdefault;
}

function parseStringFromDOM(objdom) {
  if (!isXMLReady()) return null;
  if (window.ActiveXObject) {
    return objdom.xml;
  }
  else {
    var objserial = new XMLSerializer();
    return objserial.serializeToString(objdom);
  }
}

function XMLRequest(url, senddom) {
  var objhttp = createXMLHttp();
  objhttp.open("post", url, false);
  objhttp.send(senddom);
  return objhttp;
}

//DOM implementation end