//      __________________
//     .-'  \ _.-''-._ /  '-.
//   .-/\   .'.      .'.   /\-.
//  _'/  \.'   '.  .'   './  \'_
// :======:======::======:======:
//  '. '.  \     ''     /  .' .'
//    '. .  \   :  :   /  . .'
//      '.'  \  '  '  /  '.'
//        ':  \:    :/  :'
//          '. \    / .'
//            '.\  /.'    AwM    -   amahon@gmail.com
//              '\/'      LocalProjects/ns11mm - 2009

(function($){
	jQuery.fn.presentation = function(options){
		var $p = jQuery(this);
		
		var options = jQuery.extend({
			query:null,
			page:null,
			baseUrl:null
		},options);
		
		function initialize(){
			if(options.query != null && options.query != "null"){
				$p.$streamLoader.loadStream("search",options.query,options.page);
			} else {
				$p.$streamLoader.loadStream("search", "nearby:%22World%20Trade%20Center,%20New%20York,%20NY%2010280,%20USA%22%20approved:true", null)
				$timeline.slideToSectionIndex(1);
			};
		};
		$p.init = function(){
			initialize();
		};
		
		var streetview_initialized = false;
		var stream_cache = null;
		
		//Global Functionality
		
		$p.$streamLoader = jQuery("<div></div>").presentationStreamLoader({});
		
		$p.bind("streamLoaderBegin",_streamLoaderBeginHandler);
		function _streamLoaderBeginHandler(e,ui){
			$map.showLoader();
			$timeline.showLoader();
		};
		
		$p.bind("streamLoaderError",_streamLoaderErrorHandler); 
		function _streamLoaderErrorHandler(e,ui){
			//do something here!
			return;
		};
		
		$p.bind("streamLoaded",_streamLoadedHandler);
		function _streamLoadedHandler(e,ui){
			$map.update(ui.data);
			$timeline.update(ui.data);
			if (streetview_initialized) {
				$streetview.update(ui.data);
			} else {
				stream_cache = ui.data;
			};
		};
		
		$p.bind("cancelEvent",_cancelEventHandler);
		function _cancelEventHandler(){
			$map.cancel();
			$timeline.cancel()
			$streetview.cancel();
		};
		
		//Streetview
		var $streetview = $p.children(".streetview_holder").presentationStreetview({});
		$p.initializeStreetview = function(){
			var streetview_options = {};
			streetview_options.baseUrl = options.baseUrl;
			streetview_options.mapsAPIKey = options.mapsAPIKey;
			if(options.query != null && options.query != "null"){
				streetview_options.showMenu = false;
			} else {
				streetview_options.showMenu = true;
			};
			$streetview.init(streetview_options);
		};
		$p.streetview = function(){
			return $streetview;
		};
		
		$p.bind("streetviewLoaded",_streetviewLoadedHandler);
		function _streetviewLoadedHandler(e,data){
			return;
		};
		
		$p.bind("streetviewError",_streetviewErrorHandler);
		function _streetviewErrorHandler(e,data){
			//console.log("[STREETVIEW ERROR] ---!!!!!");
			//console.log(data);
			return;
		};
		
		$p.bind("streetviewMediaItemViewChange",_mediaItemViewChangeHandler);
		function _mediaItemViewChangeHandler(e,data){
			$map.selectAndPanToMarkerById(data.media_id);
			$timeline.slideToSectionIndex(data.timeframe_index);
		};
		
		$p.bind("streetviewStreamSelected",_streetviewStreamSelectedHandler);
		function _streetviewStreamSelectedHandler(e,data){
			if(data.stream_id != null && data.type != null){
				$p.$streamLoader.loadStream(data.type, data.stream_id, null)
			};
		};
		
		$p.bind("mediaCuepointHit",_mediaCuepointHitHandler);
		function _mediaCuepointHitHandler(e,data){
			$map.showTemporaryMarkerFromCuepointData(data);
			$timeline.slideToSectionIndex(data.timeframe_index);
		};
		
		$p.bind("triggerSearchQuery",_triggerSearchQueryHandler);
		function _triggerSearchQueryHandler(e,data){
			$p.$streamLoader.loadStream('search',data.query, null);
		};
		
		//Map
		var $map = $p.children(".controls_holder").children(".controls_inner").children(".map_holder").presentationMap({});
		
		$p.bind("mapMarkerClicked",_mapMarkerClickedHandler);
		function _mapMarkerClickedHandler(e,data){
			$p.$streamLoader.loadStream('nearby',data.clicked.id, null);
		};	
		
		$p.bind("locationSearchEvent",_locationSearchEventHandler);
		function _locationSearchEventHandler(e,data){
			$p.$streamLoader.loadStream(data.type,data.query, null)
		};
		
		//Timeline
		var $timeline = $p.children(".controls_holder").children(".controls_inner").children(".timeline_holder").presentationTimeline({});
		
		$p.bind("timelineSectionClicked",_timelineSectionClickedHandler);
		function _timelineSectionClickedHandler(e,data){
			$p.$streamLoader.loadStream('search',"timeframe:"+data.timeframeIndex+' approved:true', null);
		};
		
		$p.bind("loaderComplete", _loaderCompleteHandler);
		function _loaderCompleteHandler(e){
			//console.log("######### loader complete");
			//console.log(stream_cache);
			if (stream_cache != null && options.query != null && options.query != "null")
				$streetview.update(stream_cache);
			streetview_initialized = true;
			stream_cache = null;
			return;
		}
		
		return $p;
	}	
})(ns11mmPresentation);
