////////////////////////////////////////////
// Commonly used JavaScript functions
// Copyright (c) 2001-2006 Pearson School Systems
// All Rights Reserved.  May not be reused
// without our express, written consent.
// Author: Aaron Kardell
////////////////////////////////////////////

// Popup functions
function doPopup(url,width,height){if(!width){width=500;}if(!height){height=400;}setUniqueWindowName();url+=((url.indexOf('?')!=-1)?"&":"?")+"DoPopup=true&ReturnWindow="+window.name;var newWin=window.open(url,"AltonaEdPopup_"+Math.floor(Math.random()*1000000),"width="+width+",height="+height+",scrollbars");if(!newWin.opener){newWin.opener=self;}return false;}
function setUniqueWindowName(){if(window.name.indexOf('AltonaEd')==-1||window.name.indexOf('_')==-1){window.name='AltonaEdMain_'+Math.floor(Math.random()*1000000);}}
function doRemoteUserControl(user_type,form,term,future,ccUrl){var extraInfo='';if(arguments.length>=1){extraInfo+='&user_type='+user_type;if(arguments.length>=2){if(form.grade_level){extraInfo+='&grade_level='+getValue(form.grade_level);}else if(form.grade_levels){var grades=getValues(form.grade_levels);for(var x=0;x<grades.length;x++){extraInfo+='&grade_level='+grades[x];}}}}if(arguments.length>=3){extraInfo+='&term_id='+term;}if(arguments.length>=4){if(future){extraInfo+='&future=1';}}setUniqueWindowName();window.open((ccUrl?ccUrl:'/')+'user_search?target_window='+window.name+'&use_js=true&close_when_found=true'+extraInfo,"AltonaEdPopup_"+Math.floor(Math.random()*1000000),"width=500,height=300,scrollbars");return false;}

// Quick form access functions
function getRadioValue(radio,max){if(!max){max=radio.length;}for(var i=0;i<max;i++){if(radio[i].checked){return radio[i].value;}}return "";}
function getRadioSelected(radio){for(var i=0;i<radio.length;i++){if(radio[i].checked){return i;}}return -1;}
function getCheckboxValue(checkbox){if(typeof checkbox.length!="undefined"&&checkbox.length>0){return getRadioValue(radio);}else if(checkbox.checked){return checkbox.value}else{return '';}}
function getSelectValue(select){return select.options[select.selectedIndex].value;}
function getValue(el){if(el.type=='radio'||(el.length&&el.length>=1&&el[0].type&&el[0].type=='radio'))return getRadioValue(el);if(el.type=='checkbox')return getCheckboxValue(el);if(el.type=='select-one')return getSelectValue(el);return el.value;}
function getCheckboxValues(checkbox){var a=new Array();for(var x=0;x<checkbox.length;x++){if(checkbox[x].checked){a[a.length]=checkbox[x].value;}}return a;}
function getSelectValues(select){var a=new Array();for(var x=0;x<select.options.length;x++){if(select.options[x].selected){a[a.length]=select[x].value;}}return a;}
function getValues(el){if(typeof el.length!="undefined"&&el.length>0&&el[0].type=='checkbox'){return getCheckboxValues(el);}if(el.type=='checkbox')return getCheckboxValue(el);if(el.type=='select-one')return getSelectValue(el);if(el.type=='select-multiple')return getSelectValues(el);var val=(el.type=='radio')?getRadioValue(el):el.value;var a=new Array();a[0]=a;return a;}
function getRadioOptionByValue(radio,val,max){if(!max){max=radio.length;}for(var i=0;i<max;i++){if(radio[i].value==val){return radio[i];}}return "";}
function setRadioOptionByValue(radio,val,max){if(!max){max=radio.length;}for(var i=0;i<max;i++){radio[i].checked=(radio[i].value==val);}}
function setSelectOptionByValue(select,val){for(var i=0;i<select.options.length;i++){if(select.options[i].value==val){select.selectedIndex=i;return;}}}

function disableRadio(radio){for(var i=0;i<radio.length;i++){radio[i].disabled=true;}}
function enableRadio(radio){for(var i=0;i<radio.length;i++){radio[i].disabled=false;}}

// DOM Functions
function getElementByIdCB(id){if(document.getElementById(id)){return document.getElementById(id);}else if(document.all){return document.all[id];}else{return null;}}
function setInnerTextByIdCB(id,text){var el=getElementByIdCB(id);if(el!=null){if(el.removeChild&&document.createTextNode){while(el.firstChild!=null){el.removeChild(el.firstChild);}el.appendChild(document.createTextNode(text));return true;}else if(el.innerText){el.innerText=text;return true;}}return false;}

// Text/number functions
function isValidNumber(val){if(isNaN(val)||val==""){return false;}for(var i=0;i<val.length;i++){var c=val.charAt(i);if(!((c>='0'&&c<='9')||c=='.')){return false;}}return true;}
function isValidNumberWithNeg(val){if(isNaN(val)||val==""){return false;}for(var i=0;i<val.length;i++){var c=val.charAt(i);if(!((c>='0'&&c<='9')||c=='.'||c=='-')){return false;}}return true;}
function isValidDate(val){var date=new Date(val);return !isNaN(date.getFullYear());}
function isValidPhoneNo(area,pre,no){if(area.value.length>0&&(isNaN(area.value)||(area.value<100||area.value>1000))){area.focus();alert('Invalid Area Code');return false;}var atLeastOneSet=(area.value.length>0||pre.value.length>0||no.value.length>0);if(atLeastOneSet&&(pre.value.length==0||(pre.value.length>0&&(isNaN(pre.value)||(pre.value<100||pre.value>1000))))){pre.focus();alert('Invalid Prefix');return false;}if(atLeastOneSet&&(no.value.length!=4||isNaN(no.value))){no.focus();alert('Invalid Phone No');return false;}return true;}
function passwordCheck(passwordField,usernameTxt,firstNameTxt,lastNameTxt){var pw=passwordField.value.toLowerCase();if(pw.length<6){alert('Password must be at least 6 characters long.');passwordField.focus();return false;}if(pw.indexOf('username')>=0){alert('Password may not contain the word username.');passwordField.focus();return false;}if(pw.indexOf('password')>=0){alert('Password may not contain the word password.');passwordField.focus();return false;}if(pw.indexOf('apple')>=0){alert('Password may not contain the word apple.');passwordField.focus();return false;}if(usernameTxt.length>0&&pw.indexOf(usernameTxt.toLowerCase())>=0){alert('Password may not contain the username.');passwordField.focus();return false;}if(firstNameTxt.length>0&&pw.indexOf(firstNameTxt.toLowerCase())>=0){alert('Password may not contain the first name.');passwordField.focus();return false;}if(lastNameTxt.length>0&&pw.indexOf(lastNameTxt.toLowerCase())>=0){alert('Password may not contain the last name.');passwordField.focus();return false;}var bChar=false;var bOther=false;for(var i=0;i<pw.length;i++){var c=pw.charAt(i);if((c>='A'&&c<='Z')||(c>='a'&&c<='z')){bChar=true;}else{bOther=true;}}if(!bChar||!bOther){alert('Password must contain at least one letter and at least one symbol or number.');passwordField.focus();return false;}return true;}

// Browser detection functions
function AEBrowser(){var ua=navigator.userAgent.toLowerCase();var b=navigator.appName;if(ua.indexOf('safari')!=-1){this.b="safari";}else if(ua.indexOf('konqueror')!=-1){this.b="konqueror";}else if(b.indexOf('Netscape')!=-1){this.b="ns";}else if((b=="Opera")||(ua.indexOf("opera")!=-1)){this.b="opera";}else if(b=="Microsoft Internet Explorer"){this.b="ie";}this.version=navigator.appVersion;this.v=parseInt(this.version);this.ns=(this.b=="ns"&&this.v>=4);this.ns4=(this.b=="ns"&&this.v==4);this.ns6=(this.b=="ns"&&this.v>=5);this.ns7=false;if(this.ns6){var rvRE=/rv:(\d+\.\d+)/;rvRE=rvRE.exec(ua);if(rvRE&&rvRE.length>1){this.ns7=new Number(rvRE[1])>=1.0;}}this.ie=(this.b=="ie"&&this.v>=4);this.ie4=(this.version.indexOf('MSIE 4')>0);this.ie5=(this.version.indexOf('MSIE 5')>0);this.ie50=(this.version.indexOf('MSIE 5.0')>0);this.ie55=(this.version.indexOf('MSIE 5.5')>0);this.ie6=(this.version.indexOf('MSIE 6.0')>0);this.safari=(this.b=="safari");this.konqueror=(this.b=="konqueror");this.opera=(this.b=="opera");this.dom=(document.createElement&&document.appendChild&&document.getElementsByTagName)?true:false;this.def=(this.ie||this.dom);this.gecko=(ua.indexOf('gecko')!=-1);if(ua.indexOf("win")>-1){this.platform="win32";}else if(ua.indexOf("mac")>-1){this.platform="mac";}else{this.platform="other";}this.mac=(this.platform=="mac");}
bc=new AEBrowser();

// Functions for cloning a group of form elements (IE workarounds)
function doForceUnCheck(el,formName,max){var a=eval('document.'+formName+'.'+el.name);if(!max){max=a.length;}for(var i=0;i<max;i++){a[i].checked=false;}el.checked=true;}
function attachToFormIfNecessary(elATF,formName){var checks=new Array();var els1;var els2;if(elATF.firstChild==null){els1=new Array();els2=new Array();if(elATF.tagName=='INPUT'){els1[0]=elATF;}if(elATF.tagName=='SELECT'){els2[0]=elATF;}}else{els1=elATF.getElementsByTagName("INPUT");els2=elATF.getElementsByTagName("SELECT");}if(els1.length>0&&!eval('document.'+formName+'.'+els1[0].name)){for(var i=0; i<els1.length; i++){if(els1[i].type=='radio'||els1[i].type=='checkbox'){var a=eval('document.'+formName+'.'+els1[i].name);if(!a||!a.length){a=eval('document.'+formName+'.'+els1[i].name+'=new Array()');}a[a.length]=els1[i];if(els1[i].type=='checkbox'&&a.length==1){checks[checks.length]=els1[i].name;}}else{eval('document.'+formName+'.'+els1[i].name+'=els1[i]');}}}for(var i=0; i<checks.length; i++){if(eval('document.'+formName+'.'+checks[i]).length==1){var r=eval('document.'+formName+'.'+checks[i]+'[0]');eval('document.'+formName+'.'+checks[i]+'=r');}}if(els2.length>0&&!eval('document.'+formName+'.'+els2[0].name)){for(var i=0; i<els2.length; i++){eval('document.'+formName+'.'+els2[i].name+'=els2[i]');}}}
function detachFromFormIfNecessary(elDFF,formName){var els1;var els2;if(elDFF.firstChild==null){els1=new Array();els2=new Array();if(elDFF.tagName=='INPUT'){els1[0]=elDFF;}if(elDFF.tagName=='SELECT'){els2[0]=elDFF;}}else{els1=elDFF.getElementsByTagName("INPUT");els2=elDFF.getElementsByTagName("SELECT");}if(els1.length>0&&eval('document.'+formName+'.'+els1[0].name)){for(var i=0;i<els1.length;i++){if(eval('document.'+formName+'.'+els1[i].name)){eval('document.'+formName+'.'+els1[i].name+'=null');}}}if(els2.length>0&&eval('document.'+formName+'.'+els2[0].name)){for(var i=0;i<els2.length;i++){if(eval('document.'+formName+'.'+els2[i].name)){eval('document.'+formName+'.'+els2[i].name+'=null');}}}}
function replaceIdsAndNamesOfChildren(el,from,to){var child=el.firstChild;while(child!=null){if(child.id){var i=child.id.lastIndexOf(from);if(i!=-1&&(child.id.length-from.length)==i){child.id=child.id.substring(0,i)+to+child.id.substring(i+from.length,child.id.length);}}if(child.name){var i=child.name.lastIndexOf(from);if(i!=-1&&(child.name.length-from.length)==i){child.name=child.name.substring(0,i)+to+child.name.substring(i+from.length,child.name.length);if(document.all){/*IE Radio Workaround*/if(child.type&&child.type=='radio'&&child.tagName&&child.tagName=='INPUT'){var origForm=child.form;var newChild=document.createElement("INPUT");newChild.name=child.name;newChild.id=child.id;newChild.type=child.type;newChild.value=child.value;el.insertBefore(newChild,child);el.removeChild(child);newChild.mergeAttributes(child);child=newChild;}}}}replaceIdsAndNamesOfChildren(child,from,to);child=child.nextSibling;}}

// Function for avoiding double-click problem on forms
function doFormSubmit(form){if(!form.AEDoingSubmit){form.AEDoingSubmit=1;form.AESubmitTime=new Date();return true;}form.AEDoingSubmit++;var timeElapsed=((new Date()).getTime()-form.AESubmitTime.getTime())/1000;if(timeElapsed>=5||form.AEDoingSubmit>3){if(confirm('You have already clicked the submit button.  Generally you should not hit it again.\nHowever, if you cancelled your request after the first submit, you may now want to resubmit.\nTo resubmit, click Yes/OK.  To proceed with the original submission, click No/Cancel.')){return true;}}return false;}

// Function for working with fonts
function getDefaultFontSize(elid){var fontSize;if(document.defaultView&&document.defaultView.getComputedStyle){fontSize=parseInt(document.defaultView.getComputedStyle(document.body,'').getPropertyValue("font-size"));}else{if(document.getElementById&&document.getElementById(elid).offsetHeight){fontSize=document.getElementById&&document.getElementById(elid).offsetHeight-4;}else{fontSize=-1;}/*fontSize=parseInt(document.body.currentStyle.fontSize);if(isNaN(fontSize)){fontSize=-1;}*/}if(fontSize!=-1&&bc.safari){fontSize=fontSize*4/3;}if(fontSize!=-1&&bc.gecko){fontSize=fontSize*12/16;}return Math.round(fontSize);}
function setFontColor(fontId,color){if(document.getElementById(fontId)){document.getElementById(fontId).style.color=color;return true;}else if(document.all){document.all[fontId].style.color=color;return true;}return false;}
function setFontColorByElement(element,color){element.style.color=color;return true;}

// Functions for table decorations
function DecorateTables(){
  var tables=document.getElementsByTagName("table");
  for(var i=0;i<tables.length;i++){
    var table=tables[i];
    if(table.className == "Decorated"){
//      table.setAttribute("border", "0");
//      table.setAttribute("cellpadding", "1");
      table.setAttribute("cellspacing", "1");
      var rows=table.getElementsByTagName("tr");
      for(var j=0;j<rows.length;j++){
        if(rows[j].className == "errorMessage" || rows[j].className == "droppedClass") {
            continue;
        }
        else {
            rows[j].className=((j % 2 == 0) ? "Even" : "Odd") + " " + rows[j].className;
            valueHi = (j % 2 == 0 ? "EvenHi" : "OddHi") + " " + rows[j].className;
        }
        var jsIn=rows[j].onmouseover;
        var jsOut=rows[j].onmouseout;
        if(rows[j].attachEvent){
            var oldVal = new Object();
            oldVal.valueHi = valueHi;
            rows[j].attachEvent("onmouseover", getMouseOver(rows[j],jsIn,oldVal));
            rows[j].attachEvent("onmouseout",  getMouseOut(rows[j],jsOut,oldVal));
        }
        else{
            rows[j].setAttribute("onmouseover", "javascript:className = '" + valueHi + "';" + jsIn);
            rows[j].setAttribute("onmouseout", "javascript:className = '" + rows[j].className + "';" + jsOut);
        }
      }
    }
    else if(table.className == "DecoratedNoHover"){
//      table.setAttribute("border", "0");
//      table.setAttribute("cellpadding", "1");
      table.setAttribute("cellspacing", "1");
      var rows=table.getElementsByTagName("tr");
      for(var j=0;j<rows.length;j++) {
        rows[j].className=((j % 2 == 0) ? "Even" : "Odd") + " " + rows[j].className;
      }
    }
  }
}

//fun with closures
function getMouseOver(row,jsIn,oldVal){var cRow=row;var cjsIn=jsIn;return function(){oldVal.origValue=cRow.className;cRow.className=oldVal.valueHi;eval(cjsIn);}}
function getMouseOut(row,jsOut,oldVal){var cRow=row;var cjsOut=jsOut;return function(){cRow.className=oldVal.origValue;eval(cjsOut);}}

//Functions to make a list collapseable
var IMG_PLUS="/static/images/btnPlus.gif";var IMG_MINUS="/static/images/btnMinus.gif";var imgPlus=new Image();var imgMinus=new Image();imgPlus.src=IMG_PLUS;imgMinus.src=IMG_MINUS;
function MakeCollapseable(doc){var headers=document.getElementsByTagName("tr");for(var i=0;i<headers.length;i++){var header=headers[i];if(header.className){if(header.className.indexOf("Collapseable")>-1&&header.className.indexOf("EndCollapseable")==-1){var row=header.nextSibling;while(row!=null){if(row.className){if(row.className.indexOf("EndCollapseable")!=-1||row.className.indexOf("Collapseable")!=-1){break;}}row.style.display="none";row=row.nextSibling;}}}}}
function doCollapseExpand(img,el){var header;if(el){if(typeof el=='string'){header=getElementByIdCB(el);}else{header=el;}}else{header=img.parentNode;while(header&&header.tagName&&header.tagName!='TR'){header=header.parentNode;}}var row=header.nextSibling;var setDisplayTo;if(img.src.indexOf(imgPlus.src)>-1){img.src=imgMinus.src;setDisplayTo='';}else{img.src=imgPlus.src;setDisplayTo='none';}while(row!=null){if(row.className){if(row.className.indexOf("EndCollapseable")!=-1||row.className.indexOf("Collapseable")!=-1){break;}}if(row.style){row.style.display=setDisplayTo;}row=row.nextSibling;}}
