/**************************************************************************************
* HDVRT Direct Air API
* filename: hdvrt-api.js
* Copyright (C)2010 HD VR Tours Inc. All Rights Reserved.
* Code is licensed to HD VR Tours Inc.
* DO NOT COPY, USE OR MODIFY WITHOUT PERMISSION
* Contact: info@hdvrtours.com
**************************************************************************************/

/** util modules **/

//module consolelog:void - cross browser console log (IE safe)
function consolelog(str){
	if(typeof console != "undefined"){
		console.log(str);	
	}
}

//module inArray:boolean - returns true if item is in array, false otherwise
var inArray = function(sitem,array){
	for(i=0;i<array.length;i++){
		if(array[i]==sitem) return true;
	}
	return false;
}

/** general page modules **/

//module loadWideIFrame:void - loads virtual tour iframe in container over all page elements
var loadWideIFrame = function(){
	 if(document.getElementById('vrtouriframe')){
		 $('#ajaxiframe').css("position","absolute");
		 $('#hdvrtmaintable').animate({width: ($(window).width()-80)}, 500 );		 
		 $('#ajaxiframe').css("zIndex",10000000000);	

	 }else{
		 $('#ajaxiframe').css("position","static");
		 $('#ajaxiframe').css("zIndex",10000000000);
	 }
 }
 
 
 
 //module loadLinkMods:void - modifies link events for various actions
 var loadLinkMods = function(){
	$(".fullpageiframelink").click(function(){						
		consolelog("hdvrt tev:"+this.rel);
		//_gaq.push(['_trackEvent','directair','ViewTourClick',this.rel]);	
		//if(pageTracker){
		//	consolelog("vda tev:"+this.rel);
		//	pageTracker._trackEvent('directair','ViewTourClick',this.rel);
		//}			
		//open full page iframe		
		document.getElementById('fullscreeniframe').src = this.href;				
		$("#fullscreeniframecontainer").css("display","");
		//compute the iframe's height
		var iframeHeight = $("#fullscreeniframecontainer").height() - 37;
		document.getElementById('fullscreeniframe').height = iframeHeight;				
		//$("#droppable").hide();
		return false;
	});		
	
	$("#closeiframe").click(function(){
		$("#fullscreeniframecontainer").css("display","none");
		//$("#droppable").show();
		return false;
	});											
 }
 
//module loadTabs:void - loads jquery tabs on destination page
 var loadTabs = function(){
			var tabContainers = $('div.tabs > div');
			tabContainers.hide().filter(':first').show();
			
			$('div.tabs ul.tabNavigation a').click(function () {
															 
					if(this.rel && this.rel != ""){
						consolelog("hdvrt tev:"+this.rel);
						_gaq.push(['_trackEvent','directair','TabClick',this.rel]);	
						/*
						if(pageTracker!=undefined){
							consolelog("vda tev:"+this.rel);
							pageTracker._trackEvent('directair','TabClick',this.rel);
						}
						*/						
					}															 
					
					tabContainers.hide();
					tabContainers.filter(this.hash).show();
					$('div.tabs ul.tabNavigation a').removeClass('selected');
					$(this).addClass('selected');
					return false;
			}).filter(':first').click();
 }

 
 /** trip basket modules **/
 
 //module validateBasket:boolean - validates that trip basket is not empty. displays message if basket is empty
 var validateBasket = function(message){
	$.ui.dialog.defaults.bgiframe = true;
	if($("#tripbasket > .draggable").length==0){
		$("<div title='Trip Basket Message'>"+message+"</div>").dialog({
			bgiframe: true,
			height: 140,
			modal: true,
			buttons: {
							Ok: function() {
								$(this).dialog('close');
							}
						}
			
		});		
		return false;
	}
	return true;
 }
 
//module loadTripBasketLinkMods:void - loads link modifications to trip basket
 var loadTripBasketLinkMods = function(){
	//validate basket links
	$(".validatebasket").each(function(){
		$(this).click(function(){
			return validateBasket($(this).attr("message"));
		});
	});
 }
 
//module saveBasket:void - saves basket items to cookie
var saveBasket = function(){
	var idList = [];
	$("#tripbasket > .draggable").each( function(){
		var id = $(this).find(".ajaxlink").attr('href').match(/tour=([0-9]+)/)[1];
		idList.push(id);
//		consolelog(idList.join());
	});
	//alert("Saving:"+idList.join());
	jaaulde.utils.cookies.set(LOCATION+"-tb",idList.join());
}

//module removeFromBasket:void - removes passed item from basket, updates basket total, saves basket
var removeFromBasket = function(obj){
	$(obj).parent().parent().fadeOut(500, function() {
			$(this).remove();
			updateBasketTotal();	
			saveBasket();	
	});
};

//module removeDuplicatesFromBasket:void - removes duplicate items from basket
var removeDuplicatesFromBasket =  function(){
	var idList = [];
	$("#tripbasket > .draggable").each( function(){
		var id = $(this).find(".ajaxlink").attr('href').match(/tour=([0-9]+)/)[1];
		if(inArray(id,idList)) $(this).remove();
		
//		consolelog("removed item with id: "+id+" - id array: "+idList.join());
		idList.push(id);		
	});
	//alert("before: "+idList.join());
	//alert("removing duplicates");
	//alert("before: "+idList.join());	
	jaaulde.utils.cookies.set(LOCATION+"-tb",idList.join());	
}

//module updateBasketTotal:void - updates basket total
var updateBasketTotal = function(){
	$("#tripbasket-total-items").html($("#tripbasket > .draggable").length);
}


//module addToTripBasket:void - adds items to trip basket
var addToTripBasket = function(obj){	
	////alert("PRE:"+obj.html());
	obj.find('.featuredbox').remove();	
	obj.find('.featurebox').remove();		
	var removeLink = "<div align='right' style='background-color:#123D87; padding-right:3px; padding-bottom:3px;'><a href='#' onclick='removeFromBasket(this); return false;' style='font-weight:bold; text-decoration:none; color:#FFFFFF'>x</a></div>";
	obj.css('border','1px solid #123D87').css('background-color','#FFFFFF').css('height','120px').css('overflow','hidden').css('float','left').css('margin','1px 1px 1px 1px').css('padding','1px').css('width','72px').find('img').css('width','70px').css('height','37px');
	obj.prepend(removeLink);
	////alert(obj.html());
	obj.hide().prependTo("#tripbasket").fadeIn('slow');
	removeDuplicatesFromBasket();
	updateBasketTotal();
	saveBasket();
}

//module attachBasket:void - attaches basket to outer side of main directair table
var attachBasket = function(){
	//get outer right x position of main table
	var droppableLeft = $(".background-body").offset().left+$(".background-body").outerWidth() - 10;
	//get px from scroll window
	var droppableTop = ($(window).scrollTop() + 50) + "px";
	$("#droppable").css('position','absolute').css('left',droppableLeft).css('top',droppableTop).css('display','');	
}

//module moveBasket:void - moves basket along outer side of main directair table when page is scrolled
var moveBasket = function(){
	//get outer right x position of main table
	var droppableLeft = $(".background-body").offset().left+$(".background-body").outerWidth() - 10;
	//get px from scroll window
	var droppableTop = ($(window).scrollTop() + 50) + "px";
	$("#droppable").animate({"left": droppableLeft, "top": droppableTop}, {duration:500,queue:false});
	
}

//module loadTripBasketItems:void - loads trip basket items from ajax page (based on cookie)
var loadTripBasketItems = function(){
	if(jaaulde.utils.cookies.get(LOCATION+"-tb") && jaaulde.utils.cookies.get(LOCATION+"-tb") != "undefined" ){
		var tsTimeStamp= new Date().getTime();
		$.get("hdvrtproxyV2.php", { p:"tripbaskettours", l:LOCATION, time: tsTimeStamp }, function(data){
				    $("#tripbasket").find('p').detach();
					$("#tripbasket").css("padding","3px");							
					$("#tripbasket").append($(data));
					removeDuplicatesFromBasket();
					updateBasketTotal();
					saveBasket();						
		});		
	}
}

//module loadTripBasket:void - main module to start trip basket
var loadTripBasket = function(){

	
	//fetch basket contents
	loadTripBasketItems();
	
	//make basket droppable
	$("#tripbasket").droppable({
			activeClass: 'tripbasketactive',
			hoverClass: 'tripbaskethover',							  
			drop: function(event, ui) {		
				addToTripBasket(ui.draggable.clone());
			    $(this).find('p').detach();
				$("#tripbasket").css("padding","3px");						

			}
	});	
	
	//enable dragging
	enableTripBasketDraggableItems();
	
	//attach and move basket
	attachBasket();
	
	$(window).resize(function() { moveBasket(); });	
	$(window).scroll(function() { moveBasket(); });
	
	loadTripBasketLinkMods();
	
}

var enableTripBasketDraggableItems = function(){
	$(".draggable").draggable({ revert: 'invalid', helper: 'clone', zIndex:2 });		
}

/*** Itinerary Trip Basket Modules ***/

//module loadItineraryLinkMods:void - loads link modifications to itinerary trip basket
 var loadItineraryLinkMods = function(){
	//add day to itinerary
	$(".tb-itinerary-addtoitinerary").each(function(){
		$(this).click(function(){
			addDayToItinerary();
			return false;
		});
	});
	//remove item
	$(".tb-item-remove").each(function(){
		$(this).click(function(){
			removeFromTBItinerary(this);
			return false;
		});
	});	
	
 }
 
 
 
//module saveTBItinerary:void - save trip basket items and itinerary items by day
var saveTBItinerary = function(){
	//save trip basket in general
	var idList = [];
	$(".draggable").each( function(){
		var id = $(this).find(".ajaxlink").attr('href').match(/tour=([0-9]+)/)[1];
		idList.push(id);
	});
	consolelog("saving:"+idList.join());
	jaaulde.utils.cookies.set(LOCATION+"-tb",idList.join());	
	
	//save itinerary days
	var masterList = [];
	$("#tb-itinerary > .day").each( function(){ //for each day in itinerary
		//grab items in day
		idList = [];
		$(this).find(".draggable").each( function(){
			var id = $(this).find(".ajaxlink").attr('href').match(/tour=([0-9]+)/)[1];
			idList.push(id);
		});
		//save day list (if needed)
		masterList.push(idList.join());
	});
	jaaulde.utils.cookies.set(LOCATION+"-tb-it",masterList.join("|"));		
	consolelog("Saving Cookie: "+LOCATION+"-tb-it->  "+masterList.join("|"));		
	
	//update share url
	var shareURL = getShareURL();
	$("#share").attr("addthis:url", shareURL);	
	addthis.toolbox(".addthis_toolbox");

	
		
}


//mdoule getShareURL:string - returns share url base 64 encoded
var getShareURL = function(){
	var tbIt = jaaulde.utils.cookies.get(LOCATION+"-tb-it");
	var newURL = PDOMAINURL + window.location.pathname;
	newURL += "?l=" + $(document).url().param("l");
	newURL += "&p=" + $(document).url().param("p");
	newURL += "&tb=" + $.base64Encode(jaaulde.utils.cookies.get(LOCATION+"-tb"));
	if(tbIt != "" && tbIt != null){
		consolelog("adding it:"+tbIt);
		newURL += "&it=" + $.base64Encode(tbIt);
	}
		
		
	consolelog(newURL);
	return newURL;
}
 
//module removeFromTBItinerary:void - remove element from itinerary and trip basket
var removeFromTBItinerary = function(item){
	$(item).parents(".draggable").fadeOut(500, function() {
			$(this).remove();
			saveTBItinerary();	
	});
} 

//module getDaysInItinerary:int - returns number of days in itinerary
var getDaysInItinerary = function(){
	return $("#tb-itinerary > .day").length;
}

//module addDayToItinerary:void - adds day html to itinerary
var addDayToItinerary = function(){
	var newDay = getDaysInItinerary() + 1;
	var newDayHTML = '<div class="subheader daytitle">Day '+newDay+' Activies</div><div class="day"><p>Drag items here for day '+newDay+' itinerary.</p></div>';
	$(newDayHTML).appendTo("#tb-itinerary").hide().fadeIn();
	loadDroppableItineraryItems();
	saveTBItinerary();
}

//module loadDraggableItineraryItems:void  - loads draggable items for itinerary
var loadDraggableItineraryItems = function(){
	$(".draggable").draggable({ revert: 'invalid', helper: 'clone', zIndex:2 });			
	consolelog("total draggables:"+$(".draggable").length);
}

//module addToItineraryDay:void - adds draggable element to itinerary day
var addToItineraryDay = function(item, day){
	$(item).appendTo($(day));//.hide().fadeIn();
	setTimeout("saveTBItinerary()",500); //wait for item to full be appending
}


//module loadDroppableItineraryItems:void  - loads droppable items for itinerary
var loadDroppableItineraryItems = function(){
	//make basket droppable
	$("#tb-itinerary > .day").each(function(){
		$(this).droppable({
			activeClass: 'tb-itinerary-day-active',
			hoverClass: 'tb-itinerary-day-hover',							  
			drop: function(event, ui) {		
				addToItineraryDay(ui.draggable, this);
			}
		});		
	});
	consolelog("total droppables:" + $("#tb-itinerary > .day").length);
	
	//update share url
	var shareURL = getShareURL();
	$("#share").attr("addthis:url", shareURL);	
	addthis.toolbox(".addthis_toolbox");

}

var loadTripBasketItinerary = function(){
	loadItineraryLinkMods();
	loadDroppableItineraryItems();
	loadDraggableItineraryItems();
	
}


/******* End HDVRT Modules *************/

//begin async google analytics
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-12634222-1']);
consolelog('hdvrt tpv: '+window.location);
_gaq.push(['_trackPageview']);
(function() {
	var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
	ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
	(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ga);
})();
//end asyunc google analytics

var triggerTour = function(){
	if($(".fullpageiframelink")){
		console.log('in trigger click');
		$(".fullpageiframelink").trigger('click');
	}
}

//module loadHDVRTPage:void - load hdvrt page
var loadHDVRTPage = function(){
 
	consolelog("Loading HDVRT Page");
	//load plugin pages content
	switch($(document).url().param('p')){
		default: //all other pages
			loadTabs(); //load page tabs js
			loadLinkMods();	 //load link event mods/actions
//			loadTripBasket(); //load trip basket
//			consolelog("loading trip basket");
			triggerTour();//trigger tour if needed
	}
};
	

 $(document).ready(function(){
	//work around to ensure all scripts load due to issues in chrome
	//load url parsing support
	$.getScript(DOMAINURL+"/js/jquery.url_toolbox.js", function(){ 
		consolelog("jquery toolbox loaded");
		//load cookie support
		$.getScript(DOMAINURL+"/js/jquery.cookies.2.2.0.min.js", function(){ 
			consolelog("jquery cookies loaded");
			//load base 64 support
			$.getScript(DOMAINURL+"/js/jquery.base64.js_1.js", function(){
				consolelog("jquery base64 loaded");
				loadHDVRTPage();
			});	
		});
	});
});


