﻿// JScript File

function getElementByIdCrossBrowser(the_id) {
if (typeof the_id != 'string') {
return the_id;
}

if (typeof document.getElementById != 'undefined') {
return document.getElementById(the_id);
} else if (typeof document.all != 'undefined') {
return document.all[the_id];
} else if (typeof document.layers != 'undefined') {
return document.layers[the_id];
} else {
return null;
}
}


function getElementByIdCrossBrowserParent(the_id) {
if (typeof the_id != 'string') {
return the_id;
}

if (typeof parent.document.getElementById != 'undefined') {
return parent.document.getElementById(the_id);
} else if (typeof parent.document.all != 'undefined') {
return parent.document.all[the_id];
} else if (typeof parent.document.layers != 'undefined') {
return parent.document.layers[the_id];
} else {
return null;
}
}


// Declaring valid date character, minimum year and maximum year
 var dtCh= "/";
 var minYear=1900;
 var maxYear=2100;
 function isInteger(s){

 	var i;
     for (i = 0; i < s.length; i++){   
         // Check that current character is number.
         var c = s.charAt(i);
         if (((c < "0") || (c > "9"))) return false;
     }
     // All characters are numbers.
     return true;
 }
 function stripCharsInBag(s, bag){
 	var i;
     var returnString = "";
     // Search through string's characters one by one.
     // If character is not in bag, append to returnString.
     for (i = 0; i < s.length; i++){   
         var c = s.charAt(i);
         if (bag.indexOf(c) == -1) returnString += c;
     }
     return returnString;
 }
 function daysInFebruary (year){
 	// February has 29 days in any year evenly divisible by four,
     // EXCEPT for centurial years which are not also divisible by 400.
     return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
 }
 function DaysArray(n) {
 	for (var i = 1; i <= n; i++) {
 		this[i] = 31
 		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
 		if (i==2) {this[i] = 29}
    } 
    return this
 }
 
 function isDate(dtStr,theField){
 	if (dtStr==''){ return true; }
   if (dtStr.indexOf(dtCh) == -1&&dtStr.length==8){dtStr = (dtStr.substr(0,2) + dtCh + dtStr.substr(2,2) + dtCh + dtStr.substring(4))}
 theField.value=dtStr
 	var daysInMonth = DaysArray(12)
 	var pos1=dtStr.indexOf(dtCh)
 	var pos2=dtStr.indexOf(dtCh,pos1+1)
 	var strMonth=dtStr.substring(0,pos1)
 	var strDay=dtStr.substring(pos1+1,pos2)
 	var strYear=dtStr.substring(pos2+1)
 	strYr=strYear
 	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
 	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)	
 for (var i = 1; i <= 3; i++) {
 		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
 	}
 	month=parseInt(strMonth)
 	day=parseInt(strDay)
 	year=parseInt(strYr)	
 if (pos1==-1 || pos2==-1){
 		alert("The date format should be : mm/dd/yyyy")
 		return false
 	}	
 if (strMonth.length<1 || month<1 || month>12){
 		alert("Please enter a valid month")
 		return false
 	}	
 if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
 		alert("Please enter a valid day")
 		return false
 	}	
 if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
 		alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear)
 		return false
 	}	
 if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
 		alert("Please enter a valid date")
 		return false	
 }
 return true
 }
 
 function IsNumeric(sText)
 {
    var ValidChars = " 0123456789.-";
    var IsNumber=true;
    var Char;
 
  
    for (i = 0; i < sText.length && IsNumber == true; i++) 
       { 
       Char = sText.charAt(i); 
       if (ValidChars.indexOf(Char) == -1) 
          {
          IsNumber = false;
          }
       }
    return IsNumber;
    
    }
 
 
 function IsPhone(strNum, len)
 { 
 
 	if (strNum==''||strNum==' ')
 	{
 		return true;
 	}
   strNum = strNum.replace('(','')
   strNum = strNum.replace(')','')
   strNum = strNum.replace('-','')
   strNum = strNum.replace('.','')
 	if (IsNumeric(strNum)&&strNum.length==len)
 	{
 		return true;
 	}
 	else
 	{
 		window.alert('Please enter only numbers in this field and it must be ' + len + ' digits long');
 		return false;
 	}
 }
 		function formatFieldName(cFieldName) {
 		var upr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
 		if (cFieldName.substring(0,1)=='i'||cFieldName.substring(0,1)=='c'||cFieldName.substring(0,1)=='b'){
 			cFieldName = cFieldName.substring(1);
 		}
 		if (cFieldName.substring(0,3)=='dte'){
 			cFieldName = cFieldName.substring(3);
 		}
 		var cFieldNameOut = '';
 		for (i=0; i<cFieldName.length;i++){
 			if (upr.indexOf(cFieldName.charAt(i),0) != -1){
 				cFieldNameOut += ' ' + cFieldName.charAt(i),0;
 			}
 			else {
 				cFieldNameOut += cFieldName.charAt(i),0;
 			}
 		}
 		return cFieldNameOut
 		}
 		
 		
 		function checkEmail(theField) {
       if (theField==''){return (true);}
 		if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(theField)){
 		return (true)
 		}
 		window.alert("Invalid E-mail Address! Please re-enter with the following format: name@domain.com")
 		return (false)
 		}
 		
 			
 		function checkIsNumeric(theField) {
        if (IsNumeric(theField)){return (true);}
        else{
 		window.alert("Invalid entry! Please re-enter with only numbers.")
 		return (false)
 		}
 		}



function formatFieldName(cFieldName) {
 		var upr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
 		if (cFieldName.substring(0,1)=='i'||cFieldName.substring(0,1)=='c'||cFieldName.substring(0,1)=='b'){
 			cFieldName = cFieldName.substring(1);
 		}
 		var cFieldNameOut = '';
 		for (i=0; i<cFieldName.length;i++){
 			if (upr.indexOf(cFieldName.charAt(i),0) != -1){
 				cFieldNameOut += ' ' + cFieldName.charAt(i),0;
 			}
 			else {
 				cFieldNameOut += cFieldName.charAt(i),0;
 			}
 		}
 		return cFieldNameOut
 		}
 		
 		

function showCharCodes (stringIn) {
	//var string = form.textfield.value;
	var str = '';
	for (i = 0; i < stringIn.length; i++) {
		str = str + '&#' + stringIn.charCodeAt(i) + ';';
	}
	//form.textfield2.value = str;
	//form.textfield3.value = myUrlEncode(string);
	
	return str;
}

function myUrlEncode(str) {
	var result = "";
	var i = 0;

	for (i=0; i < str.length; i++) {
		result = result + "%";
		result = result + "0123456789ABCDEF".charAt((str.charCodeAt(i)/16)&0x0F);
		result = result + "0123456789ABCDEF".charAt((str.charCodeAt(i)/1)&0x0F);
	}
	return result;
}




/**
 * SUBMODAL v1.6
 * Used for displaying DHTML only popups instead of using buggy modal windows.
 *
 * By Subimage LLC
 * http://www.subimage.com
 *
 * Contributions by:
 * 	Eric Angel - tab index code
 * 	Scott - hiding/showing selects for IE users
 *	Todd Huss - inserting modal dynamically and anchor classes
 *
 * Up to date code can be found at http://submodal.googlecode.com
 */

// Popup code
var gPopupMask = null;
var gPopupContainer = null;
var gPopFrame = null;
var gReturnFunc;
var gPopupIsShown = false;
var gDefaultPage = "/loading.html";
var gHideSelects = false;
var gReturnVal = null;

var gTabIndexes = new Array();
// Pre-defined list of tags we want to disable/enable tabbing into
var gTabbableTags = new Array("A","BUTTON","TEXTAREA","INPUT","IFRAME");	

// If using Mozilla or Firefox, use Tab-key trap.
//if (!document.all) {
	//document.onkeypress = keyDownHandler;
//}

/**
 * Initializes popup code on load.	
 */
function initPopUp() {
	// Add the HTML to the body
	theBody = document.getElementsByTagName('BODY')[0];
	popmask = document.createElement('div');
	popmask.id = 'popupMask';
	popcont = document.createElement('div');
	popcont.id = 'popupContainer';
	popcont.innerHTML = '' +
		'<div id="popupInner" style="display:none;">' +
			'<div id="popupTitleBar">' +
					'Loading...<br/><img src="/Portals/0/i/loading.gif" align="center" id="popCloseBox" /> Please Wait' +
			'</div>' +
		'</div>';
	theBody.appendChild(popmask);
	theBody.appendChild(popcont);
	
	gPopupMask = document.getElementById("popupMask");
	gPopupContainer = document.getElementById("popupContainer");
	gPopFrame = document.getElementById("popupFrame");	
	
	// check to see if this is IE version 6 or lower. hide select boxes if so
	// maybe they'll fix this in version 7?
	var brsVersion = parseInt(window.navigator.appVersion.charAt(0), 10);
	if (brsVersion <= 6 && window.navigator.userAgent.indexOf("MSIE") > -1) {
		gHideSelects = true;
	}
	
	// Add onclick handlers to 'a' elements of class submodal or submodal-width-height
	var elms = document.getElementsByTagName('a');
	for (i = 0; i < elms.length; i++) {
		if (elms[i].className.indexOf("submodal") == 0) { 
			// var onclick = 'function (){showPopWin(\''+elms[i].href+'\','+width+', '+height+', null);return false;};';
			// elms[i].onclick = eval(onclick);
			elms[i].onclick = function(){
				// default width and height
				var width = 400;
				var height = 200;
				// Parse out optional width and height from className
				params = this.className.split('-');
				if (params.length == 3) {
					width = parseInt(params[1]);
					height = parseInt(params[2]);
				}
				showPopWin(this.href,width,height,null); return false;
			}
		}
	}
}
addEvent(window, "load", initPopUp);

 /**
	* @argument width - int in pixels
	* @argument height - int in pixels
	* @argument url - url to display
	* @argument returnFunc - function to call when returning true from the window.
	* @argument showCloseBox - show the close box - default true
	*/
function showPopWin(url, width, height, returnFunc, showCloseBox) {

    document.location.replace(url);
	// show or hide the window close widget
	if (showCloseBox == null || showCloseBox == true) {
		document.getElementById("popCloseBox").style.display = "block";
	} else {
		document.getElementById("popCloseBox").style.display = "none";
	}
	gPopupIsShown = true;
	//disableTabIndexes();
	gPopupMask.style.display = "block";
	gPopupContainer.style.display = "block";
	// calculate where to place the window on screen
	centerPopWin(width, height);
	
	//var titleBarHeight = parseInt(document.getElementById("popupTitleBar").offsetHeight, 10);


	gPopupContainer.style.width = width + "px";
	gPopupContainer.style.height = (height) + "px";
	
	setMaskSize();

	// need to set the width of the iframe to the title bar width because of the dropshadow
	// some oddness was occuring and causing the frame to poke outside the border in IE6
	//gPopFrame.style.width = parseInt(document.getElementById("popupTitleBar").offsetWidth, 10) + "px";
	//gPopFrame.style.height = (height) + "px";
	
	// set the url
	//gPopFrame.src = url;
	
	gReturnFunc = returnFunc;
	// for IE
	if (gHideSelects == true) {
		hideSelectBoxes();
	}
	
	//window.setTimeout("setPopTitle();", 600);
}

//
var gi = 0;
function centerPopWin(width, height) {
	if (gPopupIsShown == true) {
		if (width == null || isNaN(width)) {
			width = gPopupContainer.offsetWidth;
		}
		if (height == null) {
			height = gPopupContainer.offsetHeight;
		}
		
		//var theBody = document.documentElement;
		var theBody = document.getElementsByTagName("BODY")[0];
		//theBody.style.overflow = "hidden";
		var scTop = parseInt(getScrollTop(),10);
		var scLeft = parseInt(theBody.scrollLeft,10);
	
		setMaskSize();
		
		//window.status = gPopupMask.style.top + " " + gPopupMask.style.left + " " + gi++;
		
		var titleBarHeight = parseInt(document.getElementById("popupTitleBar").offsetHeight, 10);
		
		var fullHeight = getViewportHeight();
		var fullWidth = getViewportWidth();
		
		gPopupContainer.style.top = (scTop + ((fullHeight - (height+titleBarHeight)) / 2)) + "px";
		gPopupContainer.style.left =  (scLeft + ((fullWidth - width) / 2)) + "px";
		//alert(fullWidth + " " + width + " " + gPopupContainer.style.left);
	}
}
addEvent(window, "resize", centerPopWin);
addEvent(window, "scroll", centerPopWin);
window.onscroll = centerPopWin;


/**
 * Sets the size of the popup mask.
 *
 */
function setMaskSize() {
	var theBody = document.getElementsByTagName("BODY")[0];
			
	var fullHeight = getViewportHeight();
	var fullWidth = getViewportWidth();
	
	// Determine what's bigger, scrollHeight or fullHeight / width
	if (fullHeight > theBody.scrollHeight) {
		popHeight = fullHeight;
	} else {
		popHeight = theBody.scrollHeight;
	}
	
	if (fullWidth > theBody.scrollWidth) {
		popWidth = fullWidth;
	} else {
		popWidth = theBody.scrollWidth;
	}
	
	gPopupMask.style.height = popHeight + "px";
	gPopupMask.style.width = popWidth + "px";
}

/**
 * @argument callReturnFunc - bool - determines if we call the return function specified
 * @argument returnVal - anything - return value 
 */
function hidePopWin(callReturnFunc) {
	gPopupIsShown = false;
	var theBody = document.getElementsByTagName("BODY")[0];
	theBody.style.overflow = "";
	//restoreTabIndexes();
	if (gPopupMask == null) {
		return;
	}
	gPopupMask.style.display = "none";
	gPopupContainer.style.display = "none";
	if (callReturnFunc == true && gReturnFunc != null) {
		// Set the return code to run in a timeout.
		// Was having issues using with an Ajax.Request();
		gReturnVal = window.frames["popupFrame"].returnVal;
		window.setTimeout('gReturnFunc(gReturnVal);', 1);
	}
	gPopFrame.src = gDefaultPage;
	// display all select boxes
	if (gHideSelects == true) {
		displaySelectBoxes();
	}
}

/**
 * Sets the popup title based on the title of the html document it contains.
 * Uses a timeout to keep checking until the title is valid.
 */
//function setPopTitle() {
//	return;
//	if (window.frames["popupFrame"].document.title == null) {
//		window.setTimeout("setPopTitle();", 10);
//	} else {
//		document.getElementById("popupTitle").innerHTML = window.frames["popupFrame"].document.title;
//	}
//}

// Tab key trap. iff popup is shown and key was [TAB], suppress it.
// @argument e - event - keyboard event that caused this function to be called.
//function keyDownHandler(e) {
   // if (gPopupIsShown && e.keyCode == 9)  return false;
//}

// For IE.  Go through predefined tags and disable tabbing into them.
//function disableTabIndexes() {
//	if (document.all) {
//		var i = 0;
//		for (var j = 0; j < gTabbableTags.length; j++) {
//			var tagElements = document.getElementsByTagName(gTabbableTags[j]);
//			for (var k = 0 ; k < tagElements.length; k++) {
//				gTabIndexes[i] = tagElements[k].tabIndex;
//				tagElements[k].tabIndex="-1";
//				i++;
//			}
//		}
//	}
//}

// For IE. Restore tab-indexes.
//function restoreTabIndexes() {
//	if (document.all) {
//		var i = 0;
//		for (var j = 0; j < gTabbableTags.length; j++) {
//			var tagElements = document.getElementsByTagName(gTabbableTags[j]);
//			for (var k = 0 ; k < tagElements.length; k++) {
//				tagElements[k].tabIndex = gTabIndexes[i];
//				tagElements[k].tabEnabled = true;
//				i++;
//			}
//		}
//	}
//}


/**
 * Hides all drop down form select boxes on the screen so they do not appear above the mask layer.
 * IE has a problem with wanted select form tags to always be the topmost z-index or layer
 *
 * Thanks for the code Scott!
 */
function hideSelectBoxes() {
  var x = document.getElementsByTagName("SELECT");

  for (i=0;x && i < x.length; i++) {
    x[i].style.visibility = "hidden";
  }
}

/**
 * Makes all drop down form select boxes on the screen visible so they do not 
 * reappear after the dialog is closed.
 * 
 * IE has a problem with wanting select form tags to always be the 
 * topmost z-index or layer.
 */
function displaySelectBoxes() {
  var x = document.getElementsByTagName("SELECT");

  for (i=0;x && i < x.length; i++){
    x[i].style.visibility = "visible";
  }
}


/**
 * COMMON DHTML FUNCTIONS
 * These are handy functions I use all the time.
 *
 * By Seth Banks (webmaster at subimage dot com)
 * http://www.subimage.com/
 *
 * Up to date code can be found at http://www.subimage.com/dhtml/
 *
 * This code is free for you to use anywhere, just keep this comment block.
 */

/**
 * X-browser event handler attachment and detachment
 * TH: Switched first true to false per http://www.onlinetools.org/articles/unobtrusivejavascript/chapter4.html
 *
 * @argument obj - the object to attach event to
 * @argument evType - name of the event - DONT ADD "on", pass only "mouseover", etc
 * @argument fn - function to call
 */
function addEvent(obj, evType, fn){
 if (obj.addEventListener){
    obj.addEventListener(evType, fn, false);
    return true;
 } else if (obj.attachEvent){
    var r = obj.attachEvent("on"+evType, fn);
    return r;
 } else {
    return false;
 }
}
function removeEvent(obj, evType, fn, useCapture){
  if (obj.removeEventListener){
    obj.removeEventListener(evType, fn, useCapture);
    return true;
  } else if (obj.detachEvent){
    var r = obj.detachEvent("on"+evType, fn);
    return r;
  } else {
    alert("Handler could not be removed");
  }
}

/**
 * Code below taken from - http://www.evolt.org/article/document_body_doctype_switching_and_more/17/30655/
 *
 * Modified 4/22/04 to work with Opera/Moz (by webmaster at subimage dot com)
 *
 * Gets the full width/height because it's different for most browsers.
 */
function getViewportHeight() {
	if (window.innerHeight!=window.undefined) return window.innerHeight;
	if (document.compatMode=='CSS1Compat') return document.documentElement.clientHeight;
	if (document.body) return document.body.clientHeight; 

	return window.undefined; 
}
function getViewportWidth() {
	var offset = 17;
	var width = null;
	if (window.innerWidth!=window.undefined) return window.innerWidth; 
	if (document.compatMode=='CSS1Compat') return document.documentElement.clientWidth; 
	if (document.body) return document.body.clientWidth; 
}

/**
 * Gets the real scroll top
 */
function getScrollTop() {
	if (self.pageYOffset) // all except Explorer
	{
		return self.pageYOffset;
	}
	else if (document.documentElement && document.documentElement.scrollTop)
		// Explorer 6 Strict
	{
		return document.documentElement.scrollTop;
	}
	else if (document.body) // all other Explorers
	{
		return document.body.scrollTop;
	}
}
function getScrollLeft() {
	if (self.pageXOffset) // all except Explorer
	{
		return self.pageXOffset;
	}
	else if (document.documentElement && document.documentElement.scrollLeft)
		// Explorer 6 Strict
	{
		return document.documentElement.scrollLeft;
	}
	else if (document.body) // all other Explorers
	{
		return document.body.scrollLeft;
	}
}
