/* ***********************************************************************
	Original Author: Robert S. @ Nerdery
	   
	TOC: 
	1: 
	2: 
************************************************************************ */

/* ---------------------------------------------------------------------
1: 
------------------------------------------------------------------------ */
var IMAGE_BASE_PATH = "/sites/all/themes/azamara/globe/images/";
var JSON_IMAGE_BASE_PATH = "/";
var JSON_DATA_API = "/port/getbyregion/";
var VIEW_ITINERARIES_API = "/port/";
var DEFUALT_DESC = "Details on this port are not currently available. Please check back in soon for more information on this amazing port.";
var _currentRegionVO;
var _selectedPort = undefined;
var _imageList = new Array();
var _isNonFlashClick = false;
			
//Region Value Object to store images.
var ImagePaths = function() 
{
	this.background = '';
	this.modalImage = '';
}

//Port Value Object to store data from json/.
var PortVO = function() 
{
	this.id = 0;
	this.titleID = '';
	this.name = '';
	this.body = '';
	this.teaser = '';
	this.image = '';
}

//Region Value Object to store data from json.
var RegionVO = function() 
{
	this.id = 0;
	this.titleID = '';
	this.name = '';
	this.arrayOfPorts = [];
}

/*
*/
$(document).ready(function()
{
	var imagePath = new ImagePaths();
	imagePath.background = IMAGE_BASE_PATH + 'bg_destination_asia.jpg';
	imagePath.modalImage = IMAGE_BASE_PATH + 'Asia.png';
	_imageList["Asia"] = imagePath;
	
	imagePath = new ImagePaths();
	imagePath.background = IMAGE_BASE_PATH + 'bg_destination_caribbean.jpg';
	imagePath.modalImage = IMAGE_BASE_PATH + 'Caribbean.png';
	_imageList["Caribbean"] = imagePath;
	
	imagePath = new ImagePaths();
	imagePath.background = IMAGE_BASE_PATH + 'bg_destination_europe.jpg';
	imagePath.modalImage = IMAGE_BASE_PATH + 'Europe.png';
	_imageList["Europe"] = imagePath;
	
	imagePath = new ImagePaths();
	imagePath.background = IMAGE_BASE_PATH + 'bg_destination_europe.jpg';
	imagePath.modalImage = IMAGE_BASE_PATH + 'Mediterranean.png';
	_imageList["Mediterranean"] = imagePath;
	
	imagePath = new ImagePaths();
	imagePath.background = IMAGE_BASE_PATH + 'bg_destination_southamerica.jpg';
	imagePath.modalImage = IMAGE_BASE_PATH + 'South America.png';
	_imageList["South America"] = imagePath;
	
	imagePath = new ImagePaths();
	imagePath.background = IMAGE_BASE_PATH + 'bg_destination_transatlantic.jpg';
	imagePath.modalImage = IMAGE_BASE_PATH + 'Transatlantic.png';
	_imageList["Transatlantic"] = imagePath;
	
	
	// Pre-load images
	if (document.images)
    {
      preload_image_object = new Image();
      // set image url
      image_url = new Array();
      image_url[0] = IMAGE_BASE_PATH + 'bg_destination_asia.jpg';
      image_url[1] = IMAGE_BASE_PATH + 'bg_destination_caribbean.jpg';
      image_url[2] = IMAGE_BASE_PATH + 'bg_destination_europe.jpg';
      image_url[3] = IMAGE_BASE_PATH + 'bg_destination_europe.jpg';
      image_url[4] = IMAGE_BASE_PATH + 'bg_destination_southamerica.jpg';
      image_url[5] = IMAGE_BASE_PATH + 'bg_destination_transatlantic.jpg';

       var i = 0;
       for(i=0; i<=5; i++) 
         preload_image_object.src = image_url[i];
    }
	//End Pre-load images
	
	
	$(".globe_modal_wrapper .close").click(function(evt){
		modalClosed();
		$(".globe_modal_wrapper").hide();
		evt.preventDefault();
	});
	
	/*$("div#nonflash_globe_block a").click(function(evt){
		_isNonFlashClick = true;
		var regionName = $(this).attr("title");
		getModalData(regionName);
		evt.preventDefault();
	});*/
	
	$('.scroll-pane').jScrollPane({showArrows: true});
	
	$("div.port .itineraries").click(function(evt) {
		window.location = VIEW_ITINERARIES_API + $(this).attr("title");
		evt.preventDefault();
	});

});

/*
*/
var DataLoader = {
	regionList: new Array(),
	ajaxRequest: null,
	load: function(region) {
		var data = DataLoader.findRegion(region);
		if(data){
			loadModalData(data);
		}else{
			DataLoader.ajaxRequest = $.ajax({
										type: "GET", 
										dataType: "json",
										url: JSON_DATA_API + region,/*url: "data/json-crossdomain-proxy.php?region=" + region,*/
										success: DataLoader.parseAppJson,
										error: function(){alert("DataLoader - Loading Data Failed");}
									});
		}
	},
	parseAppJson: function(json) {
		var region = new RegionVO();
		region.titleID = json.region_data.title;
		region.name = json.region_data.field_region_name[0].value;
		var port;
		var portArray = json.ports;
		var len = json.ports.length;
		for(var i = 0; i < len; i++)
		{
			port = new PortVO();
			port.id = i;
			port.titleID = portArray[i].title;
			port.name = portArray[i].field_port_name[0].value;
			//port.body = portArray[i].body;
			port.teaser = (portArray[i].teaser == "") ? DEFUALT_DESC : portArray[i].teaser;
			
			if(portArray[i].field_port_image[0] != null){
				port.image = JSON_IMAGE_BASE_PATH + portArray[i].field_port_image[0].filepath;
			}else{
				port.image = JSON_IMAGE_BASE_PATH + "null";
			}

			region.arrayOfPorts.push(port);
		}
		DataLoader.regionList.push(region);
		loadModalData(region);
	},
	findRegion: function(region) {
		for (var i = 0; i < DataLoader.regionList.length; i++)
		{
			var boolean = DataLoader.regionList[i].name == region;
			if(boolean){
				return DataLoader.regionList[i];
			}
		}
		return false;
	}
}
function comparePortNames(a,b) {
	return (a.name).localeCompare(b.name);
}

function loadModalData(region)
{
	_currentRegionVO = region;
	var ports = _currentRegionVO.arrayOfPorts;
	ports.sort(comparePortNames);
	
	$("div.region_map img").replaceWith("<img src='" + _imageList[_currentRegionVO.name].modalImage + "' />");
	
	var ul = $(".ports_and_cities ul");
	ul.html("");
	
	for (var i = 0; i < ports.length; i++) {
		var style = ports[i].titleID == _selectedPort ? "selected" : "";
		ul.append("<li><a class='" + style + "' href='#' title='" + ports[i].titleID + "'>" + ports[i].name + "</a></li>");
	}
	if(_selectedPort != undefined) { 
		getPortData(_selectedPort);
	}else{
		getPortData(ports[0].titleID);
		$(".ports_and_cities ul li:first-child a").addClass("selected");
	}
	_selectedPort = undefined;

	$(".ports_and_cities li a").click(function(evt) {
		selected($(this));
		getPortData($(this).attr("title"));
		$('.scroll-pane').jScrollPane({showArrows: true}).data('jsp').reinitialise();
		evt.preventDefault();
	});
	
	$(".globe_modal_wrapper #modal_content").children().show();
	$('.scroll-pane').jScrollPane({showArrows: true}).data('jsp').reinitialise();
}

function getModalData(regionString, port)
{
	_selectedPort = port;
	
	//Abort ajax request if one is requested before the current one is finished.
	if(DataLoader.ajaxRequest){
		DataLoader.ajaxRequest.abort();
	}		if(_isNonFlashClick == false)	{		$('body').css("background-image", "url(" + _imageList[regionString].background +")");	}	var delay = function() { getMoreModalData(regionString); };	setTimeout(delay, 1000);
}function getMoreModalData(regionString) {	$(".globe_modal_wrapper #modal_content").children().hide();	$(".globe_modal_wrapper #modalPreLoader").show();	$(".globe_modal_wrapper").show();	DataLoader.load(regionString);}
function getPortData(titleID)
{
	$(".globe_modal_wrapper #modalPreLoader").hide();

	for (var i = 0; i < _currentRegionVO.arrayOfPorts.length; i++) {
		var boolean = _currentRegionVO.arrayOfPorts[i].titleID == titleID;
		if(boolean){
			$("div.port h3").html(_currentRegionVO.arrayOfPorts[i].name);
			$("div.port div.scroll-pane p").html(_currentRegionVO.arrayOfPorts[i].teaser);
			$("div.port img").replaceWith("<img width='75' height='46' src='" + _currentRegionVO.arrayOfPorts[i].image + "' />").addClass("pngFix");
			$("div.port .itineraries").attr("title", _currentRegionVO.arrayOfPorts[i].titleID);
			//$("div.port .itineraries").attr("href", _currentRegionVO.arrayOfPorts[i].titleID);//Breaks in IE6
			return;
		}
	}
}

function selected(item)
{
	var ul = $(".ports_and_cities ul li a").removeClass("selected");
	item.addClass("selected");
}

function getSWF(swfName) 
{
	return document[swfName] || window[swfName];
}

function modalClosed()
{
	var swf = getSWF("Preloader");
	
	if(swf){
		swf.modalClosed();
	}
}
