//create closure
(function($) {
	
	// plugin definition	
	// e must be an event object containing a media-explorer A element
	$.fn.mediaexplorer_display = function(e,options) {
		

		
		// build main options before element iteration
		var opts = $.extend({}, $.fn.mediaexplorer_display.defaults, options);				
				
		// iterate over each matched element
		return this.each(function() {
							
			var self = this;
			var appliedEvents = false;
					
			//request xml data based apon parameters in data object ie {id: 'uniqueKey', type: 'image'}
			var requestData = function (data){
				//extract media item data
				var data;
				var h=$(e).attr('href');
				var id=$.getURLParameter(h,'id');		
				var type=$.getURLParameter(h,'type');							

				//build query params
				switch(type){
					case "gallery":
						var image_no=$.getURLParameter(h,'image_no');							
						data="display=1&type=" +type +"&id=" +id +"&image_no=" +image_no; 
						break;
					default: 
						data="display=1&type=" +type +"&id=" +id; 
						break;
				}		

				//make ajax request and assign error/success handlers 
				//error/success functions required to mantain scope
				$.ajax({
					url: opts.ajaxURL +type +"/" +id +".xml",
					processData: false,
					data: data,
					dataType: "text",
					error: 		function(data){	onDataError(data);	},
					success: 	function(data){	onDataSuccess(data);	}
				});	
			}			
			
			

			var onDataError = function (data){
				alert("There was an error requesting data.");
			}
			
			//handle media item XML data response 
			var onDataSuccess = function (data){													
				jData=$(XMLObjectifier.textToXML(data));
				$.focusOn($(self));
				updateMediaInfo(jData);
				handleMedia(jData);
				applyEvents();
				
				//broadcast event
				$(self).trigger('onDataEvent',jData);
			}	

			//determine how to handle media data
			var handleMedia=function(jData){		
				var type = $(jData.find("type")[0]).text();
				switch(type){
					case "gallery":				
						//var id = $(jData.find("id")[0]).text();
						//var noOfImages = $(jData.find("image_count")[0]).text();
						//writeImageGallery(id,noOfImages);
						writeImageGallery(jData);						
						break;		
					case "video":
						var playlist = "http://" +window.location.host + $(jData.find("playlist")[0]).text();						
						$.writeEMP(opts.empID,playlist,opts.videoWidth,opts.videoHeight);										
						break;
					case "audio":
						var playlist = "http://" +window.location.host + $(jData.find("playlist")[0]).text();
						$.writeEMP(opts.empID,playlist,opts.audioWidth,opts.audioHeight);				
						break;						
					case "image":						
						writeImage(jData);												
						//writeImageSizeLinks(jData)
						break;								
					default:				
						break;
				}	
			}	

			//write a single image
			var writeImage=function(jData){ 				
				var image_url = $(jData.find("image")[0]).text();
				var image_lightbox_url = $(jData.find("lightbox_image")[0]).text();
				var title = $(jData.find("title")[0]).text();
				var i='<img src="' +image_url +'" alt="' +title +'" width="' +opts.imageWidth +'" height="' +opts.imageHeight +'" />';
				$(self).find('.display').html($.meGalleryTemplate);
				$(self).find('.display .me-gallery .image-container').html(i);
				//$(self).find('.display .me-gallery .controls .info').html(title);
				if(image_lightbox_url.length){
					$(self).find('.display .me-gallery .controls UL.extra').append('<li class="lightbox"><a href="' +image_lightbox_url +'?lightbox_url=' +image_lightbox_url +'">' +opts.lightboxLabel +'</a></li>');
				}
			}	

			//write an image gallery and apply $imagegallery plugin
			var writeImageGallery=function(jData){ 						
				//var writeImageGallery=function(id,noOfImages){ 						
				var options={
					ajaxURL: opts.ajaxURL,
					lightboxLabel: opts.lightboxLabel,
					type: 'gallery',
					id: $(jData.find("id")[0]).text(),
					noOfImages: jData.find("image_item").length,
					jData: jData,
					imageWidth: opts.imageWidth,
					imageHeight: opts.imageHeight
				}				
				$(self).find('.display').html($.meGalleryTemplate);
				$(self).find('.display .me-gallery').mediaexplorer_imagegallery(options);
			}			
			
			
			var applyEvents=function(){ 															
				if(appliedEvents) return;
				appliedEvents=true;
				$activeLIElements=$(self).find('.controls UL LI').filter(':not(.disabled)');
				addLIEvents($activeLIElements);
				
				$(self).find('.controls UL LI.lightbox A').click(doLightbox);								
			}	
			
			var addLIEvents=function($selection){
				$selection.each(function(){
					$(this).addClass('js').click(function(e){
						e.preventDefault();						
						$(this).find('A').trigger('click');
					}).hover(function(){
						$(this).addClass('hover');
					},function(){
						$(this).removeClass('hover');
					});				
				});
			}

			//write a single image
			var doLightbox=function(e){ 				
				e.preventDefault();
				var h=$(this).attr('href');
				var src=$.getURLParameter(h,'lightbox_url');
				var alt=$(this).attr('title');
				var options={overlay: 80};//, close: false, closeTitle: "close image"}
				var html='<img src="' + src +'" alt="' +alt +'" />';					
				//html+="<p class=\"title\">" + $(jData.find("title")[0]).text() + "</p>";
				//html+="<p class=\"credit\">" + $(jData.find("author")[0]).text() + "</p>";
				$.modal(html,options);				
			}			
			

			//update media info elements
			var updateMediaInfo=function(jData){				
				var type = jData.find("type")[0].textContent;								
				var id = jData.find("id")[0].textContent;								
				var title = jData.find("title")[0].textContent;								
				var summary = jData.find("summary")[0].textContent;
				
				$(self).find('.me-info').hide();
				
				//$('.me-info .title').html(title);
				//$('.me-info .summary').html(summary);
			}			
			if(e==null){
				applyEvents();
			}else{
				requestData(e);
			}
			
			

			
			
		});
		//end this.each loop
	};
	//end $.fn.mediaexplorer_display

		
	



	

	
	// plugin defaults	
	$.fn.mediaexplorer_display.defaults = {		
		ajaxURL: '',	
		lightboxLabel: 'View in Lightbox',
		empID: 'explorer_emp',
		imageWidth: 448,
		imageHeight: 252,
		videoWidth: 448,
		videoHeight: 287,
		audioWidth: 448,
		audioHeight: 106 
	};
	

// end of closure
})(jQuery);

