//Global information
var DOMAIN_NAME="www.schooldental.gov.hk";
var DOMAIN_PORT="";
var CONTEXT_PATH="/wsmile";
var HOMEPAGE = "index.htm";
var TRADITIONAL_CHI_SUFFIX = "_c";
var SIMPLIFIED_CHI_SUFFIX = "_z";
var EN_SUFFIX = "_e";
var HTTPS_PREFIX = 'https';

var sslDir = new Array ("school/", "student/", "/PrintApptSlip", "/SignOut");

function isSSLPage (pagePathName){
  for(var i = 0; i < sslDir.length; i++){
    if (pagePathName.indexOf(sslDir[i]) > -1)
      return true;
  }
  return false;
}

//////////////////////////////////////////////////////
//Get the value of the selected radio button
/////////////////////////////////////////////////////
function gfnGetSelRadioIndex(buttonGroup)
{
  for (var i = 0; i < buttonGroup.length; i++){
    if (buttonGroup[i].checked) return i;
  }
  return 0;
}


function replaceAll (s, fromStr, toStr){
  var new_s = s;
  for (i = 0; i < 100 && new_s.indexOf (fromStr) > -1; i++){
      new_s = new_s.replace (fromStr, toStr);
  }
  return new_s;
}

//used to parse the query string and retreive the parameters
function getQueryVariable(variable) {
  var urlComponent = "";
  if(document.URL.indexOf(";jsessionid") > -1)
    urlComponent = document.URL.split(";");
  else
    urlComponent = document.URL.split("?");

  if(urlComponent.length > 1){
    var query = urlComponent[1];

    query = replaceAll(query, "+", " ");

    var vars = "";

    if(document.URL.indexOf(";jsessionid") > -1)
      vars = query.split("?");
    else
      vars = query.split("&");

    for (var i=0;i<vars.length;i++) {
        var pair = vars[i].split("=");
        if (pair[0] == variable) {
          return pair[1];
        }
    }

    //query variable is not found
    return null;
  }else{
    return null;
  }
}


function gfnAppendSID(frmObj, page){
  var sid;
  if(frmObj != null
      && frmObj.sessionid != null
      && frmObj.sessionid.value != null
      && frmObj.sessionid.value != ""){
    sid = frmObj.sessionid.value;
  }else{
    sid = getQueryVariable("jsessionid");
  }

  if(sid != null && sid != ""){
    if(page.indexOf(".htm") > -1
        || page.indexOf(".html") > -1
      ){
      if(page.indexOf("?") > -1){
        return "&jsessionid=" + sid;
      }else{
        return "?jsessionid=" + sid;
      }
    }else{
      return ";jsessionid=" + sid;
    }
  }else{
    return "";
  }
}


function gfnPostTo(formObj, targetServlet, queryStr){
  var protocolDomainStr = "";
  if(isSSLPage(targetServlet))
    protocolDomainStr = HTTPS_PREFIX + "://" + DOMAIN_NAME + CONTEXT_PATH;
  else {
  	if(DOMAIN_PORT != "")
  		protocolDomainStr = "http://" + DOMAIN_NAME + DOMAIN_PORT + CONTEXT_PATH;
  	else
		protocolDomainStr = "http://" + DOMAIN_NAME + CONTEXT_PATH;
  }

  if(queryStr == null)
    queryStr = "";

  formObj.action = protocolDomainStr + targetServlet + gfnAppendSID(formObj, targetServlet) + queryStr;

  return true;
}

function gfnDoPostTo(formObj, targetServlet, queryStr){
  var protocolDomainStr = "";

  //if(isSSLPage(targetServlet) && targetServlet.indexOf("school") > -1){
  //  gfnGoToStatic("/section_maint.htm");
  //}else{
    if(isSSLPage(targetServlet))
	   protocolDomainStr = HTTPS_PREFIX + "://" + DOMAIN_NAME + CONTEXT_PATH;
	 else {
	 	if(DOMAIN_PORT != "")
	 		protocolDomainStr = "http://" + DOMAIN_NAME + DOMAIN_PORT + CONTEXT_PATH;
	 	else
	    	protocolDomainStr = "http://" + DOMAIN_NAME + CONTEXT_PATH;
	    	
	 }

    if(queryStr == null)
      queryStr = "";

    formObj.action = protocolDomainStr + targetServlet + gfnAppendSID(formObj, targetServlet) + queryStr;

    formObj.submit();
  //}
}

function gfnDoPostToJSP(formObj, targetJSP, lang, queryStr){
  var protocolDomainStr = "";
  if(isSSLPage(targetJSP))
    protocolDomainStr = HTTPS_PREFIX + "://" + DOMAIN_NAME + CONTEXT_PATH;
  else {
  	if(DOMAIN_PORT != "")
  		protocolDomainStr = "http://" + DOMAIN_NAME + DOMAIN_PORT + CONTEXT_PATH;
  	else
	   	protocolDomainStr = "http://" + DOMAIN_NAME + CONTEXT_PATH;
  }

  if(queryStr == null)
    queryStr = "";

  if(formObj != null){
    formObj.action = protocolDomainStr + getWebPageName(targetJSP, lang) + gfnAppendSID(formObj, targetJSP) + queryStr;
    formObj.submit();
  }else{
    window.location = protocolDomainStr + getWebPageName(targetJSP, lang) + gfnAppendSID(formObj, targetJSP) + queryStr;
  }
}

function gfnGoToStatic(page){
  var argv = gfnGoToStatic.arguments;
  var argc = argv.length;
  var targetLang = (argc > 1) ? argv[1] : null;

  var pageArch = "";
  if(page.indexOf("#") > -1) {
    var tempPageArch = page.split("#");
    page = tempPageArch[0];
    pageArch = "?anchr#" + tempPageArch[1];
  }


  //form 1 is used for storing the hidden info of each page, because form 0 is used by top.js for search

  var protocolDomainStr = "";
  if(isSSLPage(page))
    protocolDomainStr = HTTPS_PREFIX + "://" + DOMAIN_NAME + CONTEXT_PATH;
  else {
  	if(DOMAIN_PORT != "")
  		protocolDomainStr = "http://" + DOMAIN_NAME + DOMAIN_PORT + CONTEXT_PATH;
  	else
	   	protocolDomainStr = "http://" + DOMAIN_NAME + CONTEXT_PATH;
	    	
  }


  if(document.forms[1] != null && document.forms[1].sessionid != null){
    if(document.forms[1] != null &&  document.forms[1].lang != null)   {
      window.location = protocolDomainStr + getWebPageName(page, ((targetLang == null) ? document.forms[1].lang.value : targetLang)) + gfnAppendSID(document.forms[1], page) + pageArch;
    }else{
      window.location = protocolDomainStr + getWebPageName(page, ((targetLang == null) ? document.forms[1].lang.value : targetLang)) + gfnAppendSID(document.forms[1], page) + pageArch;
    }
  }else{
    if(document.QueryText != null &&  document.QueryText.lang != null)   {
      window.location = protocolDomainStr + getWebPageName(page, ((targetLang == null) ? document.QueryText.lang.value : targetLang)) + gfnAppendSID(document.QueryText, page) + pageArch;
    }else{
      //NO hidden info, or not a proper form is used for storing the hidden info needed, go to english default page
    window.location = protocolDomainStr + getWebPageName(page, ((targetLang == null) ? "e" : targetLang) ) + gfnAppendSID(document.QueryText, page) + pageArch;
    }
  }
}

function printApptCard(formObj, sdcsno, apptno){
  //position relative to the parent window
  var x = 0, y = 0; // default values

  var argv = printApptCard.arguments;
  var argc = argv.length;
  var isSchoolUser = (argc > 3) ? argv[3] : null;

  if (document.all) {
    x = window.screenTop + 50;
    y = window.screenLeft + 50;
  }
  else if (document.layers) {
    x = window.screenX + 50;
    y = window.screenY + 50;
  }

  var printConWin = window.open(HTTPS_PREFIX + '://'+ DOMAIN_NAME + '/images/botdot.gif',
      'ThrirdParty','menubar=yes,toolbar=yes,esizable=yes,scrollbars=yes,width=800,height=600,top='+y+',screenY='+y+',left='+x+',screenX='+x);

    var str='';
        str+='<html><head></head>';
        str+='<body>';
        str+='<form name="frmApptCard" method="post">';
        //str+='<input type="hidden" name="lang" value="">';
        str+='<input type="hidden" name="sessionid" value="">';
        //str+='<input type="hidden" name="SDCSNo" value="">';
        //str+='<input type="hidden" name="ApptNo" value="">';
        //str+='<input type="hidden" name="isSchoolUser" value="N">';
        str+='</form>';
        str+='</body>';
        str+='<html>';

  printConWin.document.write(str);
  //printConWin.document.frmApptCard.lang.value=formObj.lang.value;
  printConWin.document.frmApptCard.sessionid.value=formObj.sessionid.value;
  //printConWin.document.frmApptCard.SDCSNo.value=sdcsno;
  //printConWin.document.frmApptCard.ApptNo.value=apptno;
  //printConWin.document.frmApptCard.isSchoolUser.value=((isSchoolUser == null) ? "N" : "Y");

  gfnDoPostTo(printConWin.document.frmApptCard, "/PrintApptSlip", "?lang="+formObj.lang.value+"&SDCSNo="+sdcsno+"&ApptNo="+apptno+"&isSchoolUser=" + ((isSchoolUser == null) ? "N" : "Y"));


}

function gfnGotoThirdParty(targetURL){
  var argv = gfnGotoThirdParty.arguments;
  var argc = argv.length;
  var searchFormObj = (argc > 1) ? argv[1] : null;
  //position relative to the parent window
  var x = 0, y = 0; // default values

  if (document.all) {
    x = window.screenTop + 50;
    y = window.screenLeft + 50;
  }
  else if (document.layers) {
    x = window.screenX + 50;
    y = window.screenY + 50;
  }

  //NOTICE that MUST NO any space among the characteristics params for the pop-up window

  if(searchFormObj != null){
    //do search action
    var dummySearchPage = "http://" + DOMAIN_NAME + CONTEXT_PATH + ((document.forms[0].lang.value == "z") ? "/search/gb_search.htm" : "/search/big5_search.htm");
    var printConWin = window.open(dummySearchPage,
      'ThrirdParty','resizable=yes,scrollbars=yes,width=800,height=600,top='+y+',screenY='+y+',left='+x+',screenX='+x);

    if (!printConWin.opener) printConWin.opener = self;


  }else{
    var printConWin = window.open(targetURL,'ThrirdParty','resizable=yes,scrollbars=yes,width=800,height=600,top='+y+',screenY='+y+',left='+x+',screenX='+x);
    if (!printConWin.opener) printConWin.opener = self;
  }
}

function getWebPageName(pageName, lang){
  if(pageName.indexOf(HOMEPAGE) > -1){
    //home page, all language with the same page
    return pageName;
  }else if(pageName.indexOf(EN_SUFFIX + ".") == -1
          && pageName.indexOf(TRADITIONAL_CHI_SUFFIX + ".") == -1
          && pageName.indexOf(SIMPLIFIED_CHI_SUFFIX + ".") == -1
          ){
    //for adding language suffix to the page name
    if(pageName.indexOf(".jsp") > -1){
      pageName = pageName.substring(0, pageName.indexOf(".jsp")) + "_" + lang + pageName.substring(pageName.indexOf(".jsp"));
    }else if(pageName.indexOf(".htm") > -1){
      pageName = pageName.substring(0, pageName.indexOf(".htm")) + "_" + lang + pageName.substring(pageName.indexOf(".htm"));
    }else if(pageName.indexOf(".html") > -1){
      pageName = pageName.substring(0, pageName.indexOf(".html")) + "_" + lang + pageName.substring(pageName.indexOf(".html"));
    }

    return pageName;
  }else{
    return pageName;
  }

}

function gfnPrintContent(aoFormObj, asTargetPage, asQStr){
  //position relative to the parent window
  var x = 0, y = 0; // default values

  if (document.all) {
    x = window.screenTop + 100;
    y = window.screenLeft + 30;
  }
  else if (document.layers) {
    x = window.screenX + 100;
    y = window.screenY + 30;
  }

  var protocolDomainStr = "";
  if(isSSLPage(asTargetPage))
    protocolDomainStr = HTTPS_PREFIX + "://" + DOMAIN_NAME + CONTEXT_PATH;
  else {
  	if(DOMAIN_PORT != "")
  		protocolDomainStr = "http://" + DOMAIN_NAME + DOMAIN_PORT + CONTEXT_PATH;
  	else
	   	protocolDomainStr = "http://" + DOMAIN_NAME + CONTEXT_PATH;
	    	
  }

  //NOTICE that MUST NO any space among the characteristics params for the pop-up window
  var printConWin;
  if(asQStr != null && asQStr != ""){
    printConWin = window.open(protocolDomainStr + asTargetPage + gfnAppendSID(aoFormObj, asTargetPage) + asQStr + '&isPrintContent=TRUE&lang=' + aoFormObj.lang.value,'PrintPreview','resizable=yes,scrollbars=yes,width=600,height=600,top='+y+',screenY='+y+',left='+x+',screenX='+x);
    if (!printConWin.opener) printConWin.opener = self;
  }else{
    printConWin = window.open(protocolDomainStr + asTargetPage + gfnAppendSID(aoFormObj, asTargetPage) + '?isPrintContent=TRUE&lang=' + aoFormObj.lang.value,'PrintPreview','resizable=yes,scrollbars=yes,width=600,height=600,top='+y+',screenY='+y+',left='+x+',screenX='+x);
    if (!printConWin.opener) printConWin.opener = self;
  }
}


// do select combo box by it's value
function gfnSelectByValue(aoControl,asValue) {
  for (var x = 0; x < aoControl.length; x++){
    if (aoControl.options[x].value == asValue){
      aoControl.selectedIndex=x;
      return;
    }
  }
}


//these 2 functions will check whether the input text is over the maximum size allowed
var objEditing; //this is used for represent the textarea
function TrackCount(formObj, fieldObj,countFieldName,maxChars){
    var countField = eval("document." + formObj.name + "." + countFieldName);
    var diff = maxChars - fieldObj.value.length;

    // Need to check & enforce limit here also in case user pastes data
    if (diff < 0){
        fieldObj.value = fieldObj.value.substring(0,maxChars);
        diff = maxChars - fieldObj.value.length;
    }
    countField.value = diff;
}

function LimitText(fieldObj,maxChars){
    var result = true;
    if (fieldObj.value.length >= maxChars)
        result = false;

    if (window.event)
        window.event.returnValue = result;
    return result;
}
//END   these 2 functions will check whether the input text is over the maximum size allowed


function DisableTextBox(obj){
  obj.blur();
}
function isBetweenHolidays(fromDate, toDate){
	var sFromDate = fromDate.substr(6,4) + "/" + fromDate.substr(3,2) + "/" + fromDate.substr(0,2);		// convert {dd/mm/yyyy} to {mm/dd/yyyy} format
	var sToDate = toDate.substr(6,4) + "/" + toDate.substr(3,2) + "/" + toDate.substr(0,2);		// convert {dd/mm/yyyy} to {mm/dd/yyyy} format
	var tFromDate = new Date(sFromDate);
	var tToDate = new Date(sToDate);
	var dateDiff = tToDate.valueOf() - tFromDate.valueOf();
	var result = false;
	dateDiff =dateDiff / (1000*60*60*24);
	if (dateDiff <= 1)
		if ((tFromDate.getDay() == 0 || tFromDate.getDay() == 6) && (tToDate.getDay() == 0 || tToDate.getDay() == 6))
			result = true;
		else
			result = false;
	return result;
}
