//create closure
(function($) {

	// plugin definition	
	$.fn.imagegallery = function(options) {
		
		// build main options before element iteration
		var opts = $.extend({}, $.fn.imagegallery.defaults, options);		
		
		// iterate over each matched element
		return this.each(function() {
			
			var self = this;
		
			//handle click on media item
			var onImageItemClick = function(e){
							
				$eventElement=$(e.target);				
				var params={};
				var h=$eventElement.attr('href');
				var id=getURLParameter(h,'id');		
				var type=getURLParameter(h,'type');								
				var image_no=getURLParameter(h,'image_no');								
				
				var params={id: id, type: type, image_no: image_no};			
								
				//request data
				//$.get(opts.ajaxURL, params,onImageDataResponse);				
				e.preventDefault();

				$.ajax({
					url: opts.ajaxURL,
					processData: false,
					data: data,
					dataType: "text",
					error: onImageDataError,
					success: onImageDataSuccess
				});				
			}
			//handle media item XML data response 
			var onImageDataError = function (data){
				alert("There was an error requesting data.");
			}			
			//handle media item XML data response 
			var onImageDataSuccess = function (data){
				jData=$(XMLObjectifier.textToXML(data));
				//var image_url = $(jData.find("image_url")[0]).textContent;
				//var image_no = $(jData.find("image_no")[0]).textContent;									
				//writeImage($(self),image_url,512,288);								
			}
			var writeImageControls=function(image_no,no_of_images){ 
				var h="<ul>";
				for(var i=1; i<=no_of_images;i++){
					var cls=i==image_no?' class="selected"' : '';
					var link='?type=' +opts.type +'&id=' +opts.id +'&image_no=' +i;
					var title='View Image ' +i +' of ' +no_of_images;				
					var label=i;
					h+="<li " +cls +"><a href=\"" +link +"\" title=\"" +title +"\">" +label +"</a></li>";
				}
				h+="</ul>";
				$(self).find('.image-controls').html(h).css('display','block');			
			}			
			
			writeImageControls(-1,opts.noOfImages);
			
			$(this).find('.image-controls a').bind('click',onImageItemClick);
			var links=$(this).find('.image-controls a');
			$(links[0]).trigger('click');
						
		});
		//end this.each loop

	};
	//end $.fn.imagegallery


	function writeImage($target,url,width,height){ 
		var i='<img src="' +url +'" alt="" width="' +width +'" height="' +height +'" />';
		$target.find('.image-container').html(i);
	}

	
	
	
	//DEFINE THIS AS A GENERAL JQUERY METHOD
	//extract a specific parameter from a string
	function getURLParameter (url,name){
		name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
		var regexS = "[\\?&]"+name+"=([^&#]*)";
		var regex = new RegExp( regexS );
		var results = regex.exec( url );
		if( results == null )
			return "";
		else
			return results[1];
	}

	
	// plugin defaults	
	$.fn.imagegallery.defaults = {		
		ajaxURL: '',
		type: 'gallery',
		id: '',
		imageNumber: 1,
		noOfImages: 0
	};
	

// end of closure
})(jQuery);

