function openPopupCertificate() {
		openPopUpWindowWithSize('editPopupWindow','/certificate.jsp',430,560,0,0);
}

function openMyPopupCertificate() {
		openPopUpWindowWithSize('editPopupWindow','/printCertificate',430,560,0,0);
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.01
  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=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

/* This function is used to change the style class of an element */
function swapClass(obj, newStyle) {
    obj.className = newStyle;
}

function isUndefined(value) {   
    var undef;   
    return value == undef; 
}

/* Function for showing and hiding elements that use 'display:none' to hide */
function toggleDisplay(targetId)
{
    if (document.getElementById) {
        target = document.getElementById(targetId);
    	if (target.style.display == "none"){
    		target.style.display = "";
    	} else {
    		target.style.display = "none";
    	}
    }
}

// toggle visibility 
function toggleVisibility(targetId) {
    if (document.getElementById) {
        target = document.getElementById(targetId);
    	if (target.style.visibility == "hidden"){
    		target.style.visibility = "visible";
    	} else {
    		target.style.visibility = "hidden";
    	}
    }
}

function checkAll(theForm) { // check all the checkboxes in the list
  for (var i=0;i<theForm.elements.length;i++) {
    var e = theForm.elements[i];
		var eName = e.name;
    	if (eName != 'allbox' && 
            (e.type.indexOf("checkbox") == 0)) {
        	e.checked = theForm.allbox.checked;		
		}
	} 
}

/* Function to clear a form of all it's values */
function clearForm(frmObj) {
	for (var i = 0; i < frmObj.length; i++) {
        var element = frmObj.elements[i];
		if(element.type.indexOf("text") == 0 || 
				element.type.indexOf("password") == 0) {
					element.value="";
		} else if (element.type.indexOf("radio") == 0) {
			element.checked=false;
		} else if (element.type.indexOf("checkbox") == 0) {
			element.checked = false;
		} else if (element.type.indexOf("select") == 0) {
			for(var j = 0; j < element.length ; j++) {
				element.options[j].selected=false;
			}
            element.options[0].selected=true;
		}
	} 
}

/* Function to get a form's values in a string */
function getFormAsString(frmObj) {
    var query = "";
	for (var i = 0; i < frmObj.length; i++) {
        var element = frmObj.elements[i];
        if (element.type.indexOf("checkbox") == 0 || 
            element.type.indexOf("radio") == 0) { 
            if (element.checked) {
                query += element.name + '=' + escape(element.value) + "&";
            }
		} else if (element.type.indexOf("select") == 0) {
			for (var j = 0; j < element.length ; j++) {
				if (element.options[j].selected) {
                    query += element.name + '=' + escape(element.value) + "&";
                }
			}
        } else {
            query += element.name + '=' 
                  + escape(element.value) + "&"; 
        }
    } 
    return query;
}

/* Function to hide form elements that show through
   the search form when it is visible */
function toggleForm(frmObj, iState) // 1 visible, 0 hidden 
{
	for(var i = 0; i < frmObj.length; i++) {
		if (frmObj.elements[i].type.indexOf("select") == 0 || frmObj.elements[i].type.indexOf("checkbox") == 0) {
            frmObj.elements[i].style.visibility = iState ? "visible" : "hidden";
		}
	} 
}

/* Helper function for re-ordering options in a select */
function opt(txt,val,sel) {
    this.txt=txt;
    this.val=val;
    this.sel=sel;
}

/* Function for re-ordering <option>'s in a <select> */
function move(list,to) {     
    var total=list.options.length;
    index = list.selectedIndex;
    if (index == -1) return false;
    if (to == +1 && index == total-1) return false;
    if (to == -1 && index == 0) return false;
    to = index+to;
    var opts = new Array();
    for (i=0; i<total; i++) {
        opts[i]=new opt(list.options[i].text,list.options[i].value,list.options[i].selected);
    }
    tempOpt = opts[to];
    opts[to] = opts[index];
    opts[index] = tempOpt
    list.options.length=0; // clear
    
    for (i=0;i<opts.length;i++) {
        list.options[i] = new Option(opts[i].txt,opts[i].val);
        list.options[i].selected = opts[i].sel;
    }
    
    list.focus();
} 

/*  This function is to select all options in a multi-valued <select> */
function selectAll(elementId) {
    var element = document.getElementById(elementId);
	len = element.length;
	if (len != 0) {
		for (i = 0; i < len; i++) {
			element.options[i].selected = true;
		}
	}
}

/* This function is used to select a checkbox by passing
 * in the checkbox id
 */
function toggleChoice(elementId) {
    var element = document.getElementById(elementId);
    if (element.checked) {
        element.checked = false;
    } else {
        element.checked = true;
    }
}

/* This function is used to select a radio button by passing
 * in the radio button id and index you want to select
 */
function toggleRadio(elementId, index) {
    var element = document.getElementsByName(elementId)[index];
    element.checked = true;
}


/* This function is used to open a pop-up window */
function openWindow(url, winTitle, winParams) {
	winName = window.open(url, winTitle, winParams);
    winName.focus();
}


/* This function is to open search results in a pop-up window */
function openSearch(url, winTitle) {
    var screenWidth = parseInt(screen.availWidth);
    var screenHeight = parseInt(screen.availHeight);

    var winParams = "width=" + (screenWidth - 1) + ",height=" + screenHeight;
        winParams += ",left=0,top=0,location,menubar,toolbar,scrollbars,resizable,status=yes";

    openWindow(url, winTitle, winParams);
}

/* This function is used to set cookies */
function setCookie(name,value,expires,path,domain,secure) {
  document.cookie = name + "=" + escape (value) +
    ((expires) ? "; expires=" + expires.toGMTString() : "") +
    ((path) ? "; path=" + path : "") +
    ((domain) ? "; domain=" + domain : "") + ((secure) ? "; secure" : "");
}

/* This function is used to get cookies */
function getCookie(name) {
	var prefix = name + "=" 
	var start = document.cookie.indexOf(prefix) 

	if (start==-1) {
		return null;
	}
	
	var end = document.cookie.indexOf(";", start+prefix.length) 
	if (end==-1) {
		end=document.cookie.length;
	}

	var value=document.cookie.substring(start+prefix.length, end) 
	return unescape(value);
}

/* This function is used to delete cookies */
function deleteCookie(name,path,domain) {
  if (getCookie(name)) {
    document.cookie = name + "=" +
      ((path) ? "; path=" + path : "") +
      ((domain) ? "; domain=" + domain : "") +
      "; expires=Thu, 01-Jan-70 00:00:01 GMT";
  }
}

// This function is for stripping leading and trailing spaces
function trim(str) { 
    if (str != null) {
        var i; 
        for (i=0; i<str.length; i++) {
            if (str.charAt(i)!=" ") {
                str=str.substring(i,str.length); 
                break;
            } 
        } 
    
        for (i=str.length-1; i>=0; i--) {
            if (str.charAt(i)!=" ") {
                str=str.substring(0,i+1); 
                break;
            } 
        } 
        
        if (str.charAt(0)==" ") {
            return ""; 
        } else {
            return str; 
        }
    }
} 

// This function is used by the login screen to validate user/pass
// are entered. 
function validateRequired(form) {                                    
    var bValid = true;
    var focusField = null;
    var i = 0;                                                                                          
    var fields = new Array();                                                                           
    oRequired = new required();                                                                         
    //var formName = form.getAttribute("name");
    //oRequired = eval('new ' + formName.value + '_required()');
                                                                                                        
    for (x in oRequired) {                                                                              
        if ((form[oRequired[x][0]].type == 'text' || form[oRequired[x][0]].type == 'textarea' || form[oRequired[x][0]].type == 'select-one' || form[oRequired[x][0]].type == 'radio' || form[oRequired[x][0]].type == 'password') && form[oRequired[x][0]].value == '') {
           if (i == 0)
              focusField = form[oRequired[x][0]]; 
              
           fields[i++] = oRequired[x][1];
            
           bValid = false;                                                                             
        }                                                                                               
    }                                                                                                   
                                                                                                       
    if (fields.length > 0) {
       focusField.focus();
       alert(fields.join('\n'));                                                                      
    }                                                                                                   
                                                                                                       
    return bValid;                                                                                      
}


function validateDefinedRequire(form) { 
    var bValid = true;
    var focusField = null;
    var i = 0;                                                                                          
    var fields = new Array();                                                                           
    //oRequired = new required();
    var formName = form.getAttributeNode("name");                                                                          
    if(formName.value.length>0) {
    	oRequired = eval('new ' + formName.value + '_required()');
    }
    else {
    	oRequired = eval('new ' + form.getAttributeNode("id").value + '_required()');
    }
	//alert(document.userFormPaymentDetail.planId.value);
	
                                                                                                        
    for (x in oRequired) {  
    		var allelements = form.elements;
    		for(j=0; j<allelements.length; j++) {
    			var eleName = (allelements[j].name.indexOf(".")>=0)?(allelements[j].name.split("."))[1]
    							:allelements[j].name;
			    if( eleName == oRequired[x][0] ) {
			    	var field = allelements[j];
    				//alert(eleName+"="+field.type+":"+field.checked);
			        if ((field.type == 'text' || field.type == 'textarea' || field.type == 'select-one' 
			        || field.type == 'radio' || field.type == 'password') && field.value == '') {
			           if (i == 0)  focusField = field; 
			           fields[i++] = oRequired[x][1];		            
			           bValid = false;                                                                   
			        }
			        break;          
		      }
		      //if(!bValid) break;
	      }
    }                                                                                                   
                                                                                                       
    if (fields.length > 0) {
       focusField.focus();
       alert(fields.join('\n'));                                                                      
    }                                                                                                   
                                                                                                       
    return bValid;                                                                                      
}


/* we comment it out as we have it in struts generated JavaScript.
function validateSignUp(form) {
	if(!validateDefinedRequire(form)) return false;
	if(!validatePassword(form)) return false;
	if(!validateCreditCardNumber(form)) return false;
	if(!isValidEmail(document.getElementById("email"))) {
    	alert("Please enter a valid email address.");
    	return false;
    }
  if(!validateProvince(form)) {
  		alert("'Province' is a required field.");
  		return false;
  }
	return true;
}*/


function validateUserFormEx(theForm) {
    if(!validateDefinedRequire(theForm)) return false;
    if(!validateRequiredProvince(theForm)) return false;
    return true;
}


/*
* this function check every char in string "val" must be in "validCharSet"
* null "val" will return true
*/
function validFormat(val, validCharSet) {
		for(i=0; i<val.length; i++) {
			var c = val.charAt(i);
			if(validCharSet.indexOf(c) < 0) return false;
		}
		return true;
}

function invalidFormat(val, validCharSet) {
		for(i=0; i<val.length; i++) {
			var c = val.charAt(i);
			if(validCharSet.indexOf(c) >= 0) return true;
		}
		return false;
}

function invalidSQLQueryParameter(str) {
		if(str == null || str.length == 0) {
			return false;
		}
		return invalidFormat(str,"'()<>/\;");
}

function validateCreditCardNumber(form) {
	var allelements = form.elements;
	for(i=0; i<allelements.length; i++) 
	{
  	if(allelements[i]!=null && allelements[i].name!=null 
  	&& allelements[i].name.indexOf("creditCardNumber")>=0)
  	{
  		if(!validFormat(allelements[i].value,"0123456789")) {
				alert("Credit card number should be all numbers.");
				return false;
			}
  		break;
  	}
  }
	return true;
}

function validateAllNumber(elementId,message) {
	var element = document.getElementById(elementId);
	if(!validFormat(element.value,"0123456789")) {
		alert(message);
		return false;
	}
	return true;
}

function validateAllNumberAndStar(elementId,message) {
	var element = document.getElementById(elementId);
	if(!validFormat(element.value,"0123456789*")) {
		alert(message);
		return false;
	}
	return true;
}

function validateExpireDate(expireYear,expireMonth,message) {
	var elementYear = document.getElementById(expireYear);
	var elementMonth = document.getElementById(expireMonth);
	var now = new Date();
	var valid = true;
	if(elementYear.value > now.getYear())
		valid = true;
	else if(elementYear.value < now.getYear())
		valid = false;
	else {
		if(elementMonth.value > now.getMonth())
			valid = true;
		if(elementMonth.value <= now.getMonth())
			valid = false;
	}
	if(valid == false) {
		alert(message);
		return false;
	}
	return true;
}

/* check Province is not empty for US|Canada */
/*function validateProvince(form) {
		var allelements = form.elements;
    for(j=0; j<allelements.length; j++) 
    {
    			var eleName = (allelements[j].name.indexOf(".")>=0)?(allelements[j].name.split("."))[1]
    							:allelements[j].name;
    			if(allelements[j].type == 'select-one' && eleName=="country") 
    			{
    				if(allelements[j].value == "CANADA" || allelements[j].value == "UNITED STATES")
    				{
    						var oProvince = "";
								for(i=0; i<allelements.length; i++) {
					    			var eleName1 = (allelements[i].name.indexOf(".")>=0)?(allelements[i].name.split("."))[1]
					    							:allelements[i].name;
					    			if(allelements[i].type == 'select-one' && eleName1=="province" && allelements[i].value != "") {
					    				oProvince = allelements[i].value;
					    				break;
					    			}
					    	}
					    	if(oProvince=="") {
					    		return false;
					    	}
    				}
    				break;
    			}
		} 
		return true;
}*/
function validateRequiredProvince(form) {
    var bValid = true;
    var focusField = null;
    var fields = new Array();
    
    // var formName = form.getAttributeNode("name");
    // oProvinceField = eval('new ' + formName.value + '_requiredProvince()');
    //oProvinceField = eval('new ' + retrieveFormName(form) + '_requiredProvince()');
    var formName = form.getAttributeNode("name");                                                                          
    if(formName.value.length>0) {
    	oProvinceField = eval('new ' + formName.value + '_requiredProvince()');
    }
    else {
    	oProvinceField = eval('new ' + form.getAttributeNode("id").value + '_requiredProvince()');
    }
    
    var field, secondFields, secondField;
    var oProv;
    var i = 0;
    for (x in oProvinceField) {
    	i++;
    	if(i==1) {
    		field = form[oProvinceField[x][0]];
    		continue;
    	} else if(i==2) {
    		oProv = oProvinceField[x];
    		secondFields = form[oProvinceField[x][0]];
    		continue;
    	}
    }
	for(j=0; j<secondFields.length; j++) 
	{
		if(!secondFields[j].disabled) 
		{
			secondField = secondFields[j];
			break;
		}
	}
	
	if(field.value == "CANADA" || field.value == "UNITED STATES")
	{
		if(secondField==null || secondField.value=="")
		{
			if(secondField!=null) secondField.focus();
			alert(oProv[1]);
			return false;
		} 
	}
	return true;
}

//this function is used for check force radio group is not empty,
//the given parameters are "Form Object" where the radio group are hosted, and
//the radio group name string
function validateRadioRequire(formObj, radioName, errorMsg) {
		var eleArr = new Array();
		var val = false;
		for (var i=0;i<formObj.elements.length;i++) {
			if(formObj.elements[i].name==radioName && formObj.elements[i].type=="radio"
				&& formObj.elements[i].checked) {
				val = true;
				break;
			}
		}
		if(!val) {
			if(errorMsg==null||errorMsg.length==0)
				errorMsg = "Please select from radio buttons";
			alert(errorMsg);
		}
		return val;
	}
	
//check emailAddr is valid or not
function isValidEmail(emailObj) {
	var emailAddr = "";
	if(emailObj!=null) emailAddr = emailObj.value;
	if(emailAddr.length>0 && (emailAddr.indexOf("@")<0 || emailAddr.indexOf(".")<0)) {
		emailObj.focus();
		return false;
	}
	return true;
}

//check fistname is valid or not
function isValidFirstName(firstNameObj) {
	var firstName = "";
	re = /^\w+$/;
	if(firstNameObj != null) firstName = trim(firstNameObj.value);
	while(firstName != null && firstName.indexOf(" ") >= 0) {
		firstName = firstName.replace(" ","");
	}
	if(firstName.length>0 && (!re.test(firstName)) ) {
		firstNameObj.focus();
		return false;
	}
	return true;
}


//this is a general js, could move into a common .js
function checkIntegerField(obj) {
	if (obj!=null && obj.value!=null) {
		var val = trim(obj.value);
		for(i=0; i<val.length; i++) {
			var ch = val.charAt(i);
			if(ch<0 || ch>9) {
				return false;
			}
		}
	}
	return true;
}

//this is a general js, could move into a common .js
function checkFloatField(obj) {
	if (obj!=null && obj.value!=null) {
		var val = trim(obj.value);
		var afloat=new RegExp(/(^\d+$)|(^\d+\.\d+$)|(^\d+\,\d+$)|(^\d+\,\d+\.\d+$)/);
		return (afloat.test(val));
	}
	return true;
}

//this is a general js, could move into a common .js
function checkFieldLengthEqualTo(obj, len) {
	if (obj!=null && obj.value!=null) {
		var val = trim(obj.value);
		return (val.length==len);
	} else {
		return false;
	}
}

//this is a general js, could move into a common .js
function checkRequiredFields(objArr, msgArr) {
	if (objArr==null || objArr.length==0) return null;
	var ret = "";
	for (i=0; i<objArr.length; i++) {
		var obj = objArr[i];
		if (obj==null || obj.value=="") {
			ret += msgArr[i]+"\n";
		}
	}
	return ret;
}

function focusFirstRequiredField(objArr) {
	if (objArr!=null || objArr.length>0) {
		for (i=0; i<objArr.length; i++) {
			var obj = objArr[i];
			if(obj.type=="hidden") {
				continue;
			}
			if (obj!=null && obj.value=="") {
				obj.focus();
				break;
			}
		}
	}
}

// This function is a generic function to create form elements
function createFormElement(element, type, name, id, value, parent) {
    var e = document.createElement(element);
    e.setAttribute("name", name);
    e.setAttribute("type", type);
    e.setAttribute("id", id);
    e.setAttribute("value", value);
    parent.appendChild(e);
}

function confirmDelete(obj) {   
    var msg = "Are you sure you want to delete this " + obj + "?";
	ans = confirm(msg);
	if (ans) {
        return true;
	} else {
        return false;
    }
}

function confirmSubmitButton(obj,theForm,name,value) {   
    if (confirm(obj)) {
    	submitButton(theForm,name,value);
    } 
}

function submitButton(theForm,name,value) {   
    	var e = document.createElement("<INPUT type=hidden name="+name+" value="+value+" />");
    	theForm.appendChild(e)
      theForm.submit();
}


function highlightFormElements() {
    // add input box highlighting 
    addFocusHandlers(document.getElementsByTagName("input"));
    //addFocusHandlers(document.getElementsByTagName("select"));
    addFocusHandlers(document.getElementsByTagName("textarea"));
}

function addFocusHandlers(elements) {
    for (i=0; i < elements.length; i++) {
        if (elements[i].type != "button" && elements[i].type != "submit" &&
            elements[i].type != "reset" && elements[i].type != "checkbox" && 
            elements[i].type != "radio") {
            elements[i].onfocus=function() {
            	this.className='focus'
            	// this.select() comment out for live help
            	};
            elements[i].onclick=function() {
            	// this.select() comment out for live help
            	};
            elements[i].onblur=function() {this.className=''};
        }
    }
}

function radio(clicked){
    var form = clicked.form;
    var checkboxes = form.elements[clicked.name];
    if (!clicked.checked || !checkboxes.length) {
        clicked.parentNode.parentNode.className="";
        return false;
    }

    for (i=0; i<checkboxes.length; i++) {
        if (checkboxes[i] != clicked) {
            checkboxes[i].checked=false;
            checkboxes[i].parentNode.parentNode.className="";
        }
    }

    // highlight the row    
    clicked.parentNode.parentNode.className="over";
}

window.onload = highlightFormElements;

// Show the document's title on the status bar
window.defaultStatus=document.title;

// Show or Hide a document's div by the given param
function showOrHideDiv(divId) {
	var divObj = document.getElementById(divId);
	if(divObj != null) {
		divObj.style.display = (divObj.style.display=="none"?"block":"none");
	}
}

function showOrHideDivWithParamB(divId,bShow) {
	var divObj = document.getElementById(divId);
	if(divObj != null) {
		if(bShow == true && divObj.style.display=="none") {
			divObj.style.display = "block";
		}
		else if(bShow == false && divObj.style.display=="block") {
			divObj.style.display = "none";
		}
	}
}

function changeToHTTPProtocol(url) {
	var vUrl = document.location.href;
	var targetUrl = url;
	if(vUrl.indexOf("https")==0) {
		if(url.indexOf("/")!=0)
			url = "/" + url;
		if(document.location.port!=null&&document.location.port.length!=0) {
			targetUrl = "http://" + document.location.hostname + ":8080" + url;
		}
		else {
			targetUrl = "http://" + document.location.hostname + url;
		}
		//alert(targetUrl);
	}
	document.location.href = targetUrl;
}

function showTrueRows(tableId, falseColumnNum) {
	var currTable = document.getElementById(tableId); //"lessonSchdlTimeSlot" for example
	if(currTable != null) {
		for(i=1; i<currTable.rows.length; i++) {
			if(currTable.rows[i].cells[falseColumnNum]!=null
			&& trim(currTable.rows[i].cells[falseColumnNum].innerText)=="false") {
				currTable.rows[i].style.display = "none";
			} else {
				currTable.rows[i].style.display = "block";
			}
		}
	}
}

function closeRefresh() {
	try{
		window.close();
		if(opener!=null) {
			opener.window.location.reload( true );
		}
	}
	catch(e)
	{
		// alert(e.description);
	}
}

function openPopUpWindow(titleName,urlToOpen)
{
	var height = 300;                       //Set height
	var width = 400;                        //Set width
	var top = 200;                          //Set distance from top
	var left = 200;                         //Set distance from left
	openPopUpWindowWithSize(titleName,urlToOpen,height,width,top,left);
}

function openPopUpWindowWithSize(titleName,urlToOpen,height,width,top,left)
{
	mywindow = openWindow(urlToOpen, titleName, "fullscreen=no,toolbar=no,status=no,menubar=no,scrollbars=yes,resizable=yes,directories=no,location=no,width=" + width + ",height=" + height + ",left=" + left + ",top=" + top);
	
	// if (mywindow.opener == null) 
	//	mywindow.opener = self;
}

// scripts to protect us
// disable Ctrl + N
function keydown()
{ if(event.ctrlKey ==true && (event.keyCode == 78 || event.keyCode == 110) )
	{return false;} 
}
document.onkeydown=keydown

// hide status bar
function hidestatus(){
	window.status=''
	return true
}

if (document.layers)
document.captureEvents(Event.MOUSEOVER | Event.MOUSEOUT)

document.onmouseover=hidestatus
document.onmouseout=hidestatus

// disable right click
function click() {
	if (event.button==2) {
		// alert("This function has been disabled!");
	} 
}
document.onmousedown=click
// scripts to protect us end

