/**
 * Module Name : nsScript.js
 *
 * Abstract : JavaScript Library File
 *
 * Reference:
 *   <script language="JavaScript" src="Relative or full Path of URL for this file"></script>
 *
**/
<!-- // to hide script contents from old browsers

function SetFocus(TargetFormName) {
  var target = 0;
  if (TargetFormName != "")
    for (i=0; i<document.forms.length; i++) {
      if (document.forms[i].name == TargetFormName) {
        target=i;
        break;
      }
    }

  var TargetForm = document.forms[target];

  for (i=0; i<TargetForm.length; i++) {
    if ( (TargetForm.elements[i].type != "image") &&
         (TargetForm.elements[i].type != "hidden") &&
         (TargetForm.elements[i].type != "reset") &&
         (TargetForm.elements[i].type != "submit") ) {

      TargetForm.elements[i].focus();

      if ( (TargetForm.elements[i].type == "text") ||
           (TargetForm.elements[i].type == "password") )
        TargetForm.elements[i].select();

      break;
    }
  }
}

function RemoveFormatString(TargetElement, FormatString) {
  if (TargetElement.value == FormatString)
    TargetElement.value = "";
    TargetElement.select();
}

function CheckDateRange(from, to) {
  if (Date.parse(from.value) <= Date.parse(to.value))
    return true;
  else
    return false;
}

function IsValidDate(DateToCheck, FormatString) {
  var strDateToCheck;
  var strDateToCheckArray;
  var strFormatArray;
  var strFormatString;
  var strDay;
  var strMonth;
  var strYear;
  var intday;
  var intMonth;
  var intYear;
  var intDateSeparatorIdx = -1;
  var intFormatSeparatorIdx = -1;
  var strSeparatorArray = new Array("-"," ","/",".");
  var strMonthArray = new Array("jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec");
  var intDaysArray = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

  strDateToCheck = DateToCheck.toLowerCase();
  strFormatString = FormatString.toLowerCase();

  if (strDateToCheck.length != strFormatString.length) {
    return false;
  }

  for (i = 0; i < strSeparatorArray.length; i++) {
    if (strFormatString.indexOf(strSeparatorArray[i]) != -1) {
      intFormatSeparatorIdx = i;
      break;
    }
  }

  for (i = 0; i < strSeparatorArray.length; i++) {
    if (strDateToCheck.indexOf(strSeparatorArray[i]) != -1) {
      intDateSeparatorIdx = i;
      break;
    }
  }

  if (intDateSeparatorIdx != intFormatSeparatorIdx)
    return false;

  if (intDateSeparatorIdx != -1) {
    strFormatArray = strFormatString.split(strSeparatorArray[intFormatSeparatorIdx]);
    if (strFormatArray.length != 3) {
      return false;
    }

    strDateToCheckArray = strDateToCheck.split(strSeparatorArray[intDateSeparatorIdx]);
    if (strDateToCheckArray.length != 3) {
      return false;
    }

    for (i = 0; i < strFormatArray.length; i++) {
      if (strFormatArray[i] == 'mm' || strFormatArray[i] == 'mmm')
        strMonth = strDateToCheckArray[i];
      if (strFormatArray[i] == 'dd')
        strDay = strDateToCheckArray[i];
      if (strFormatArray[i] == 'yyyy')
        strYear = strDateToCheckArray[i];
    }
  }
  else {
    if (FormatString.length>7) {
      if (strFormatString.indexOf('mmm') == -1)
        strMonth = strDateToCheck.substring( strFormatString.indexOf('mm'), 2 );
      else
        strMonth = strDateToCheck.substring( strFormatString.indexOf('mmm'), 3 );
      strDay = strDateToCheck.substring( strFormatString.indexOf('dd'), 2 );
      strYear = strDateToCheck.substring( strFormatString.indexOf('yyyy'), 2 );
    }
    else {
      return false;
    }
  }

  if (strYear.length != 4) {
    return false;
  }
  intday = parseInt(strDay, 10);
  if (isNaN(intday)) {
    return false;
  }
  if (intday < 1) {
    return false;
  }

  intMonth = parseInt(strMonth, 10);
  if (isNaN(intMonth)) {
    for (i = 0;i < strMonthArray.length; i++) {
      if (strMonth == strMonthArray[i]) {
        intMonth = i+1;
        break;
      }
    }
    if (isNaN(intMonth)) {
      return false;
    }
  }
  if (intMonth>12 || intMonth<1) {
    return false;
  }

  intYear = parseInt(strYear, 10);
  if (isNaN(intYear)) {
    return false;
  }
  if (IsLeapYear(intYear) == true) {
    intDaysArray[1] = 29;
  }

  if (intday > intDaysArray[intMonth - 1]) {
    return false;
  }

  return true;
}

function IsLeapYear(intYear) {
  if (intYear % 100 == 0) {
    if (intYear % 400 == 0)
      return true;
  }
  else {
    if ((intYear % 4) == 0)
      return true;
  }

  return false;
}

function jsMenu_Void()
{
	return;
}

function jsAPI_OpenWindow(szURL, szName, szOption)
{
	openWindow = window.open(szURL, szName, szOption);
	openWindow.focus();
	return;
}

function jsAPI_OpenWindowInfo(szURL)
{
	openWindow = window.open(szURL, "infoWin", "status=yes,scrollbars=yes,resizable=yes,width=600,height=500");
	openWindow.focus();
	return;
}

function jsAPI_OpenWindowDefault(szURL, szWidth, szHeight)
{
	var szOption = "status=yes,scrollbars=no,resizable=yes,width=600,height=500";
	newWindow = window.open(szURL, "newWindow", szOption);

	if (szWidth && szHeight)
		newWindow.resizeTo(szWidth, szHeight);
	else if (szWidth)
		newWindow.resizeTo(szWidth, 500);
	else if (szHeight)
		newWindow.resizeTo(600, szHeight);
	else
		newWindow.resizeTo(600, 500);

	newWindow.focus();
	return;
}

function jsAPI_OpenWindowResize(szURL, szName, szWidth, szHeight)
{
	//var szOption = "status=yes,scrollbars=no,resizable=yes,width=600,height=500";
	var szOption = "width=" + szWidth + ",height=" + szHeight;
	openWindow = window.open(szURL, "openWindow", "width=" + szWidth + ",height=" + szHeight);

	if (szWidth && szHeight) {
		openWindow.resizeTo(szWidth, szHeight);
	}

	openWindow.focus();
	return;
}

//
// Setting Browser type
//
var NS = 0;
var IE = 0;
if (document.layers) { NS=1; IE=0; }
if (document.all) { NS=0; IE=1; }

var gDateOfMonth = new Array(0);
gDateOfMonth = ['0', '31', '28', '31', '30', '31', '30', '31', '31', '30', '31', '30', '31'];

//
// Functions to support time handling
//
function js_IsLeapYear(year)
{
	var bReturn = false;

	if (year % 4 == 0) {
		if (year % 100 == 0) {
			if (year % 400 == 0) {
				bReturn = true;
			}
		} else {
			bReturn = true;
		}
	}

	return bReturn;
}

function js_GetNewDate(expiry)
{
	var expDate = new Date();
	var currDate = expDate.getUTCDate();
	var currMonth = expDate.getUTCMonth();
	var currYear = expDate.getUTCFullYear();

	var addDate = 0; var addMonth = 0; var addYear = 0;

	addDate = (currDate + parseInt(expiry % 30));
	if (addDate > 30) {
		addMonth = parseInt(addDate / 30);
		addDate = parseInt(addDate % 30);
	}

	addMonth += (currMonth + parseInt(expiry / 30));
	if (addMonth >= 11) {
		addYear = parseInt(addMonth / 11);
		addMonth = parseInt(addMonth % 11);
	}

	addYear += currYear;

	expDate.setUTCDate(addDate);
	expDate.setUTCMonth(addMonth);
	expDate.setUTCFullYear(addYear);

	return expDate.toUTCString();
}

function js_WriteFormatedTime(dateValue)
{
	var Year = dateValue.substring(0,4);
	var Month = dateValue.substring(4,6);
	var Day = dateValue.substring(6,8);
	var Hour = dateValue.substring(8,10);
	var Min = dateValue.substring(10,12);
	var Sec = dateValue.substring(12,14);

	var TimeFormat = Year+ "-" + Month + "-" + Day + " " + Hour + ":" + Min + ":" + Sec;
	document.write(TimeFormat);

	return;
}

function jsTime2(dateValue)
{
	var Year = dateValue.substring(0,4);
	var Month = dateValue.substring(4,6);
	var Day = dateValue.substring(6,8);

	var TimeFormat = Year+ "/" + Month + "/" + Day;
	document.write(TimeFormat);

	return;
}

//
// Functions to support cookie handling
//
function js_WriteCookie(cookieName, cookieValue, domain, path, expiry, needEncrypt)
{
	var encValue = "";
	var cookie = "";

	if (needEncrypt == "Y") {
		encValue = escape(cookieValue);
	} else {
		encValue = cookieValue;
	}

	cookie = cookieName + "=" + encValue;

	if (expiry) {
        var expDate = js_GetNewDate(expiry);
		cookie += "; EXPIRES=" + expDate;
	}

	if (domain) cookie += "; DOMAIN=" + domain;
	if (path) cookie += "; PATH=" + path;

	document.cookie = cookie;

	return;
}

//
// Functions to support WINDOW handling
//

//
// Functions to support string checking or manipulation
//
function js_IsNum(str)
{
	for (var i = 0; i < str.length; i++) {
		var ch = str.substring(i, i + 1);
		if ((ch < "0" || ch > "9") && ch != '-') {
			return false;
		}
	}
	return true;
}

function js_IsAlpha(str)
{
	re = /[^A-Za-z0-9]/g;

	return (!re.test(str));
}

function js_IsWhitespace(str)
{
	for (var i = 0; i < str.length; i++) {
		var ch = str.substr(i, 1);
		if (ch != ' ' && ch != '\t' && ch != '\\n') {
			return false;
		}
	}
	return true;
}

function js_CheckEmail(str)
{
	var pos = str.indexOf("@");
	if (pos == -1 || pos == 0)
		return false;

	var value = str.split("@");
	if (value[1].length < 1)
		return false;

	var domain = value[1].split(".");

	if (domain.length < 2 || domain[1].length < 1)
		return false;

    return true;
}

//
// Functions to support RADID button handling
//
function jsRadio_GetSelectedIndex(radioObj)
{
	for (var i = 0; i < radioObj.length; i++) {
		if (radioObj[i].checked)
			return i;
	}

	return -1;
}

function jsRadio_GetSelectedValue(radioObj)
{
	if (radioObj.length) {
		var idx = jsRadio_GetSelectedIndex(radioObj);
		return (idx == -1) ? "" : radioObj[idx].value;
	} else {
		return (radioObj.checked) ? radioObj.value : "";
	}
}

function jsRadio_GetSelectedItemByValue(formObj, radioValue)
{
	var nCount = 0;

	for (var i = 0; i < formObj.elements.length; i++) {
		var item = formObj.elements[i];
		if ((item.type == 'radio') && (item.value == radioValue)) {
			if (item.checked) {
				nCount++;
			}
		}
	}

	return nCount;
}

function jsRadio_CheckItem(formObj, radioName, radioValue)
{
	for (var i = 0; i < formObj.elements.length; i++) {
		var item = formObj.elements[i];
		if ((item.type == 'radio') && (item.name == radioName)) {
			if (item.value == radioValue) {
				item.checked = true;
			} else {
				item.checked = false;
			}
		}
	}
}

function jsRadio_CheckAllByValue(formObj, radioName, radioValue)
{
	for (var i = 0; i < formObj.elements.length; i++) {
		var item = formObj.elements[i];
		if ((item.type == 'radio') && (item.name != radioName)) {
			if (item.value == radioValue) {
				item.checked = true;
			} else {
				item.checked = false;
			}
		}
	}
}

//
// Functions to support CHECKBOX button handling
//
function jsCheck_IsSet(formObj, checkName)
{
	for (var i = 0; i < formObj.elements.length; i++) {
		var item = formObj.elements[i];
		if ((item.type == 'checkbox') && (item.name == checkName)) {
			if (item.checked) {
				return true;
			} else {
				return false;
			}
		}
	}
}

function jsCheck_GetSelectedItem(formObj)
{
	var nCount = 0;

	for (var i = 0; i < formObj.elements.length; i++) {
		var item = formObj.elements[i];
		if ((item.type == 'checkbox') && (item.checked)) {
			nCount++;
		}
	}

	return nCount;
}

function jsCheck_GetSelectedItemByKey(formObj, checkName)
{
	var nCount = 0;

	for (var i = 0; i < formObj.elements.length; i++) {
		var item = formObj.elements[i];
		if ((item.type == 'checkbox') && (item.name == checkName)) {
			if (item.checked)
				nCount++;
		}
	}

	return nCount;
}

function jsCheck_GetSelectedItemByValue(formObj, checkValue)
{
	var nCount = 0;

	for (var i = 0; i < formObj.elements.length; i++) {
		var item = formObj.elements[i];
		if ((item.type == 'checkbox') && (item.value == checkValue)) {
			if (item.checked)
				nCount++;
		}
	}

	return nCount;
}

function jsCheck_CheckItem(formObj, checkName, checkValue)
{
	for (var i = 0; i < formObj.elements.length; i++) {
		var item = formObj.elements[i];
		if ((item.type == 'checkbox') && (item.name == checkName)) {
			if (item.value == checkValue) {
				item.checked = true;
			} else {
				item.checked = false;
			}
		}
	}
}

function jsCheck_CheckItemByKey(formObj, checkName)
{
	for (var i = 0; i < formObj.elements.length; i++) {
		var item = formObj.elements[i];
		if (item.type == 'checkbox') {
			if (item.name == checkName) {
				item.checked = true;
			} else {
				item.checked = false;
			}
		}
	}
}

function jsCheck_CheckItemByValue(formObj, checkValue)
{
	for (var i = 0; i < formObj.elements.length; i++) {
		var item = formObj.elements[i];
		if (item.type == 'checkbox') {
			if (item.value == checkValue) {
				item.checked = true;
			} else {
				item.checked = false;
			}
		}
	}
}

function jsCheck_CheckAll(formObj, checkTitle)
{
	var bChecked = jsCheck_IsSet(formObj, checkTitle);

	for (var i = 0; i < formObj.elements.length; i++) {
		var item = formObj.elements[i];
		if ((item.type == 'checkbox') && (item.name != checkTitle) && !item.disabled)
			item.checked = bChecked;
	}
}

function jsCheck_ClearAll(formObj)
{
	for (var i = 0; i < formObj.elements.length; i++) {
		var item = formObj.elements[i];
		if (item.type == 'checkbox') {
			item.checked = false;
		}
	}
}

//
// Functions to support SELECT type handling
//
function jsList_GetSelectedIndex(listObj)
{
	return listObj.selectedIndex;
}

function jsList_GetSelectedValue(listObj)
{
	if (listObj.length) {
		idx = jsList_GetSelectedIndex(listObj);
		return listObj[idx].value;
	} else {
		return listObj.value;
	}
}

function jsList_SelectItem(listObj, pszValue)
{
	for (var i = 0; i < listObj.length; i++) {
		if (listObj[i].value == pszValue)
			listObj[i].selected = true;
		else
			listObj[i].selected = false;
	}

	return;
}

function jsList_ClearSelectedItem(listObj)
{
	for (var i = 0; i < listObj.length; i++) {
		listObj[i].selected = false;
	}

	return;
}

function jsList_IsMultipleSelect(listObj)
{
	var isMultiple = 0;

	for (var i = 0; i < listObj.length; i++) {
		if (listObj[i].selected) {
			isMultiple++;
		}
	}

	return (isMultiple > 1) ? true : false;
}

function jsList_IsItemExist(listObj, compVal)
{
	for (var i = 0; i < listObj.length; i++) {
		if (listObj[i].value == compVal) {
			return true;
		}
	}

	return false;
}

function jsList_AddItem(listObj, newKey, newVal)
{
	// append a new value to select list
	var option = new Option(newVal, newKey)

	listObj.options[listObj.length]=option;
	listObj[listObj.length-1].selected=true;

	return;
}

function jsList_DeleteItem(listObj)
{
	var start = jsList_GetSelectedIndex(listObj);
	var lastIndex = start;

	var delArr = new Array(0);
	var delIndex = 0;

	// get indexes for the selected items
	for (var i = start; i < listObj.length; i++) {
		if (listObj[i].selected) {
			lastIndex = i;
			// save a index into an array
			delArr[delIndex++] = i;
		}
	}

	for (var i = 0; i < delIndex; i++) {
		// delete a node in option lists
		listObj.options[delArr[i]] = null;
		for (var j = i + 1; j < delIndex; j++)
			delArr[j] = delArr[j] - 1;
	}

	return delArr.length;
}

function jsList_DeleteAll(listObj)
{
	for (var i = 0; i < listObj.length; i++) {
		if (listObj[i].value) {
			listObj.options[i] = null;
		}
	}

	return;
}

//
// Functions to support credit card validation
//
function jsAPI_OnlyNumericSolution(szNumber)
{
  // Remove any non numeric characters.
  // Ensure number is no more than 19 characters long.
	var newNumber = "";
	for (var i = 0; i < szNumber.length; i++) {
		var ch = szNumber.substring(i, i + 1);
		if (ch >= "0" && ch <= "9") {
			newNumber += ch;
		}
	}
	return newNumber;
}

function jsAPI_GetCardType(szNumber)
{
    // Do the first four digits fit within proper ranges?
    // If so, who's the card issuer and how long should the number be?
    var NumberLeft = szNumber.substr(0, 4);
    var NumberLength = szNumber.length;
    var ShouldLength = 16;
    var CardName = null;

    if (NumberLeft >= "3000" && NumberLeft <= "3059") {
        CardName = "Diners Club";
        ShouldLength = 14;
    } else if (NumberLeft >= "3600" && NumberLeft <= "3699") {
        CardName = "Diners Club";
        ShouldLength = 14;
    } else if (NumberLeft >= "3800" && NumberLeft <= "3889") {
        CardName = "Diners Club";
        ShouldLength = 14;
    } else if (NumberLeft >= "3400" && NumberLeft <= "3499") {
        CardName = "American Express";
        ShouldLength = 15;
    } else if (NumberLeft >= "3700" && NumberLeft <= "3799") {
        CardName = "American Express";
        ShouldLength = 15;
    } else if (NumberLeft >= "3528" && NumberLeft <= "3589") {
        CardName = "JCB";
        ShouldLength = 16;
    } else if (NumberLeft >= "3890" && NumberLeft <= "3899") {
        CardName = "Carte Blache";
        ShouldLength = 14;
    } else if (NumberLeft >= "4000" && NumberLeft <= "4999") {
        CardName = "Visa";
        if (NumberLength > 14) {
            ShouldLength = 16;
        } else if (NumberLength < 14) {
            ShouldLength = 13;
        }
    } else if (NumberLeft >= "5100" && NumberLeft <= "5599") {
        CardName = "MasterCard";
        ShouldLength = 16;
    } else if (NumberLeft == "5610") {
        CardName = "Australian BankCard";
        ShouldLength = 16;
    } else if (NumberLeft == "6011") {
        CardName = "Discover/Novus";
        ShouldLength = 16;
    } else {
        return null;
    }

    // Is the number the right length?
    if (NumberLength != ShouldLength) {
    	return null;
    }

    return CardName;
}

function jsAPI_Mod10Solution(str)
{
  var result = true;

  var sum = 0;
  var mul = 1;
  var strLen = str.length;

  // Analyze odd digits in even length strings
  // or even digits in odd length strings.
  for (i = 0; i < strLen; i++)
  {
    var digit = str.substring(strLen-i-1,strLen-i);
    var tproduct = parseInt(digit ,10)*mul;
    if (tproduct >= 10)
      sum += (tproduct % 10) + 1;
    else
      sum += tproduct;
    if (mul == 1)
      mul++;
    else
      mul--;
  }

  // Is the checksum divisible by ten?
  if ((sum % 10) != 0)
    result = false;

  return result;
}

function jsAPI_IsValidExpDate(cardMonth, cardYear)
{
	var result = true;
	var expired = false;

	if (cardYear.length == 2) {
		var cardDate = "20"+cardYear+""+cardMonth;
	} else {
		var cardDate = cardYear+""+cardMonth;
	}

	var now = new Date();
	var nowMonth = now.getMonth() + 1;
	if (nowMonth < 10) nowMonth = "0"+nowMonth;

	var nowYear = now.getFullYear();
	var curDate = nowYear+""+nowMonth;

	if (cardDate < curDate) {
		result = false;
	}

	return result;
}

function jsMenu_Void()
{
	return;
}

// end hiding -->
