$(function() {
// Remove javascript warning
//$("div#js-warning").hide();
//$("div#js-warning-spacer").hide();
//links to the booking engine only need the _link bit added
for(var i in $.browser) {
if ($.browser[i])
BROWSER = i + (($.browser.msie)?$.browser.version.charAt(0):'');
}
if ( DOMAIN_TRACKING ) {
var trackDomains = DOMAIN_TRACKING.split(',');
for (var i=trackDomains.length-1;i>=0;i--) {
$('a[href*="'+trackDomains[i]+'"], form[action*="'+trackDomains[i]+'"]').addClass('track-crossdomain');
}
}
// Tracking email links / set email as the name
$('a[href^="mailto:"]').each(function(){
$(this).attr('name',$(this).attr('href')).addClass('track');
});
// Finds a form on the page, instantiates a Calendar Popup and hides "other" fields if necessary
$(this).find("form").each(function() {
if ( window.CalendarPopup ) {
// instantiate CalendarPopup and set some params
// Sets starting date by yesterdays date
var yesterday = new Date();
yesterday.setDate( yesterday.getDate() - 1 );
// new instance of Calendar popup
cal = new CalendarPopup( "cp" );
cal.addDisabledDates( null, formatDate( yesterday, "MM/dd/yyyy" ) );
// create the
for calendar popup
$("body").append("");
}
//set focus background color for IE
if (document.all) {
$(".textfield").focus(function() {
$(this).css({background: "fdfcfa"});
});
$(".textfield").blur(function() {
$(this).css({background: "ffffff"});
});
}
// hide all "other" fields
$("ul.checkboxgroup input.other").filter(".textfield").hide();
$("ul.checkboxgroup input").click(function() {
// if the input has a class of other, show it's "other" field
if ($(this).is(".other")){
$(this).siblings(".other").show().addClass("required");
// if it's a checkbox, remove the "other" field when it is unchecked
if (!this.checked) {
$.removeWarning($(this));
$(this).siblings(".other").filter(".textfield").hide().removeClass("required");
}
}
// if it's a radio button group, hide "other" fields if not needed
else if ($(this).is(".radio")) {
$.removeWarning($(this));
$(this).parent().parent().find(".other").filter(".textfield").hide().removeClass("required");
}
});
// hide all "select-other" divs
$("div.select-other").hide();
// if "Other" is selected, then show it's "other" field
$("select.select-other").change( function () {
if($(this).val() == "--") {
$(this).parent().next().show();
$(this).parent().next().find("label").addClass("required");
$(this).parent().next().find("input").addClass("required");
} else {
$(this).parent().next().hide().find("input").val("").removeClass("required");
}
});
});
// Input Elements that need a calendar popup, but no calendar Icon, need a class of "makeitpopup"
$(".makeitpopup").click(function() {
cal.select( this, this.id, "MM/dd/yyyy" );
return false;
});
// Finds all elements with a class of "form-cal" and replaces them with a calendar icon, link, and onclick handler
$(this).find(".form-cal").each(function(i) {
var icon = '';
$(icon).appendTo($(this).parent()).click(function(){
//hide all dropdowns for IE6 and lower
if (document.all && window.ActiveXObject && !window.opera) { $(this).parents("form").find("select").css("visibility","hidden"); }
var o = this.previousSibling;
while (o.nodeType != 1) { o = o.previousSibling; }
// check to see if it is an arrival/departure pair
if($(o).is(".date-end")) {
var arrive_string = $(o).parent().prev(".field").children(".date-begin").attr("value");
var arrive_label = $(o).parent().prev(".field").children("label").html().replace(":","");
//check to see if begin date has been set already and adjust disabled/current dates
if (arrive_string != "mm/dd/yyyy" && arrive_string) {
var arrive_array = arrive_string.split('index.html');
var arrive_date = new Date(arrive_array[0]+'/'+arrive_array[1]+'/'+arrive_array[2]);
var arrive_date = formatDate(arrive_date, "MM/dd/yyyy" );
cal.clearDisabledDates();
cal.addDisabledDates( null, arrive_date );
cal.select(o,$(this).attr("id"),"MM/dd/yyyy", arrive_date);
return false;
}
// begin date not set first, so pull label text and alert
else {
alert("Please select \"" + arrive_label + "\" first");
if (document.all && window.ActiveXObject && !window.opera) { $(this).parents("form").find("select").css("visibility","visible"); }
return false;
}
}
// it's just a plain calendar popup
else {
cal.clearDisabledDates();
var yesterday = new Date();
yesterday.setDate( yesterday.getDate() - 1 );
cal.addDisabledDates( null, formatDate( yesterday, "MM/dd/yyyy" ) );
cal.select( o,$(this).attr("id"), "MM/dd/yyyy", yesterday );
return false;
}
});
$(this).remove();
});
$(this).find(".booking-form-cal").each(function(i) {
var icon = '';
$(icon).appendTo($(this).parent()).click(function(){
//hide all dropdowns for IE6 and lower
if (document.all && window.ActiveXObject && !window.opera) { $(this).parents("form").find("select").css("visibility","hidden"); }
var o = this.previousSibling;
while (o.nodeType != 1) { o = o.previousSibling; }
// check to see if it is an arrival/departure pair
if($(o).is(".date-end")) {
var arrive_string = $(o).parent().prev(".field").children(".date-begin").attr("value");
var arrive_label = $(o).parent().prev(".field").children("label").html().replace(":","");
//check to see if begin date has been set already and adjust disabled/current dates
if (arrive_string != "mm/dd/yyyy" && arrive_string) {
var arrive_array = arrive_string.split('index.html');
var arrive_date = new Date(arrive_array[0]+'/'+arrive_array[1]+'/'+arrive_array[2]);
var arrive_date = formatDate(arrive_date, "MM/dd/yyyy" );
cal.clearDisabledDates();
cal.addDisabledDates( null, arrive_date );
cal.select(o,$(this).attr("id"),"MM/dd/yyyy", arrive_date);
return false;
}
// begin date not set first, so pull label text and alert
else {
alert("Please select \"" + arrive_label + "\" first");
if (document.all && window.ActiveXObject && !window.opera) { $(this).parents("form").find("select").css("visibility","visible"); }
return false;
}
}
// it's just a plain calendar popup
else {
cal.clearDisabledDates();
var yesterday = new Date();
yesterday.setDate( yesterday.getDate() - 1 );
cal.addDisabledDates( null, formatDate( yesterday, "MM/dd/yyyy" ) );
cal.select( o,$(this).attr("id"), "MM/dd/yyyy", yesterday );
return false;
}
});
$(this).remove();
});
// Validates the form, adding warning icons where needed and alerting user upon completion
$(".validate").submit(function() {
var counter = 0;
var first_error = "";
// find all elements with class name of "required" within all divs with a class of field
$(this).find("div.field .required").each(function() {
// remove any previous warnings and validate based on element type
$.removeWarning($(this));
if ( ($(this).is("input")) || ($(this).is("select")) || ($(this).is("textarea")) ) {
var valid = true;
var o = $(this).val().replace(/^\s+|\s+$/g, '');
if ($(this).is(".email")) {
// if it's an email address make sure the email is valid using both regular expressions
var regExp = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/;
var regExp2 = /(\s+)|(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/;
if ( ( o.search( regExp ) ) == -1 || o.search( regExp2 ) != -1 ) {
valid = false;
}
}
else if ($(this).is(".select-other") && $(this).val() == "--" && $(this).parent().next().find("input").val().replace( /(^\s+)|(\s+$)/g, '' ).length < 1 ) {
$.addWarning($(this).parent().next().find("input"));
}
else if ( ($(this).next().is(".icon-cal")) && (o.replace( /(^\s+)|(\s+$)/g, '' ).length < 1 || o == "mm/dd/yyyy") ) {
// if it's a date field
valid = false;
}
else if (o.replace( /(^\s+)|(\s+$)/g, '' ).length < 1) {
// if not an email address take out funky characters and see if its still blank
valid = false;
}
// if the data is not valid show warning icon
if (!valid) {
$.addWarning($(this));
counter++;
if ( first_error == "" ) {
first_error = $(this).attr("id");
}
}
}
else if ( $(this).is("ul") ) {
// This is for checkboxes
$(this).each(function() {
// find all elements w/required class name
var valid = false;
$(this).find("li").each(function() {
// checkboxes in the list
var testdis = $(this).children("input");
//if not an "other" pair
if ( testdis.length == 1 ) {
if ( $(testdis).attr("checked") == true ) {
valid = true;
}
}
//it is an "other"
else {
if ( $(testdis[0]).attr("checked") && $(testdis[1]).val().replace( /(^\s+)|(\s+$)/g, '' ).length > 0 ) {
valid = true;
}
}
});
if(!valid) {
$.addWarning($(this));
counter++;
if ( first_error == "" ) {
first_error = $(this).attr("id");
}
}
});
}
});
if ( counter > 0 ) {
if(first_error == 'the_word'){
alert( "Please enter the security word." );
}else{
alert( "A valid " + $('#'+first_error).parent().children('label').html().replace(":","").replace("*","") + " is required." );
}
$('#'+first_error).focus();
return false;
}
else if ( $('input#password').val() != $('input#password_confirm').val() ) {
$.addWarning($('input#password'));
$.addWarning($('input#password_confirm'));
alert("Please re-confirm your password. Passwords must match");
return false;
}
if($(this).hasClass('signup-destdelivers')){
var first = $('#first_name').val();
var last = $('#last_name').val();
var email = $('#email').val();
var zip = $('#zip').val();
var ddpage = 'http://www.destinationdelivers.com/signup/?firstname='+first+'&lastname='+last+'&email='+email+'&zip='+zip;
window.open(ddpage);
}
});
// Removes the Warning Icon
jQuery.removeWarning = function(el) {
// find img elements, if it's present, remove it
$(el).parents(".field").find("img.validation-error").remove();
};
// Adds the Warning Icon
jQuery.addWarning = function(el) {
var img = "";
// adds the source and class attributes
img = $(img).attr("src", "images/icon-warning.gif").addClass("validation-error");
// Add the image after the input field
// if el is part of checkbox group put it after the first list item
if( $(el).is("ul") ) {
$(el).find("li:first").append(img);
}
// if not throw it at the end
else {
$(el).parent().append(img);
}
};
// For Each Package Wrapper add a Toggle Function if Neccessary
$("div.package-inside-wrapper").each(function() {
// Div for the Toggler to be Held
$(this).find('.package-share');
// If this is a package that is going to be expanded
// add a control for it
if( $(this).is(".package-expandable") ) {
// Since this is expandable hide the details
$(this).find("div.package-long").hide();
}
});
// Once the Package Toggler Control is clicked
// Toggle the details and chance the text
$("div.package-toggle a").toggle(function() {
var foo = $(this);
foo.parents("div.package-wrapper").find("div.package-long").animate({
height: 'show'
}, 'slow');
foo.parent().css('clear','both');
// Changes the Text of the Control
$(this).html("hide details");
}, function() {
var foo = $(this);
foo.parents("div.package-wrapper").find("div.package-long").animate({
height: 'hide'
}, 'slow',function(){foo.parent().css('clear','none');});
// Changes the Text of the Control
foo.html("view details");
});
});
function y2k(number) { return (number < 1000) ? number + 1900 : number; }
// Gets the Difference Between 2 Dates
function daysElapsed(date1,date2) {
var difference =
Date.UTC(y2k(date1.getYear()),date1.getMonth(),date1.getDate(),0,0,0)
- Date.UTC(y2k(date2.getYear()),date2.getMonth(),date2.getDate(),0,0,0);
return difference/1000/60/60/24;
}
function getDateDiff(start,end){
if(document.getElementById(start).value != 'mm/dd/yyyy' && document.getElementById(start).value != '' && document.getElementById(end).value != 'mm/dd/yyyy' && document.getElementById(end).value != ''){
// Get the Start and End Date and split the dates based on the slash and put in dashes
start_date = document.getElementById(start).value;
start_array = start_date.split('index.html');
new_start_date = start_array[2]+'-'+start_array[0]+'-'+start_array[1];
end_date = document.getElementById(end).value;
end_array = end_date.split('index.html');
new_end_date = end_array[2]+'-'+end_array[0]+'-'+end_array[1];
// Call daysElapsed function to get difference between 2 dates
var dayDiff = daysElapsed(new Date(end_array[2],(end_array[0]-1),end_array[1]),new Date(start_array[2],(start_array[0]-1),start_array[1]));
return dayDiff;
}
else {
return;
}
}
//set day name abbreviations to use
var daynames = Array('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
function createRoomBlock(start,days) {
//Removes Any Previous Tbodies Created
$("#block-details").remove();
var start_date = document.getElementById(start).value;
var start_array = start_date.split('index.html');
// Creates a Tbody element
var tbody = '';
// For Each Number of Days that need information a row is created for each
for(var i=0; i<=days; i++)
{
temp_date = new Date(start_array[2],(start_array[0]-1),(parseInt(start_array[1],10)+i));
dayname = daynames[temp_date.getDay()];
month = temp_date.getMonth() + 1;
day = temp_date.getDate();
//year = temp_date.getFullYear();
//temp_date = month + "/" + day + "/" + year;
temp_date = month + "/" + day;
// Create a row with a cell for the day, one for each room type, and one for the total
tbody += '
\n\
' + dayname + ', ' + temp_date + '
\n\
\n\
\n\
\n\
\n\
';
}
//Add the totals row
tbody += '
Room Total
\n\
\n\
\n\
\n\
\n\
';
//add tbody to existing table
$(tbody).appendTo("#block-requirements");
$('#block-details tr td input:not(.readonly)')
.focus(function() {
if ( $(this).val().length ) {
$(this).data('num', $(this).val() )
}
$(this).val('');
})
.blur(function() {
var num = $(this).data('num')
if( $(this).val()=='') {
if ( !num ) {
$(this).val(0);
} else {
$(this).val( num )
}
}
})
.change(function() { calcTotal(this); });
}
function createMeetingRooms(start,days) {
//Removes Any Previous Tbodies Created
$("#meeting-details").remove();
var start_date = document.getElementById(start).value;
var start_array = start_date.split('index.html');
// Creates a Tbody elemnt
var tbody = '';
// For Each Number of Days that need information a row is created for each
for(var i=0; i<=days; i++)
{
temp_date = new Date(start_array[2],(start_array[0]-1),(parseInt(start_array[1],10)+i));
dayname = daynames[temp_date.getDay()];
month = temp_date.getMonth() + 1;
day = temp_date.getDate();
//year = temp_date.getFullYear();
//temp_date = month + "/" + day + "/" + year;
temp_date = month + "/" + day;
// Create a row with a cell for the day, room type and breakout room info
tbody += '
\n\
' + dayname + ', ' + temp_date + '
\n\
\n\
\n\
\n\
\n\
';
}
//add tbody to existing table
$(tbody).appendTo("#meeting-requirements");
}
function calcTotal(field) {
//make sure a number was entered
$(field).attr("value",(isNaN(parseInt(field.value,10))?0:parseInt(field.value,10)));
var day_total = 0;
var room_total = 0;
var temp = field.name.split("][");
var day_num = temp[0].substring(temp[0].indexOf('[')+1,temp[0].length);
var room_type = temp[1].substring(0,temp[1].length-1);
//calculate daily and room type total
$("input." + day_num).each(function(){ day_total += parseInt(this.value,10); });
$("input." + room_type).each(function(){ room_total += parseInt(this.value,10); });
//set total fields
$("#" + day_num + "_total").attr("value",day_total);
$("#" + room_type + "_rooms_total").attr("value",room_total);
$("#total_rooms").attr("value",parseInt($("#single_rooms_total").attr("value"),10)+parseInt($("#dbl_rooms_total").attr("value"),10)+parseInt($("#suite_rooms_total").attr("value"),10));
}