//' Web software by DavidRegier.com



//--------------------------------------------------------------------------------------
function getCalErr() {

	var errInfo = "";
	var err = false;
	if( eval( "typeof WebData" ) != "object" ) {
		err = true;

		errInfo = "We are sorry! Our data-base file contains an error and is temporarily unavailable. As a result, this page will not be functional.";

		reportErr( "Web Site Data-Base Error", errInfo, 1 );

		errInfo = "<TABLE WIDTH='600' CELLPADDING='10' CLASS='pinLineLiteBkg'><TR><TD CLASS='fSize10 fgGray51'><SPAN CLASS='red'>" + errInfo.replaceLiteral( "\n", "<BR>" ) + " <A HREF='javascript:reportErr( \"Web Site Data-Base Error\", \"" + errInfo + "\", 1 );' onMouseOver='self.status=this.title; return true;' onMouseOut='self.status=\"\"; return true;' TITLE='Report this error to our web master'>Report this error</A>.</SPAN></TD></TR></TABLE><BR>";
	}
	return errInfo;

}

//=============================== FORM DRIVER CODE =======================================

function clearField(field) { if ( cb && field.value == field.defaultValue ) field.value = ""; }

function checkField(field) { if ( cb && field.value == "") field.value = field.defaultValue; }

//--------------------------------------------------------------------------------------
function getReferrer( Form ) {

	var hvmReferrer = GetCookie( "hvmReferrer" );

	Form.Referrer.value = ( framed ) ? "A site that traps Hawaii Video Memories within frames:" + hvmReferrer : hvmReferrer;

}
//--------------------------------------------------------------------------------------

function setTimeDifference() {

	var gmtOffSetHi = 10; // for Hawaii
	var Now = new Date();
	var gmtOffSetClient = Now.getTimezoneOffset() / 60;
	var timeDiff = gmtOffSetHi - gmtOffSetClient;

	var plural = ( Math.abs( timeDiff ) == 1 ) ? "" : "s"
	var theSign = ( timeDiff > 0 ) ? "+" : "";
	var forTime = theSign + timeDiff + " hour" + plural;

	document.form.Time_Difference.value = forTime;
}
//---------------------------------------------------------------------------------------

function getFirstName( fullName ) {
	var fName = '';
	if( fullName.indexOf(' ') == -1 )
		fName = fullName;
	else if( fullName.indexOf(', ') == -1 )
		fName = fullName.split(' ')[0];
	else // Last name first like Regier, David
		fName = fullName.split(', ')[1];
	fName = fName.substring(0, 1).toUpperCase() + fName.substring(1, fName.length).toLowerCase();
	return fName;
}

//--------------------------------------------------------------------------------------

function setButton( Button, command, defVal ) {

	if( !defVal ) defVal = "Submit Inquiry";

	switch( command ) {

		case "enable":
			Button.value = defVal;
			Button.disabled = false;
			break;

		case "disable":
			Button.value = "Please Wait...";
			Button.disabled = true;
			break;

		default:
			alert( "SWITCH/CASE ERROR: Case caught by default handler in setButton( Button, command )" );
	}
}

//--------------------------------------------------------------------------------------

function verifyEmail( Button, Email, defVal ) {

	function stop( defVal ) {
		try { Email.focus(); } catch( Err ) {}
		setButton( Button, "enable", defVal );
		return false;
	}

	Email.value = Email.value.trim();

	var emailRE = /^[\w\.-]+@[\w\.-]+\.[a-zA-Z]{2,}$/;
	if( !emailRE.test( Email.value ) ) {
			alert( "Sorry but \"" + Email.value + "\" is an invalid email address.\n\nHere's some examples of valid e-mail addresses:\n1. joe@hotmail.com\n2. sally_smith@aol.com\n3. jim.clark@co.la.ca.us\n4. ron-kent254@yahoo.com\n\nTIP: Valid e-mails contain 1 \"@\" character & end with .com, .net, .us, .ca, etc. etc." );
			return stop( defVal );
	}

	var noEmailInCookie = true;
	var hvmCook = GetCookie( "hvmCook" );
	if( hvmCook && hvmCook.getVal( "email" ) )
		noEmailInCookie = false;

	if( noEmailInCookie ) {
		if( confirm ( "IMPORTANT: Please double check your e-mail address for accuracy." + "\n\n  Click OK if \"" + Email.value + "\" is correct & this form will be submitted; OR\n  Click Cancel if you need to correct it\n\nIt's important because if you make a typo in your e-mail address we may be unable to contact you." ) ) return true;
		else {
			Email.focus();
			setButton( Button, "enable", defVal );
			return false;
		}
	}
	else return true;
}

//--------------------------------------------------------------------------------------

function markField( Field, markIt ) {

	if( markIt ) {
		if( Field.type == "text" || Field.type == "textarea" || Field.type == "select-one" )
			Field.style.backgroundColor = "rgb( 229,243,255 )";
		else if( Field.type == "radio" ) {
			var Description = document.getElementById( Field.name + "_Description" );
			Description.style.color = "rgb( 0,0,204 )";
			Description.style.fontWeight = "bold";
		}
	}
	else {
		if( Field.type == "text" || Field.type == "textarea" || Field.type == "select-one" )
			Field.style.backgroundColor = "rgb( 255,255,255 )";
		else if( Field.type == "radio" ) {
			var Description = document.getElementById( Field.name + "_Description" );
			Description.style.color = "rgb( 51,51,51 )";
			Description.style.fontWeight = "normal";
		}
	}
}
//--------------------------------------------------------------------------------------

function getYearOptions( startYr ) {
	var theOptions = "";
	var Today = new Date();
	var thisYear = Today.getFullYear();
	if( typeof startYr == "undefined" ) startYr = thisYear;
	var nYrsBefore = startYr - thisYear;
	for( var i = nYrsBefore; i < 5; i++ ) {
		var sel = ( thisYear + i == thisYear ) ? " selected" : "";
		theOptions += "<option value='" + ( thisYear + i ) + "' " + sel + " class='pulldown'>" + ( thisYear + i );
	}
	return theOptions;
}
//--------------------------------------------------------------------------------------

function setPullDownToToday() {

	var Today = new Date();
	var month = Today.getMonth();
	var day = Today.getDate();

	document.form.Wedding_Month.selectedIndex = month;
	document.form.Wedding_Day.selectedIndex = day - 1;

}
//--------------------------------------------------------------------------------------

function getPackageOptions( thePage ) {

	// ALWAYS use a single ":" after pkg name
	var akamai = "Akamai: " + DB.Pkg.AKAMAI_TIME + " hours; $" + DB.Pkg.AKAMAI_PRICE;
	var alii = "Alii: " + DB.Pkg.ALII_TIME + " hours; $" + DB.Pkg.ALII_PRICE;
	var noKaOi = "No Ka Oi: " + DB.Pkg.NO_KA_OI_TIME + " hours; $" + DB.Pkg.NO_KA_OI_PRICE;
	var ohana = "Ohana: " + DB.Pkg.OHANA_TIME + " hours; $" + DB.Pkg.OHANA_PRICE;
	var meKeAloha = "Me Ke Aloha: " + DB.Pkg.ME_KE_ALOHA_TIME + " hours; $" + DB.Pkg.ME_KE_ALOHA_PRICE;
	var kapiolani = "Kapiolani: " + DB.Pkg.KAPIOLANI_TIME + " hours; $" + DB.Pkg.KAPIOLANI_PRICE;
	var kamehameha = "Kamehameha: " + DB.Pkg.KAMEHAMEHA_TIME + " hours; $" + DB.Pkg.KAMEHAMEHA_PRICE;
	var hoilina = "Hoilina: " + DB.Pkg.HOILINA_TIME + " hours; $" + DB.Pkg.HOILINA_PRICE;
	var dirCut = "Directors Cut: " + DB.Pkg.DIRECTORS_CUT_TIME + " hour minimum; $" + DB.Pkg.DIRECTORS_CUT_PRICE + "/hour";

	var pkgOptions =
	 "<select name='Video_Package' onChange='setPkgEndTime( \"" + thePage + "\", this );' onFocus='self.status=\"Please select your Video Package\"' title='Please select your Video Package' class='pullDown'>" +

			"<option value=''>Select Video Package..."  +
			"<option value='" + akamai + "'>" + akamai +
			"<option value='" + alii + "'>" + alii +
			"<option value='" + noKaOi + "'>" + noKaOi +
			"<option value='" + ohana + "'>" + ohana +
			"<option value='" + meKeAloha + "'>" + meKeAloha +
			"<option value='" + kapiolani + "'>" + kapiolani +
			"<option value='" + kamehameha + "'>" + kamehameha +
			"<option value='" + hoilina + "'>" + hoilina +
			"<option value='" + dirCut + "'>" + dirCut;
			if( thePage == "bookingForm" ) {
				pkgOptions += "<option value='To Be Determined'>To Be Determined";
				pkgOptions += "<option value='other'>Other";
			}

		pkgOptions +=
	 "</select>";

	 return pkgOptions;

}
//--------------------------------------------------------------------------------------

function getWedTimeOptions( start, calPage ) {
	return "" +
		"<option value='7.0'>7:00AM" +
		"<option value='7.25'>7:15AM" +
		"<option value='7.5'>7:30AM" +
		"<option value='7.75'>7:45AM" +
		"<option value='8.0'>8:00AM" +
		"<option value='8.25'>8:15AM" +
		"<option value='8.5'>8:30AM" +
		"<option value='8.75'>8:45AM" +
		"<option value='9.0'>9:00AM" +
		"<option value='9.25'>9:15AM" +
		"<option value='9.5'>9:30AM" +
		"<option value='9.75'>9:45AM" +
		"<option value='10.0'>10:00AM" +
		"<option value='10.25'>10:15AM" +
		"<option value='10.5'>10:30AM" +
		"<option value='10.75'>10:45AM" +
		"<option value='11.0'>11:00AM" +
		"<option value='11.25'>11:15AM" +
		"<option value='11.5'>11:30AM" +
		"<option value='11.75'>11:45AM" +
		"<option value='12.0'>12:00PM" +
		"<option value='12.25'>12:15PM" +
		"<option value='12.5'>12:30PM" +
		"<option value='12.75'>12:45PM" +
		"<option value='13.0'>1:00PM" +
		"<option value='13.25'>1:15PM" +
		"<option value='13.5'>1:30PM" +
		"<option value='13.75'>1:45PM" +
		"<option value='14.0'>2:00PM" +
		"<option value='14.25'>2:15PM" +
		"<option value='14.5'>2:30PM" +
		"<option value='14.75'>2:45PM" +
		"<option value='15.0'>3:00PM" +
		"<option value='15.25'>3:15PM" +
		"<option value='15.5'>3:30PM" +
		"<option value='15.75'>3:45PM" +
		"<option value='16.0'>4:00PM" +
		"<option value='TBD'" + ( ( calPage ) ? " selected" : "" ) + ">Coverage " + ( ( start ) ? "Start" : "End" ) + " Time" +
		"<option value='16.25'>4:15PM" +
		"<option value='16.5'>4:30PM" +
		"<option value='16.75'>4:45PM" +
		"<option value='17.0'>5:00PM" +
		"<option value='17.25'>5:15PM" +
		"<option value='17.5'>5:30PM" +
		"<option value='17.75'>5:45PM" +
		"<option value='18.0'>6:00PM" +
		"<option value='18.25'>6:15PM" +
		"<option value='18.5'>6:30PM" +
		"<option value='18.75'>6:45PM" +
		"<option value='19.0'>7:00PM" +
		"<option value='19.25'>7:15PM" +
		"<option value='19.5'>7:30PM" +
		"<option value='19.75'>7:45PM" +
		"<option value='20.0'>8:00PM" +
		"<option value='20.25'>8:15PM" +
		"<option value='20.5'>8:30PM" +
		"<option value='20.75'>8:45PM" +
		"<option value='21.0'>9:00PM" +
		"<option value='21.25'>9:15PM" +
		"<option value='21.5'>9:30PM" +
		"<option value='21.75'>9:45PM" +
		"<option value='22.0'>10:00PM" +
		"<option value='22.25'>10:15PM" +
		"<option value='22.5'>10:30PM" +
		"<option value='22.75'>10:45PM" +
		"<option value='23.0'>11:00PM" +
		"<option value='23.25'>11:15PM" +
		"<option value='23.5'>11:30PM" +
		"<option value='23.75'>11:45PM" +
		"<option value='24.0'>12:00AM" +
		"<option value='24.25'>12:15AM" +
		"<option value='24.5'>12:30AM" +
		"<option value='24.75'>12:45AM" +
		"<option value='25.0'>1:00AM" +
		"<option value='25.25'>1:15AM" +
		"<option value='25.5'>1:30AM" +
		"<option value='25.75'>1:45AM" +
		"<option value='26.0'>2:00AM" +
		"<option value='26.25'>2:15AM" +
		"<option value='26.5'>2:30AM" +
		"<option value='26.75'>2:45AM" +
		"<option value='27.0'>3:00AM" +
		"<option value='27.25'>3:15AM" +
		"<option value='27.5'>3:30AM" +
		"<option value='27.75'>3:45AM" +
		"<option value='28.0'>4:00AM" +
		"<option value='28.25'>4:15AM" +
		"<option value='28.5'>4:30AM" +
		"<option value='28.75'>4:45AM" +
		"<option value='29.0'>5:00AM" +
		"<option value='29.25'>5:15AM" +
		"<option value='29.5'>5:30AM" +
		"<option value='29.75'>5:45AM" +
		"<option value='30.0'>6:00AM" +
		"<option value='30.25'>6:15AM" +
		"<option value='30.5'>6:30AM" +
		"<option value='30.75'>6:45AM" +

	"";
}
//--------------------------------------------------------------------------------------
// Returns the start or end time of wedding in milliseconds

function getWedTimeMS( startTime ) {

	var timeMS = 0;
	var endTime = !startTime;
	var Form = document.form;

	var PullDown = ( startTime ) ? Form.Coverage_Start_Time : Form.Coverage_End_Time;

	if( !isNaN( PullDown[ PullDown.selectedIndex ].value ) ) {

		var year = parseInt( Form.Wedding_Year[ Form.Wedding_Year.selectedIndex ].value );
		var month = parseInt( Form.Wedding_Month[ Form.Wedding_Month.selectedIndex ].value ) - 1;
		var day = parseInt( Form.Wedding_Day[ Form.Wedding_Day.selectedIndex ].value );

		var covTime = PullDown[ PullDown.selectedIndex ].text;

		var pdVal = PullDown[ PullDown.selectedIndex ].value;

		var hours = parseInt( pdVal );

		var minutes = parseInt( ( parseFloat( pdVal ) - hours ) * 60 );

		var wedDate = new Date( year, month, day, hours, minutes );

		timeMS = wedDate.getTime();

	}

	return timeMS;
}

//--------------------------------------------------------------------------------------
// Called onChange of Coverage_End_Time pull down only: Sets Coverage_Start_Time selectedIndex

function setPkgStartTime( PullDown ) {

	var Form = document.form;
	var coverageEndTimeMS = getWedTimeMS( false );
	var Package = Form.Video_Package;
	var Coverage_Start_Time = Form.Coverage_Start_Time;


	// If user selected a video pkg & a ceremony end time...
	if( coverageEndTimeMS > 0 && Package.selectedIndex > 0 ) {

		var pkgVal = Package[ Package.selectedIndex ].value;
		var dirCut = ( pkgVal.indexOf( "Directors" ) == 0 );

		var hoursCoverage = ( pkgVal.indexOf( ": ") >= 0 ) ? parseFloat( pkgVal.split( ": ")[ 1 ] ) : 0;

		if( hoursCoverage ) {

			var CoverageStartTime = new Date( coverageEndTimeMS - ( hoursCoverage * 60 * 60 * 1000 ) );

			var startTime = getFormatedTime( CoverageStartTime.getHours(), CoverageStartTime.getMinutes(), "" );

			var nExistingStartTime = Coverage_Start_Time.selectedIndex;
			for( var i = 0; i < Coverage_Start_Time.length; i++ ) {
				if( startTime == Coverage_Start_Time[ i ].text ) {
					if( i < nExistingStartTime && dirCut || !dirCut ) {
						Coverage_Start_Time.selectedIndex = i;
						break;
					}
				}
			}

			// Reset end time if time span between pull-downs is less than hours of coverage
			var begTimeVal = Coverage_Start_Time[ Coverage_Start_Time.selectedIndex ].value;
			var endTimeVal = PullDown[ PullDown.selectedIndex ].value;
			if( !isNaN( begTimeVal ) && !isNaN( endTimeVal ) ) {
				begTimeVal = parseFloat( begTimeVal );
				endTimeVal = parseFloat( endTimeVal );
				if( endTimeVal - begTimeVal < hoursCoverage ) {
					for( var i = 0; i < PullDown.length; i++ ) {
						if( parseFloat( PullDown[ i ].value ) == begTimeVal + hoursCoverage ) {
							PullDown.selectedIndex = i;
							break;
						}
					}
				}
			}
		}

	}
}
//--------------------------------------------------------------------------------------
// Called onChange of Coverage_Start_Time OR Video_Package pull-down & sets Coverage_End_Time selectedIndex

function setPkgEndTime( thePage, PullDown ) {

	var Form = document.form;
	var coverageStTimeMS = getWedTimeMS( true );
	var Package = Form.Video_Package;

	// If user selected a video pkg & a ceremony start time...
	if( coverageStTimeMS > 0 && Package.selectedIndex > 0 ) {

		var Coverage_End_Time = Form.Coverage_End_Time;
		var pkgVal = Package[ Package.selectedIndex ].value;
		var dirCut = ( pkgVal.indexOf( "Directors" ) == 0 );

		var hoursCoverage = ( pkgVal.indexOf( ": ") >= 0 ) ? parseFloat( pkgVal.split( ": ")[ 1 ] ) : 0;

		if( hoursCoverage ) {

			var CoverageEndTime = new Date( coverageStTimeMS + ( hoursCoverage * 60 * 60 * 1000 ) );

			var endTime = getFormatedTime( CoverageEndTime.getHours(), CoverageEndTime.getMinutes(), "" );

			var nExistingEndTime = Coverage_End_Time.selectedIndex;
			for( var i = 0; i < Coverage_End_Time.length; i++ ) {
				if( endTime == Coverage_End_Time[ i ].text ) {
					if( nExistingEndTime < i && dirCut || !dirCut ) {
						Coverage_End_Time.selectedIndex = i;
						break;
					}
				}
			}

			// Reset beg time if time span between pull-downs is less than hours of coverage
			var begTimeVal = PullDown[ PullDown.selectedIndex ].value;
			var endTimeVal = Coverage_End_Time[ Coverage_End_Time.selectedIndex ].value;
			if( !isNaN( begTimeVal ) && !isNaN( endTimeVal ) ) {
				begTimeVal = parseFloat( begTimeVal );
				endTimeVal = parseFloat( endTimeVal );
				if( endTimeVal - begTimeVal < hoursCoverage ) {
					for( var i = 0; i < PullDown.length; i++ ) {
						if( parseFloat( PullDown[ i ].value ) == endTimeVal - hoursCoverage ) {
							PullDown.selectedIndex = i;
							break;
						}
					}
				}
			}

		}

	}

	// On calendar page & coordinator chooses other pkg
	if( Package[ Package.selectedIndex ].value == "other" ) {

		var pkgName = prompt( "Name of Package:", "" );

		if ( pkgName ) {

			Package.length++; // add new option to end of select list

			var newOptionNum = Package.length - 1;

			Package[ newOptionNum ].value = pkgName;
			Package[ newOptionNum ].text = pkgName.substring( 0, 25 );
			Package.selectedIndex = newOptionNum;
		}

		else
			Package.selectedIndex = 0;

	}
}
//--------------------------------------------------------------------------------------

function resetForm() {
	if( confirm( "Click OK to reset form & clear ALL form values." ) ) {
		document.form.reset();
		unMarkAllFields();
		gArrIndex = -1;
	}
}

//---------------------------------------------------------------------------------------
function section( sectionId, turnOn ) {

	Section = document.getElementById( sectionId );
	if ( turnOn ) Section.className="on";
	else Section.className = "off";
}
//--------------------------------------------------------------------------------------

function isLeapYear( theYear ) {

	// Leap years are every 4 years, next one in 2004
	var leapYear = false;

	if( theYear % 4 != 0 ) leapYear = false;
	else if( theYear % 400 == 0 ) leapYear = true;
	else if ( theYear % 100 == 0 ) leapYear = false;
	else leapYear = true;

	return leapYear;

}
//--------------------------------------------------------------------------------------

function getNumDaysInMonth( month, year ) {

	var nDays = 31;
	if( month == 4 || month == 6 || month == 9 || month == 11 ) nDays = 30;
	else if( month == 2 ) nDays = ( isLeapYear( year ) ) ? 29 : 28;

	return nDays;

}
//--------------------------------------------------------------------------------------

function getDayOfWeek( index ) {

	var arrWeekDay = new Array ( "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" );
	return arrWeekDay[ index ];
}

//--------------------------------------------------------------------------------------

function getMonthName( index, fullName ) {
	index = parseInt( index );
	var arrMonth = new Array ( "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" );
	var monName = arrMonth[ index - 1 ];
	if( fullName ) return arrMonth[ index - 1 ];
	else return arrMonth[ index - 1 ].substring( 0, 3 );

}
//--------------------------------------------------------------------------------------

function getMoney( num ) {

	if( num.toFixed )
		return "$" + num.toFixed( 2 );

	var newNum = "" + num;
	var theLength = newNum.length;
	var theDecLoc = newNum.lastIndexOf(".");

	if( theDecLoc == -1 ) {
		newNum = newNum + ".00";
		return "$" + newNum;
	}
	else {
		var theDollars = newNum.substring( 0, theDecLoc );
		var theCents = newNum.substring( theDecLoc,theLength );
		var theCents = "" + Math.round( theCents * 100 );

		if ( theCents == "100" ) {
			theDollars = parseFloat( theDollars );
			theDollars += 1;
			newNum = theDollars + ".00";
			return "$" + newNum;
		}
		else {
			var newCents = ( theCents.length == 1 ) ? "0" + theCents: theCents;
			newNum = theDollars + "." + newCents;
			return "$" + newNum;
		}
	}
}