
function sixMonthsLater(sdt)
{
    var oneMin = 60 * 1000;
    var oneHr  = oneMin * 60;
    var oneDay = oneHr * 24;
    var sy = sdt.substring(6,10);
    var sm = sdt.substring(3,5);
    var sd = sdt.substring(0,2);
    var startDt = new Date(sy, sm-1, sd);
    var yyyy="";
    var mm=""
    var dd="";
    if(parseInt(sm,10)>6)
    {
        yyyy=parseInt(sy,10)+1;
    }
    else
        yyyy=parseInt(sy,10);

    mm=(parseInt(sm,10)+6)%12;
    dd=sd
    if(mm==2 && (dd==31 || dd==30 ||dd==29||dd==28))
    {
      if(yyyy % 4 != 0 || ((yyyy % 100) == 0 && (yyyy % 400) != 0))
        dd=28;
      else
        dd=29;
    }
    else if((mm==4 || mm==6|| mm==9|| mm==11 )&& (dd==31))
    {
      dd=30;
    }
    if(mm<=9)
      mm="0"+mm;
    return dd+"/"+mm+"/"+yyyy;
}

function checkBrExpiry(today,BrExpiry,checkNull)
{
  if (BrExpiry == "")
  {
    if (checkNull == "Y")
    {
      return false;
    }
    else
    {
      return true;
    }
  }
    var sy = today.substring(6,10);
    var sm = today.substring(3,5);
    var sd = today.substring(0,2);
    var ey = BrExpiry.substring(6,10);
    var em = BrExpiry.substring(3,5);
    var ed = BrExpiry.substring(0,2);
    var symd = sy + sm + sd;
    var eymd = ey + em + ed;

    if (symd > eymd)
    {
      return false;
    }
  return true;
}


function checkNoEmp(bs_code, no_emp) {
  if (bs_code.substring(0, 1) == "1") {
    if (no_emp > 99) {
      return false;
    }
  }
  else if (bs_code.substring(0, 1) == "2") {
    if (no_emp > 49) {
      return false;
    }
  }
  return true;
}


function check2DatesAtLeast(sdt, edt, noOfDays) {
  if (!isDate(sdt, "Y") || !isDate(edt, "Y")) {
    return false;
  }
  else {
    var oneMin = 60 * 1000;
    var oneHr  = oneMin * 60;
    var oneDay = oneHr * 24;

    var sy = sdt.substring(6,10);
    var sm = sdt.substring(3,5);
    var sd = sdt.substring(0,2);
    var ey = edt.substring(6,10);
    var em = edt.substring(3,5);
    var ed = edt.substring(0,2);

    var startDt = new Date(sy, sm-1, sd);
    var endDt   = new Date(ey, em-1, ed);

    var diff = endDt.getTime() - startDt.getTime();

    if (diff < noOfDays * oneDay) {
      return false;
    }
  }
  return true;
}


function promptAlert(control, msgStr) {
  alert(msgStr);
  control.focus();
  return false;
}


function cannotBothEmpty(a,b) {
  if (a == "" && b == "") {
    return false;
  }
  else {
    return true;
  }
}


function eitherOneOnly(a,b) {
  if ((a == "" && b != "") || (a != "" && b == "")) {
    return true;
  }
  else {
    return false;
  }
}


function checkBothItem(a,b) {
  if ((a == "" && b == "") || (a != "" && b != "")) {
    return true;
  }
  else {
    return false;
  }
}


function isNull(s) {
  if (s == "") {
    return false;
  }
  else {
    return true;
  }
}


function isEmail(email, checkNull) {

  // valid format "a@b.cd"
  invalidChars = " /;,:{}[]|*%$#!()`<>?";

  if (email == "") {
    if (checkNull == "Y") {
      return false;
    }
    else {
      return true;
    }
  }

  for (i=0; i< invalidChars.length; i++) {
    badChar = invalidChars.charAt(i);
    if (email.indexOf(badChar,0) > -1) {
      return false;
    }
  }

  atPos = email.indexOf("@",1)
  // there must be one "@" symbol
  if (atPos == -1) {
    return false;
  }

  if (email.indexOf("@", atPos+1) != -1) {
    // and only one "@" symbol
    return false;
  }

  periodPos = email.indexOf(".",atPos)
  if(periodPos == -1) {
    // and at least one "." after the "@"
    return false;
  }

  if ( atPos +2 > periodPos) {
    // and at least one character between "@" and "."
    return false;
  }

  if ( periodPos +3 > email.length) {
    return false;
  }
  return true;
}


function isNumber(s, before, after, checkNull) {
  if (s == "") {
    if (checkNull == "Y") {
      return false;
    }
    else {
      return true;
    }
  }
  else if (isNaN(s)) {
    return false;
  }

  s = s.toString();
  var index = s.indexOf(".");

  if (index == -1 ) {
    if (s.length > before) {
      return false;
    }
  }
  else {
    var s1 = s.substring(0, index);
    var s2 = s.substring(index+1, s.length+1);
    if (s1.length > before || s2.length > after) {
      return false;
    }
  }
  return true;
}


function isdigit(s) {
  s = s.toString();
  for (var i=0; i<s.length; i++) {
    var digit = s.charAt(i);
    if (digit < "0" || digit > "9") {
      return false;
    }
  }
  return true;
}


function isString(s, checkNull) {
  if (s == "") {
    if (checkNull == "Y") {
      return false;
    }
    else {
      return true;
    }
  }

  for (var i=0; i < s.length; i++) {
    var digit = s.charAt(i);
    if (digit < ' ' || digit > '~') {
      return false;
    }
  }
  return true;
}



function stringLength(s)
{
  if(navigator.appName=='Netscape')
  {
    return s.length;
  }
  else
  {
    var count_length=0;
    for (var i=0; i < s.length; i++)
    {
      var digit = s.charCodeAt(i);
      if (digit <= 127)
      {
       count_length++;
      }
      else
      {
       count_length++;
       count_length++;
      }
    }
    return count_length;
  }
}


function isDate(d, checkNull) {
  if (d == "") {
    if (checkNull == "Y") {
      return false;
    }
    else {
      return true;
    }
  }

  if (d.length != 10) {
    return false;
  }

  if (d.substring(2,3) != '/' || d.substring(5,6) != '/') {
    return false;
  }

  var year = d.substring(6,10);
  var month = d.substring(3,5);
  var day = d.substring(0,2);

  if(!isdigit(year) || !isdigit(month) || !isdigit(day)) {
    return false;
  }
  else {
    year = parseInt(year,10);
    month = parseInt(month,10);
    day = parseInt(day,10);
  }

  if (month <= 0 || month > 12) {
    return false;
  }

  if ((month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) &&
      (day <= 0 || day > 31)) {
    return false;
  }

  if ((month == 4 || month == 6 || month == 9 || month == 11) && (day <= 0 || day > 30)) {
    return false;
  }

  if (month == 2) {
    if (day <= 0 || day > 29) {
      return false;
    }
    if (day > 28) {
      if (year % 4 != 0 || ((year % 100) == 0 && (year % 400) != 0)) {
        return false;
      }
    }
  }
  return true;
}


function check2Date(sdt, edt) {
  if (!isDate(sdt, "Y") || !isDate(edt, "Y")) {
    return false;
  }
  else {
    var sy = sdt.substring(6,10);
    var sm = sdt.substring(3,5);
    var sd = sdt.substring(0,2);
    var ey = edt.substring(6,10);
    var em = edt.substring(3,5);
    var ed = edt.substring(0,2);
    var symd = sy + sm + sd;
    var eymd = ey + em + ed;

    if (symd > eymd) {
      return false;
    }
  }

  return true;
}

function FAmount(amount)
{
    var splitString = new Array(2);
    if (amount.indexOf('.') == -1)
    {
    splitString[0] = amount;
    splitString[1] = '';
    }
    else
    splitString = amount.split('.', 2);
    pos = splitString[0].length;
    while (pos > 0)
    {
        pos -= 3;
        if (pos <= 0) break;
        splitString[0] = splitString[0].substring(0,pos)
        + ',' +  splitString[0].substring(pos, splitString[0].length);
    }
    if (splitString[1].length > 0)
    {
    amount = splitString[0] + '.' + splitString[1];
    }
    else
    {
    amount = splitString[0];
    }
    return amount;
}

function adjustSiteLinks()
{
    var link_text = document.location.href;
    //alert(link_text);

    // Change the hostname of the links.  Not critical for production.
    var host_str = ["localhost", "www3.dev.smefund.tid.gov.hk", "www3.uat.smefund.tid.gov.hk"];
    var host_replace_str = "";
    for (i in host_str)
    {
      if (link_text.indexOf(host_str[i]) >= 0) host_replace_str = host_str[i];
    }
    if (host_replace_str == "")
    {
        var host_ip = link_text.replace(/.*\/([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})(?:$|[#\?\/]).*/, "$1")
        if (host_ip != link_text) host_replace_str = host_ip
        //alert(host_ip);
    }

    if (host_replace_str != "")
    {
      var aid_str = [
      "ah_sitelnk_en",   "ah_sitelnk_tc",  "ah_sitelnk_sc",
      "ah_sitelnk_en2",  "ah_sitelnk_tc2", "ah_sitelnk_sc2",
      "ah_sitelnk_en3",  "ah_sitelnk_tc3", "ah_sitelnk_sc3",
      "ah_sitelnk_en4",  "ah_sitelnk_tc4", "ah_sitelnk_sc4",
      "ah_sitelnk_esrv", "ah_sitelnk_home" ];
      for (i in aid_str)
      {
        //alert(i);
        var o = document.getElementById(aid_str[i]);
        if (o != undefined && o != null)
        {
          o.href = o.href.replace("www.smefund.tid.gov.hk", host_replace_str);
          if ("www.smefund.tid.gov.hk" != document.location.hostname
            && 0 > document.location.pathname.indexOf("www.smefund.tid.gov.hk"))
              o.href = o.href.replace("tcsc.tid.gov.hk", "tcscuat.tid.gov.hk");
          //alert(o.href)
        }
      }
    }
    
    // Hide the respective chinese links.  Not critical.
    var span_en = document.getElementById("span_sitelnk_en");
    if (span_en != undefined)
    {
      // English link exists, so this is a chinese page
      var span_tc = document.getElementById("span_sitelnk_tc");
      var span_sc = document.getElementById("span_sitelnk_sc");
      var p1 = link_text.indexOf("tcsc.tid.gov.hk");
      var p2 = link_text.indexOf("tcscuat.tid.gov.hk");
      var bIsSimplified = (p1 >= 0 || p2 >= 0);
      if (span_tc != undefined) span_tc.style.display = (bIsSimplified ? "inline" : "none");
      if (span_sc != undefined) span_sc.style.display = (bIsSimplified ? "none"   : "inline");
    }
}

function switchFrameLang(sURL, sTarget)
{
    var lnk_final = sURL
    //alert(lnk_final);

    if (top['frmMain'] && top['frmMain'].location)
    {
        var lnk_href     = '';
        var lnk_hostname = '';
        var lnk_pathname = '';
        var lnk_search   = '';
        var lnk_hash     = '';

        try
        {
            lnk_href     = top['frmMain'].location.href;
            lnk_hostname = top['frmMain'].location.hostname;
            lnk_pathname = top['frmMain'].location.pathname;
            lnk_search   = top['frmMain'].location.search;
            lnk_hash     = top['frmMain'].location.hash;
        }
        catch (e)
        {
            lnk_href     = "http://tcsc.tid.gov.hk/gb/" + location.host + "/eng/sitemap.html";
            lnk_hostname = "tcsc.tid.gov.hk";
            lnk_pathname = "/gb/" + location.host + "/eng/sitemap.html";
            lnk_search   = "";
            lnk_hash     = "";
        }

            //alert(lnk_hostname)
            //alert(lnk_pathname)
        if (0 <= lnk_hostname.toLowerCase().indexOf("tcsc.tid.gov.hk") || 0 <= lnk_hostname.toLowerCase().indexOf("tcscuat.tid.gov.hk"))
        {
            lnk_hostname = lnk_pathname.replace(/^\/[^\.\/\?#]+\/([^\/\?#]+)\/.*/, "$1")
            lnk_pathname = lnk_pathname.replace(/^\/[^\.\/\?#]+\/[^\/\?#]+\//,    "/")
            //alert(lnk_hostname)
            //alert(lnk_pathname)
        }

        if (sURL.match(/\/(chi|chi_text)\//))
        {
            // spgspli.htm does not have a chinese version
            lnk_pathname = lnk_pathname.replace(/\/eng_text\/spgspli\.htm/, "/eng_text/spgs.htm")
            lnk_pathname = lnk_pathname.replace(/\/eng_text\/sgspli\.htm/,  "/eng_text/sgs.htm")
        }
        
        // 
        lnk_pathname = lnk_pathname.replace(/\/service\/jsp\/([^\/]+)\/(arf|bif|wcl|lgs|sgs)[^\/]*\/.*/, "/$1/sgs.htm")
        lnk_pathname = lnk_pathname.replace(/\/service\/jsp\/([^\/]+)\/(stl|scl|slg|spgs)[^\/]*\/.*/,    "/$1/spgs.htm")
        lnk_pathname = lnk_pathname.replace(/\/service\/jsp\/([^\/]+)\/emf[^\/]*\/.*/,                   "/$1/emf.html")
        lnk_pathname = lnk_pathname.replace(/\/service\/jsp\/([^\/]+)\/sdf[^\/]*\/.*/,                   "/$1/sdf.html")
        lnk_pathname = lnk_pathname.replace(/\/service\/.*/,                                             "/eng/sitemap.html")
        
        if (sURL.match(/\/(eng|eng_text)\//))
        {
            lnk_pathname = lnk_pathname.replace(/\/chi(?=[_\/\.])/g,"/eng")
        }
        else
        {
            lnk_pathname = lnk_pathname.replace(/\/eng(?=[_\/\.])/g,"/chi")
        }

        var sURL_hash = sURL.replace(/.*(#.*)/,"$1")
        if (sURL_hash == sURL) sURL_hash = ""

        lnk_final = sURL.replace(/#.*$/, "")
           + (sURL.indexOf("?") >= 0 ? "&" : "?")
           + "content=" + encodeURIComponent(lnk_pathname + lnk_search + lnk_hash).replace(/ /g, "+");
           + sURL_hash;

        if ("www.smefund.tid.gov.hk" != lnk_hostname)
        {
            lnk_final = lnk_final.replace("www.smefund.tid.gov.hk", lnk_hostname).replace("tcsc.tid.gov.hk", "tcscuat.tid.gov.hk")
        }
    }
    
    //alert(lnk_final);
    window.open(lnk_final, sTarget)
}

function getUrlParam(name)
{
    var url = document.location.href;
    
    name = name.replace(/\[/,"\\\[").replace(/\]/,"\\\]");
    var results = new RegExp("[\\?&]"+name+"=([^&#]*)").exec(url);
    if ( results == null )
    {
        return null;
    }
    else
    {
        // decodeURIComponent doesn't recognize + as encoding for space
        return decodeURIComponent(results[1].replace(/\+/g," "));
    }
}

function convertFullToHalfChar(s)
{
    var ret = s;
    if (ret)
    {
        var patt = new RegExp();
        for (var i=0x0020; i<=0x007E; i++)
        {
            j = (i == 0x0020 ? 0x3000 : i + 0xFEE0)
            var r = String.fromCharCode(i)
            var t = (new Number(j)).toString(16)
            patt.compile("\\u" + t, "g")
            ret = ret.replace(patt, r)
            patt.compile("%" + t, "ig")
            ret = ret.replace(patt, r)
        }
    }
    return ret;
}

function isProdWeb(s)
{
    return (s && (s.toLowerCase() == "www.smefund.tid.gov.hk"
                  || s == "202.38.18.40" || s == "202.38.18.67"
                  || s == "202.38.18.115")
           );
}

function isUatWeb(s)
{
    if (s)
    {
        var s1 = s.toLowerCase();
        return (   s == "www3.unit.smefund.tid.gov.hk"
                || s == "www3.uat.smefund.tid.gov.hk"
                || s == "www3.dev.smefund.tid.gov.hk"
                );
    }
    else
        return false;
}
function validateUrlHost(sUrl)
{
    if (! sUrl)
    {
        return false;
    }

    // cleanse full width characters
    sUrl = convertFullToHalfChar(sUrl);
    
    //alert("c|"+sUrl);

    // get my hostname first
    var cur_prot = convertFullToHalfChar(location.protocol);
    var cur_host = convertFullToHalfChar(location.host);
    if (0 <= cur_host.toLowerCase().indexOf("tcsc.tid.gov.hk")
     || 0 <= cur_host.toLowerCase().indexOf("tcscuat.tid.gov.hk"))
    {
        cur_host = cur_host.replace(/^\/[^\.\/\?#]+\/([^\/\?#]+)\/.*/, "$1")
    }

    var dst_info = null;
    var dst_prot = null;
    var dst_host = null;

    dst_info = /^([a-z][a-z0-9\+\-\.]*:)\/\/((?:(?:[a-zA-Z0-9_\.\-\+!$&'\(\)*\+,;=]|%[0-9a-f]{2})+:)*(?:[a-zA-Z0-9_\.\-\+%!$&'\(\)*\+,;=]|%[0-9a-f]{2})+@)?((?:[a-z0-9\-\.]|%[0-9a-f]{2})+|(?:\[(?:[0-9a-f]{0,4}:)*(?:[0-9a-f]{0,4})\]))(:[0-9]+)?([\/|\?](?:[a-zA-Z0-9_#!:\.\?\+=&@$'~*,;\/\(\)\[\]\-]|%[0-9a-f]{2})*)?$/i.exec(sUrl)
    if (dst_info)
    {
        // a full url

        dst_prot = dst_info[1];
        dst_host = dst_info[3];
        
        if (isUatWeb(cur_host) && isProdWeb(dst_host))
            alert("Jumping back to production... program error?")

        if (
            0 <= dst_host.toLowerCase().indexOf("tcsc.tid.gov.hk")
         || 0 <= dst_host.toLowerCase().indexOf("tcscuat.tid.gov.hk")
         || dst_host == cur_host
         //|| dst_host == "www.smefund.tid.gov.hk"
         //|| dst_host == "www3.uat.smefund.tid.gov.hk"
         //|| dst_host == "www3.dev.smefund.tid.gov.hk"
         )
        {
            // the translation server will take care of the host
            return true;
        }
        else
        {
            return false;
        }
    }
    else
    {
        // simply absolute or relative path
        return true;

        //dst_info = /^(?:[a-zA-Z0-9_#!:\.\?\+=&@$'~*,;\/\(\)\[\]\-]|%[0-9a-f]{2})+$/i.exec(sUrl)
    }
}
