// File:    boathireUtils.js
// Purpose: JavaScript routines for actboathire.com website
// Author:  Jim Gillespie
// Date:    10 April 2007

function showEmail(strName, strSecondDomain, strTopDomain, strTitle) {
		var strHost = strSecondDomain + '.' + strTopDomain;
		document.write('<a href="mailto:' + strName + '@' + strHost + '"' + ' title=" ' + strTitle + ' ">' + strName + '@' + strHost + '</a>');
}

function showEmailOptions(strName, strSecondDomain, strTopDomain, strTitle, strSubject, strBody, strLink) {
    var strHost = strSecondDomain + '.' + strTopDomain;
    document.write('<a href="mailto:' + strName + '@' + strHost + '?subject=' + strSubject + '&body=' + strBody +'" title=" ' + strTitle + ' ">' + strLink + '</a>');    
}    

function handleEnter(field, event) {   // prevents the Enter key submitting a form
		var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
		if (keyCode == 13) {
			var i;
			for (i = 0; i < field.form.elements.length; i++)
			if (field == field.form.elements[i])
			break;
			i = (i + 1) % field.form.elements.length;
			field.form.elements[i].focus();
			return false;
		} 
		else { 
			return true;
    }
}

function checkDelete() {
		var vld = true;
    if (document.DeleteForm.thisword.value == "" && document.DeleteForm.emailme.checked == false ) {
    	vld = false;
        alert("Either enter your password or have it emailed to you");
    }
    if (document.DeleteForm.thisword.value != "" && document.DeleteForm.emailme.checked == true ) {
    	vld = false;
        alert("Only enter your password or check box to have it emailed to you");
    }
    if (document.DeleteForm.thisword.value != "" && document.DeleteForm.emailme.checked == true ) {
    	if(confirm("Are you sure you wish to delete this contact?")) {
        }
        else {
           vld = false;
        }
    }
    return vld;
}

function checkEdit() {
		var vld = true;
    if (document.EditForm.thisword.value == "" && document.EditForm.emailme.checked == false ) {
    	vld = false;
        alert("Either enter your password or have it emailed to you");
    }
    if (document.EditForm.thisword.value != "" && document.EditForm.emailme.checked == true ) {
    	vld = false;
        alert("Only enter your password or check box to have it emailed to you");
    }
    if (document.EditForm.thisword.value != "" && document.EditForm.emailme.checked == false ) {
    	if(confirm("Are you sure you wish to edit this contact?")) {
        }
        else {
           vld = false;
        }
    }
    return vld;
}

function CheckRequiredFields() {
    var errormessage = new String();
    // Put field checks below this point.
    if(WithoutContent(document.BookingForm.name.value))
    	{ errormessage += "\n\nPlease enter your name if you are attending the Reunion   "; }
    if(WithoutContent(document.BookingForm.email.value))
    	{ errormessage += "\n\nPlease enter your email address   "; }
    if(NoneWithCheck(document.BookingForm.payment))
    	{ errormessage += "\n\nPlease click one radio button to nominate your payment method   "; }

    if(errormessage.length > 2) {
    	alert('ERROR' + errormessage);
    	return false;
  	}
    return true;
} // end of function CheckRequiredFields()

function NoneWithCheck(ss) {
    for(var i = 0; i < ss.length; i++) {
	      if(ss[i].checked) { return false; }
  	}
    return true;
}

function WithoutContent(ss) {
    if(ss.length > 0) { return false; }
    return true;
}

function validateContact(ContactForm) {
		var vld = true;
    var msg = "";
    var txt = "";
    var cnt = 0;
    
    if (document.ContactForm.firstname.value == "" && 
        document.ContactForm.lastname.value == ""  &&
        document.ContactForm.email.value == "" &&
        document.ContactForm.password.value == "" ) {
        msg = msg + "You must enter your name, email address and password\n\n";
        cnt++;
        vld = false;
        // Popup alert message indicating errors
		    alert(txt + msg);
        return vld;
    }
   
		// Check if full name has been entered
    if (document.ContactForm.firstname.value == "" || document.ContactForm.lastname.value == "") {
        msg = msg + "You have not entered your full name\n\n";
        cnt++;
        vld = false;
    }

    // Routine to check for valid telephone numbers
		var phoneMsg = checkPhone(document.ContactForm.homephone.value + document.ContactForm.workphone.value + document.ContactForm.mobilephone.value); 
		if (phoneMsg != "") {
    	msg = msg + phoneMsg;
        cnt++;
        vld = false;
    }

    // Routine to check for home telephone area code
    var homePhoneMsg = checkAreaCode(document.ContactForm.homephone.value);
    if (homePhoneMsg != "") {
    	msg = msg + homePhoneMsg;
        cnt++;
        vld = false;
    }
    // Routine to check work telephone area code
    var workPhoneMsg = checkAreaCode(document.ContactForm.workphone.value);
    if (workPhoneMsg != "") {
    	msg = msg + workPhoneMsg;
        cnt++;
        vld = false;
    }
    // Routine to check for valid email address
    var emailMsg = checkEmail(document.ContactForm.email.value);
    if (emailMsg != "") {
    	msg = msg + emailMsg;
        cnt++;
        vld = false;
    }
    // Check password
    if (document.ContactForm.password.value == "") {
     	msg = msg + "You have not entered a password\n\n";
        cnt++;
        vld = false;
    }
    // Check pasword length
    if (document.ContactForm.password.value.length <6) {
    	msg = msg + "The password must be at least six characters long\n\n";
        cnt++;
        vld = false;
    }
    // Check password verification
    if (document.ContactForm.password2.value == "") {
     	msg = msg + "You have not re-entered the password for verification\n\n";
        cnt++;
        vld = false;
    }
    // Compare passwords
		if (document.ContactForm.password.value != "" && document.ContactForm.password2.value != "") {
		    if (document.ContactForm.password.value != document.ContactForm.password2.value) {
    	 	msg = msg + "The two passwords do not match, please re-enter\n\n";
        	cnt++;
		        vld = false;
        }
    }
    // Prepare and display error message
    if (vld == false) {
    	if (cnt == 1) { 
        	txt = "\nThere is one error in the Telopea67 Contact Form                \n\n\n"; 
        }
        else { 
        	txt = "\nThere are " + getNum(cnt) + " errors in the Telopea67 Contact Form             \n\n\n";
        }
			// Popup alert message indicating errors
		    alert(txt + msg);
    }
    return vld;
}


function checkPhone(str) {
		var error = "";
    // characters outside of 0 through 9 not OK
    for (var i = 0; i < str.length; i++) {
        oneChar = str.charAt(i).charCodeAt(0);
		    if (oneChar < 48 || oneChar > 57) {
        	// allow space, (, ) and -
        	if (oneChar == 32 || oneChar == 40 || oneChar == 41 || oneChar == 45) {
            	continue;
            } 
		    	else {
                error = "Please enter only numbers for the phone or mobile number\n\n";
    	    	return error;
            }
		    }
    }
    return "";
}

function checkAreaCode(str) {
		var error = "";
    check = strpos(str, '(');
    if(check === false) {
    	error = "You have not entered an area code properly\n\n";
        return error;
    }
    return "";
}

function checkEmail(str) {
		var error = "";
    str = str.toLowerCase();
    if (str == "") {
			error = "You have not entered your email address\n\n";
        return error;
		}
    if (str.indexOf("@") > 1) {
        var address = str.substring(0, str.indexOf("@"));
        var domain  = str.substring(str.indexOf("@") + 1, str.length);
        // at least one top level domain required
        if (domain.indexOf(".") == -1) {
            error = "Please verify the domain portion of the email address\n\n";
            return error;
        }
        // parse address portion first, character by character
        for (var i = 0; i < address.length; i++) {
            oneChar = address.charAt(i).charCodeAt(0);
            // hyphen or dot not allowed in first position; dot in last position
            if ((i == 0 && (oneChar == 45 || oneChar == 46)) || (i == address.length - 1 && oneChar == 46)) {
                error = "Please verify the user name portion of the email address\n\n";
                return error;
            }
            // acceptable characters (- . _ 0-9 a-z)
            if (oneChar == 45 || oneChar == 46 || oneChar == 95 || (oneChar > 47 && oneChar < 58) || (oneChar > 96 && oneChar < 123)) {
                continue; 
            } 
            else {
                error = "Please verify the user name portion of the email address\n\n";
                return error;
            }
        }
			// parse domain portion
        for (i = 0; i < domain.length; i++) {
            oneChar = domain.charAt(i).charCodeAt(0);
            if ((i == 0 && (oneChar == 45 || oneChar == 46)) || ((i == domain.length - 1 || i == domain.length - 2) && oneChar == 46)) {
				    error = "Please verify the domain portion of the email address\n\n";
                return error;
            }
            if (oneChar == 45 || oneChar == 46 || oneChar == 95 || (oneChar > 47 && oneChar < 58) || (oneChar > 96 && oneChar < 123)) {
                continue;
            }
            else {
                error = "Please verify the domain portion of the email address\n\n";
                return error;
            }
        }
    }
    else {
    	error = "Please verify your email address\n\n";
        return error;
    }
 		return "";
}

function getNum (no) {
		if (no == 2) { return "two"; }
    else if (no == 3) { return "three"; }
    else if (no == 4) { return "four"; }
    else if (no == 5) { return "five"; }
    else if (no == 6) { return "six"; }
    else if (no == 7) { return "seven"; }
    else if (no == 8) { return "eight"; }
    else if (no == 9) { return "nine"; }
    else if (no == 10) { return "ten"; }
    else { return no; }
}

function checkQuizForm(QuizForm) {
    vld = true;
    if(document.QuizForm.name.value == "") {
        alert(" You must enter a name to start the quiz ");
        vld = false;
    }
    return vld;
}

var disappeardelay=250  //menu disappear speed onMouseout (in miliseconds)
var enableanchorlink=0  //Enable or disable the anchor link when clicked on? (1=e, 0=d)
var hidemenu_onclick=0  //hide menu when user clicks within menu? (1=yes, 0=no)
var ie5=document.all
var ns6=document.getElementById&&!document.all

function getposOffset(what, offsettype){
		var totaloffset=(offsettype=="left")? what.offsetLeft : what.offsetTop;
		var parentEl=what.offsetParent;
		while (parentEl!=null) {
			totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft : totaloffset+parentEl.offsetTop;
			parentEl=parentEl.offsetParent;
		}
		return totaloffset;
}

function showhide(obj, e, visible, hidden){
		if (ie5||ns6)
			dropmenuobj.style.left=dropmenuobj.style.top=-500
		if (e.type=="click" && obj.visibility==hidden || e.type=="mouseover")
			obj.visibility=visible
		else if (e.type=="click")
			obj.visibility=hidden
}

function iecompattest(){
		return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
}

function clearbrowseredge(obj, whichedge){
		var edgeoffset=0
		if (whichedge=="rightedge") {
			var windowedge=ie5 && !window.opera? iecompattest().scrollLeft+iecompattest().clientWidth-15 : window.pageXOffset+window.innerWidth-15
			dropmenuobj.contentmeasure=dropmenuobj.offsetWidth
			if (windowedge-dropmenuobj.x < dropmenuobj.contentmeasure)
				edgeoffset=dropmenuobj.contentmeasure-obj.offsetWidth
		}
		else {
			var topedge=ie5 && !window.opera? iecompattest().scrollTop : window.pageYOffset
			var windowedge=ie5 && !window.opera? iecompattest().scrollTop+iecompattest().clientHeight-15 : window.pageYOffset+window.innerHeight-18
			dropmenuobj.contentmeasure=dropmenuobj.offsetHeight
			if (windowedge-dropmenuobj.y < dropmenuobj.contentmeasure) { //move up?
				edgeoffset=dropmenuobj.contentmeasure+obj.offsetHeight
				if ((dropmenuobj.y-topedge)<dropmenuobj.contentmeasure) //up no good either?
				edgeoffset=dropmenuobj.y+obj.offsetHeight-topedge
			}
		}
		return edgeoffset
}

function dropdownmenu(obj, e, dropmenuID){
		if (window.event) event.cancelBubble=true
		else if (e.stopPropagation) e.stopPropagation()
		if (typeof dropmenuobj!="undefined") //hide previous menu
		dropmenuobj.style.visibility="hidden"
		clearhidemenu()
		if (ie5||ns6) {
			obj.onmouseout=delayhidemenu
			dropmenuobj=document.getElementById(dropmenuID)
			if (hidemenu_onclick) dropmenuobj.onclick=function(){dropmenuobj.style.visibility='hidden'}
			dropmenuobj.onmouseover=clearhidemenu
			dropmenuobj.onmouseout=ie5? function(){ dynamichide(event)} : function(event){ dynamichide(event)}
			showhide(dropmenuobj.style, e, "visible", "hidden")
			dropmenuobj.x=getposOffset(obj, "left")
			dropmenuobj.y=getposOffset(obj, "top")
			dropmenuobj.style.left=dropmenuobj.x-clearbrowseredge(obj, "rightedge")+"px"
			dropmenuobj.style.top=dropmenuobj.y-clearbrowseredge(obj, "bottomedge")+obj.offsetHeight+"px"
		}
		return clickreturnvalue()
}

function clickreturnvalue(){
		if ((ie5||ns6) && !enableanchorlink) return false
		else return true
}

function contains_ns6(a, b) {
		while (b.parentNode)
		if ((b = b.parentNode) == a)
		return true;
		return false;
}

function dynamichide(e){
		if (ie5&&!dropmenuobj.contains(e.toElement))
		delayhidemenu()
		else if (ns6&&e.currentTarget!= e.relatedTarget&& !contains_ns6(e.currentTarget, e.relatedTarget))
		delayhidemenu()
}

function delayhidemenu(){
		delayhide=setTimeout("dropmenuobj.style.visibility='hidden'",disappeardelay)
}

function clearhidemenu(){
		if (typeof delayhide!="undefined")
		clearTimeout(delayhide)
}

var WindowObjectReference = null; // global variable
function openMore(strUrl, strWindowName, strWindowFeatures) {
		if(WindowObjectReference == null || WindowObjectReference.closed) {
			WindowObjectReference = window.open(strUrl, strWindowName, strWindowFeatures);
  	}
		else {
			WindowObjectReference.focus();
		};
}

function openAboutPrint() {
		window.open("AboutPrinting.php","openAboutPrint","width=590,height=365,location=0,menubar=0,resizable=0,scrollbars=0,status=0,titlebar=0,toolbar=0,border=0,screenX=100,left=100,screenY=30,top=60");
}

function printPage() {
		window.print();
}

