/*
* jQuery UI gallery 1.0
* 
* Copyright (c) 2009 aspedia GmbH (http://aspedia.de)
* 
* Depends:
*   ui.core.js
* 
*/

(function($) {
$.widget("ui.gallery", {
	
	_init: function() {	
	
		var self = this;
		self._objectRegistry();
		
		self.element.bind("mouseenter ", function(e){
			self._manageActiveInstance();
		});
		
		/**
		 * listen on document if some key is pressed
		 */ 
		$(this.document).keydown(function(e){
			if(self.options.active === true) {
				self._listenKey(e);
			}
		});
		
		self.options.pageinfo = self._getPageByHash(location.hash);
		self._startInitialization();
		
		var curinfo = self._getPageByHash(location.hash);
				
		if(self.options.showhash == true && self.options.mode == 2){
			var pagedata = self._pageHashControll(curinfo[0], location.hash, curinfo[1]);
			location.href = "#"+pagedata[0];
		}
				
		if(self.options.pageinfo[1] == "imageid"){
			self._selectPicture(self.options.pageinfo[0]);
		}
		else{
			var picturerange = self._getDataIndexRange(self.options.pageinfo[0]);
			self._selectPicture(self.options.data[picturerange[0]].id);
		}
		
		
		
		if(self.options.mode == 1){
			if(self.options.pageinfo[1] == "imageid"){
				var curkey = self._getDataPositionByPictureId(self.options.pageinfo[0]);
				self._buildDetail(self.options.data[curkey]);
			}
			else{
				self._buildDetail(self.options.data[0]);
			}
		}
		
		self._buildNextArrow();
		self._buildPrevArrow();

		
	},
	
	_objectRegistry: function() {
		
		var self = this;
		if($.isArray($.ui.gallery.instance) === false){
			$.ui.gallery.instance = new Array();
		}			
		$.ui.gallery.instance[$.ui.gallery.instance.length] = self;
		
	},		
	
	_manageActiveInstance: function() {
		
		var self = this;
		$.grep($.ui.gallery.instance, function(n, i){
			n.setDisabled();
		});
		self.setEnababled();
		
	},	
	
	setEnababled: function() {
		
		var self = this;
		self.options.active = true;
		
	},
	
	setDisabled: function() {
		
		var self = this;	
		self.options.active = false;
		
	},
	
	_startPageHashControllInterval: function() {
		
		var self = this; 				
		setInterval(function(){
			if(self.options.active === true) {
				if(self.options.pagehash != location.hash){
					//self._startInitialization();
				}
			}
		}, 300);
		
	},
	
	_listenKey: function(event) {
		
		var self = this;
		var keyCode = event.keyCode;
		
		if(	keyCode == 37
			|| keyCode == 39
			|| keyCode == 38
			|| keyCode == 40){
			if(event.preventDefault)
				event.preventDefault();
			else
				event.returnValue=false;
			
		}
		
		var selectedpic = self.options.selectedpicture;
		
		if(self.options.navigateonlydetail == false){
			selectedpicnew = self._getSelectedPictureId(keyCode, selectedpic);
			
			var infos = self._getCurrentIndexRangeByPictureId(selectedpicnew);
				
				
			if(infos[2] != self.options.pageinfo[0]){
				self.options.pageinfo = new Array(infos[2], "pagenumber");
				self._startInitialization();
				//self._handleSwitchEffevts(keyCode);
			}
			
			self._selectPicture(selectedpicnew);
			
			if(selectedpicnew != selectedpic){
				self._deselectPicture(selectedpic);
			
			if(self.options.mode == 1){
				self._buildDetail(self._getPictureDataById(self.options.selectedpicture));
			}else if(self.options.mode == 2 && keyCode == 13){
				self.element.hide();
				self.options.navigateonlydetail = true;
				self._buildDetail(self._getPictureDataById(self.options.selectedpicture));
			}else if(self.options.mode == 3 && keyCode == 13){
				var data = self._getPictureDataById(self.options.selectedpicture);
				location.href = data.link;
			}		

			}
			
		}else{		
			self._switchOnlyDetailView(keyCode);
		}
		
	},
	
	_handleSwitchEffevts: function(key){
		var self = this;
		var speed = 1000;
		switch(key){
		case 37:
			if(self.options.scroll == 1){
				self.element.show('slide', {direction: 'right'}, speed);
			}
			break;
		case 39:
			if(self.options.scroll == 1){
				self.element.show('slide', {direction: 'left'}, speed);
			}
			break;
		case 38:
			if(self.options.scroll == 2){
				self.element.show('slide', {direction: 'down'}, speed);
			}
			break;
		case 40:
			if(self.options.scroll == 2){
				self.element.show('slide', {direction: 'up'}, speed);
			}
			break;
			default:
				break;
		}
	},
	
	_switchOnlyDetailView: function(key){
		var self = this;
		if(key == 37){			
			self._buildDetail(self._getPrevPictureByPictureId(self.options.selectedpicture));
		}else if(key == 39){
			self._buildDetail(self._getNextPictureByPictureId(self.options.selectedpicture));
		}
	},
	
	_getPrevPictureByPictureId: function(id){
		var self = this;
		var curkey = self._getDataPositionByPictureId(id);
		var key = curkey - 1
		if(key < 0){
			key = 0;
			if(self.options.roundabout == true){
			key = self.options.data.length - 1;
			}
		}
		self.options.selectedpicture = self.options.data[key].id;
		return self.options.data[key];
	},
	
	_getNextPictureByPictureId: function(id){
		var self = this;
		var curkey = self._getDataPositionByPictureId(id);
		var key = curkey + 1
		if(key > (self.options.data.length - 1)){
			key = (self.options.data.length - 1);
			if(self.options.roundabout == true){
			key = 0;
			}
		}
		self.options.selectedpicture = self.options.data[key].id;
		return self.options.data[key];
	},
	
	_startInitialization: function(){
		var self = this;
		
		var info = self.options.pageinfo;

		var page = info[0];
		if(info[1] == "imageid"){
			page = self._getPageByPicture(info[0]);
		}
		
		var picturerange = self._getDataIndexRange(page);
		
		
		if(self.options.showhash == true && self.options.mode == 2){
			var pagedata = self._pageHashControll(info[0], location.hash, info[1]);
			location.href = "#"+pagedata[0];
		}

		if(self.options.mode == 2 && info[1] == "imageid")
		{
			var curkey = self._getDataPositionByPictureId(info[0]);
			self.element.hide();
			self.options.navigateonlydetail = true;
			self._buildDetail(self.options.data[curkey]);
		}else{
			self.element.html(self._buildOverview(picturerange));
		}
		

		self._buildPageNavigator();
				
	},
	
	_selectPicture: function(id){
		
		var self = this;
		if(self.options.switchstepmode == 1){
			$("div[id=\""+self.element[0].id+"\"] > table > tbody > tr > td > a[alt=\""+id+"\"]")
			.addClass("ui-gallery-overview-picture-selected");
		}
		self.options.selectedpicture = id;
		
	},
	
	_deselectPicture: function(id){
		
		var self = this;
		$("div[id=\""+self.element[0].id+"\"] > table > tbody > tr > td > a[alt=\""+id+"\"]")
		.removeClass("ui-gallery-overview-picture-selected");
		
	},
	
	_getSelectedPictureId: function(key, id){
		var self = this;
		var newkey = null;
		var newkeycalc = null;
		
		var curkey = self._getDataPositionByPictureId(id);
		var newkey = curkey;
		
		var pageranges = self._getPageRange();
			
		switch (key) {
	    	case 37:/*Links*/
	    	
	    		if(self.options.switchstepmode == 2){ /*checking for switch per page*/
	    			var ranges = self._getCurrentIndexRangeByPictureId(self.options.data[newkey].id);
	    			newkey = ranges[0] - (self.options.row * self.options.column);
	    			break;
	    		}
	    		
	    			if(self.options.column == 1 && curkey == 1){
	    				newkey = curkey;
	    			}else{
			    	newkey = curkey - 1;
	    			}
			    	
			    	if(newkey < 0 || (((newkey+1)%self.options.column) == 0 && newkey != 0))
			    	{
			    		
			    		newkeycalc = curkey - (self.options.column * self.options.row) +  (self.options.column-1);

			    		if(newkeycalc < 0){
			    			
			    			newkeycalc = (self.options.data.length-1);

			    			if(pageranges[1] == 1){
			    				return self.options.data[curkey].id
			    			}
			    		}
			    		
			    		newkey = newkeycalc;
	
			    	}
	        	break;
	    	case 39:/*Rechts*/
	    	
	    		if(self.options.switchstepmode == 2){ /*checking for switch per page*/
	    			var ranges = self._getCurrentIndexRangeByPictureId(self.options.data[newkey].id);
	    			newkey = ranges[0] + (self.options.row * self.options.column);
	    			break;
	    		}
	    		
		    		newkey = curkey + 1;  
		    		if((newkey%self.options.column) == 0)
			    	{		    			
		    			newkey = curkey + (self.options.column * self.options.row) - (self.options.column - 1);		    			
			    	}
		    		
		    		if(newkey > self.options.data.length){
		    			var topage = pageranges[1];
		    			if(self.options.pageinfo[0] == pageranges[1]){
		    				topage = 0;
		    			}
		    			var ranges = self._getDataIndexRange(topage);
		    			newkey = ranges[0];
		    			if(pageranges[1] == 1){
		    				return self.options.data[curkey].id
		    			}

		    		}else if(newkey == self.options.data.length && pageranges[1] > 1){
		    			newkey = 0;
		    		}else if(newkey == self.options.data.length)
		    		{
		    			newkey = curkey;
		    		}
		    		
		    		if(newkey < 0){
		    			newkey = 0;
		    		}
	        	break;
	    	case 38:/*Oben*/
	    	
	    		if(self.options.switchstepmode == 2){ /*checking for switch per page*/
	    			var ranges = self._getCurrentIndexRangeByPictureId(self.options.data[newkey].id);
	    			newkey = ranges[0] - (self.options.row * self.options.column);
	    			break;
	    		}
	    		
		    		newkey = curkey - self.options.column;
		    		if(newkey < 0 || (((newkey+1)%self.options.column) == 0 && newkey != 0))
			    	{	
			    		if(newkey < 0){
			    			newkey = self.options.data.length-1;
			    			if(pageranges[1] == 1){
			    				return self.options.data[curkey].id
			    			}
			    		}
	
			    	}
	        	break;
	    	case 40:/*Unten*/
	    	
	    		if(self.options.switchstepmode == 2){ /*checking for switch per page*/
	    			var ranges = self._getCurrentIndexRangeByPictureId(self.options.data[newkey].id);
	    			newkey = ranges[0] + (self.options.row * self.options.column);
	    			break;
	    		}
	    		
		    		newkey = curkey + self.options.column;
		    		if(newkey >= self.options.data.length){
		    			if(self.options.roundabout == false){
		    				if(newkey == self.options.data.length)
		    				{
		    					newkey = self.options.data.length-1;
		    				}else{
		    					newkey = curkey;
		    				}
		    			}
		    			else {
			    			if(self.options.data.length == newkey){
			    				newkey = self.options.data.length - 1;
			    			}else{
			    				newkey = (newkey - (self.options.data.length));
			    				newkey = newkey - 1;
			    			}
		    			}
		    			if(pageranges[1] == 1){
		    				return self.options.data[curkey].id
		    			}
		    		}
	        	break;
	        default:
	        	break;
		}
		
		
		/**
	    * checking scroll direction
	    */

	    if(!self.options.data[newkey]){
	    	newkey = curkey;
	    }
		var infos = self._getCurrentIndexRangeByPictureId(self.options.data[newkey].id);
		if(infos[2] != self.options.pageinfo[0]){
			if(key == 37 && self.options.scroll == 2){
				newkey = curkey;
					
			}else if(key == 39 && self.options.scroll == 2){
				newkey = curkey;
			}else if(key == 38 && self.options.scroll == 1){
				newkey = curkey;
			}else if(key == 40 && self.options.scroll == 1){
				newkey = curkey;
			}
		}
		/**
	    * checking edge pages
	    */		
		
	    
		if(self.options.roundabout == false){
			if(pageranges[1] == infos[2] && self.options.pageinfo[0] == pageranges[0] && pageranges[1] > 1){
				if(key == 37 || key == 38){
					newkey = curkey;
				}
			}
			if(pageranges[0] == infos[2] && self.options.pageinfo[0] == pageranges[1] && pageranges[1] > 1){
				if(key == 39 || key == 40){
					newkey = curkey;
				}
			}
			
		}

		return self.options.data[newkey].id;
		
	},
	
	_getCurrentIndexRangeByPictureId: function(id){
		var self = this;
		var dataindexkey = self._getDataPositionByPictureId(id);
		var pagerange = self._getPageRange();
		
		var page = 1;
		var found = false;
		for(var i = 1; i <= self.options.data.length; i++){
			if(dataindexkey == (i-1)){
				found = true;
			}
			if((i%(self.options.row * self.options.column)) == 0 && found == false){
				page++;
			}
		}
		return self._getDataIndexRange(page);
	},
	
	_getPageRange: function(){
		var self = this;
		var min = 1;
		var max = Math.ceil(self.options.data.length / (self.options.column * self.options.row));
		return new Array(min,max);
		
	},
	
	_getDataIndexRange: function(page) {
		
		var self = this;
		var start_index = 0;
		var pageranges = self._getPageRange();
		
		if(page>1)
		start_index = Math.ceil((page-1) * (self.options.column * self.options.row));
		end_index = Math.ceil(page *((self.options.column * self.options.row))-1);
		if(pageranges[1] == page){
			end_index = self.options.data.length-1;
		}
		
		return new Array(start_index,end_index, page);
		
	},
	
	_getPageByPicture:function(pictureid){
		var self = this;
		var keyposition = null;
		$.grep(self.options.data, function(value,index){
			if(value.id == pictureid){
				keyposition = index;
			}
		});

		if(keyposition == null){
			return 1;
		}
		else{
			var page = Math.ceil((keyposition+1)/(self.options.row*self.options.column));
			return page;
		}
	},
	
	_getDataPositionByPictureId: function(id){
		var self = this;
		var keyposition = null;
		$.grep(self.options.data, function(value,index){
			if(value.id == id){
				keyposition = index;
			}
		});	
		return keyposition;
	},
	_getPictureDataById: function(id){
		var self = this;
		var data = null;
		$.grep(self.options.data, function(value,index){
			if(value.id == id){
				data = value;
			}
		});
		
		return data;
	},
	
	/**
	 * @description:This function checks the current hash for existing 
	 * 				hash values and than replacing them with the new page.
	 *				the given params must be correct
	 * @params: 	page: integer - pagenumber or image id
	 *	 			hash: string - currect pagehash
	 *	 			mode: string - pagenumber or imageid
	 * @return: new valid hash
	 */
	_pageHashControll: function(page, hash, mode){
		var self = this;
		var hashes = hash.substr(1).split("&"); /* Array with given hash values */
		newhash = new Array();

		if(hashes.length == 1 && hashes[0].length == 0){
			hashes = new Array();
		}

		/**
		 * @description:looks confusing but it isn't :) this part must be perfect because
		 * 				this function controll the page hash changes for bookmarking the current state.
		 * 				At first we throw the correct page hash value away and than we build a new one.
		 */
		$.grep(hashes, function(value,index){
			if(value.substr((value.length-(self.options.prefix.length+1)), value.length) == "-"+self.options.prefix){
				/* at the moment do nothing */
			}
			else if(value.substr(0,self.options.prefix.length+1) == self.options.prefix+"-"){ /* The hash value has been found in array */			
				/* at the moment do nothing */
			}else {
				newhash[newhash.length] = value;
			}
		});

		/**
		 * @description: here we build and valid the new pagehash
		 */

		var retvalue = null;

		if(mode == "imageid"){
			var foundid = false;
			$.grep(self.options.data, function(value,index){
				if(value.id == page){
					newhash[newhash.length] = page+"-"+self.options.prefix;
					retvalue = page;
					foundid = true;
				}
			});
			if(foundid === false){
				newhash[newhash.length] = self.options.data[0].id+"-"+self.options.prefix;
				retvalue = self.options.data[0].id;
			}
			
		}
		else{
			var pagerange = self._getPageRange();
			if(page<pagerange[0] || page>pagerange[1]){
				newhash[newhash.length] = self.options.prefix+"-1";
				retvalue = 1;
			}
			else{
				newhash[newhash.length] = self.options.prefix+"-"+page;		
				retvalue = page;
			}
		}		
				
		var readyhash = newhash.join("&");
		return new Array(readyhash, retvalue, mode);
		
	},
	
	_buildOverview: function(indexes){
		var self = this;
		var rows = self.options.row;
		var columns = self.options.column;
		var startindex = indexes[0];
		
		/**
		 * @description: we start to build the overview construct
		 */		
		var table = $("<table align='center'></table>")
					.attr("id", self.element.attr("id")+"_overview_table")
					.addClass("ui-gallery-overview-table");
		
		for(var r = 1; r <= rows; r++){
			
			var tablerow = 	$("<tr class='ui-gallery-overview-table-row'></tr>");
			
			for(var c = 1; c <= columns; c++){
				if(self.options.data[startindex] != null){
					var tabletd = 	$("<td></td>")
									.attr("id", self.element.attr("id")+"td_"+r+"_"+c)
									.addClass("ui-gallery-overview-table");
					
					var hashresult = self._pageHashControll(self.options.data[startindex].id, location.hash, "imageid");
					
					var linkname = self.options.data[startindex].link+"#"+hashresult[0];
					if(self.options.showhash == false){
						linkname = self.options.data[startindex].link;
					}
					
					var link = 	$("<a class='imgLink'></a>")
								.addClass("ui-gallery-overview-picture")
								.attr("href", linkname)
								.attr("alt", self.options.data[startindex].id)
								.bind("click", function(e){
									var thispicid = $(this).attr("alt");
									
									var posi = self._getDataPositionByPictureId(thispicid);
									
									self._deselectPicture(self.options.selectedpicture);
									self._selectPicture(thispicid);
									
									switch(self.options.mode){
										case 1:
										self._buildDetail(self.options.data[posi]);
										break;
										case 2:
										self.element.hide();
										self.options.navigateonlydetail = true;
										self._buildDetail(self.options.data[posi]);
										break;
										case 3:
										location.href = self.options.data[posi].link;
										break;
										default:
										break;
									}
									
									return false;
									
								});
					
					var extras = 	$("<span></span>")
									.addClass("ui-gallery-overview-extras");
					
					/**
					 * TODO: own image :D
					 */
	
					var picture = 	$("<img>")
									.attr("id", self.element.attr("id")+"Picture_"+r+"_"+c)
									.attr("src", self.options.data[startindex].thumb_path)
									.attr("alt", self.options.data[startindex].id)
									.bind("mouseenter mouseleave", function(e){
								        self.options.hook_picturemouseover(self.options.data[startindex]);
								    });
					
					var part1 = tabletd.append(extras);
					var part2 = link.append(picture);
					
					var tdobject = part1.append(part2);
					
					tablerow.append(tdobject);
					
					startindex++;	
				}
			}
			
			table.append(tablerow);		
		}

		return table;
	},
	
	_buildDetail: function(data){
		var self = this;
		if(self.options.hook_picturedetail(data) == false || self.options.picturedetaildiv == null){
			alert("To switch in mode 1 or 2 you must set the detail hook and the detail div")
		}
		if(self.options.showhash == true){
		var pagedata = self._pageHashControll(data.id, location.hash, "imageid");
		location.href = "#"+pagedata[0];
		}

		self.options.picturedetaildiv.html(self.options.hook_picturedetail(data));
		self.options.picturedetaildiv.bind("mouseenter ", function(e){
			self._manageActiveInstance();
		});
		
		self._buildPageNavigator();
	},
	
	_getPageByHash: function(hash){
		var self = this;
		var hashes = hash.substr(1).split("&");
		var num = new Array(1, "pagenumber");
		var found = false;
		if(hashes.length == 1 && hashes[0].length == 0){
			hashes = new Array();
		}

		$.grep(hashes, function(value,index){
			if(value.substr((value.length-(self.options.prefix.length+1)), value.length) == "-"+self.options.prefix && found == false){
				var imgid = value.substr(0, (value.length-(self.options.prefix.length+1)));
				if(self._getDataPositionByPictureId(imgid)==null){
					imgid = self.options.data[0].id;
				}
				num = new Array(imgid,"imageid");
				found = true;
			}
			else if(value.substr(0,self.options.prefix.length+1) == self.options.prefix+"-" && found == false){
				num = new Array(Number(value.substr(self.options.prefix.length+1,value.length)),"pagenumber");
				found = true;
			}else {
				if(found == false){
					num = new Array(1, "pagenumber");
				}
			}
		});

		return num;
	},
	
	
	/**
	 * TODO: delete this function
	 */
	_buildDetailView: function(imagedata){
		var self = this;
		if(self.options.detailviewin != null && self.options.hideondetailview == true){
			self.element.hide();
		}
		var hashinfo = self._getPageByHash(location.hash);
		if(hashinfo[1] == "imageid"){
			self.options.detailviewin.html(self.options.hookimagedetail(imagedata));
		}
	},
	
	_buildNextArrow: function(){
		var self = this;
		if(self.options.nextarrow != null){
			var arrow = self.options.nextarrow;
			arrow.bind("click", function(e){
				self._deselectPicture(self.options.selectedpicture);
				var curkey = self._getDataPositionByPictureId(self.options.selectedpicture);

				if(self.options.switchstepmode == 2){
					var ranges = self._getCurrentIndexRangeByPictureId(self.options.selectedpicture);
					var nextkey = ranges[0] + (self.options.row * self.options.column);
				}
				else {
					var nextkey = curkey + 1;
				}
				
				if(nextkey > (self.options.data.length-1)){
					if(self.options.roundabout == true){
						nextkey = 0;
					}
					else{
						nextkey = curkey;
					}
				}				
				
				var infos = self._getCurrentIndexRangeByPictureId(self.options.data[nextkey].id);				
				
				if(infos[2] != self.options.pageinfo[0]){
					self.options.pageinfo = new Array(infos[2], "pagenumber");
					self._startInitialization();
				}
				
				self._selectPicture(self.options.data[nextkey].id);
				
				
				if(self.options.mode == 1){
					self._buildDetail(self._getPictureDataById(self.options.selectedpicture));
				}
				
			});
		}
	},
	
	_buildPrevArrow: function(){
		var self = this;
		if(self.options.nextarrow != null){
			var arrow = self.options.prevarrow;
			arrow.bind("click", function(e){
				self._deselectPicture(self.options.selectedpicture);
				var curkey = self._getDataPositionByPictureId(self.options.selectedpicture);

				if(self.options.switchstepmode == 2){
					var ranges = self._getCurrentIndexRangeByPictureId(self.options.selectedpicture);
					var nextkey = ranges[0] - (self.options.row * self.options.column);
				}
				else {
					var nextkey = curkey - 1;
				}
				
				if(nextkey < 0){
					if(self.options.roundabout == true){
						nextkey = (self.options.data.length-1);
					}
					else{
						nextkey = curkey;
					}
				}

				var infos = self._getCurrentIndexRangeByPictureId(self.options.data[nextkey].id);				
				
				if(infos[2] != self.options.pageinfo[0]){
					self.options.pageinfo = new Array(infos[2], "pagenumber");
					self._startInitialization();
				}
				
				self._selectPicture(self.options.data[nextkey].id);
				

				if(self.options.mode == 1){
					self._buildDetail(self._getPictureDataById(self.options.selectedpicture));
				}
			});
		}		
	},
	
	_buildPageNavigator: function(){
		var self = this;
		if(self.options.mode == 2 && self.options.pagenavigator != null){
			self.options.pagenavigator.html("");
			if(self.options.navigateonlydetail == true){
				var prev = $("<a href=\"javascript:;\">[prev]</a>").bind("click", function(e){
					self._switchOnlyDetailView(37);
				});
				var next = $("<a href=\"javascript:;\">[next]</a>").bind("click", function(e){
					self._switchOnlyDetailView(39);		
				});
				var overview = $("<a href=\"javascript:;\">[overview]</a>").bind("click", function(e){
					self.options.navigateonlydetail = false;
					self.element.show();
					var pageinfo = self._getPageByPicture(self.options.selectedpicture);
					self.options.pageinfo = new Array(pageinfo, "pagenumber");
					self._startInitialization();
					self._selectPicture(self.options.selectedpicture);
					self.options.picturedetaildiv.html("");
					
				});
				self.options.pagenavigator.append(prev).append(overview).append(next);
			}
			else{
				var pageranges = self._getPageRange();
				
				for(var i = pageranges[0]; i <= pageranges[1]; i++){
					var newahsh = self._pageHashControll(i, location.hash, "pagenumber");
					var curpage = self.options.pageinfo;
					var page = i;
					if(i == curpage[0]){
						var page = "<b>"+i+"</b>";
					}
					var num = $("<a href=\"#"+newahsh[0]+"\">"+page+"</a>").bind("click", function(e){
						
						var initinfo = self._getPageByHash($(this).attr('href'));
						var indexrange = self._getDataIndexRange(initinfo[0]);
						self.options.pageinfo = new Array(initinfo[0], "pagenumber");
						self._startInitialization();
						self._selectPicture(self.options.data[indexrange[0]].id);
						return false;
						
					});	
					if(i > 1){
						self.options.pagenavigator.append(" - ");
					}
					
					self.options.pagenavigator.append(num);
				}
			}
		}
	}
	
	
});

$.extend($.ui.gallery,{
	version: "1.0",
	defaults: {
		active: false,
		data: null, 	/* json_object */
		row: 3,			/* integer */
		column: 4,		/* integer */
		scroll: 1, 		/* integer (1 = horizontal, 2 = vertical) */
		prefix: "a",	/* string */
		pageinfo: new Array(1, "pagenumber"),
		roundabout: false,
		switchstepmode: 1, /*1 = one picture, 2 = one page*/
		showhash: false,
		viewin: null,
		mode: 1, /*1 = gallery with open overview, 2 = gallery with closed overview, 3 = slider only*/
		hook_picturedetail: function(data){
			return false;
		},
		picturedetaildiv: null,
		navigateonlydetail: false,
		hook_picturemouseover: function(data){
			return false;
		},
		nextarrow: null, /*jquery img object*/
		prevarrow: null, /*jquery img object*/
		pagenavigator: null
	}
});
})(jQuery);
