﻿// JScript File

// Mimic ASP Left
function Left(str, n){
	if (n <= 0)
	    return "";
	else if (n > String(str).length)
	    return str;
	else
	    return String(str).substring(0,n);
}

// Mimic ASP Right
function Right(str, n){
    if (n <= 0)
       return "";
    else if (n > String(str).length)
       return str;
    else {
       var iLen = String(str).length;
       return String(str).substring(iLen, iLen - n);
    }
}


// Modified "object finder" code from Dreamweaver (XBrowser)
function findObj(n, d) { 
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=findObj(n,d.layers[i].document); return x;
}

// Get Position of an element
function getElemPos(offsetTrail)
{
  var offsetLeft = 0;
  var offsetTop = 0;
  while (offsetTrail) {
      offsetLeft += offsetTrail.offsetLeft;
      offsetTop += offsetTrail.offsetTop;
      offsetTrail = offsetTrail.offsetParent;
  }
  if (navigator.userAgent.indexOf("Mac") != -1 && 
      typeof document.body.leftMargin != "undefined") {
      offsetLeft += document.body.leftMargin;
      offsetTop += document.body.topMargin;
  }
  return {left:offsetLeft, top:offsetTop};
}

// Pop-up window for error messages (XBrowser)
function modelesswin(url,mwidth,mheight){ 
  if (document.all&&window.print) 
    eval('window.showModelessDialog(url,"","help:0;resizable:0;status:0;dialogWidth:'+mwidth+'px;dialogHeight:'+mheight+'px")') 
  else 
    eval('window.open(url,"","width='+mwidth+'px,height='+mheight+'px,resizable=0,scrollbars=0")') 
}

// Pop-up window for utilities (XBrowser - allows reloading of pages within popup)
function pop_up(h,w,where){ 
 
var winX = (screen.width/2)-(w/2); 
var winY = (screen.height/2)-(h/2); 
 
size="scrollbars=yes, toolbar=no, hotkeys=no, height=" + h + ", width=" + w + ",top=" + winY + ", left=" + winX; 
win = window.open(where, "myPop", size); 
} 

// Input Function : Force numeric entry into a textbox.
function numbersonly(e){
var unicode=e.charCode? e.charCode : e.keyCode
if (unicode!=8){ //if the key isn't the backspace key (which we should allow)
if (unicode<46||unicode>58) //if not a number
return false //disable key press
}
}

// Validate Function : Use RegExp to detect if string entered is a valid eMail format.
function isEmail(str) {
  // are regular expressions supported?
  var supported = 0;
  if (window.RegExp) {
    var tempStr = "a";
    var tempReg = new RegExp(tempStr);
    if (tempReg.test(tempStr)) supported = 1;
  }
  if (!supported) 
    return (str.indexOf(".") > 2) && (str.indexOf("@") > 0);
  var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
  var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$");
  return (!r1.test(str) && r2.test(str));
}

// Validate Function : Ensure that form field has non-blank content.
function valField(objName, ErrMessage) {
  var obj = findObj(objName);
  if (obj.value == "") {
    obj.focus();
    modelesswin('errorPop.aspx?ErrCode=' + ErrMessage,280,150);
  return false;
}
  return true;
}

// Validate Function : Ensure that two form fields contain identical content.
function valEqual(objName, objName2, ErrMessage) {
  var obj = findObj(objName);
  var obj2 = findObj(objName2);
  if (obj.value != obj2.value) {
    obj2.focus();
    modelesswin('errorPop.aspx?ErrCode=' + ErrMessage,280,150);
  return false;
}
  return true;
}

// Validate Function : Calling Function for isEmail Function.
function valEmail(objName, ErrMessage) {
  var obj = findObj(objName);
  if (!isEmail(obj.value)) {
    obj.focus();
    modelesswin('errorPop.aspx?ErrCode=' + ErrMessage,280,150);
  return false;
}
  return true;
}

// Validate Function : Ensure that form field meets min/max length criteria
function valMinMax(objName, vMin, vMax, ErrMessage) {
  var obj = findObj(objName);
  if ((obj.value.length < vMin) || (obj.value.length > vMax)) {
    obj.focus();
    modelesswin('errorPop.aspx?ErrCode=' + ErrMessage,280,150);
  return false;
}
  return true;
}


// Switch the content of two text fields.
function switchText(txtField1, txtField2) {
  var objField1 = findObj(txtField1);
  var objField2 = findObj(txtField2);
  var strField1 = objField1.value;
  var strField2 = objField2.value;
  objField1.value = strField2;
  objField2.value = strField1;
}


//////////////////////////////////////////////////////////////////
// BANK OF CHECKS FOR iSys THAT INCLUDE HIDDEN IMAGE FOR ERROR CODE

// Validate Function : Ensure that form field has non-blank content.
function valField_W_Hidden(objName, ErrMessage, ErrImage) {
  var obj = findObj(objName);
  var errImg = findObj(ErrImage);
  if (obj.value == "") {
    obj.focus();
    errImg.className = 'img_show';
    modelesswin('errorPop.aspx?ErrCode=' + ErrMessage,272,150);
  return false;
}
    errImg.className = 'img_hide';
  return true;
}

// Validate Function : Ensure that form field meets min/max length criteria
function valMinMax_W_Hidden(objName, vMin, vMax, ErrMessage, ErrImage) {
  var obj = findObj(objName);
  var errImg = findObj(ErrImage);
  if ((obj.value.length < vMin) || (obj.value.length > vMax)) {
    obj.focus();
    errImg.className = 'img_show';
    modelesswin('errorPop.aspx?ErrCode=' + ErrMessage,272,150);
  return false;
}
    errImg.className = 'img_hide';
  return true;
}

// Validate Function : Calling Function for isEmail Function.
function valEmail_W_Hidden(objName, ErrMessage, ErrImage) {
  var obj = findObj(objName);
  var errImg = findObj(ErrImage);
  if (!isEmail(obj.value)) {
    obj.focus();
    errImg.className = 'img_show';
    modelesswin('errorPop.aspx?ErrCode=' + ErrMessage,280,150);
  return false;
}
    errImg.className = 'img_hide';
  return true;
}

//////////////////////////////////////////////////////////////////


// Validate Function : Ensure that a given age is between two dates.
function valDateBetween(obj1Name, obj2Name, obj3Name, ageMin, ageMax) {
  var obj1 = findObj(obj1Name);
  var obj2 = findObj(obj2Name);
  var obj3 = findObj(obj3Name);
  
  var inDate = new Date(obj3.value, obj2.value-1, obj1.value);
  var nowDate = new Date();
  with (minDate = new Date()) setMonth(getMonth()-(ageMin*12));
  with (maxDate = new Date()) setMonth(getMonth()-(ageMax*12));
  
  if (((nowDate - inDate) - (nowDate - minDate) < 0) || ((nowDate - inDate) - (nowDate - maxDate) > 0)){
    obj1.focus();
    modelesswin('errorPop.aspx?ErrCode=AgeMismatch',280,150);
  return false;
}
  return true;
}

// Validate Function : Ensure that a given age is less than a set limit.
function valDateLessThan(obj1Name, obj2Name, obj3Name, ageCheck) {
  var obj1 = findObj(obj1Name);
  var obj2 = findObj(obj2Name);
  var obj3 = findObj(obj3Name);
  
  var inDate = new Date(obj3.value, obj2.value-1, obj1.value);
  var nowDate = new Date();
  with (checkDate = new Date()) setMonth(getMonth()-(ageCheck*12));
  
  if ((nowDate - inDate) - (nowDate - checkDate) > 0) {
    obj1.focus();
    modelesswin('errorPop.aspx?ErrCode=AgeMismatch',280,150);  
  return false;
}
  return true;
}

// Validate Function : Ensure that a given age is more than a set limit.
function valDateMoreThan(obj1Name, obj2Name, obj3Name, ageCheck) {
  var obj1 = findObj(obj1Name);
  var obj2 = findObj(obj2Name);
  var obj3 = findObj(obj3Name);
  
  var inDate = new Date(obj3.value, obj2.value-1, obj1.value);
  var nowDate = new Date();
  with (checkDate = new Date()) setMonth(getMonth()-(ageCheck*12));
  
  if ((nowDate - inDate) - (nowDate - checkDate) < 0) {
    obj1.focus();
    modelesswin('errorPop.aspx?ErrCode=AgeMismatch',280,150);
  return false;
}
  return true;
}

// Forces an alert window which will not allow the Delete button to submit a form unless they confirm.
function ConfirmDelete(){
msg = "The selected item will be permanently deleted, are you sure?";
if (confirm(msg)) {
 return true;}
else {
 return false;
}
}

// Update a selection within a textarea.
function saveSel (el)
{
if (el.createTextRange) 
	{
	s = "" + document.selection.type;
	el.selected = document.selection.createRange().duplicate();
	}
}
	
// Add HTML tags to a textarea.
function FormatText(obj, text1, text2)
{
el = document.getElementById(obj);
el.focus ();
saveSel(el);

if( typeof(el.selectionStart) != "undefined" ){
 el.focus();
 var start_selection = el.selectionStart;
 var end_selection = el.selectionEnd;

    //Check for FireFox

 if (end_selection < start_selection)
 {
  var temp = end_selection;
  end_selection = start_selection;
  start_selection = temp;
 }

    // Umm... You actually have to replace ALL of the text in the input to get it to work in Firefox!

 var startText = (el.value).substring(0, start_selection);
 var endText = (el.value).substring(end_selection, el.textLength);
 var selText = (el.value).substring(start_selection, end_selection);

 el.value = startText + text1 + selText + text2 + endText;
 el.selectionStart = start_selection;
 el.selectionEnd = start_selection + text1.length + selText.length + text2.length;
}

    //Do it properly seeing as how it's IE and works better :)

if (el.createTextRange && el.selected)
{
  var selected = el.selected;
  if (selected.text.charAt(selected.text.length - 1) == ' '){
    selected.text = text1 + selected.text.substring(0,selected.text.length - 1) + text2 + ' ';}
  else{
    selected.text = text1 + selected.text + text2;}
}
  saveSel(el)
}

function replaceAll( str, from, to ) {
    var idx = str.indexOf( from );

    while ( idx > -1 ) {
        str = str.replace( from, to ); 
        idx = str.indexOf( from );
    }
    return str;
}

// Strip erroneous HTML tags from a textarea.
function stringClean(inField) {
  var q = '';
  var r = '';
  var x = '¬';
  var rep = 0;
  obj = document.getElementById(inField);
  var inString = obj.value;
    for (var i = 0; i <= inString.length - 1; i++){
      q = inString.charAt(i);

      if (q == '<')
        {
        rep = 1;
        }
      else
        {
        if (q == '>')
          {
          rep = 2;
          }
        }

      if (rep == 1)
        {
        r += x;
        }
      else
        {
        if (q == '>')
          {
          r += x;
          }
        else
          {
          r += inString.charAt(i);
          }
        }

    }
    obj.value = replaceAll( r, "¬", "");
}

function fnCheckValidDate(inDay, inMonth, inYear, ErrLayer, ErrMessage) {
var DayObj = document.getElementById(inDay);
var MonthObj = document.getElementById(inMonth);
var YearObj = document.getElementById(inYear);

if (isValidDate(DayObj.value, MonthObj.value, YearObj.value)) {
return true;
}
DayObj.focus();
fnShowHideLayers(ErrLayer,'','show');
modelesswin('errorPop.aspx?ErrCode=' + ErrMessage,280,150);
return false;
}


function fnCheckFieldWithLength(objName, ErrLayer, ErrField, inMin, inMax, ErrMessage) {
var obj = document.getElementById(objName);

if (obj.value != "" && obj.value.length >= inMin && obj.value.length <= inMax) {
return true;
}
obj.focus();
fnShowHideLayers(ErrLayer,'','show');
modelesswin('errorPop.aspx?ErrCode=' + ErrMessage,280,150);
return false;
}

 
function fnCheckField(objName, ErrLayer, ErrField, ErrMessage) {
var obj = document.getElementById(objName);

if (obj.value == "") {
obj.focus();
fnShowHideLayers(ErrLayer,'','show');
modelesswin('errorPop.aspx?ErrCode=' + ErrMessage,280,150);
return false;
}
return true;
}

function fnCheckCombo(objName, ErrLayer, ErrField, ErrMessage) {
var obj = document.getElementById(objName);

if (obj.value == "0") {
obj.focus();
fnShowHideLayers(ErrLayer,'','show');
modelesswin('errorPop.aspx?ErrCode=' + ErrMessage,280,150);
return false;
}
return true;
}

function fnCheckEmail(objName, ErrLayer, ErrMessage) {
var obj = document.getElementById(objName);
if (!isEmail(obj.value)) {
obj.focus();
fnShowHideLayers(ErrLayer,'','show');
modelesswin('errorPop.aspx?ErrCode=' + ErrMessage,280,150);
return false;
}
return true;
}


function fnCheckMatchingFields(obj1Name, obj2Name, Err1Layer, Err2Layer, ErrMessage) {
var obj1 = document.getElementById(obj1Name);
var obj2 = document.getElementById(obj2Name);

if (obj1.value == obj2.value) {
return true;
}
obj1.focus();
fnShowHideLayers(Err1Layer,'','show');
fnShowHideLayers(Err2Layer,'','show');
modelesswin('errorPop.aspx?ErrCode=' + ErrMessage,280,150);
return false;
}

function fnShowHideLayers() { //v3.0

ns4 = (document.layers)? true:false;
ie4 = (document.all)? true:false;

winW = (ns4)? window.innerWidth-16 : document.body.offsetWidth-20;
winH = (ns4)? window.innerHeight : document.body.offsetHeight;

  var i,p,v,obj,args=fnShowHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=document.getElementById(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }
  obj.left = (winW-150)/2;
  obj.top = (winH-75)/2;
    obj.visibility=v; }
}

function fnFormat2DP(num) { 
    num = isNaN(num) || num === '' || num === null ? 0.00 : num; 
    return parseFloat(num).toFixed(2); 
}
