var strLegalAnnouncement="Please note that confidentiality is an integral part of the accreditation process. This database includes sensitive information related to the accreditation process. NCATE board members, reviewers, and staff accessing this information are expected to observe the NCATE Code of Conduct, which requires BOE, Program Reviewers, policy board members, and staff to consider all information related to the accreditation process as confidential. The information in AIMS, NCATE's database, should not be shared, discussed, or used in any context other than the review of the unit and its programs. ";
var browserWidth =800, browserHeight =600; screenWidth = 800; screenHeight = 600;
var browserVersion="IE6";
var is_ie = ( /msie/i.test(navigator.userAgent) &&
		   !/opera/i.test(navigator.userAgent) );
var dragging = false;
stopEvent = function(ev) {
	ev || (ev = window.event);
	if (is_ie) {
		ev.cancelBubble = true;
		ev.returnValue = false;
	} else {
		ev.preventDefault();
		ev.stopPropagation();
	}
	return false;
};

// insertAdjacentHTML(), insertAdjacentText() and insertAdjacentElement()
// for Netscape 6/Mozilla by Thor Larholm me@jscript.dk
// Usage: include this code segment at the beginning of your document
// before any other Javascript contents.

if(typeof HTMLElement!="undefined" && !HTMLElement.prototype.insertAdjacentElement){
	HTMLElement.prototype.insertAdjacentElement = function(where,parsedNode)
	{
		switch (where.toUpperCase()){
		case 'BEFOREBEGIN':
			this.parentNode.insertBefore(parsedNode,this)
			break;
		case 'AFTERBEGIN':
			this.insertBefore(parsedNode,this.firstChild);
			break;
		case 'BEFOREEND':
			this.appendChild(parsedNode);
			break;
		case 'AFTEREND':
			if (this.nextSibling) this.parentNode.insertBefore(parsedNode,this.nextSibling);
			else this.parentNode.appendChild(parsedNode);
			break;
		}
	}

	HTMLElement.prototype.insertAdjacentHTML = function(where,htmlStr)
	{
		var r = this.ownerDocument.createRange();
		r.setStartBefore(this);
		var parsedHTML = r.createContextualFragment(htmlStr);
		this.insertAdjacentElement(where,parsedHTML)
	}


	HTMLElement.prototype.insertAdjacentText = function(where,txtStr)
	{
		var parsedText = document.createTextNode(txtStr)
		this.insertAdjacentElement(where,parsedText)
	}
}
function getXMLObj() {
	var C=null;
	try{
		C=new ActiveXObject("Msxml2.XMLHTTP")
	} catch(e) {
		try {
			C=new ActiveXObject("Microsoft.XMLHTTP")
		} catch(sc) {
			C=null
		}
	}
	if(!C && typeof XMLHttpRequest != "undefined") {
		C=new XMLHttpRequest()
	}
	return C
}
function getScrollPos(formName){
	try {
		if(document.forms[formName]) {
			if(document.forms[formName].__leftPos){
				document.forms[formName].__leftPos.value = iebody().scrollLeft;
				document.forms[formName].__topPos.value = iebody().scrollTop;
			}
		}
	} catch (e) {}
}

function setScrollPos(leftPos,topPos){
	try {
		iebody().scrollLeft = leftPos;
		iebody().scrollTop = topPos;
	} catch(ex){
		lastExceptionLocation = 'setScrollPos';
		lastException = ex;
	}
}
String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
	return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
	return this.replace(/\s+$/,"");
}
function isNumber(sTxt) {
// Scientific notation is not supported.
// a number with/without a sign (+/-), a single decimal point.
	var sText = "";
	try {sText = sTxt.trim();} catch(e) {try {var d = sTxt.getDay();return false;} catch(ee) {return !isNaN(sTxt)};};
	var startFrom = 0;
	if (sText.charAt(0)=="+" || sText.charAt(0)=="-") startFrom = 1;
	var ValidChars = "0123456789";
	var IsNumber=true;
	var Char;
 
 	var nDecimal = 0;
	for (i = startFrom; i < sText.length && IsNumber == true; i++) {
		Char = sText.charAt(i);
		if (Char==".") {
			nDecimal ++;
			if (nDecimal > 1) {
				IsNumber = false;
				break;
			}
			continue;
		}
		if (ValidChars.indexOf(Char) == -1) {
			IsNumber = false;
			break;
		}
	}
	return IsNumber;
}
function isNumeric(sTxt) {
// only digits
	var sText = sTxt.trim();
	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;
			break;
		}
	}
	return IsNumber;
}
function isEmpty(strToCheck) {
	var s = strToCheck.replace(/[ \t]/g, "");	// drop space or tab
	s = s.replace(/\n|\r/g, "");			// drop CR/LF
	return (s.length<=0);
}
function popUp(url){
	open (url,"","height=300,width=310,top=80,left=80")
}

function getCookieVal (offset){
	var endstr = document.cookie.indexOf (";", offset);
	if (endstr == -1)endstr = document.cookie.length;
	return unescape(document.cookie.substring(offset, endstr));
}

function getCookie (name){
	var arg = name + "=";
	var alen = arg.length;
	var clen = document.cookie.length;
	var i = 0;
	while (i < clen){
		var j = i + alen;
		if (document.cookie.substring(i, j) == arg)return getCookieVal (j);
		i = document.cookie.indexOf(" ", i) + 1;
		if (i == 0)break; 
	}
	return "";
}
function getAbsolutePos(el) {
	var SL = 0, ST = 0;
	var is_div = /^div$/i.test(el.tagName);
	if (is_div && el.scrollLeft)
		SL = el.scrollLeft;
	if (is_div && el.scrollTop)
		ST = el.scrollTop;
	var r = { x: el.offsetLeft - SL, y: el.offsetTop - ST, height: el.clientHeight, width: el.clientWidth };
	if (el.offsetParent) {
		var tmp = this.getAbsolutePos(el.offsetParent);
		r.x += tmp.x;
		r.y += tmp.y;
	}
	return r;
}
var origBackground = "";
function flashText(elementId, nTimes) {
	var element = document.getElementById(elementId);
	var interval = 300;
	var colour1 = "#ff0000";
	var colour2 = origBackground;
//	var colour2 = "#ffffff";
	element.style.background = (element.style.background == colour1) ? colour2 : colour1;
	if (nTimes<=0) return;
	setTimeout("flashText('" + elementId + "'," + (nTimes-1) + ")", interval);
}

function setCookie(name, value, expire){
	var now = new Date();
	var escape = new Date(now.getTime() + expire);
	document.cookie = name+"="+value+"; expires="+escape.toGMTString()+";";
}

function isNotDefined(variable){
	return((variable=="undefined")?true:false);
}
function iebody() {
    // Sense the difference between Strict and Quirks mode
    return (document.compatMode != "BackCompat"? document.documentElement : document.body);
}
function getBrowserInfo() {
  if( typeof( window.innerWidth ) == 'number' ) {//Non-IE
    browserWidth = window.innerWidth;
    browserHeight = window.innerHeight;
    screenWidth = window.screen.availWidth;
    screenHeight = window.screen.availHeight;
    browserVersion="OTHER";
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    //IE 6+ in 'standards compliant mode'
    browserWidth = document.documentElement.clientWidth;
    browserHeight = document.documentElement.clientHeight;
    screenWidth = screen.availWidth;
    screenHeight = screen.availHeight;
    browserVersion="IE6";
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    //IE 4 compatible
    browserWidth = document.body.clientWidth;
    browserHeight = document.body.clientHeight;
    screenWidth = screen.availWidth;
    screenHeight = screen.availHeight;
    browserVersion="IE5";
  }
  //window.alert( 'Width = ' + browserWidth +'Height = ' + browserHeight );
}
getBrowserInfo();

function showHourglass() {
	try {
		var o = document.getElementById("hourGlass");
		o.style.top = (iebody().scrollTop+140)+"px";
		o.style.display="inline";
	} catch(e) {};
}
function hideHourglass() {try{document.getElementById("hourGlass").style.display="none";}catch(e){}}
window.onresize = function() {
	getBrowserInfo();
	try{
		var msk=document.getElementById("mask");
		msk.style.width=browserWidth+"px";
		msk.style.height=browserHeight+"px";
	}catch(e){}
}
showMask=function () {
	getBrowserInfo();
	var msk=document.getElementById("mask");
	msk.style.zIndex=99;
	msk.style.width=browserWidth+"px";
	msk.style.height=browserHeight+"px";
	msk.style.display="inline";
}

closeMask=function () {try{document.getElementById("mask").style.display="none";}catch(e){};}
function copyTable(oTbl) {
	if (!document.all) return;		// only IE
	if(typeof(oTbl.tagName)!='undefined')
	{
		if (oTbl.tagName == 'TABLE')
		{
			if(typeof(document.all.txtHolder)=='undefined')
				document.body.insertAdjacentHTML('beforeEnd','<textarea name="txtHolder" id="txtHolder" style="height:0px;width:0px;visibility:hidden;"></textarea>');

			document.all.txtHolder.value='';
			document.all.txtHolder.value = oTbl.outerHTML;
			copied = document.all.txtHolder.createTextRange();
			copied.execCommand("copy");

			document.body.removeChild(document.all.txtHolder);
		}
		else if (oTbl.tagName == 'BODY') {
			copied = document.body.createTextRange();
			copied.execCommand("copy");
		}
		else
		{
			return false;
		}
	}
	else
	{	return false;
	}

	alert("The contents you want have been copied to the clipboard.\n\nPaste the contents of the clipboard into your MS Excel or text editing software to save them locally. ")
}

window.onafterprint = AfterPrint;
window.onbeforeprint = BeforePrint;
function AfterPrint() {
	for (i=0;i<document.body.all.length; i++) {
		var o = document.body.all.item(i);
		if (typeof(o.unprintable)=="string" && typeof(o.isVisible)=="string" && typeof(o.displayValue)=="string") {
			o.style.visibility=o.isVisible;
			o.style.display = o.displayValue;
		}
	}
	return ;
}
function BeforePrint() {
	for (i=0;i<document.body.all.length; i++) {
		var o = document.body.all.item(i);
		if (typeof(o.unprintable)=="string") {
			o.isVisible = o.style.visibility;
			o.displayValue = o.style.display;
			if (o.unprintable.toUpperCase()=="ON") {
				o.style.display = "none";
				o.style.visibility="hidden";
			}
			if (o.unprintable.toUpperCase()=="OFF") {
				o.style.display = "block";
				o.style.visibility="visible";
			}
		}
	}
	return;
}
// check for XPath implementation
if(document.implementation.hasFeature("XPath", "3.0")) {
	// prototying the XMLDocument
	XMLDocument.prototype.selectNodes = function(cXPathString, xNode) {
		if (!xNode ) { xNode = this; }
		var oNSResolver = this.createNSResolver(this.documentElement);
		var aItems = this.evaluate(cXPathString, xNode, oNSResolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
		var aResult = [];
		for( var i = 0; i < aItems.snapshotLength; i++) {
			aResult[i] =  aItems.snapshotItem(i);
		}
		return aResult;
	}
	// prototying the Element
	Element.prototype.selectNodes = function(cXPathString) {
		if(this.ownerDocument.selectNodes) {
			return this.ownerDocument.selectNodes(cXPathString, this);
		}
		else {throw "For XML Elements Only";}
	}
	// prototying the XMLDocument
	XMLDocument.prototype.selectSingleNode = function(cXPathString, xNode) {
		if( !xNode ) { xNode = this; }
		var xItems = this.selectNodes(cXPathString, xNode);
		if( xItems.length > 0 ) {
			return xItems[0];
		}
		else {
			return null;
		}
	}
	// prototying the Element
	Element.prototype.selectSingleNode = function(cXPathString) {
		if(this.ownerDocument.selectSingleNode) {
			return this.ownerDocument.selectSingleNode(cXPathString, this);
		}
		else { throw "For XML Elements Only";}
	
	}
};

function XBrowserAddHandler(target,eventName,handlerName) { 
  if ( target.addEventListener ) { 
    target.addEventListener(eventName, function(e){target[handlerName](e);}, false);
  } else if ( target.attachEvent ) { 
    target.attachEvent("on" + eventName, function(e){target[handlerName](e);});
  } else { 
    var originalHandler = target["on" + eventName]; 
    if ( originalHandler ) { 
      target["on" + eventName] = function(e){originalHandler(e);target[handlerName](e);}; 
    } else { 
      target["on" + eventName] = target[handlerName]; 
    } 
  } 
}

URLEncode = function (plaintext) {
	// The Javascript escape and unescape functions do not correspond
	// with what browsers actually do...
	var SAFECHARS = "0123456789" +				// Numeric
			"ABCDEFGHIJKLMNOPQRSTUVWXYZ" +		// Alphabetic
			"abcdefghijklmnopqrstuvwxyz" +
					"-_.!~*'()";		// RFC2396 Mark characters
	var HEX = "0123456789ABCDEF";

	var encoded = "";
	for (var i = 0; i < plaintext.length; i++ ) {
		var ch = plaintext.charAt(i);
	    if (ch == " ") {
		    encoded += "+";				// x-www-urlencoded, rather than %20
		} else if (SAFECHARS.indexOf(ch) != -1) {
		    encoded += ch;
		} else {
		    var charCode = ch.charCodeAt(0);
			if (charCode > 255) {
				encoded += "+";
			} else {
				encoded += "%";
				encoded += HEX.charAt((charCode >> 4) & 0xF);
				encoded += HEX.charAt(charCode & 0xF);
			}
		}
	} // for
	return encoded;
};

URLDecode = function (encoded) {
   // Replace + with ' '
   // Replace %xx with equivalent character
   // Put [ERROR] in output if %xx is invalid.
   var HEXCHARS = "0123456789ABCDEFabcdef"; 
   var plaintext = "";
   var i = 0;
   while (i < encoded.length) {
	var ch = encoded.charAt(i);
	if (ch == "+") {
		plaintext += " ";
		i++;
	} else if (ch == "%") {
		if (i < (encoded.length-2) 
				&& HEXCHARS.indexOf(encoded.charAt(i+1)) != -1 
				&& HEXCHARS.indexOf(encoded.charAt(i+2)) != -1 ) {
			plaintext += unescape( encoded.substr(i,3) );
			i += 3;
		} else {
			//alert( 'Bad escape combination near ...' + encoded.substr(i) );
			plaintext += "%[ERROR]";
			i++;
		}
	} else {
		plaintext += ch;
		i++;
	}
   } // while
   return plaintext;
};

/**
 * DHTML email validation script. Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/)
 *
 * input: str - a string contains email address to validate.
 * return: true - the input string is a valid email address
 */

function isValidCreditCardNumber(cardNumber, cardType) {
	var isValid = false;
	var ccCheckRegExp = /[^\d ]/;
	isValid = !ccCheckRegExp.test(cardNumber);

	if (isValid) {
		var cardNumbersOnly = cardNumber.replace(/ /g,"");
		var cardNumberLength = cardNumbersOnly.length;
		var lengthIsValid = false;
		var prefixIsValid = false;
		var prefixRegExp;

		switch(cardType) {
		case "mastercard":
			lengthIsValid = (cardNumberLength == 16);
			prefixRegExp = /^5[1-5]/;
			break;

		case "visa":
			lengthIsValid = (cardNumberLength == 16 || cardNumberLength == 13);
			prefixRegExp = /^4/;
			break;

		case "amex":
			lengthIsValid = (cardNumberLength == 15);
			prefixRegExp = /^3(4|7)/;
			break;

		default:
			prefixRegExp = /^$/;
			alert("Card type not found");
		}

		prefixIsValid = prefixRegExp.test(cardNumbersOnly);
		isValid = prefixIsValid && lengthIsValid;
	}

	if (isValid) {
		var numberProduct;
		var numberProductDigitIndex;
		var checkSumTotal = 0;

		for (digitCounter = cardNumberLength - 1; digitCounter >= 0; digitCounter--) {
			checkSumTotal += parseInt (cardNumbersOnly.charAt(digitCounter));
			digitCounter--;
			numberProduct = String((cardNumbersOnly.charAt(digitCounter) * 2));
			for (var productDigitCounter = 0; productDigitCounter < numberProduct.length; productDigitCounter++) {
				checkSumTotal += parseInt(numberProduct.charAt(productDigitCounter));
			}
		}

		isValid = (checkSumTotal % 10 == 0);
	}

	return isValid;
}
function e_Check(str) {

	var at="@"
	var dot="."
	var lat=str.indexOf(at)
	var lstr=str.length
	var ldot=str.indexOf(dot)
	if (str.indexOf(at)==-1){
	   return false
	}

	if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
	   return false
	}

	if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
	    return false
	}

	 if (str.indexOf(at,(lat+1))!=-1){
	    return false
	 }

	 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
	    return false
	 }

	 if (str.indexOf(dot,(lat+2))==-1){
	    return false
	 }

	 if (str.indexOf(" ")!=-1){
	    return false
	 }

	 return true					
}
function formChanged(myFormObj) {
	var bValueChanged = false;
	for (var i=0; i<myFormObj.length; i++) {
		var o = myFormObj.elements[i];
		if (o.defaultValue)
			bValueChanged = bValueChanged || (o.defaultValue!=o.value);
		if (o.options) {
			bValueChanged = bValueChanged || !o.options[o.selectedIndex].defaultSelected;
		}
		if (o.type=="radio" || o.type=="checkbox") bValueChanged = bValueChanged || (o.checked != o.defaultChecked)
	}
	return bValueChanged;
}
function shrinkString(maxLength) {
	var ShrinkString = "";
	var str1, i, nextWord;
	var str = this.toString();
	try {
		if(str.trim().length>maxLength){
			var str1 = str.trim();
			while (ShrinkString.length<maxLength) {
				i = str1.indexOf(" ");
				if (i>0) {
					nextWord = str1.substring(0, i);
					if((ShrinkString + nextWord).length>maxLength) break;
					ShrinkString += " " + nextWord;
					str1 = str1.substring(i+1);
				}
				else
					break;
			}
			ShrinkString += "...";
		}
		else
			ShrinkString = str;
	}catch(e){}
	return ShrinkString;
}
String.prototype.shrinkTo = shrinkString;
