/*
    ------------------------------------------------------
 	FILE:	func.js
 	------------------------------------------------------
 	AUTHOR:	Brendon Ryniker - Standard Systems
 	EMAIL:	standardsystems@netspeed.net.nz
 	DATE:	Mon Mar  6 12:32:34 2006
 	------------------------------------------------------
 	APPLICATION: empire hotel backpackers
 	------------------------------------------------------
 	DEPENDANCIES:
 	------------------------------------------------------
 	FUNCTIONALITY:

	* mouseover routine for top navigation bar

	* popup functionality for map page

	* check submitted form data for bookings page

 	------------------------------------------------------
*/

var isInit  = false;
var origPos;
var origOpacity;
var origBorder;

// Current stylesheet obj:
var css = document.styleSheets[0];

// Cross-browser rules object:
var rules   = css.cssRules ? css.cssRules : css.rules ? css.rules : null;

// Existing rule for 'highlight' image in menu bar:
var hiRule;

var im;
var i2;

function moveHi(pos) {

/* Move the highlighting splash along the menubar to identify current hot page */

    if (!isInit){

        for (i = 0; i < rules.length; i++) {

			// find the rule for the highlight image:
            if (rules[i].selectorText.toLowerCase() == "#hi") {

                hiRule = rules[i];

                // initialise - possibly pointless....
                origOpacity = hiRule.style.opacity;

				im = document.getElementById('hi');
				i2 = document.getElementById('hi2');
				origPos     = im.style.left;
				origBorder  = im.style.border;

                isInit = true;
                break;
            }
        }
    }

    var newPos;
    var newOpacity;
	var newBorder;
	var i2Border;

    if (pos == 0 ) {

        newPos     = origPos;
        newOpacity = origOpacity;
		newBorder  = origBorder;
		i2Border   = '1px solid gray';

    }
    else {
        newPos     = pos;
        newOpacity = '0.7';
		newBorder  = '1px solid gray';
		i2Border   = '1px solid gray';

    }
    i2.style.left    = newPos;
    im.style.opacity = newOpacity;
	im.style.border  = newBorder;
	i2.style.border  = i2Border;

}

// ======= FOR BOOKINGS - CHECK FORM2MAIL DATA  ====================

		var errStr      = '';

// ===========================================
    function convMon(str) {
// ===========================================

		switch (str) {
			case 'January':
				return 0;
				break;
			case 'February':
				return 1;
				break;
			case 'March':
				return 2;
				break;
			case 'April':
				return 3;
				break;
			case 'May':
				return 4;
				break;
			case 'June':
				return 5;
				break;
			case 'July':
				return 6;
				break;
			case 'August':
				return 7;
				break;
			case 'September':
				return 8;
				break;
			case 'October':
				return 9;
				break;
			case 'November':
				return 10;
				break;
			case 'December':
				return 11;
		}
	}

// ===========================================
    function addErr(err) {
// ===========================================

		errStr = errStr + err + "\n";
	}


// ===========================================
	function getTime(j) {
// ===========================================

	// Given ordinal position in form, return milliseconds
	// since 1970 represented by associated date selectors

		var els = document.forms[0].elements;

		var yr = els[j+2].options[els[j+2].selectedIndex].text;
	    var mo = els[j+1].options[els[j+1].selectedIndex].text;
		var da = els[j].options[els[j].selectedIndex].text;

		return Date.UTC(yr,convMon(mo),da);
	}

// ===========================================
	function datesChanged(j) {
// ===========================================

		// Check whether any of the date elements are in non-default position:
		var firstEl = j + 2;
		for (var k = 0; k < 6; k++ ) {

			if (document.forms[0].elements[firstEl + k].selectedIndex != 0) {
				return true;
			}
		}
		return false;
	}

var msgNumBeds    = 'In at least one form, you appear to have entered dates of arrival or departure, ' +
			        'but not the number of beds required. Press "Cancel" for a chance to correct '     +
		 		    'your entries, or "OK" to continue';
var msgDatesEquiv = 'In at least one form, your arrival and departure dates lie '+
                    'on the same day';
var msgDatesWrong = 'In at least one form, the departure date you have entered occurs '+
                    'before your intended arrival date';
var msgDatePassed = 'In at least one form, the entered arrival date has already passed';
var msgNoDates    = 'In at least one form, you appear to have entered the required ' +
                    'number of beds, but not the arrival and departure date. Please '+
                    'enter the dates';
var msgNoData     = 'To submit this form you  must enter data in either the bookings fields '+
                    'or make a comment/enquiry';
var msgNoEmail    = 'You must enter your email address';

// ===========================================
    function chk() {
// ===========================================


		var datesBooked = false;
		var numErr      = false;
		var datErr      = false;
		var samErr      = false;
		var ordErr      = false;
		var gonErr      = false;
		var confirmed   = false;
		errStr          = '';

	  CHK :
        for (var i = 4; i < 21; i = i+8) {

				// Check that, if num guests is entered, the dates are not
				// still in default positions.

				// Check that, if dates are *not* in default positions, then
				// number of guests is entered - confirm only.

				// Check that email address is entered

			var numGuests = document.forms[0].elements[i].value;

			if (datesChanged(i)) {

				datesBooked = true;

				if (!numGuests) {

					if (!confirm(msgNumBeds)) {

						return false;
					}
				}
				else {

					if (isNaN(numGuests)) {

						addErr('"' + numGuests + '" is not a number');
					}
				}

				var come = getTime(i+2);
				var go   = getTime(i+5);
				var T    = new Date();
				var now  = T.getTime();


				if (come == go) {

					if (!samErr) {

						addErr(msgDatesEquiv);
						samErr = true;
					}
				}
				if (go < come) {

					if (!ordErr) {

						addErr(msgDatesWrong);
						ordErr = true;
					}
				}
				else {

					if (come < now) {

						if (!gonErr) {

							addErr(msgDatePassed);
							gonErr = true;
						}
					}
				}
			}
			else {
				if (numGuests) {

					datesBooked = true;

					if (isNaN(numGuests)) {

							addErr('"' + numGuests + '" is not a number');
					}
					else {
						if (!numErr) {

							addErr(msgNoDates);
							numErr = true;
						}
					}
				}
			}
		}

		if (!document.forms[0].elements[31].value && !datesBooked) {

			// No bookings and no comment
			addErr(msgNoData);
		}
		else {

			if (!document.forms[0].elements[29].value) {

				// email address not entered
				addErr(msgNoEmail);
			}
		}

        if (errStr != '') {
            alert('The information you entered has the following error(s). Please correct them and try again.' +
                "\n\n" + errStr);
            return false;
        }
        else {
		    document.forms[0]['subj'].value = 'Website Booking/enquiry: ' + document.forms[0]['user_name'].value;
            return true;
        }
    }



// ======= FOR MAP PRINTING ====================

    // pop-up object:
    var mWindow;

    // Certain platforms don't implement print():
    var mPrintString = self.print ?
        '<input type="button" onClick="self.print();return false" value="Print" />' : '';

    var N = "\n";

    var mWindowCSS = "BODY{font-family:verdana,sans-serif;background-color:white;color:black}\n";

    // ======================
        function showMap(){
    // ======================

        if (mWindow && !mWindow.closed) {mWindow.close();}

        mWindow = self.open('','','width=700,height=750,scrollbars,resizable');

        mWindow.document.write('<html><head>' + N +
            '<title>Empire Hotel Backpackers - Printable Map</title>' + N +
            '<style>' + mWindowCSS + '</style>' + N +
            '<body>' + N + '<form onsubmit="self.close();">' + N +
            '<input type="submit" value="Close"> &nbsp; ' + mPrintString + '</form>' +
            '<img width="618" height="679" alt="Map to Empire, '+ N +
            'printable" src="images/map-empire-print.gif" border="0" /></body></html>');

        // Flush the output buffer:
        mWindow.document.close();

        return false;
    }


// END
