﻿var _coupon_data;
var _menu_data;
var _city_data;

var _casino_data;

var _summarySchedulesLoaded = false;
var _summaryMapLoaded = false;

var _content_data;
var _right_menu;

var _clear_event = null;

function searchClick(sender) {

	if (_clear_event != null) {
		window.clearTimeout(_clear_event);
		_clear_event = null;
	}
	
	$('.error_indicator').remove();
	
	var search = function(array, find) {
		var found = null;
		$.each(array, function(index, value) { if (value[0] == find) { found = value; return false; } });
		return found;
	};
	
	var errors = new Array();
	var errorsCount = 0;
	
	var origin = search(_city_data,  $('#origCity').val());
	var destination = search(_menu_data, $('#destCasino').val());

	var dateD = $find(PageReferences.DDate);
	var dateR = $find(PageReferences.RDate);
	
	var departs = dateD.get_selectedDate();
	var returns = dateR.get_selectedDate();
	
	if (origin == null)
		errors[errorsCount++] = ['lblOrig', 'origCity', 'An origin city is required.'];
	
	if (destination == null)
		errors[errorsCount++] = ['lblDest', 'destCasino', 'A destination casino is required.'];
		
	if (departs == null)
		errors[errorsCount++] = ['lblDeprt', dateD.get_textBox().id, 'A departure date is required.'];
		
	if (returns == null)
		errors[errorsCount++] = ['lblRetrn', dateR.get_textBox().id, 'A return date is required.'];
		
	if (errorsCount > 0) {
		
		for (var i = 0; i < errors.length; i++) {
			var el = $('#' + errors[i][0]);
			el.fadeOut(100).fadeIn(100).fadeOut(100).fadeIn(100).fadeOut(100).fadeIn(100, function() {
				$(this).append('<div class="error_indicator">&nbsp;*</div>');
			});
		}
		_clear_event = window.setTimeout(function() {
			var els = $('.error_indicator');
			els.fadeOut(2000, function() {
				$(this).remove();
			});
			
		}, 5000);

		return false;
	}
	
	var o = origin[2].split('/');
	var d = destination[2].split('/');
	
	var qs = '';
	
	var append = function(key, value) {
		qs = qs + '&' + key + '=' + encodeURIComponent(value);
	}
	
	var appendDate = function(prefix, date) {
		append(prefix + 'year', date.getYear());
		append(prefix + 'month', date.getMonth() + 1);
		append(prefix + 'day', date.getDate());
	}
	
	append('redirect', 'Y');
	append('version', '1.0');
	
	append('originid', o[0]);
	append('origincity', o[1]);
	append('originstate', o[2]);
	
	append('destinationid', d[0]);
	append('destinationcity', d[1]);
	append('destinationstate', d[2]);
	
	append('adults', $('#passengers').val());
	append('seniors', '0');
	append('children', '0');
				
	append('legs', '2');
	
	appendDate('d', departs);
	appendDate('r', returns);
	
	$(sender).attr('href', 'transfer.aspx?' + qs.substr(1));
	return true;
} 

function overviewMenuClick(sender, key) {
	switch(key) {
		case '#overview':
			switchMain(key);
			break;
		case '#summary_schedules':
			var callback = function() { switchMain('#summary_schedules'); };
			if (!_summarySchedulesLoaded) {
				window.setTimeout(function() {
					changeSchedulesSummary(null, {'Callback' : callback });	
				}, 100);
			} else {
				callback();
			}
			break;
		case '#summary_map':
			var callback = function() { switchMain('#summary_map'); };
			if (!_summaryMapLoaded) {
				window.setTimeout(function() {
					DataService.GetMainMapData(OnGetMainMapDataComplete, OnGetError, {'Callback' : callback });		
				}, 100);
			} else {
				callback();
			}
			break;
	}
}

function showContentClick(sender, title, key) {
	if (title==null) title=$(sender).html();	
	DataService.GetContent(key, OnGetContentComplete, OnGetError, { 'Sender': $(sender), 'Title': title, 'Key': key });
}

function casinoClick(sender, key) {
	if (key == 'overview') {
		switchMain('#overview'); switchMenu(key);
		$("#lSidebarDealsBox").fadeIn("fast");
	} else {
		var context = { 
			'Sender'   : sender, 
			'Key'	   : key,
			'CallBack' : function(e) {
				switchMain('#casino'); switchMenu(key);				
				var dst = $('#destCasino');		
				if (dst.val() != e.Key) {
					dst.data('from', 'casinoClick');
					dst.val(e.Key); dst.trigger('change');
				}				
				if ($("#casinoInfoLink").hasClass("casinoInfoLink-on"))
					$("#lSidebarDealsBox").fadeOut("fast");
			}
		};								
		DataService.GetCasinoInformation(key, OnGetCasinoInformationComplete, OnGetError, context);
	}
}

function changeSchedulesSummary(sender, context) {
	var origin = $('#origCitySummary'), destination = $('#destCasinoSummary');
	DataService.GetMainSchedules($(origin).val(), $(destination).val(), OnGetMainSchedulesComplete, OnGetError, context);
}

function changeCasinoSchedulesChange(sender) {
	changeCasinoSchedules();
}

function changeCasinoSchedules() {
	if (_casino_data) {
	
		var from = $('#origCityCasino :selected');
		
		var from_text = from.text(); from_val = from.val();		
		var to_text = _casino_data.Name; to_val = _casino_data.ID;
		
		$('#casino_out_title').html(String.format("Schedule ({0} - {1})", from_text, to_text));
		$('#casino_ret_title').html(String.format("Return Schedule* ({0} - {1})", to_text, from_text));
		
		for (var i = 0; i < _casino_data.Schedules.length; i++) {
			var schedules = _casino_data.Schedules[i];   
			if (schedules.Origin == from_val) {
				addRows($('#casino_out_table'), schedules.Departures);
				addRows($('#casino_ret_table'), schedules.Returns);
				break;
			}	
		}
	}
}

function OnGetContentComplete(result, context) {

	_content_data = { 'Result': result, 'Context': context }
	
	window.scroll(0,0);	
	window.setTimeout(function() {	
		switchMenu('off');
		
		var $out = $('#centerContent').children('div:visible');
		var $in = $(($out[0].id == 'content') ? '#content2' : '#content');
		
		$in.html(
			$('#content_template').html()
				.replace('{{TITLE}}', _content_data.Context.Title)
				.replace('{{CONTENT}}', _content_data.Result)
		);
		
		var init = 'content_init_' + _content_data.Context.Key;
		
		if (eval('typeof ' + init) == 'function')
			eval(init + '()');
			
		$out.fadeOut("fast", function() {
			$in.fadeIn("fast");
		});
		
		_content_data = null;
		
	}, 10);
}

function OnGetMainMapDataComplete(result, context) {
	
	if (context.Callback)
		context.Callback();
}

function OnGetMainSchedulesComplete(result, context) {

	if (context) {
		if (context.Callback)
			context.Callback();
	}
	
	var from = $('#origCitySummary :selected').text();
	var to = $('#destCasinoSummary :selected').text();

	$('#summary_out_title').html(String.format("Schedule ({0} - {1})", from, to));
	$('#summary_ret_title').html(String.format("Return Schedule* ({0} - {1})", to, from));
	
	addRows($('#summary_out_table'), result.Departures);
	addRows($('#summary_ret_table'), result.Returns);
	
	_summarySchedulesLoaded = true;
}

function OnGetCasinoInformationComplete(result, context) {

	_casino_data = result;
	
	if (context.CallBack != null)
		context.CallBack(context);
		
	$('#casino_logo').attr('src', 'app_themes/default/images/casino/logos/' + result.ID + '.gif');
	$('#casino_map').attr('src', 'app_themes/default/images/casino/maps/' + result.ID + '.jpg');
	
	$('#casino_title').html(result.Name);
	$('#casino_address').html(getArrayList(result.Information, '', '<br/>'));
	$('#casino_desc').html(getArrayList(result.Description, '<p>', '</p>'));
	
	var slider_holder = $('#slideShowCont');
	var slider = $('#slides');
	
	slider.cycle('pause');
	
	if (result.Slides.length == 0) {
		slider_holder.hide();
		slider.html('');		
	} else {
	
		var html = '';
		for (var i = 0; i < result.Slides.length; i++)
			html += '<img src="' + result.Slides[i] + '"/>';
			
		$('#slidesNav').html('');
		
		slider.html(html);
		slider.cycle({
			fx:			'fade',
			speed:		3000,
			timeout:	2000,
			pause:		1,
			pager:		'#slidesNav',
			pagerAnchorBuilder: function(idx, slide) {
				return '<li><a href="#"></a></li>'; 
			}
		});		
		
		slider_holder.show();
	}
	
	changeCasinoSchedules();
	window.scrollTo(0,0);
}

function OnGetError(error) {
	alert(error.get_message());
}

$(document).ready(function() {

	$.extend($.modal.defaults, {
		opacity		: 80,
		overlayId	: 'modal-overlay'
	});
    	
	_encoder_div = $('<div/>');
		
	_coupon_data = getCouponData();
	_menu_data = getMenuData();
	_city_data = getCityData();
	
	_right_menu = $('#casinoMenu');	
	
	wireupChips();	
	renderCasinoMenu(_right_menu);	
	
	// casino info tab link
	$("#casinoInfoLink").click(function() {
		$("#schedulesLink").removeClass("schedulesLink-on"); 
		$("#schedulesLink").addClass("schedulesLink-off"); 
		$("#casinoInfoLink").removeClass("casinoInfoLink-off"); 
		$("#casinoInfoLink").addClass("casinoInfoLink-on"); 
		$("#casino-schedules").fadeOut("fast", function() {
			$("#casino-info-content").fadeIn("fast");
			$("#lSidebarDealsBox").fadeOut("fast");
		});
	});

	// schedules tab link
	$("#schedulesLink").click(function() {
		$("#schedulesLink").removeClass("schedulesLink-off"); 
		$("#schedulesLink").addClass("schedulesLink-on"); 
		$("#casinoInfoLink").removeClass("casinoInfoLink-on"); 
		$("#casinoInfoLink").addClass("casinoInfoLink-off"); 
		$("#casino-info-content").fadeOut("fast", function() {
			$("#casino-schedules").fadeIn("fast");
			$("#lSidebarDealsBox").fadeIn("fast");
		});
	});
	
	var orig_items = '';
	for (var i = 0; i < _city_data.length; i++) {
		var itm = _city_data[i];
		var def = (itm[3] == 'X') ? 'selected' : '';
		orig_items += '<option value="' + itm[0] + '"' + def + '>' + htmlEncode(itm[1]) + '</option>';
	}
	
	var dest_items = '';	
	for (var i = 0; i < _menu_data.length; i++) {
		var itm = _menu_data[i];
		if (itm[3] == 1)
			dest_items += '<option value="' + itm[0] + '">' + htmlEncode(itm[1]) + '</option>';
	}
	
	copyHTML(orig_items, '#origCity', '#origCitySummary', '#origCityCasino', '#origCityDeal');
	copyHTML(dest_items, '#destCasino', '#destCasinoSummary');
	
	var origins = $('#origCity');
	var destinations = $('#destCasino');
	
	// Origin Events
	origins.change(function() {
		var $me = $(this);
		$.each(
			['#origCitySummary', '#origCityCasino', '#origCityDeal'],
			function(index, value) {
				var $slave = $(value);
				if ($slave.val() != $me.val()) {
					$slave.val($me.val());
					$slave.trigger('change');
				}
			}
		);
	});
	
	$.each(
		['#origCitySummary', '#origCityCasino', '#origCityDeal'],
		function(index, value) {
			var $lst = $(value);
			$lst.change(function() {
				var $me = $(this); var $slave = $('#origCity');
				if ($slave.val() != $me.val()) {
					$slave.val($me.val());
					$slave.trigger('change');
				}
			});
		}
	);
	
	// Destination Events
	destinations.change(function() {
		var $me = $(this);
		
		changeCoupons(true);
		
		if (!(($me[0].id == 'destCasino') || ($me.data('from') == 'casinoClick'))) {
			var key = _right_menu.data('selected');
			if (key != 'overview')
				casinoClick(null, $me.val());
		}
		
		$.each(
			['#destCasinoSummary'],
			function(index, value) {
				var $slave = $(value);
				if ($slave.val() != $me.val()) {
					$slave.val($me.val()); $slave.trigger('change');
				}
			}
		);
		
		$me.data('from', null);
	});
	
	$.each(
		['#destCasinoSummary'],
		function(index, value) {
			var $lst = $(value);
			$lst.change(function() {
				var $me = $(this); var $slave = $('#destCasino');
				if ($slave.val() != $me.val()) {
					$slave.val($me.val());
					$slave.trigger('change');
				}
			});
		}
	);
	
	$('#origCityDeal').change(function() {
		changeCoupons(true);
	});

	copyHTML($('#summary_out_table').html(), '#summary_ret_table', '#casino_out_table', '#casino_ret_table');
	copyHTML($('#summary_perks_block').html(), '#casino_perks_block');
	
	changeCoupons(false);
	switchMenu('overview');	
});
