$(function() {
	//Global variables
	for(var i in $.browser) {
		if ($.browser[i])
			BROWSER = i + (($.browser.msie)?$.browser.version.charAt(0):'');
	}
	
	URCHIN = typeof(pageTracker)=='undefined'?true:false;
	$('.track').each(function() {
		var tag = '/'+this.name.replace(/:/g,'/');
		if($(this).is('form')) {
			$(this).submit(function() {
				URCHIN?urchinTracker(tag):pageTracker._trackEvent('form', 'submit', tag);
				if(tag.indexOf("reservations")>0) {
					URCHIN?__utmLinkPost(this):pageTracker._linkByPost(this);
				}
			});
		} else {
			$(this).click(function() {
				URCHIN?urchinTracker(tag):pageTracker._trackPageview(tag);
				if(tag.indexOf("reservations")>0) {
					URCHIN?__utmLinker(this.href):pageTracker._link(this.href);
					return false;
				}
			});
		}
	});
	
});

(function($) {		  
	$.fn.initializeForm = function(options) {
		var defaults = {
			calText: 'Click to select a date'
		},
		opts = $.extend(defaults, options);
		return this.each(function() {
			var form = $(this);
			
			if(BROWSER=='ie6'||BROWSER=='ie7') {
				$(".textfield")
					.focus(function() { $(this).css({backgroundColor: "#fdfcfa"}); })
					.blur(function() { $(this).css({backgroundColor: "#ffffff"}); });			
			}
			
			$(".date-picker", form).each(function() {
				$(this).datepicker({ 
					beforeShow: setDatePicker,
					showOn: "both",
					showAnim: "blind",
					duration: "fast", 
					gotoCurrent: true,
					hideIfNoPrevNext: true,
					buttonImage: "/images/icon-cal.gif", 
					buttonText: opts.calText, 
					buttonImageOnly: true 
				});
				
				if($(this).val()=='mm/dd/yyyy') {
					$(this).val('');
				}
				else {
					if($(this).hasClass('date-end')&&$(this).hasClass('update-blocks'))
						getRange(this);
				}
			}).attr("readonly", "readonly");
			
			// hide all "other" fields
			$("ul.checkboxgroup input.other", form).not(':radio, :checkbox').hide();
			$("ul.checkboxgroup input:not(:text)", form).click(function() {
				if($(this).hasClass('other')) {
					$(this).siblings().addClass('required').show();
					if(!$(this).is(':checked')) {
						$('.validation-error', $(this).parents('ul')).removeError(form);
						$(this).siblings().removeClass('required').filter(':text').hide();
					}
				} else if($(this).is(':radio')) {
					$('.validation-error', $(this).parents('ul')).removeError(form);
					$('.other', $(this).parents('ul')).siblings().removeClass('required').filter(':text').hide();
				}
			});
			
			$("div.select-other", form).hide();
			// if "Other" is selected, then show it's "other" field
			$("select.select-other", form).change( function () {
				var el = $(this).parent().next()
				if($(this).val() == "--") {
					el.show().children('label, input').addClass("required");
				} else {
					el.hide().children().removeClass("required").find("input").val("");
					$('.validation-error', el).removeError(form);
				}
			});

		});
	};
	
	$.fn.formValidate = function(options) {
		var defaults = {
			errorStart: 'A valid ',
			errorEnd: ' is required.'
		},
		opts = $.extend(defaults, options);
		return this.each(function() {
			var form = $(this);
			$('.submit', form).click(function() {
				var _errors = '';
				//Removes validation errors from previous submit
				$('.validation-error', form).removeError(form);	
				
				$('.required:not(label)', form).each(function() {
					var valid = true;
					
					if($(this).is(':input')) {
						var o = $.trim($(this).val());
						
						if($(this).hasClass('email')) {
							// if it's an email address make sure the email is valid using both regular expressions
							valid = /^[a-z0-9_+.-]+\@(?:[a-z0-9-]+\.)+[a-z0-9]{2,4}$/i.test(o);
							if($(this).hasClass('confirm-email')&&valid) {
								var prev = $.trim($(this).parents('.field').prev().children('.email').val());
								if(o!=prev)
									valid=!valid;
							}
						} 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 = !valid;
						}
					} else if($(this).is('ul')) {
						valid = false;
						
						$(':radio, :checkbox', this).each(function() {
							if($(this).is(':checked'))
								valid = true;
						});
					}
					
					if(!valid) {
						if(form.hasClass('inline')) {
							$(this).parents('.field').children('label').addClass('validation-error');
						} else {
							var warn = $('<img />').attr('src', '/images/icon-warning.gif').addClass('validation-error');
							
							if( $(this).is('ul') )
								$('li:first', this).append(warn);
							else 
								$(this).parent().append(warn);
						}
													
						if(_errors == '')
							_errors = $(this).attr("id");
					}
				});
				if(_errors.length) {
					var lbl = $('#'+_errors).parents('.field').children('label');
					if(lbl[0].title.length)
						alert(lbl[0].title);
					else 
						alert( opts.errorStart + lbl.html().replace(/[*:]/g, '') + opts.errorEnd );
					$('#'+_errors, form).focus();
					return false;			
				}
			});
		});
	};
	
	$.fn.expand = function(options) {
		var defaults = {
			openText: 'View Details',
			closeText: 'Hide Details',
			longClass: '.package-long'
		},
		opts = $.extend(defaults, options);
		return this.each(function() {
			var obj = $(this);
			var tog = $('<div />').addClass('toggle');
			var control = $('<a />').attr('href', '#')
							.addClass('toggler')
							.html(opts.openText)
							.appendTo(tog)
							.toggle(function() { $(opts.longClass, obj).slideDown('slow'); $(this).html(opts.closeText).addClass('open'); },
									function() { $(opts.longClass, obj).slideUp('slow'); $(this).html(opts.openText).removeClass('open'); });
			
			$(opts.longClass, obj).after(tog).hide();
		});
	};
	
	$.fn.removeError = function(form) {
		return this.each(function() {
			if(form.hasClass('inline'))
				$(this).removeClass('validation-error');
			else
				$(this).remove();
		});
	};
	
	$.fn.eventPreview = function(options) {
		var defaults = {
			hideDetails : 'Hide Details',
			viewDetails : 'View Details'
		},
		opts = $.extend(defaults, options);
		return this.each(function() {
			$('.event-details a', this).toggle(function() {
				$('.share-panel').hide();
				var el = $(this);
				$.get('/direct/events-calendar-details.php', { event_id: this.id.substr(3), channel: this.rel, lang: LANG },function(data) { 
					el.text(opts.hideDetails).parent().addClass('active').parent().children('.event-description').hide().html(data).slideDown('slow');
				});
				return false;								   
			},function() { 
				$('.share-panel').hide();
				$(this).text(opts.viewDetails).parent().removeClass('active').parent().children('.event-description').slideUp('slow', function() { 
					$(this).html(''); 
				});
				return false;								   
			});
		});
	};

	$.fn.postPreview = function(options) {
		var defaults = {
			hideDetails : 'Hide Full Post',
			viewDetails : 'View Full Post'
		},
		opts = $.extend(defaults, options);
		return this.each(function() {
			$('.post-details a', this).toggle(function() {
				$('.share-panel').hide();
				var el = $(this);
				$.get('/direct/scrapbook-details.php', { event_id: this.id.substr(3), channel: this.rel, lang: LANG },function(data) { 
					el.text(opts.hideDetails).parent().addClass('active').parent().children('.post-description').hide().html(data).slideDown('slow');
				});
				return false;								   
			},function() { 
				$('.share-panel').hide();
				$(this).text(opts.viewDetails).parent().removeClass('active').parent().children('.post-description').slideUp('slow', function() { 
					$(this).html(''); 
				});
				return false;								   
			});
		});
	};

	$.fn.packagePreview = function(options) {
		var defaults = {
			hideDetails : 'Hide Details',
			viewDetails : 'View Details'
		},
		opts = $.extend(defaults, options);
		return this.each(function() {
			$('.package-details a', this).toggle(function() {
				$('.share-panel').hide();
				var el = $(this);
				$.get('/direct/package-details.php', { package_id: this.id.substr(3), channel: this.rel, lang: LANG },function(data) { 
					el.addClass('open').parent().parent().addClass('active').parent().find('.package-long').hide().html(data).slideDown('slow');
					try
					{
						var _pat = new Phonalytics(24, 'LIFO');
						_pat.phoneTracking('ralphone');
						_pat.trackPageview();
					}
					catch(e){}								
				});
				return false;								   
			},function() { 
				$('.share-panel').hide();
				$(this).removeClass('open').parent().parent().removeClass('active').parent().find('.package-long').slideUp('slow', function() { 
					$(this).html(''); 
				});
				return false;								   
			});
		});
	};

	$.fn.initializeSharing = function() {
		return this.each(function() {
			$(this).click(function() {
				$('.share-panel').hide();
				$(this).parents('#press-release-wrapper').find('.share-panel').css('display','inline');
				return false;
			});
			$('.share-close').click(function(){
				$(this).parents('#press-release-wrapper').find('.share-panel').slideUp('fast');
				return false;
			});
		});
	};
	
})(jQuery);

function setDatePicker(input) {
	if(($(input).hasClass('date-begin')||$(input).hasClass('date-end'))&&$(input).hasClass('update-blocks')){
		return {
			minDate: ( setDates(input, 1) ), 
			maxDate: ( setDates(input, 0) ),
			onClose: function() { getRange(input); }
		}; 
	} else if(($(input).hasClass('date-begin')||$(input).hasClass('date-end'))&&$(input).hasClass('netbooker')){
		return {
			minDate: ( setDates(input, 1) ), 
			maxDate: ( setDates(input, 0) ),
			onSelect: function() { splitDates(input); }
		}; 
	} else if($(input).hasClass('date-begin')||$(input).hasClass('date-end')) {
		return {
			minDate: ( setDates(input, 1) ), 
			maxDate: ( setDates(input, 0) )
		};				
	} 
} 
	
function setDates(input, minDate) {
	if( ($(input).hasClass('date-begin') && !$('.date-end', $(input).parent().next()).length) ||
		($(input).hasClass('date-end') && !$('.date-begin', $(input).parent().prev()).length) ) {
		return minDate ? new Date() : null;
	} else if( $(input).hasClass('date-begin') ) {
		return minDate ? new Date() : ($('.date-end', $(input).parent().next()).datepicker("getDate") ? new Date($('.date-end', $(input).parent().next()).datepicker("getDate").getTime() - 1000*60*60*24) : null);
	} else if( $(input).hasClass('date-end') ) {
		return minDate ? ($('.date-begin', $(input).parent().prev()).datepicker("getDate") ? new Date($('.date-begin', $(input).parent().prev()).datepicker("getDate").getTime() + 1000*60*60*24) : '+1d' ) : null;
	}
}

function splitDates(input) {
	var start = $(input).hasClass('date-end')?$('.date-begin', $(input).parent().prev()).datepicker("getDate"):$(input).datepicker("getDate");
	var end = $(input).hasClass('date-end')?$(input).datepicker("getDate"):$('.date-end', $(input).parent().next()).datepicker("getDate");

	if($(input).hasClass('date-begin')) {
		$('#arriveMonth').val( $.datepicker.formatDate('mm', $(input).datepicker("getDate")) );
		$('#arriveDay').val( $.datepicker.formatDate('dd', $(input).datepicker("getDate")) );
		$('#arriveYear').val( $.datepicker.formatDate('yy', $(input).datepicker("getDate")) );
	}
	if($(input).hasClass('date-end')) {
		$('#departMonth').val( $.datepicker.formatDate('mm', $(input).datepicker("getDate")) );
		$('#departDay').val( $.datepicker.formatDate('dd', $(input).datepicker("getDate")) );
		$('#departYear').val( $.datepicker.formatDate('yy', $(input).datepicker("getDate")) );
	}
	
	if(start&&end) {
		var one_day=1000*60*60*24;
		var days = Math.ceil((end.getTime()-start.getTime())/(one_day))	
		$('#numberOfNights').val(days);
	}
}

function getRange(el) {
	var form = $(el).parents('form');
	var start = $(el).hasClass('date-end')?$('.date-begin', $(el).parent().prev()).datepicker("getDate"):$(el).datepicker("getDate");
	var end = $(el).hasClass('date-end')?$(el).datepicker("getDate"):$('.date-end', $(el).parent().next()).datepicker("getDate");

	if(start&&end) {
		var one_day=1000*60*60*24;
		var days = Math.ceil((end.getTime()-start.getTime())/(one_day))	
		$('#room-requirements').show();
		createBlock(start, days, form);
		createMeeting(start, days, form);
	}
}

function createBlock(date, days, form) {
	$("#block-details", form).remove();
	var tbody = $('<tbody />').attr('id', 'block-details');
	
	for(var i=0; i<=days; i++) {
		var newDate = $.datepicker.formatDate('D, m/d', new Date(date.getFullYear(), date.getMonth(), date.getDate()+i) );
		
		tbody.append('<tr>\n\
					<th scope="row">' + newDate + '</th>\n\
					<td><input type="text" class="textfield single" maxlength="5" value="0" id="single_rooms_day_' + (i+1) + '" name="room_block[day_' + (i+1) + '][single]" /></td>\n\
					<td><input type="text" class="textfield dbl" maxlength="5" value="0" id="dbl_rooms_day_' + (i+1) + '" name="room_block[day_' + (i+1) + '][dbl]" /></td>\n\
					<td><input type="text" class="textfield suite" maxlength="5" value="0" id="suite_rooms_day_' + (i+1) + '" name="room_block[day_' + (i+1) + '][suite]" /></td>\n\
					<td><input type="text" class="textfield readonly day-total" readonly="readonly" value="0" id="day_' + (i+1) + '_total" name="room_block[day_' + (i+1) + '][total]" /></td>\n\
					</tr>');
	}
	//Add the totals row
	tbody.append('<tr><th scope="row">Room Total</th>\n\
		<td><input type="text" class="textfield readonly" readonly="readonly" value="0" id="single_rooms_total" name="room_block[single][total]" /></td>\n\
		<td><input type="text" class="textfield readonly" readonly="readonly" value="0" id="dbl_rooms_total" name="room_block[dbl][total]" /></td>\n\
		<td><input type="text" class="textfield readonly" readonly="readonly" value="0" id="suite_rooms_total" name="room_block[suite][total]" /></td>\n\
		<td><input type="text" class="textfield readonly" readonly="readonly" value="0" id="total_rooms" name="total_rooms" /></td>\n\
		</tr>');

	//add tbody to existing table
	$("#block-requirements", form).append(tbody);
	$('td input:not(.readonly)', tbody).focus(function() { $(this).val(''); })
				  .blur(function() { if($(this).val()=='') $(this).val(0); })
				  .change(function() { calcTotal(this); });
}

function createMeeting(date, days, form) {
	$("#meeting-details", form).remove();
	var tbody = $('<tbody />').attr('id', 'meeting-details');
	
	// For Each Number of Days that need information a row is created for each
	for(var i=0; i<=days; i++) {
		var newDate = $.datepicker.formatDate('D, m/d', new Date(date.getFullYear(), date.getMonth(), date.getDate()+i) );
		
		// Create a row with a cell for the day, room type and breakout room info
		tbody.append('<tr>\n\
			<th scope="row">' + newDate + '</th>\n\
			<td><select name="meeting_requirements[day_' + (i+1) + '][room_setup]">\n\
				<option value="Classroom" name="meeting_requirements[day_' + (i+1) + '][room_setup]">Classroom</option>\n\
				<option value="Boardroom" name="meeting_requirements[day_' + (i+1) + '][room_setup]">Boardroom</option>\n\
				<option value="Theater" name="meeting_requirements[day_' + (i+1) + '][room_setup]">Theater</option>\n\
				<option value="U-Shaped" name="meeting_requirements[day_' + (i+1) + '][room_setup]">U-Shaped</option>\n\
				<option value="Hollow Sq." name="meeting_requirements[day_' + (i+1) + '][room_setup]">Hollow Sq.</option>\n\
				<option value="Rounds" name="meeting_requirements[day_' + (i+1) + '][room_setup]">Rounds</option>\n\
				<option value="Reception" name="meeting_requirements[day_' + (i+1) + '][room_setup]">Reception</option>\n\
				</select></td>\n\
			<td><input type="text" class="textfield" maxlength="5" id="breakout_rooms_day_' + (i+1) + '" name="meeting_requirements[day_'+(i+1)+'][breakout_rooms]" /></td>\n\
			<td><input type="text" class="textfield" maxlength="5" id="breakout_people_day_' + (i+1) + '" name="meeting_requirements[day_'+(i+1)+'][breakout_people]" /></td>\n\
			<td><select name="meeting_requirements[day_' + (i+1) + '][breakout_setup]">\n\
				<option value="Classroom" name="meeting_requirements[day_' + (i+1) + '][breakout_setup]">Classroom</option>\n\
				<option value="Boardroom" name="meeting_requirements[day_' + (i+1) + '][breakout_setup]">Boardroom</option>\n\
				<option value="Theater" name="meeting_requirements[day_' + (i+1) + '][breakout_setup]">Theater</option>\n\
				<option value="U-Shaped" name="meeting_requirements[day_' + (i+1) + '][breakout_setup]">U-Shaped</option>\n\
				<option value="Hollow Sq." name="meeting_requirements[day_' + (i+1) + '][breakout_setup]">Hollow Sq.</option>\n\
				<option value="Rounds" name="meeting_requirements[day_' + (i+1) + '][breakout_setup]">Rounds</option>\n\
				<option value="Reception" name="meeting_requirements[day_' + (i+1) + '][breakout_setup]">Reception</option>\n\
				</select></td>\n\
			</tr>');
	}
	//add tbody to existing table
	$("#meeting-requirements", form).append(tbody);
}

function calcTotal(field) {
	var el = $('input[readonly]', $(field).parents('tr'));
	var rowTotal = parseInt(el.val(), 10)+parseInt($(field).val(), 10);
	el.val(rowTotal);
	
	var index = $('input', $(field).parents('tr')).index(field);
	el = $('input:eq('+index+')', $(field).parents('tbody').children('tr:last-child'));
	var colTotal = parseInt(el.val(), 10) + parseInt($(field).val(), 10);
	el.val(colTotal);
	
	var total = 0;
	$('.day-total').each(function() { total += parseInt($(this).val(), 10); });
	$('#total_rooms').val(total);
}

function openPreview(urlrequest) {
	window.open(urlrequest, 'myWindow', 'width=750,height=520,left=100,top=100,toolbar=No,location=No,scrollbars=No,status=No,resizable=No,fullscreen=No');
	document.getElementById('flashCallBox').value = urlrequest;
}