var Switcher = new Class({
	Implements: [Options,Events],
	options: {
		images: new Array(),
		container:'',
		container_id:'slides',
		rgt_button: null,
		lft_button: null,
		indicator:null,
		playing:false
	},

	initialize: function( options )	{

		this.setOptions(options);
		var ops = this.options;
		
		if ( this.options.container == undefined || this.options.container == null ) {
			return false;
		}

		var that = this;
		this.image_zoom = new ImageZoom({
			container:ops.container,
			title_id:ops.title_id,
			control:that
		});

		this.lgh = this.options.images.length;
		this.index = 0;

		this.image_zoom.addEvent('loaded', this.loadedObj.bind(this) );

		// slideshow items
		this.playing = ops.playing;
		this.stepper = null;
		$('slideshow').addEvent('click', this.toggleslides.bind(this) );

		// styl
		$('slideshow').setStyle('background-position','-12px 0px');
		$('slideshow').removeEvents('mouseover');
		$('slideshow').removeEvents('mouseout');
		$('slideshow').addEvent('mouseover', function(e){
			$('slideshow').setStyle('background-position','-12px -10px');
		});
		$('slideshow').addEvent('mouseout', function(e){
			$('slideshow').setStyle('background-position','-12px 0px');
		});
		
		// start slides
		this.loadedObj();

		if ( ops.indicator != undefined && ops.indicator != null ) {

			this.indicator = ops.indicator.getElement('span.indicator');
			this.indicator.set('html', '1');
			ops.indicator.getElement('span.all').set( 'html','/'+this.lgh );
			
			// blank links
			ops.images.each( function(el,i) {
				el.addEvent('click', function(ev) {
					ev.stop();
					that.stop();
					that.showItem( i );
					//thumbsclick(ev);
				});
			});
			
			ops.rgt_button.addEvent('click', function(ev) {
				ev.stop();
				this.stop();
				this.nextObject();
				if ( $('thumbnails_list_mask').getStyle('height').toInt() > 10 )
					thumbsclick(ev);
			}.bind(this) );

			ops.lft_button.addEvent('click', function(ev) {
				ev.stop();
				this.stop();
				this.prevObject();
				if ( $('thumbnails_list_mask').getStyle('height').toInt() > 10 )
					thumbsclick(ev);
			}.bind(this) );

		}
	},
	
	nextObject: function()	{
		this.index++;
		if ( this.index >= this.lgh ) {
			this.index = 0;
		}
		this.showItem( this.index );
	},
	
	prevObject: function()	{
		this.index--;
		if ( this.index == -1 ) {
			this.index = this.lgh - 1.0;
		}
		this.showItem( this.index );
	},
	
	showItem: function( index )	{
		this.index = index;
		this.indicator.set('html', index +1.0 );
		this.setThumbnail( this.index );
		
		var ops = this.options;

		var list = ops.images;
		var link = list[index].get('href');

		var type = link.substring(0, link.indexOf(':') );

		if ( type == '' || type == -1 || type == 'http' ) { // image
			var l = link;
			var nazwa = list[index].get('title');
			this.image_zoom.setTarget( link, nazwa, index );
		}
		
	},
	
	setThumbnail: function( index ) {
		// blank links
		this.options.images.each( function(el,i) {
			var p = el.getParent();
			var s;
			if ( i == index ) {
				if ( s = p.getElement('span') ) {
					s.dispose();
				}
				s = new Element('span');
				p.grab(s);
			} else {
				s = p.getElement('span');
				if ( s )
					s.dispose();
			}
		});
	},
	
	toggleslides: function(e) {
		e.stop();
		if ( this.playing == true ) {
			this.stop();
		} else {
			this.start();
		}
		return false;
	},
	
	loadedObj: function()	{
		if ( this.playing ) {
			this.stepper = this.step.delay( 4000, this );
		}
	},

	step: function() {
		$clear(this.stepper);
		this.nextObject();
	},

	start: function() {
		this.playing = true;
		this.step();
		$('slideshow').setStyle('background-position','-12px 0px');
		$('slideshow').removeEvents('mouseover');
		$('slideshow').removeEvents('mouseout');
		$('slideshow').addEvent('mouseover', function(e){
			$('slideshow').setStyle('background-position','-12px -10px');
		});
		$('slideshow').addEvent('mouseout', function(e){
			$('slideshow').setStyle('background-position','-12px 0px');
		});
	},
	
	stop: function() {
		$clear(this.stepper);
		this.playing = false;
		$('slideshow').setStyle('background-position','0px 0px');
		$('slideshow').removeEvents('mouseover');
		$('slideshow').removeEvents('mouseout');
		$('slideshow').addEvent('mouseover', function(e){
			$('slideshow').setStyle('background-position','0px -10px');
		});
		$('slideshow').addEvent('mouseout', function(e){
			$('slideshow').setStyle('background-position','0px 0px');
		});
	}
});

var ImageZoom = new Class({
		Implements: [Options,Events],
		options: {
			
		},

		initialize: function( options )	{
			this.setOptions( options );
			
			var ops = this.options;
			
			if ( ops.container.getElement('img') ) {
				this.img = ops.container.getElement('img');
			} else {
				this.img = new Element('img');
			}

			this.fx = new Fx.Tween( this.img, {duration: 200, link:'cancel', transition:'quad:in'});
			this.fx.addEvent( 'complete', this.fadedShow.bind(this) );

			this.fx.set('opacity',1);
						
			this.indx = '';
			
			this.size = this.options.container.getSize();

			this.preload = new Element('div', {});
			this.preload.addClass('preloader');
			this.preload.setStyle('opacity',0.3);

			this.preloadimg = new Element('img', {
				events: {
					load: function(){
						this.show.delay(100, this)
					}.bind(this)
				}
			});
			
			this.hasevent = false;
		},
		
		getObj: function( src, big, nazwa )	{
			this.setTarget(src, big, nazwa);
			return this.obj;
		},
		
		setTarget: function( src, nazwa, indx ) {
			var s = this.img.getSize();
			this.src = src;
			this.nazwa = nazwa;
			this.indx = indx;
			
			this.preload.setStyles({
				left:0,
				width:s.x,
				height:s.y
			});
			
			this.preload.inject( this.options.container, 'top' );
			this.preloadimg.set('src', src );
			
			if ( this.hasevent == false )	{
				this.img.addEvent('load', this.showReal.bind(this) );
				this.hasevent = true;
			}
		},
		
		show: function()	{
			this.fx.start('opacity', 0.6, 0);
		},
		
		showReal: function()	{
			if ( this.preload )
				this.preload = this.preload.dispose();
			// zmiana wielkosci main_image
			var s = this.img.getSize();
			this.options.container.setStyle('width', s.x+'px');
			this.options.container.setStyle('height', s.y+'px');
			this.fx.start( 'opacity', 1 );
		},
		fadedShow: function() {
			if ( this.img.style.opacity == 0 ) {
				this.img.set( 'src', this.preloadimg.src );
				resizeimg(null, [this.preloadimg.width, this.preloadimg.height]);
			} else {
				this.fireEvent('loaded');
			}
		},		
		grabObj: function ( obj ) {
			this.obj = obj.dispose();
		}
		
});


	
var thumbsclicked = false;
var thumbsclick = function(e) {
	var container = $('thumbnails_container');
	var list = $('thumbnails_list_container');
	var mask = $('thumbnails_list_mask');
	var slider = new Fx.Morph( mask, {
		duration:1000,
		transition:'quint:out'//'elastic:out'
	});
	var slider_container = new Fx.Morph( container, {
		duration:1000,
		transition:'quint:out'//'elastic:out'
	});
	
	e.stop();
	if ( mask.getStyle('height').toInt() > 10 ) {
		slider.start( { 'height': 10 } );
		slider_container.start( { 'height': 35, 'margin-top':-35 } );
	} else {
		var pos = container.getCoordinates();
		var top = pos.top;
		var dim = list.getCoordinates();
		var height = dim.height;
		slider.start( { 'height': height } );
		var mh = ( ( ( -25-height ) < -165 ) ? -165 : ( -25-height ) );
		slider_container.start( { 'height': 25+height, 'margin-top':mh} );
	}

	// load images if not loaded
	if ( thumbsclicked == false ) {
		var images = $$("#thumbnails_list_container a");
		var loadingImages = new Asset.images(thumbnails_to_load, { onProgress: function( counter, index ) {
			images[index].grab(loadingImages[index]);
		} });
		thumbsclicked = true;
	}
}

var goer;


var resizeimg = function( e, size ) {
	if ( size ) maxsize = size;
	var tx = window.getSize().x - 290;
	var ty = window.getSize().y - 200;
	var sx = maxsize[0]/tx;
	var sy = maxsize[1]/ty;
	var f = maxsize[0] / maxsize[1];
	if ( sx > 1 || sy > 1 ) { // zmniejszenie
		if ( sx > sy ) {
			$("main_image").setStyle("width", tx + "px" );
			$("main_image").setStyle("height", tx * maxsize[1]/maxsize[0] + "px" );
		} else {
			$("main_image").setStyle("width", ty * maxsize[0]/maxsize[1] + "px" );
			$("main_image").setStyle("height", ty+"px" );
		}
	} else {
		$("main_image").setStyle("width", maxsize[0]+"px" );
		$("main_image").setStyle("height", maxsize[1]+"px" );
	};
}
resizeimg(null);

window.addEvent("domready", function() {

	var s = new Switcher({
		images:$$("#thumbnails_list_container a"),
		container:$("main_image"),
		container_id:"main_image",
		rgt_button:$("nxt"),
		lft_button:$("prv"),
		indicator:$("count"),
		playing:true
	});

	window.addEvent("resize", resizeimg );

	var Tips1 = new Tips($$(".tip"), {
		"title":"title",
		"text":null
	});
	
	if ( $('thumbnails_tab') ) {
		$('thumbnails_tab').addEvent('click', thumbsclick );
	}
});
