/**
* @author Ivan Kravets aka X-MAN <Admin@relax-info.com>
* @copyright IA Cursor 2005
* @package Gallery
* @version 1.2
* @desc Gallery class
*/
var gallery = new Object();
gallery =
{
	/**
	 * Image chache array
	 *
	 * @var array
	 */
	image_arr: new Array(),

	/**
	 * Slide Image chache array
	 *
	 * @var array
	 */
	slide_arr: new Array(),
	
	/**
	 * Slide Iteration
	 *
	 * @var ineteger
	 */
	slide_iteration: 0,
	
	/**
	 * Shot previous
	 *
	 * @var object
	 */
	shot_prev: null,
	
	/**
	 * If last loading = true
	 *
	 * @var bool
	 */
	last_loading: false,
	
	/**
	 * Slide show delay
	 *
	 * @var integer
	 */
	slide_delay: 2500,
	
	/**
	 * Timer ID
	 *
	 * @var integer
	 */
	timer_id: 0,
	
	/**
	 * Check is Slide Show
	 *
	 * @var bool
	 */
	isSlide: false,
	
	/**
	 * Slide next section url
	 *
	 * @var string
	 */
	slide_next_url: '',
	
	/**
	 * Get Element By Id
	 *
	 * @param string id
	 * @return obj
	 */
	GetE: function(id)
	{
		return document.getElementById(id);	
	},
	
	/**
	 * Add image in stack...
	 *
	 * @param string url
	 * @param string title
	 * @param string info
	 */
	add_image: function(shotObj, url, title, info)
	{
		this.last_loading = true;
		
		this.GetE('gallery_image_title').innerHTML = 'загрузка изображения ' + title;
		
		this.select_shot(shotObj); 
		this.load_image(url, title, info);				
	},
	
	/**
	 * Preloading image....
	 *
	 * @param string url
	 * @param string title
	 * @param string info
	 * @return void
	 */
	load_image: function(url, title, info)
	{
		this.image_arr[url] = new Array();
		this.image_arr[url]['title'] = title;
		this.image_arr[url]['info'] = info;
		this.image_arr[url]['obj'] = new Image();
		this.image_arr[url]['obj'].onload = new Function("gallery.show_image('" + url + "');");
		this.image_arr[url]['obj'].src = url;
	},
	
	/**
	 * Show loaded image
	 *
	 * @param string loaded_url 
	 * @return void
	 */
	show_image: function(loaded_url)
	{
		if (gallery.image_arr[loaded_url])
		{
			gallery.last_loading = false;
			var image = gallery.image_arr[loaded_url];
			
			gallery.GetE('gallery_image_title').innerHTML = '<SPAN class="head2">' + image['title'] + '</SPAN>';		
			gallery.GetE('gallery_image').src = image['obj'].src;		
			gallery.GetE('gallery_image_info').innerHTML = image['info'];
			
			if (gallery.isSlide)
			{
				this.slide_arr[gallery.slide_iteration]['show'] = true;
				gallery.slide_start_timer();
			}		
		}
	},
	
	/**
	 * Select shot
	 *
	 * @param obj shotObj
	 * @return void
	 */
	select_shot: function(shotObj)
	{
		shotObj.className = 'shot_active';
		
		if (this.shot_prev != null)
		{
			this.shot_prev.className = 'shot';
		}
		
		this.shot_prev = shotObj;
	},
	
	/**
	 * Start slide
	 *
	 * @return void
	 */
	slide_start: function(next_url)
	{
		this.isSlide = true;
		this.slide_next_url = next_url;
		this.slide_navigate();
		this.slide_arr = new Array();
		this.slide_iteration = 0;
		this.detected_shot();
		
		if (this.slide_arr.length > 0) this.slide_start_timer();
	},
	
	/**
	 * Stop slide
	 *
	 * @return void
	 */
	slide_stop: function()
	{
		this.isSlide = false;
		this.slide_navigate();
		this.slide_stop_timer();
	},
	
	/**
	 * Build slide navigate
	 *
	 * @return void
	 */
	slide_navigate: function()
	{
		if (this.isSlide) this.GetE('gallery_slide_navigate').innerHTML = '<A href="javascript:gallery.slide_stop();"><IMG src="' + SITE_URL  + 'images/gallery_off.gif" title="Stop slide show"></A>';
		else this.GetE('gallery_slide_navigate').innerHTML = '<A href="javascript:gallery.slide_start(\'' + this.slide_next_url + '\');"><IMG src="' + SITE_URL  + 'images/gallery_on.gif" title="Start slide show"></A>';
	},
	
	/**
	 * Detected small shot
	 *
	 * @return void
	 */
	detected_shot: function()
	{
		this.slide_arr = new Array();
		var shot_arr =  document.getElementsByName('gallery_shot');
		
		for (var i = 0; i < shot_arr.length; i++)
		{
			var tmp_arr = new Array();
			tmp_arr['image'] = shot_arr[i];
			tmp_arr['show'] = false;
			tmp_arr['time'] = 0;
			
			this.slide_arr[this.slide_arr.length] = tmp_arr;
		}
	},
	
	/**
	 * Slide show
	 *
	 * @return array
	 */
	slide_show: function()
	{
		for (var i in this.slide_arr)
		{
			this.slide_iteration = i;
			
			if (this.slide_arr[i]['show'] == false)
			{
				if (gallery.last_loading) return;
				else if (typeof(this.slide_arr[i]['image']) == 'object')
				{
					d = new Date();
					this.slide_arr[i]['time'] = d.getTime();
					this.slide_arr[i]['image'].onclick();
					return;
				}
			}
		}
		
		this.slide_stop_timer();
		if (this.slide_next_url != '') self.location.href = this.slide_next_url;
		else this.slide_stop();
	},
	
	/**
	 * Slide start timer
	 *
	 * @return void
	 */
	slide_start_timer: function()
	{
		if (this.isSlide)
		{
			this.slide_stop_timer();
			var slide_delay = this.slide_delay;
			var d = new Date();
			
			if (this.timer_id == 0 || (this.slide_arr[this.slide_iteration] && (d.getTime() - this.slide_arr[this.slide_iteration]['time']) > this.slide_delay)) slide_delay = 1;
			else if (this.slide_arr[this.slide_iteration]) slide_delay = this.slide_delay - (d.getTime() - this.slide_arr[this.slide_iteration]['time']);
					
			this.timer_id = window.setTimeout('gallery.slide_show()', slide_delay);
		}	
	},
	
	/**
	 * Slide stop timer
	 *
	 * @return void
	 */
	slide_stop_timer: function()
	{
		window.clearTimeout(this.timer_id);
	}
}
