Gallery = function(){

	var ODisplay = new Display();
	var OPlayList = new PlayList();
	var OPlayer = new Player();

	// Current playing video
	var current_video = null;
	// Variable used for locking "play next video" link
	var next_link_locked = true;
	page_link_locked = false; // Global var

	// This function is called by getUpdate in index.php. It is intended to 
	// give data to player for "play next video" image
	this.NextGet = function() {
		this.next_link_locked = false;
                var next_video = OBuffer.Player_get_next_video_peek();
                if((next_video != false) && (next_video != -1)){
			// Next video exists
			return(next_video);
		} else {
			// No next video - could be because end of the queue was reached
			// or because there waas error while loading data
			return false;
		}
	}

	// This is called when user changes tab or when page is loaded
	this.TabChange = function(num){
		// Set global variables
		tab_id = num;
		cpage = 1;
		
		// This is called from OBuffer when all data is loaded
		OBuffer.OnFillDone = function() {
			ODisplay.TabChange.OnResponse;
			ODisplay.TabChange();
		}
		// This is called from ODisplay.TabChange class when all is prepares 
		OnResponse = function(){
			ODisplay.PagerChange(cpage);
			var content = OBuffer.Playlist_get_data(cpage);
			if(content == false){
				ODisplay.PageNoContent();
			}
		}
		OBuffer.OnPlaylist_get_data = function(data) {
			ODisplay.PageChange(data);
		}
//		// Fill in new buffer
		OBuffer.Fill_new();		
		
	}

			
	// This function changes page (renders new data in playlist and pager)
	this.PageChange = function(num){
		if (page_link_locked == true) {
			return;
		}
		page_link_locked = true;
		cpage = num;
		ODisplay.ItemClear(ODisplay.contentid);
		var current_queue = OBuffer.GetCurrentQueue();
		ODisplay.PagerChange(cpage);
		OBuffer.OnPlaylist_get_data = function(data) {
			ODisplay.PageChange(data);
			page_link_locked = false;
		}
		var content = OBuffer.Playlist_get_data(cpage);
		if(content == false){
			ODisplay.PageNoContent();
			page_link_locked = false;
		}
		
	}
			
	//sprememba galerije (DEPRICATED ?)
	this.GalleryChange = function(num){
		id = num;
		ODisplay.PagerChange();
		
		ODisplay.PageChange();
		OPlayList.Change();
	}
	
	// DEPRICATED ?
	this.PlayCurrent = function() {
		OPlayer.Play(OPlayList.CurrentGet());
	}


	// This function is called by SetGalleryOrder in index.php. It is intended
	// to play next video in queue
	this.PlayNext = function(){
		// This function is called by Effect.SmallY after top video slides out
		ESYResponse = function(){
			OGallery.PageChange(cpage);
		}
		// When user clicks "play next video" we lock this link until player has
		// ended playing this video
		if (this.next_link_locked == true) {
			return;
		}
		this.next_link_locked = true;
		// End lock link
		var next_video = OBuffer.Player_get_next_video();
		if((next_video != false) && (next_video != -1)){
			// Set current video
			current_video = next_video;
			// Next video exists
			OPlayer.Play(next_video);
			// Get first video on current page (for sliding effect)
			// second parameter tells Buffer not to get data for playlist, but
			// get detailed data.
			//var page_videos = OBuffer.Playlist_get_data(cpage,true);
			OBuffer.OnPlaylist_get_data = function(page_videos) {
				// Delete first record in queue and decrease players counter
				// If one should want videos to be played without messing with
				// playlist, then just comment out following lines
				var current_pos = OBuffer.Player_get_position();
				current_pos--;
				OBuffer.Player_set_position(current_pos);
				OBuffer.Player_delete_current_video();
				Effect.SmallY.ESYResponse;
				Effect.SmallY(page_videos[0][4]);
			}
			OBuffer.Playlist_get_data(cpage,true);
		//	this.PageChange(cpage);
		}
	}
	
	//napolnimo galerijo (DEPRICATED)
	this.Fill = function(){
		ODisplay.PagerChange();
		ODisplay.PageChange(cpage);
		
		OPlayList.Change();
	}
	
	// Removes item with specific ID from the queue
	this.ItemRemove = function(itemid){
		// Get current queue
		var queue = OBuffer.GetCurrentQueue();
		var item_pos = -1;
		for(var i=0;i<queue.queue_length;i++) {
			// Search for requested item
			if (parseInt(queue.data[i][1][4]) == itemid) {
				// We found requested item
				item_pos = i;
				break;
			}
		}
		if (item_pos == -1) { // We havent found item so do nothing
			return;
		}
		queue.delete_at(item_pos);
		
		var num_pages = Math.ceil( queue.queue_length / OBuffer.GetItemsOnPage() ) ;
		if (cpage > num_pages) cpage = num_pages;
		this.PageChange(cpage);
	}	

	//doda naslednjega ki je na vrsti (DEPRICATED ?)
	this.ItemAdd = function(page, index){
		
		IFResponse = function(){
			OPlayList.Add( OBuffer.GetItemPlayListFirst(page+1) , 1);
			ODisplay.ContentItemAdd( OBuffer.GetItemDisplayFirst(page+1) );
			IAResponse();	
		}
		
		OBuffer.IFResponse;
		OBuffer.ItemFirst(page+1);
	}
	
	this.ShowMsg = function(){
		document.getElementById(msgid).style.display = 'block';
	}
	this.HideMsg = function(){
		document.getElementById(msgid).style.display = 'none';
	}
	
	this.getCOwnerID = function(){
		return current_video[5];
	}
	
	this.getCItemID = function(){
		return current_video[4];
	}	
}

