$(document).ready(function ()
{
	createCookie('cookieCheck',1,1);
	
	//	init fbml
	FB.init(phpData.facebookKey,'/facebook/xd_receiver.htm');
	
	if($('#upperSearchEntryText').length > 0)
	{
		$('#upperSearchEntryText').data('UpperSearchEntry', new UpperSearchEntry());
	}

	if($('#commentsForm').length > 0)
	{
		$('#commentsForm').data('Comments', new Comments());
	}
	
	if($('#userHeader').length > 0)
	{
		$('#userHeader').data('User', new User());
	}
	
	if($('#locationSlider').length > 0)
	{
		$('#locationSlider').data('Location', new Location());
	}
	
	if($('#dateInputContent').length > 0)
	{
		$('#dateInputContent').data('DateInput', new DateInput());
	}
	
	if($('#locationInputContent').length > 0)
	{
		$('#locationInputContent').data('LocationInput', new LocationInput());
	}
	
	if($('#venueInputContent').length > 0)
	{
		$('#venueInputContent').data('VenueInput', new VenueInput());
	}
	
	if($('#newVenueInputContent').length > 0)
	{
		$('#newVenueInputContent').data('NewVenueInput', new NewVenueInput());
	}
	
	if($('#lineupInputContent').length > 0)
	{
		$('#lineupInputContent').data('LineupInput', new LineupInput());
	}
	
	if($('#infoInputContent').length > 0)
	{
		$('#infoInputContent').data('InfoInput', new InfoInput());
	}
	
	if($('#flyerUploadContent').length > 0)
	{
		$('#flyerUploadContent').data('FlyerUpload', new FlyerUpload());
	}
	
	if($('#javascriptCheck').length > 0)
	{
		$('#javascriptCheck').html('<span class=\"success\">Your browser has javascript enabled.</span>');
	}
	
	if($('#cookieCheck').length > 0)
	{
		$('#cookieCheck').html('We are checking to see if your browser has cookies enabled, please wait.');
		
		$.post('/ajax/cookie-check.php', { 'ajax' : 1 },
		function(jsonData)
		{
			$('#cookieCheck').html(jsonData.message);
		}, 'json');
	}
	
	initTabs();
	
	if($('#stokedButton').length > 0)
	{
		$('#stokedButton').bind('click', function(event)
		{
			if($('#userHeader').data('User').loggedIn != true)
			{
				event.preventDefault();
				
				$('#userHeader').data('User').openLoginModal($('#stokedButton').attr('href'));
			}
		});
	}
	
	//	init custom scrollbars
	initCustomScrollBars('.scroll');
	
	//	init clear on focus behaviour
	$('.clearOnFocus').clearOnFocus();
	
	//	handle any resultsRow div clicks
	if($('.resultsRow').length > 0)
	{
		$('.resultsRow').bind('dblclick', function(event)
		{
			if(event.target.href == null)
			{
				window.location = $(this).attr('rel');
			}
		});
	}
	
	if($('.showFullLineup').length > 0)
	{
		$('.showFullLineup').bind('click', function(event)
		{
			event.preventDefault();
			$(this).blur();
			tb_show('Full Lineup',$(this).attr('href') + '&width=390&height&600&ajax=1','');
		});
	}
	
	if($('#viewShow').length > 0)
	{
		$('#viewShow').bind('click', function(event)
		{
			event.preventDefault();
			
			window.open($(this).attr('href'));
		});
	}
	
	if($('.toolTipShowFavoriteLinks').length > 0)
	{
		$('.toolTipShowFavoriteLinks').each(function()
			{
				initToolTip($(this));
			}
		);
	}

	if($('#stream').length > 0)
	{
		$('#stream').data('Stream', new Stream());
	}
	
	if($('#apiExamples').length > 0)
	{
		$('#apiExamples').data('ApiExamples', new ApiExamples());
	}
	
	if($('#ad-300x250-ros').length > 0)
	{
		$('#ad-300x250-ros').data('AdBanner', new AdBanner('ad-300x250-ros'));
	}
	
	if($('#contactForm').length > 0)
	{
		$('#contactForm').data('ContactForm', new ContactForm());
	}
	
	if($('#googleMapsTabLink').length > 0)
	{
		$('#googleMapsTabLink').data('RefreshMap', new RefreshMap());
	}
	
	if($('#widgetChoice').length > 0)
	{
		$('#widgetChoice').data('GetWidgetCode', new GetWidgetCode());
	}
	
	if($('#facebookPrefsTab').length > 0)
	{
		$('#facebookPrefsTab').data('FacebookPrefsTab', new FacebookPrefsTab());
	}
	
	if($('.adBlock').length > 0)
	{
		$('.adBlock').each(function()
			{
				$(this).html($(this).attr('rel'));
			}
		);
	}
	
	if(typeof(phpData.publishModal) != 'undefined')
	{
		if(phpData.publishModal == true)
		{
			tb_show('Publish to ' + phpData.publishSite,'/ajax/publish-prompt.php?height=400&width=800','');
		}
	}
	
	if($('#buyTicketsLink').length > 0)
	{
		$('#buyTicketsLink').data('BuyTicketsLink', new BuyTicketsLink());
	}
});

function BuyTicketsLink()
{
	//	allow access to the parent object in class methods
	var parent = this;
	
	$('#buyTicketsLink').bind('click', function(event)
	{
		event.preventDefault();
		parent.handleBuyTicketsClick();
	});
	
	this.handleBuyTicketsClick = function()
	{
		tb_show('Buy Tickets',$('#buyTicketsLink').attr('href') + '&width=300&height&200&ajax=1','');
	}	
}

function FacebookPrefsTab()
{
	//	allow access to the parent object in class methods
	var parent = this;
	
	if($('#facebookPublishingPrefsButton').length > 0)
	{
		$('#facebookPublishingPrefsButton').bind('click', function(event)
		{
			event.preventDefault();
			parent.showFacebookDialog('publish_stream');
		});
	}
	
	this.updateFacebookPrefs = function()
	{
		$('#facebookPublishingPrefsMessage').html('<span class="success">Updating...</span>');
		
		$.post('/ajax/update-facebook-prefs.php', { 'fb_prefs' : $('#facebookPublishingPrefs').val()
 		},
		function(jsonData)
		{
			if(jsonData.error == false)
			{
				$('#facebookPublishingPrefsMessage').html('<span class="success">' + jsonData.message + '</span>');
				
				if($('#shareVideoOnFacebook').length > 0)
				{
					$('#locationSlider').data('Location').updatePagesWithShowsTab();
				}
			}
			else
			{
				$('#facebookPublishingPrefsMessage').html('<span class="error">' + jsonData.message + '</span>');
			}
		}, 'json');
	}
	
	this.showFacebookDialog = function(arg)
	{
		FB.Connect.showPermissionDialog(arg, function(response)
		{
			if(response == arg)
			{
				parent.updateFacebookPrefsTab();
			}
		});
	}
	
	this.updateFacebookPrefsTab = function()
	{
		$('#facebookPrefsTab').html('');
		
		$('#facebookPrefsTab').addClass('tabLoading');

		$.ajax({
			type: 'POST',
			url: '/ajax/get-facebook-prefs-tab.php',
			success: function(html)
			{
				$('#facebookPrefsTab').removeClass('tabLoading');
				
				$('#facebookPrefsTab').html(html);
			}
		});
	}
}

function GetWidgetCode()
{
	//	allow access to the parent object in class methods
	var parent = this;
	
	$('#widgetChoice').bind('change', function(event)
	{
		parent.getWidgetCode();
	});
	
	this.getWidgetCode = function()
	{
		if($.trim($('#widgetChoice').val()) != '')
		{
			$.post('/ajax/get-widget-code.php', { 'getCodeFor' : $('#widgetChoice').val()},
			function(jsonData)
			{
				$('#widgetCodeDisplay').html(jsonData.message);
			}, 'json');
		}
	}	
}

function RefreshMap()
{
	//	allow access to the parent object in class methods
	var parent = this;
	
	this.reloaded = false;
	
	$('#googleMapsTabLink').bind('click', function(event)
	{
		parent.reload();
	});
	
	this.reload = function()
	{
		if(parent.reloaded == false)
		{
			parent.reloaded = true;
			
			document.getElementById('googleMapsIframe').contentWindow.location.reload(false);
		}
	}	
}

function ApiExamples()
{
	//	allow access to the parent object in class methods
	var parent = this;
	
	$('#url').bind('change', function(event)
	{
		parent.displayApiResults();
	});
	
	this.displayApiResults = function()
	{
		if($.trim($('#url').val()) != '')
		{
			$('#urldesc').html($('#url').val());
			
			$('#searchresults').val('Searching...');
			
			$.get($('#url').val(), {'dataType' : 'text'},
			function(data)
			{
				$('#searchresults').val(data);
			}
			, 'script');
		}
	}
}

function Stream()
{
	//	allow access to the parent object in class methods
	var parent = this;
	
	this.checkForNewActivity = function()
	{
		$.post('/ajax/get-activity-stream.php', { 'timestamp' : $('#stream li:first-child').attr('rel')},
		function(jsonData)
		{
			if(jsonData.activity.length > 0)
			{
				$.each(jsonData.activity, function()
				{
					$('#stream').prepend('<li style="display:none;" class="hiddenAjaxContent" rel="' + this.timestamp + '">' + this.html + '</li>');
				});
				
				$('.hiddenAjaxContent').show(500);
				
				setTimeout('$(\'#stream\').effect(\'highlight\', {color:\'#ff99ff\'}, 2500);',700);
			}
		}, 'json');
		
	}
	
	var check = setInterval('$(\'#stream\').data(\'Stream\').checkForNewActivity();', 30000);
}

function FlyerUpload()
{
	//	allow access to the parent object in class methods
	var parent = this;
	
	this.handleUploadServerResponse = function(event,queueID,fileObj,response,data)
	{
		//	serverResponse is a JSON encoded string
		
		var serverResponse = eval('(' + response + ')');
		
		if(serverResponse.error == true)
		{
			$('#flyerUploadFormMessage').html('<span class=\"error\">' + serverResponse.message + '</span>');
		}
		else
		{
			window.location = '/shows/add/';
		}
	}
	
	$('#flyerUpload').fileUpload ({
		'uploader'  : '/flash/uploader.swf',
		'script'    : '/ajax/show-entry-upload-flyer.php',
		'cancelImg' : '/images/thickbox/close.gif',
		'auto'      : true,
		'buttonImg' : '/images/uploader-button.png',
		'width'		: 78,
		'height'	: 30,
		'rollover'	: true,
		'multi'		: false,
		'fileDesc'	: 'Choose a flyer image from your computer.',
		'scriptData': {'PHPSESSID' : readCookie('PHPSESSID')},
		'onComplete': parent.handleUploadServerResponse
	});
}

function ContactForm()
{
	//	allow access to the parent object in class methods
	var parent = this;

	$('#contactFormButton').bind('click', function(event)
	{
		event.preventDefault();
		validateDataEntry();
	});
	
	$('#contactForm').bind('submit', function(event)
	{
		event.preventDefault();
		validateDataEntry();
	});
	
	function validateDataEntry()
	{
		//	serialize the form to json object
		var formData = {};
		$('#contactForm label').each(function()
			{
				formData[$(this).attr('for')] = $('#'+ $(this).attr('for') + '').val();
			}
		);
		
		$.post('/ajax/email-contact-form.php', { 'jsonFormData' : $.toJSON(formData)
 		},
		function(jsonData)
		{
			if(jsonData.error == false)
			{
				$('#contactForm').html('<span class="success">' + jsonData.message + '</span>');
				
				$('#contactFormMessage').html('');
			}
			else
			{
				$('#contactFormMessage').html('<span class="error">' + jsonData.message + '</span>');
				
				if(typeof(jsonData.script) != 'undefined')
				{
					eval(jsonData.script);
				}
			}
		}, 'json');
	}
}

function InfoInput()
{
	//	allow access to the parent object in class methods
	var parent = this;

	$('#infoInputFormButton').bind('click', function(event)
	{
		event.preventDefault();
		validateDataEntry();
	});
	
	$('#infoInputForm').bind('submit', function(event)
	{
		event.preventDefault();
		validateDataEntry();
	});
	
	function validateDataEntry()
	{
		//	serialize the form to json object
		var formData = {};
		$('#infoInputForm label').each(function()
			{
				formData[$(this).attr('for')] = $('#'+ $(this).attr('for') + '').val();
			}
		);
		
		$.post('/ajax/show-entry-set-info.php', { 'jsonFormData' : $.toJSON(formData)
 		},
		function(jsonData)
		{
			if(jsonData.error == false)
			{
				window.location = '/shows/add/';
			}
			else
			{
				$('#infoInputFormMessage').html('<span class="error">' + jsonData.message + '</span>');
			}
		}, 'json');
	}
}

function NewVenueInput()
{
	//	allow access to the parent object in class methods
	var parent = this;

	$('#venueInputFormButton').bind('click', function(event)
	{
		event.preventDefault();
		validateDataEntry();
	});
	
	$('#venueInputForm').bind('submit', function(event)
	{
		event.preventDefault();
		validateDataEntry();
	});
	
	function validateDataEntry()
	{
		if($.trim($('#name').val()) == '')
		{
			$('#venueMessage').html('<span class="error">Please enter a venue name.</span>');
			$('#name').effect('highlight', {color:'#FF0084'}, 1000);
			$('#name').focus();
		}
		else
		{
			$.getJSON('/ajax/show-entry-add-venue.php', {name: $('#name').val(), address: $('#address').val(), phone: $('#phone').val(), url: $('#url').val()},
				function(jsonData) {
					if(jsonData.error == false)
					{
						window.location = '/shows/add/';
					}
					else
					{
						$('#venueMessage').html('<span class="error">' + jsonData.message + '</span>');
					}
				}
			);
		}
	}
	
	$('#setVenueTBA').bind('click', function(event)
	{
		event.preventDefault();
		$.getJSON('/ajax/show-entry-set-venue-tba.php', { ajax : 1 },
			function(jsonData) {
				if(jsonData.error == false)
				{
					window.location = '/shows/add/';
				}
				else
				{
					$('#venueMessage').html('<span class="error">' + jsonData.message + '</span>');
				}
			}
		);
	});
}

function VenueInput()
{
	//	allow access to the parent object in class methods
	var parent = this;

	$('#setVenueTBA').bind('click', function(event)
	{
		event.preventDefault();
			$.getJSON('/ajax/show-entry-set-venue-tba.php', { ajax : 1 },
				function(jsonData) {
					if(jsonData.error == false)
					{
						window.location = '/shows/add/';
					}
					else
					{
						$('#venueMessage').html('<span class="error">' + jsonData.message + '</span>');
					}
				}
			);
	});
	
	if($('#venue').length > 0)
	{
		$('#venue').bind('change', function(event)
		{
			if($.trim($('#venue').val()) != '')
			{
				$.getJSON('/ajax/show-entry-set-venue.php', {venue: $('#venue').val()},
					function(jsonData) {
						if(jsonData.error == false)
						{
							window.location = '/shows/add/';
						}
						else
						{
							$('#venueMessage').html('<span class="error">' + jsonData.message + '</span>');
						}
					}
				);
			}
		});
	}
	
	$('#venueSearch').autocomplete('/ajax/autocomplete/venue-search.php', {
		extraParams: {
			'state': $('#state').val(),
			'country': $('#country').val()
		},
		cacheLength:0,
		minChars: 2,
		max: 200,
		width: 300,
		matchContains: true,
		highlightItem: false,
		scrollHeight: 500,
		formatItem: function(row, i, max, term) {
			var resultsRow = row[1];
			resultsRow = resultsRow + '<br /><span class="ac_small">' + row[2] + '</span>';
			resultsRow = resultsRow + '<br /><span class="ac_small">' + row[3] + '</span>';
			return resultsRow;
		},
		formatResult: function(row) {
			return row[1];
		}
	});
	
	$('#venueSearch').result(function(event, data, formatted) {
		if(data)
		{
			$.getJSON('/ajax/show-entry-set-venue.php', {venue: data[0]},
				function(jsonData) {
					if(jsonData.error == false)
					{
						window.location = '/shows/add/';
					}
					else
					{
						$('#venueMessage').html('<span class="error">' + jsonData.message + '</span>');
					}
				}
			);
		}
	});
}

function LocationInput()
{
	//	allow access to the parent object in class methods
	var parent = this;
	
	if($('#country').val() == 'US')
	{
		$('#provinceSelect').hide();
	}
	else
	{
		$('#stateSelect').hide();
	}
	
	this.validateDataEntry = function()
	{
		if($.trim($('#city').val()) == '')
		{
			$('#locationEntryMessage').html('<span class="error">Please enter a city.</span>');
			
			$('#cityLabel').effect('highlight', {color:'#FF0084'}, 1000);
			$('#city').effect('highlight', {color:'#FF0084'}, 1000);
			$('#city').focus();
		}
		else if($.trim($('#country').val()) == '')
		{
			$('#locationEntryMessage').html('<span class="error">Please choose a country.</span>');
			
			$('#countryLabel').effect('highlight', {color:'#FF0084'}, 1000);
			$('#country').focus();
		}
		else if($.trim($('#country').val()) == 'US' && $.trim($('#state').val()) == '')
		{
			$('#locationEntryMessage').html('<span class="error">Please choose a state.</span>');
			
			$('#stateLabel').effect('highlight', {color:'#FF0084'}, 1000);
			$('#state').focus();
		}
		else
		{
			$.getJSON('/ajax/show-entry-set-location.php', {city: $('#city').val(), state: $('#state').val(), country: $('#country').val(), zip: $('#zip').val(), province: $('#province').val()},
				function(jsonData) {
					if(jsonData.error == false)
					{
						window.location = '/shows/add/';
					}
					else
					{
						$('#locationEntryMessage').html('<span class="error">' + jsonData.message + '</span>');
					}
				}
			);
		}
	}
	
	$('#country').bind('change', function(event)
	{
		if($('#country').val() == 'US')
		{
			$('#province').val('');
			
			$('#provinceSelect').hide();
			$('#stateSelect').show();
		
			$('#stateLabel').effect('highlight', {color:'#FF0084'}, 1000);
		}
		else
		{
			$('#state').val('');
			
			$('#provinceSelect').show();
			$('#stateSelect').hide();
			
			$('#province options').remove();
			$('#province').html('<option value=\'\'>Retrieving Provinces</option>');
			
			$.getJSON('/ajax/get-province.php', {country: $('#country').val()},
				function(j) {
					$('#province options').remove(); 
					
					if(j.length != 0)
					{
						var options = '<option value=\'\'>Choose Province</option>';
					}
					else
					{
						var options = '<option value=\'\'>No Provinces</option>';
					}
					for (var i = 0; i < j.length; i++) 
					{
						options += '<option value=\'' + j[i].optionValue + '\'>' + j[i].optionDisplay +  '</option>';
					}
					
					$('#province').html(options);
					
					$('#province').html(options);
					if(j.length != 0)
					{
						$('#provinceLabel').effect('highlight', {color:'#FF0084'}, 1000);
					}
				}
			);	
		}
	});
	
	if($('#locationEntryFormButton').length > 0)
	{
		$('#locationEntryFormButton').bind('click', function(event)
		{
			event.preventDefault();
			parent.validateDataEntry();
		});
	}
	
	if($('#locationEntryForm').length > 0)
	{
		$('#locationEntryForm').bind('submit', function(event)
		{
			event.preventDefault();
			parent.validateDataEntry();
		});
	}
}

function DateInput()
{
	//	allow access to the parent object in class methods
	var parent = this;
	
	$('#dateInput').datepicker({
		'numberOfMonths': 2,
		'minDate': '+0',
		'stepMonths': 2,
		onSelect: function(dateText) {
			$.getJSON('/ajax/show-entry-set-date.php', {date: dateText},
				function(jsonData) {
					if(jsonData.error == false)
					{
						window.location = '/shows/add/';
					}
					else
					{
						$('#dateEntryMessage').html('<span class="error">' + jsonData.message + '</span>');
					}
				}
			);
		}
	});
}

function LineupInput()
{
	//	allow access to the parent object in class methods
	var parent = this;
	
	$('#lineupAddButton').bind('click', function(event)
	{
		event.preventDefault();
		
		parent.addToLineup($.trim($('#band').val()),'');
	});
	
	$('#lineupForm').bind('submit', function(event)
	{
		event.preventDefault();
		
		parent.addToLineup($.trim($('#band').val()),'');
	});
	
	$('#lineupSubmitButton').bind('click', function(event)
	{
		event.preventDefault();
		
		var lineup = Array();
		var count = 0;
		
		if($('#lineupInput li .lineupInputName').length > 0)
		{
			$('#lineupInput li .lineupInputName').each(function()
				{
					lineup[count] = {'id':$.trim($(this).attr('rel')),'name':$(this).html()};
					count++;
				}
			);
			
			$.post('/ajax/show-entry-set-lineup.php', { 'lineup' : $.toJSON(lineup) },
			function(jsonData)
			{
				if(jsonData.error == false)
				{
					if(typeof(jsonData.modal) != 'undefined')
					{
						tb_show('Label/Genre Input',jsonData.modal + '&width=800&height&600&ajax=1','');
					}
					else
					{
						window.location = '/shows/add/';
					}
				}
				else
				{
					$('#lineupMessage').html('<span class="error">' + jsonData.message + '</span>');
				}
			}, 'json');
		}
		else
		{
			$('#lineupMessage').html('<span class="error">A lineup is required to enter a show.</span>');
			$('#band').effect('highlight', {color:'#FF0084'}, 1000);
			$('#band').focus();
		}
	});
	
	this.addToLineup = function(name,id)
	{
		if($.trim(name) != '')
		{
			$('#lineupInput').append('<li><div class="lineupInputName" rel="' + id + '">' + name + '</div><div class="lineupInputRemove"><a href="#" title="Remove From Lineup"><img onclick="$(\'#lineupInputContent\').data(\'LineupInput\').removeLineupItem(this);" src="/images/thickbox/close.gif" alt="Remove From Lineup" /></a></div></li>');
			$('#band').val('');
			initCustomScrollBars('.scroll');
		}
		else
		{
			$('#band').effect('highlight', {color:'#FF0084'}, 1000);
		}
	
		$('#band').focus();
	}
	
	this.removeLineupItem = function(args)
	{
		$(args).parent().parent().parent().slideUp('fast', function()
		{
			initCustomScrollBars('.scroll');
			$(args).parent().parent().parent().remove();
		});
	}

	$('#band').autocomplete('/ajax/autocomplete/band-search.php', {
		cacheLength:0,
		minChars: 2,
		max: 200,
		width: 300,
		matchContains: true,
		highlightItem: false,
		scrollHeight: 500,
		formatItem: function(row, i, max, term) {
			var resultsRow = row[1];
			resultsRow = resultsRow + '<br /><span class="ac_small">' + row[2] + '</span>';
			return resultsRow;
		},
		formatResult: function(row) {
			return row[1];
		}
	});
	
	$('#band').result(function(event, data, formatted) {
		if(data)
		{
			var bandName;
			if(data[1].length > 35)
			{
				bandName = $.trim(data[1].substr(0,35)) + '...';
			}
			else
			{
				bandName = data[1];
			}
			
			parent.addToLineup(bandName,data[0]);
		}
	});

	$('#lineupInput').sortable({
		'cursor' : 'pointer',
		'items' : 'li',
		'opacity' : '0.5',
		'zIndex' : '5',
		'handle' : '.lineupInputName'
	});
	
	$('#lineupInput').disableSelection();
}

function Location()
{
	//	allow access to the parent object in class methods
	var parent = this;
	
	this.locationTextDim = false;
	
	this.searching = false;
	
	this.searchRadius = phpData.defaultSearchRadius;
	
	this.latitude  = phpData.latitude;
	
	this.longitude  = phpData.longitude;
	
	$('#locationSlider').slider({
		animate:true,
		max:phpData.maxSearchRadius,
		min:phpData.minSearchRadius,
		value:parent.searchRadius,
		slide: function(event, ui) {parent.handleLocationSliderSlide(event,ui)},
		change: function(event, ui) {parent.handleLocationSliderChange(event,ui)}
	});
	
	if($('.updateLocation').length > 0)
	{
		//	anything with a class of updateLocation will trigger a modal window call to open the ajax modal
		$('.updateLocation').bind('click', function(event)
		{
			event.preventDefault();
			
			parent.openUpdateLocationModal();
		});
	}
	
	this.openUpdateLocationModal = function()
	{
		if(parent.searching == false)
		{
			tb_show("Enter Your Zip/Postal Code & Country","/ajax/update-location-form.php?height=75&amp;width=320","");
		}
	}
	
	this.handleLocationSliderSlide = function(event,slider)
	{
		if(Math.ceil(slider.value) == phpData.maxSearchRadius)
		{
			$('#locationSliderText').html('Search All Shows');
		}
		else
		{
			$('#locationSliderText').html('Search Within ' + Math.ceil(slider.value) + ' Miles');
		}
	}
	
	this.handleLocationSliderChange = function(event,slider)
	{
		parent.searchRadius = Math.ceil(slider.value);
		
		//	save this value in a cookie
		createCookie('searchRadius',parent.searchRadius,365);
		
		parent.formatLocationText();
		
		parent.searchShows();
		
		parent.updatePagesWithShowsTab();
	}
	
	this.formatLocationText = function()
	{
		if(parent.searchRadius == phpData.maxSearchRadius)
		{
			if(parent.locationTextDim == false)
			{
				$('#locationText').fadeTo(500, 0.1);
				parent.locationTextDim = true;
			}
		}
		else
		{
			if(parent.locationTextDim == true)
			{
				$('#locationText').fadeTo(500, 1);
				parent.locationTextDim = false;
			}
		}
	}
	
	this.initLocationSlider = function(slider)
	{
		parent.handleLocationSliderSlide('false',{'value' : parent.searchRadius});
		parent.formatLocationText();
	}
	
	this.updateSearch = function()
	{
		//	we need to update the entire frontPageTabs div
		$('#searchContent').html('');
		
		$('.content').addClass('loading');
		
		var searchData = 'latitude=' + parent.latitude + '&longitude=' + parent.longitude + '&searchRadius=' + parent.searchRadius + '&requestURI=' + escape(phpData.requestURI);
		
		var searchURL = '/ajax/search-shows.php';
		
		var delim = '?';
	
		$.each(phpData.getVars, function(index, value) {
			searchURL = searchURL + delim + index + '=' + escape(value);
			delim = '&';
		});

		$.ajax({
			type: 'POST',
			url: searchURL,
			data: searchData,
			success: function(html)
			{
				$('.content').removeClass('loading');
				
				$('#searchContent').html(html);
				
				//	init custom scrollbars
				initCustomScrollBars('.scroll');
				
				//	init any tabs
				initTabs();
				
				parent.searching = false;
				
				//	enable the slider
				$('#locationSlider').slider('enable');
			}
		});
	}
	
	this.updatePagesWithShowsTab = function()
	{
		var pagesWithShowsTab = {
			'albumReviewPage':'/ajax/album-review.php',
			'interviewPage':'/ajax/interview.php',
			'videoPage':'/ajax/video.php',
		};

		$.each(pagesWithShowsTab, function(id,url)
		{
			if($('#' + id).length > 0)
			{
				parent.searching = true;
			
				//	disable the slider
				$('#locationSlider').slider('disable');
			
				//	we need to update the entire div
				$('#' + id).html('');
				
				$('.content').addClass('loading');
				
				var searchData = 'requestURI=' + escape(phpData.requestURI);
				
				var delim = '?';
			
				$.each(phpData.getVars, function(index, value) {
					searchURL = url + delim + index + '=' + escape(value);
					delim = '&';
				});
		
				$.ajax({
					type: 'POST',
					url: searchURL,
					data: searchData,
					success: function(html)
					{
						$('.content').removeClass('loading');
						
						$('#' + id).html(html);
						
						//	init custom scrollbars
						initCustomScrollBars('.scroll');
						
						//	init any tabs
						initTabs();
						
						parent.searching = false;
						
						//	enable the slider
						$('#locationSlider').slider('enable');
						
						//	reinit the comments form
						if($('#commentsForm').length > 0)
						{
							$('#commentsForm').data('Comments', new Comments());
							
							//	reinit clear on focus behaviour
							$('.clearOnFocus').clearOnFocus();
							
							//	fix the returnTo value to the actual page, not the ajax request
							$('#returnTo').val(phpData.requestURI);
						}
					}
				});
			}
		});
	}
	
	this.searchShows = function(slider)
	{
		parent.searching = true;
		
		//	disable the slider
		$('#locationSlider').slider('disable');
		
		if($('#searchContent').length > 0)
		{
			parent.updateSearch();
		}
		else
		{
			parent.searching = false;
					
			//	enable the slider
			$('#locationSlider').slider('enable');
		}
	}
	
	this.initLocationSlider();
}

function User()
{
	//	allow access to the parent object in class methods
	var parent = this;
	
	this.loggedIn = phpData.loggedIn;
	
	this.showContestForm = function(id,name)
	{
		tb_show(name,'/ajax/contest-entry-form.php?id=' + id + '&showID=' + phpData.getVars.id + '&ajax=1&height=430&width=280','');
	}
	
	this.handleContestFormSubmission = function()
	{
		$.post('/ajax/handle-contest-form-submission.php', {
			'name' : $.trim($('#name').val()),
			'email' : $.trim($('#email').val()),
			'showID' : $.trim($('#showID').val()),
			'contestID' : $.trim($('#contestID').val()),
			'thirdParty' : $('#thirdParty:checked').val()
		},
		function(jsonData)
		{
			if(jsonData.error == false)
			{
				parent.updateContestsTab();
				
				tb_remove();
				
				if(typeof(jsonData.script) != 'undefined')
				{
					eval(jsonData.script);
				}
			}
			else
			{
				$('#contestFormMessage').html('<span class="error">' + jsonData.message + '</span>');
			}
		}, 'json');
	}
	
	this.handleNavLoginClick = function(event)
	{
		event.preventDefault();
		if(parent.loggedIn == true)
		{
			parent.logout({});
		}
		else
		{
			parent.openLoginModal();
		}
	}
	
	this.initUpdatePasswordForm = function()
	{
		$('#updatePasswordFormButton').bind('click', function(event)
		{
			event.preventDefault();
		
			validateUpdatePasswordForm();
		});
		
		$('#updatePasswordForm').bind('submit', function(event)
		{
			event.preventDefault();
		
			validateUpdatePasswordForm();
		});
		
		function validateUpdatePasswordForm()
		{
			var error = false;
			
			if($.trim($('#newPassword').val()) == '')
			{
				$('#newPassword').effect('highlight', {color:'#FF0084'}, 1000);
				$('#newPassword').focus();
				error = true;
			}
			else if($.trim($('#newPasswordAgain').val()) == '')
			{
				$('#newPasswordAgain').effect('highlight', {color:'#FF0084'}, 1000);
				$('#newPasswordAgain').focus();
				error = true;
			}
			else if($.trim($('#newPassword').val()) != $.trim($('#newPasswordAgain').val()))
			{
				$('#updatePasswordFormMessage').html('<span class="error">Your new passwords do not match.</span>');
				error = true;
			}
			
			if(error == false)
			{
				var formData = 'newPassword=' + escape($('#newPassword').val()) + '&newPasswordAgain=' + escape($('#newPasswordAgain').val());
				$.ajax({
					type: 'POST',
					url: '/ajax/update-password.php',
					data: formData,
					success: function(html)
					{
						$('#updatePasswordForm').hide();
						$('#updatePasswordFormMessage').html(html);
					}
				});
			}
		}
	}
	
	this.initEmailForm = function()
	{
		$('#emailFormButton').bind('click', function(event)
		{
			event.preventDefault();
		
			$('#emailForm').submit();
		});
		
		$('#emailForm').bind('submit', function(event)
		{
			event.preventDefault();
		
			validateEmailForm();
		});
		
		function validateEmailForm()
		{
			var error = false;
			if($.trim($('#email').val()) == '')
			{
				$('#email').effect('highlight', {color:'#FF0084'}, 1000);
				$('#email').focus();
				error = true;
			}
			if(error == false)
			{
				$.getJSON('/ajax/signup-duplicate-check.php', {email: $('#email').val()},
					function(jsonData) {
						if(jsonData.email.count == 0)
						{
							var formData = 'ajax=1&email=' + escape($('#email').val());
							$.ajax({
								type: 'POST',
								url: '/ajax/email-update-send-confirmation.php',
								data: formData,
								success: function(html)
								{
									$('#emailForm').hide();
									$('#emailFormMessage').html(html);
								}
							});
						}
						else
						{
							$('#email').effect('highlight', {color:'#FF0084'}, 1000);
							$('#email').focus();
							$('#emailFormMessage').html('<span class="error">This email is already being used for another account.</span>');
						}
					}
				);
			}
		}
	}
	
	this.initNameForm = function()
	{
		$('#nameFormButton').bind('click', function(event)
		{
			event.preventDefault();
		
			$('#nameForm').submit();
		});
		
		$('#nameForm').bind('submit', function(event)
		{
			event.preventDefault();
		
			validateNameForm();
		});
		
		function validateNameForm()
		{
			var error = false;
			if($.trim($('#name').val()) == '')
			{
				$('#name').effect('highlight', {color:'#FF0084'}, 1000);
				$('#name').focus();
				error = true;
			}
			if(error == false)
			{
				$.getJSON('/ajax/signup-duplicate-check.php', {name: $('#name').val()},
					function(jsonData) {
						if(jsonData.name.count == 0)
						{
							var formData = 'ajax=1&name=' + escape($('#name').val());
							$.ajax({
								type: 'POST',
								url: '/ajax/update-name.php',
								data: formData,
								success: function(html)
								{
									$('#nameForm').hide();
									$('#nameFormMessage').html(html);
									
									parent.updateUserHeader();
								}
							});
						}
						else
						{
							$('#name').effect('highlight', {color:'#FF0084'}, 1000);
							$('#name').focus();
							$('#nameFormMessage').html('<span class="error">This name is already being used for another account.</span>');
						}
					}
				);
			}
		}
	}
	
	this.initChooseAvatarModal = function()
	{
		$('#chooseAvatarModal').bind('click', function(event)
		{
			event.preventDefault();
			
			tb_show('Choose A New Avatar',$('#chooseAvatarModal').attr('href') + '?ajax=1&amp;height=150&amp;width=600','');
		});
	}
	
	this.initAvatarUpload = function()
	{
		$('#avatarUpload').fileUpload ({
			'uploader'  : '/flash/uploader.swf',
			'script'    : '/ajax/upload-avatar.php',
			'cancelImg' : '/images/thickbox/close.gif',
			'auto'      : true,
			'buttonImg' : '/images/uploader-button.png',
			'width'		: 78,
			'height'	: 30,
			'rollover'	: true,
			'multi'		: false,
			'fileDesc'	: 'Choose an avatar image from your computer.',
			'scriptData': {'PHPSESSID' : readCookie('PHPSESSID')},
			'onComplete': parent.handleUploadServerResponse
		});
	}
	
	if($('.navLoginLink').length > 0)
	{
		$('.navLoginLink').bind('click', parent.handleNavLoginClick);
	}	
	
	this.initNavLoginLinks = function()
	{
		if($('.navLoginLink').length > 0 && parent.loggedIn == true)
		{
			//	change login links to logout
			$('.navLoginLink').each(function()
				{
					if($(this).hasClass('userHeaderLoginLink') == false)
					{
						$(this).removeClass('navLoginLink');
						$(this).addClass('navLogoutLink');
						$(this).attr('href', '/user/logout/');
						$(this).text('Logout');
					}
				}
			);
		}
		
		if($('.navLogoutLink').length > 0 && parent.loggedIn == false)
		{
			//	change logout links to login
			$('.navLogoutLink').each(function()
				{
					if($(this).hasClass('userHeaderLoginLink') == false)
					{
						$(this).removeClass('navLogoutLink');
						$(this).addClass('navLoginLink');
						$(this).attr('href', '/user/login/');
						$(this).text('Login');
					}
				}
			);
		}
	}
	
	this.initNavLoginLinks();
	
	this.logout = function(args)
	{
		parent.loggedIn = false;
		
		$.ajax({
			type: 'GET',
			url: '/ajax/logout.php',
			success: function(html)
			{
				if(html == '1')
				{
					parent.handleLoginStatusUpdate();
				}
			},
			error: function(XMLHttpRequest, textStatus, errorThrown)
			{
				parent.handleLoginStatusUpdate();
			}
		});
	}
	
	this.handleFacebookLogin = function(args)
	{
		$.post('/ajax/login.php', {type : 'facebook'},
		function(data)
		{
			if(data.login == 1)
			{
				parent.loggedIn = true;
			}
			
			if(typeof(args.returnTo) != 'undefined')
			{
				window.location = args.returnTo;
			}
			else
			{
				parent.handleLoginStatusUpdate();
			}
			
			if(typeof(args.closeModal) != 'undefined')
			{
				if(args.closeModal == true)
				{
					tb_remove();
				}
			}
		}, 'json');
	}
	
	this.handleNativeLogin = function(args)
	{
		parent.loggedIn = true;
		
		if(typeof(args.returnTo) != 'undefined')
		{
			window.location = args.returnTo;
		}
		else
		{
			parent.handleLoginStatusUpdate();
		}
		
		if(typeof(args.closeModal) != 'undefined')
		{
			if(args.closeModal == true)
			{
				tb_remove();
			}
		}
	}
	
	this.initFacebookConnectToolTips = function()
	{
		$('#facebookConnectButton').qtip({
			content: {
				url: '/ajax/tooltip/facebook-connect.php',
				data : {
					ajax:1
				},
				method:'get'
			},
			hide: {
				fixed: true
			},
			style: {
				width : {
					min:400,
					max:400
				},
				tip: {
					corner: 'topMiddle',
					size: {
						x:14,
						y:6
					}
				},
				padding:0,
				margin:0,
				border: {
					width: 2,
					radius: 0,
					color: '#333'
				}
			},
			position: {
				corner: {
					tooltip: 'topRight',
					target: 'bottomRight'
				}
			}
		});
	}
	
	this.initShareToolTips = function()
	{
		$('#share a').each(function()
		{
			$(this).qtip({
				content: {
					url: '/ajax/tooltip/share.php',
					data : {
						ajax:1,
						title:$(this).attr('title'),
						href:$(this).attr('href')
					},
					method:'get'
				},
				hide: {
					fixed: true
				},
				style: {
					width : {
						min:300,
						max:300
					},
					tip: {
						corner: 'topMiddle',
						size: {
							x:14,
							y:6
						}
					},
					padding:0,
					margin:0,
					border: {
						width: 2,
						radius: 0,
						color: '#333'
					}
				},
				position: {
					corner: {
						tooltip: 'topMiddle',
						target: 'bottomMiddle'
					}
				}
			});
		});
	}
	
	this.updateUserHeader = function()
	{
		$('#userHeader').fadeTo(200, 0.1,function() {
			$.ajax({
				type: 'GET',
				url: '/ajax/get-user-header.php',
				success: function(html)
				{
					$('#userHeader').html(html);
					$('#userHeader').fadeTo(200, 1);
					
					//	reinit the FBML for the DOM
					FB.init(phpData.facebookKey,'/facebook/xd_receiver.htm');
					
					//	re-init login links
					if($('.userHeaderLoginLink').length > 0)
					{
						$('.userHeaderLoginLink').bind('click', parent.handleNavLoginClick);
					}
					
					//	re-init fb connect tool tips
					if($('#facebookConnectButton').length > 0)
					{
						parent.initFacebookConnectToolTips();
					}
				}
			});
		});
	}
	
	this.updateCommentsForm = function()
	{
		if($('#commentsForm').length > 0)
		{
			$.ajax({
				type: 'GET',
				url: '/ajax/get-comments-extra-input.php',
				success: function(html)
				{
					$('#commentsExtraInput').html(html);
					
					$('#commentsForm').removeData('Comments');
					
					$('#commentsForm').data('Comments', new Comments());
				}
			});
		}
	}
	
	this.updateFavorites = function()
	{
		//	we need to update the entire frontPageTabs div
		$('.content').addClass('loading');
		
		$('#favoritesContent').html('');
		
		$.ajax({
			type: 'POST',
			url: '/ajax/get-favorites.php',
			success: function(html)
			{
				$('#favoritesContent').html(html);
				
				//	init custom scrollbars
				initCustomScrollBars('.scroll');
				
				//	init any tabs
				initTabs();
	
				$('.content').removeClass('loading');
				parent.initRemoveFromFavoriteLinks();
			}
		});
	}
	
	this.updateUserEditContent = function()
	{
		//	we need to update the entire frontPageTabs div
		$('.content').addClass('loading');
		
		$('#userEditContent').html('');
		
		$.ajax({
			type: 'POST',
			url: '/ajax/get-user-edit-form.php',
			success: function(html)
			{
				$('#userEditContent').html(html);
				
				//	init custom scrollbars
				initCustomScrollBars('.scroll');
				
				//	init any tabs
				initTabs();
				
				//	init the uploader form
				parent.initAvatarUpload();
				
				//	init the choose avatar modal link
				parent.initChooseAvatarModal();
				
				//	init the update forms
				parent.initUpdatePasswordForm();
				parent.initEmailForm();
				parent.initNameForm();

				$('.content').removeClass('loading');
			}
		});
	}
	
	this.updateEditTab = function()
	{
		$('#edit').html('');
		
		$('#edit').addClass('tabLoading');

		$.ajax({
			type: 'POST',
			url: '/ajax/get-edit-tab.php',
			data: { id : phpData.getVars.id },
			success: function(html)
			{
				$('#edit').removeClass('tabLoading');
				
				$('#edit').html(html);
				
				//	init custom scrollbars
				initCustomScrollBars('.scroll');
			}
		});
	}
	
	this.updateContestsTab = function()
	{
		$('#contests').html('');
		
		$('#contests').addClass('tabLoading');
		
		if(typeof(phpData.getVars.id) != 'undefined')
		{
			getID = phpData.getVars.id;
		}
		else
		{
			getID = 0;
		}
		$.ajax({
			type: 'POST',
			url: '/ajax/get-contests-tab.php',
			data: { id : getID },
			success: function(html)
			{
				$('#contests').removeClass('tabLoading');
				
				$('#contests').html(html);
				
				//	init custom scrollbars
				initCustomScrollBars('.scroll');
			}
		});
	}
	
	this.handleLoginStatusUpdate = function()
	{
		//	done on login or logout
		parent.updateUserHeader();
		parent.updateCommentsForm();
		parent.initNavLoginLinks();
		
		if(phpData.page == 1 && $('#searchContent').length > 0)
		{
			//	do a new search
			if(typeof($('#locationSlider').data('Location')) != 'undefined')
			{
				$('#locationSlider').data('Location').searchShows(null);
			}
		}
		
		if($('#favoritesContent').length > 0)
		{
			//	update favorites here
			parent.updateFavorites();
		}
		
		if($('#userEditContent').length > 0)
		{
			//	update favorites here
			parent.updateUserEditContent();
		}
		
		if($('#navFavoritesLink').length > 0)
		{
			//	update favorites nav link here
			if(typeof($('#navFavoritesLink').data('userFavoriteCount')) != 'undefinded')
			{
				$.ajax({
					type: 'POST',
					url: '/ajax/get-total-favorites.php',
					success: function(html)
					{
						if(typeof($('#navFavoritesLink').data('userFavoriteCount')) != 'undefinded')
						{
							$('#navFavoritesLink').data('userFavoriteCount', parseInt(html));
							
							parent.updateNavFavoritesHTML();
						}
					}
				});
			}
		}
		
		//	this clears the tooltip cache
		if($('.toolTipShowFavoriteLinks').length > 0)
		{
			$('.toolTipShowFavoriteLinks').each(function()
				{
					$(this).qtip('destroy');
					initToolTip($(this));
				}
			);
		}
		
		if($('#showInputContent').length > 0)
		{
			//	refresh the page
			window.location.reload();
		}
	
		if($('#edit').length > 0)
		{
			//	this updates the edit tab on the show page
			parent.updateEditTab();
		}
		
		if($('#contests').length > 0)
		{
			//	this updates the contests tab on any page
			parent.updateContestsTab();
		}
		
		if($('#shareVideoOnFacebook').length > 0)
		{
			$('#locationSlider').data('Location').updatePagesWithShowsTab();
		}
	}
	
	this.publishCancel = function()
	{
		$.post('/ajax/publish-cancel.php', { 'ajax' : 1},
			function(jsonData)
			{
				if(jsonData.error == false)
				{
					tb_remove();
					//$('#publishMessage').html('<p class="success">' + jsonData.message + '</p>');
				}
				else
				{
					$('#publishMessage').html('<p class="error">' + jsonData.message + '</p>');
				}
			},
		'json');
	}
	
	this.publishAction = function()
	{
		$('#publishMessage').html('<div class="loading">&nbsp;</div>');
		
		$.post('/ajax/publish-action.php', { 'ajax' : 1},
			function(jsonData)
			{
				if(jsonData.error == false)
				{
					$('#publishMessage').html('<p class="success">' + jsonData.message + '</p>');
					
					if(typeof(jsonData.script) != 'undefined')
					{
						eval(jsonData.script);
					}
				}
				else
				{
					$('#publishMessage').html('<p class="error">' + jsonData.message + '</p>');
				}
			},
		'json');
	}
	
	this.requestFacebookPermissions = function(arg)
	{
		FB.Connect.showPermissionDialog(arg, function(response)
		{
			if(response == arg)
			{
				$('#publishingLinks').show();
				$('#publishingPermissionsMessage').hide();
			}
		}
		);
	}
	
	this.updateFacebookPrefsModal = function()
	{
		$('#facebookPublishingPrefsMessageModal').html('<span class="success">Updating...</span>');
		
		$.post('/ajax/update-facebook-prefs.php', { 'fb_prefs' : $('#facebookPublishingPrefsModal').val()
 		},
		function(jsonData)
		{
			if(jsonData.error == false)
			{
				$('#facebookPublishingPrefsMessageModal').html('<span class="success">' + jsonData.message + '</span>');
			}
			else
			{
				$('#facebookPublishingPrefsMessageModal').html('<span class="error">' + jsonData.message + '</span>');
			}
		}, 'json');
	}
	
	this.openLoginModal = function(returnTo)
	{
		if(typeof(returnTo) == 'undefined')
		{
			tb_show('Login','/ajax/login-form.php?height=290&amp;width=390','');
		}
		else
		{
			tb_show('Login','/ajax/login-form.php?returnTo=' + escape(returnTo) + '&height=290&amp;width=390','');
		}
	}
	
	this.decreaseNavFavoritesLink = function()
	{
		if(typeof($('#navFavoritesLink').data('userFavoriteCount')) != 'undefinded')
		{
			$('#navFavoritesLink').data('userFavoriteCount', ($('#navFavoritesLink').data('userFavoriteCount') - 1));
			
			parent.updateNavFavoritesHTML();
		}	
	}
	
	this.updateNavFavoritesHTML = function()
	{
		var plural = '';
		if($('#navFavoritesLink').data('userFavoriteCount') != 1)
		{
			plural = 's';
		}
		if($('#navFavoritesLink').data('userFavoriteCount') != 0)
		{
			$('#navFavoritesLink').html($('#navFavoritesLink').data('userFavoriteCount') + ' Favorite' + plural);
		}
		else
		{
			$('#navFavoritesLink').html('Favorites');
		}
	}
	
	this.decreaseTabFavoritesLink = function(category)
	{
		if(typeof($('#favoritesContent').data(category)) != 'undefinded')
		{
			$('#favoritesContent').data(category, ($('#favoritesContent').data(category) - 1));
			
			var plural = '';
			if($('#favoritesContent').data(category) != 1)
			{
				plural = 's';
			}
			if($('#favoritesContent').data(category) != 0)
			{
				$('#' + category + 'FavoritesTab').html($('#favoritesContent').data(category) + ' Favorite ' + category + plural);
			}
			else
			{
				$('#' + category + 'FavoritesTab').html('Favorite ' + category + 's');
			}
		}
	}
	
	this.initRemoveFromFavoriteLinks = function()
	{
		$('.removeFromFavorites a').each(function(){
			var elementParent = $(this).parent();
			$(this).bind('click', removeFromFavorites);
			function removeFromFavorites(event)
			{
				event.preventDefault();
				var href = $(this).attr('href');
				var rel = $(this).attr('rel');
				elementParent.html('removing...');
				$.post(href, {ajax : 1},
				function(data)
				{
					if(data.removed == 1)
					{
						elementParent.slideUp();
						
						parent.decreaseNavFavoritesLink();
						
						parent.decreaseTabFavoritesLink(rel);
						
						//	init custom scrollbars
						initCustomScrollBars('.scroll');
					}
				}, 'json');
			}
		});
	}
	
	if($('#navFavoritesLink').length > 0)
	{
		$('#navFavoritesLink').data('userFavoriteCount',phpData.userFavoriteCount);
	}
	
	if(typeof(phpData.favorites) == 'object')
	{
		$.each(phpData.favorites, function(index, value) {
			$('#favoritesContent').data(index,value);
		});
	}
	
	this.initRemoveFromFavoriteLinks();
	
	if($('#updatePasswordForm').length > 0)
	{
		parent.initUpdatePasswordForm();
	}
	
	if($('#emailForm').length > 0)
	{
		parent.initEmailForm();
	}
	
	if($('#nameForm').length > 0)
	{
		parent.initNameForm();
	}
	
	if($('#chooseAvatarModal').length > 0)
	{
		parent.initChooseAvatarModal();
	}
	
	this.refreshAvatar = function()
	{
		$.ajax({
			type: 'GET',
			url: '/ajax/get-avatar.php',
			success: function(html)
			{
				var currentTime = new Date();
				$('#userIcon img').attr('src', $('#userIcon img').attr('src') + '?refresh=' + currentTime.getTime());
			}
		});
	}
	
	this.handleUploadServerResponse = function(event,queueID,fileObj,response,data)
	{
		//	serverResponse is a JSON encoded string
		
		var serverResponse = eval('(' + response + ')');
		
		if(serverResponse.error == true)
		{
			$('#uploadAvatarMessage').html('<span class=\"error\">' + serverResponse.message + '</span>');
		}
		else
		{
			//	no error, update the user's avatar in the header
			parent.refreshAvatar();
			
			$('#uploadAvatarMessage').html('<span class=\"success\">' + serverResponse.message + '</span>');
		}
	}
	
	if($('#avatarUpload').length > 0)
	{
		parent.initAvatarUpload();
	}
	
	if($('#facebookConnectButton').length > 0)
	{
		this.initFacebookConnectToolTips();
	}
	
	if($('#share').length > 0)
	{
		this.initShareToolTips();
	}
	
	if($('#upperSearchSubmitButton').length > 0)
	{
		$('#upperSearchSubmitButton').bind('click', function(event)
		{
			event.preventDefault();
			if($.trim($('#upperSearchEntryText').val()) != '' && $('#upperSearchEntryText').val() != $('#upperSearchEntryText').data('clearOnFocus'))
			{
				window.location = '/shows/search/advanced/?term=' + escape($('#upperSearchEntryText').val());
			}
		});
	}
	
	//	this pops up the welcome to our site modal window
	if(readCookie('displayedWelcomeModal') == null)
	{
		$.post('/ajax/displayed-welcome-modal.php', {ajax : 1},
		function(jsonData)
		{
			if(jsonData.error == false)
			{
				createCookie('displayedWelcomeModal',1,365);
				
				tb_show('Welcome To KillerTours.com','/ajax/welcome-modal.php?&height=420&width=840','');
			}
		}, 'json');		
	}
}




function UpperSearchEntry()
{
	//	allow access to the parent object in class methods
	var parent = this;
	
	//	grab the form submit event here
	$('#upperSearchEntryText').bind('submit', function(event)
	{
		//alert('Please choose your location from the dropdown menu.\nIf you do not see your location, try entering only the first part of your zip code.');
		event.preventDefault();
	});
	
	//	preload the autocomplete loader gif
	$('<img>').attr("src", '/images/loading-small.gif');
	
	$('#upperSearchEntryText').autocomplete('/ajax/autocomplete/upper-search.php', {
		minChars: 3,
		max: 200,
		width: 209,
		matchContains: true,
		highlightItem: false,
		scrollHeight: 500,
		formatItem: function(row, i, max, term) {
			var resultsRow = row[1] + ': ' + row[2];
			if($.trim(row[3]) != '')
			{
				resultsRow = resultsRow + '<br /><span class="ac_small">' + row[3] + '</span>';
			}
			return resultsRow;
		},
		formatResult: function(row) {
			return row[2];
		}
	});
	
	$('#upperSearchEntryText').result(function(event, data, formatted) {
		if(data)
		{
			window.location = '/search/' + data[1].toLowerCase() + '/' + escape(data[0].toLowerCase());
			//alert(data[1]);
		}
		
		$('#upperSearchEntryText').blur();
	});
};

function Comments()
{
	//	allow access to the parent object in class methods
	var parent = this;
	
	this.formError = true;

	this.checkForFocus = function()
	{
		if($('#commentsForm').data('currentFocus') == false)
		{
			$('#comments').height(14);
			
			$('#commentsExtraInput').hide();
			
			initCustomScrollBars('.scroll');
		}
	}
	
	this.handleFocus = function(event)
	{
		$('#commentsForm').data('currentFocus', $(parent.listenOn[event.data.loop]).attr('id'));
	}
	
	this.handleBlur = function(event)
	{
		$('#commentsForm').data('currentFocus', false);
		
		var checkFocus = function () { parent.checkForFocus(); };
		
		setTimeout(checkFocus,200);
	}
	
	this.handleSubmit = function(event)
	{
		$('#commentsForm').data('currentFocus', 'submit');
		
		if(parent.formError == true)
		{
			event.preventDefault();

			if($.trim($('#comments').val()) == '' || $('#comments').val() == $('#comments').data('clearOnFocus'))
			{
				$('#comments').effect('highlight', {color:'#FF0084'}, 1000);
				$('#comments').focus();
			}
			else if($('#captcha').length > 0)
			{
				if($.trim($('#captcha').val()) == '' || $('#captcha').val() == $('#captcha').data('clearOnFocus'))
				{
					$('#captcha').effect('highlight', {color:'#FF0084'}, 1000);
					$('#captcha').focus();
					$('#commentsMessage').html('Please type in the security code.');
				}
				else
				{
					$.ajax({
						type: 'POST',
						url: '/ajax/check-captcha.php',
						data: 'captcha=' + escape($('#captcha').val()),
						success: function(html)
						{
							if(html == 0)
							{
								$('#captcha').effect('highlight', {color:'#FF0084'}, 1000);
								$('#captcha').focus();
								$('#commentsMessage').html('Incorrect security code.');
							}
							else
							{
								parent.formError = false;
								$('#commentsForm').submit();
							}
						},
						error: function(XMLHttpRequest, textStatus, errorThrown)
						{
							parent.formError = false;
							$('#commentsForm').submit();
						}
					});
				}
			}
			else
			{
				parent.formError = false;
				$('#commentsForm').submit();
			}
		}
	}
	
	this.handleCommentsFocus = function()
	{
		$('#commentsExtraInput').show();
		
		$('#comments').height(60);
		
		initCustomScrollBars('.scroll');
	}
	
	this.handleCaptchaClick = function()
	{
		var currentTime = new Date();
		
		$(this).attr({src: '/images/captcha.jpg?reload=' + currentTime.getTime()});
		
		$('#captcha').focus();
	}
	
	this.listenOn = Array("#captcha","#name","#comments");
	
	for (var loop in parent.listenOn)
	{
		if($(parent.listenOn[loop]).length > 0)
		{
			$(parent.listenOn[loop]).unbind('focus', parent.handleFocus);
			$(parent.listenOn[loop]).unbind('blur', parent.handleBlur);
			
			$(parent.listenOn[loop]).bind('focus', { loop:loop }, parent.handleFocus);
			$(parent.listenOn[loop]).bind('blur', { loop:loop }, parent.handleBlur);
		}
	}
	
	if($('.captcha').length > 0)
	{
		$('.captcha').unbind('click', parent.handleCaptchaClick);
		$('.captcha').bind('click', parent.handleCaptchaClick);
	}
	
	$('#commentsFormSubmit').unbind('click', parent.handleSubmit);
	$('#commentsFormSubmit').bind('click', parent.handleSubmit);

	$('#commentsForm').unbind('submit', parent.handleSubmit);
	$('#commentsForm').bind('submit', parent.handleSubmit);
	
	$('#comments').unbind('focus', parent.handleCommentsFocus);
	$('#comments').bind('focus', parent.handleCommentsFocus);
	
	$('#name').clearOnFocus();
	$('#captcha').clearOnFocus();
	
	$('#commentsExtraInput').hide();
	
	initCustomScrollBars('.scroll');
};

function initToolTip(arg)
{
	arg.bind('click', function(event)
	{
		event.preventDefault();
		$(this).blur();
	});

	arg.qtip({
		content: {
			url: arg.attr('href'),
			data : {
				ajax:1
			},
			method:'get'
		},
		hide: {
			fixed: true
		},
		style: {
			width : {
				min:0,
				max:400
			},
			tip: {
				corner: 'leftMiddle',
				size: {
					x:6,
					y:14
				}
			},
			padding:0,
			margin:0,
			border: {
				width: 2,
				radius: 0,
				color: '#333'
			}
		},
		position: {
			corner: {
				tooltip: 'leftMiddle',
				target: 'rightMiddle'
			}
		}
	});
}

function initCustomScrollBars(args)
{
	/*
	$(args).each(function()
		{
			var margin = 0;
			
			if($(this).children("div.scrollMargin").length == 0)
			{
				margin = 5;
			}
			
			$(this).jScrollPane({showArrows:true, arrowSize:10, scrollbarWidth:10,scrollbarMargin:margin,reinitialiseOnImageLoad:true});
		}
	);
	*/
}

function editShow(args)
{
	$.post('/ajax/edit-show.php', { 'id' : args
 		},
		function(jsonData)
		{
			if(jsonData.error == false)
			{
				window.location = '/shows/add/';
			}
			else
			{
				$('#edit').html('<div class="scroll"><div class="scrollMargin"><h1>There was an error</h1><p class="error">' + jsonData.message + '</p>');
			}
		}, 'json');
}

function deleteShow(args)
{
	if(confirm('Are you sure you want to delete this show?'))
	{
		$.post('/ajax/delete-show.php', { 'id' : args
			},
			function(jsonData)
			{
				if(jsonData.error == false)
				{
					alert(jsonData.message);
					window.location = '/home/';
				}
				else
				{
					$('#edit').html('<div class="scroll"><div class="scrollMargin"><h1>There was an error</h1><p class="error">' + jsonData.message + '</p>');
				}
			}, 'json');
	}
}












//	some cookie helper functions
function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+escape(value)+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}
