var Switcher = new Class({
		Implements: Options,
		options: {
			images: new Array(),
			container:'',
			zoom_link: new Element('a'),
			zoom_obj: new Element('a'),
			container_id:'slides',
			title_id:'',
			rgt_button: null,
			lft_button: null,
			indicator:null
		},

		initialize: function( options )	{

			this.setOptions(options);
			var ops = this.options;
			
			if ( this.options.container == undefined || this.options.container == null ) {
				return false;
			}
			
			this.flash_video = new VimeoZoom({
				color: 'e7e91d',
				clip_id: '1050139',
				size:{
					width: 540,
					height:300
				},
				container:ops.container_id,
				title_id:ops.title_id
			});
			
			this.image_zoom = new ImageZoom({
				container:ops.container,
				title_id:ops.title_id
			});
			
			
			this.lgh = this.options.images.length;
			this.index = 0;
			
			if ( ops.indicator != undefined && ops.indicator != null ) {

				this.indicator = ops.indicator.getElement('b');
				this.indicator.set('html', '1');
				ops.indicator.getElement('sub').set( 'html','/'+this.lgh );
				
				// blank links
				ops.images.each( function(el) {
					el.addEvent('click', function(ev) {
						ev.stop();
					});
				});
				
				ops.rgt_button.addEvent('click', function(ev) {
					ev.stop();
					this.nextObject();
				}.bind(this) );
	
				ops.lft_button.addEvent('click', function(ev) {
					ev.stop();
					this.prevObject();
				}.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.indicator.set('html', index +1.0 );
			
			var ops = this.options;
			
			var list = ops.images;
			var link = list[index].get('text');
			var big = 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');
				if ( this.flash_video.opened == 1 ) {
					this.flash_video.removeObj();
					this.image_zoom.getObj( link, big, nazwa ).inject( ops.container, 'bottom');
				} else {
					this.image_zoom.setTarget( link, big, nazwa );
				}
				
			} else if ( type == 'vimeo' ) {
				var obj;
				var clip = link.substring(link.indexOf(":")+1, link.length ).split(',');
				var clip_id = clip[0];
				var size = clip[1];
				var nazwa = clip[2];
				
				if ( obj = ops.container.getElement('a') ) {
					this.image_zoom.grabObj(obj);
				} else {
				}
				this.flash_video.setObj( clip_id, size, nazwa );
			}
			
		}
		
});


var VimeoZoom = new Class({
		Implements: Options,
		options: {
			color: 'e7e91d',
			clip_id: '',
			container:'slides',
			flash_container:'flash_obj',
			size:{
				width: 540,
				height:300
			}
		},

		initialize: function( options )	{
			this.setOptions( options );
			
			this.opened = 0;
			
			var ops = this.options;

			var c = $(ops.container).getElement('div');
			if ( c ) {
				
				var x = c.get('html');
				
				var reg = /clip_id=([0-9]*)/;
				var clip_id = reg.exec(x)[1];
				reg = /width="?([0-9]*)/;
				var w = reg.exec(x)[1];
				reg = /height="?([0-9]*)/;
				var h = reg.exec(x)[1];
				var nazwa = $('file-title').get('text');
				
				var size = w+'x'+h;
				
				c.destroy();
				
				this.setObj( clip_id, size, nazwa );
			} else {
				
			}
			
		},
		
		setObj: function( clip_id, size, nazwa ) {
			swfobject.removeSWF( this.options.container );

			if ( !$(this.options.flash_container) ) {
				var d = new Element('div',{
						id:this.options.flash_container
				});
				d.inject( $(this.options.container), 'top' );
			}

			var src = "http://vimeo.com/moogaloop.swf?clip_id="+clip_id+"&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color="+this.options.color+"&amp;fullscreen=1";
			var s = size.split('x');

			var att = { data:src, width:s[0], height:s[1] };
			var par = { 
					allowfullscreen:"true",
					allowscriptaccess:"always"
			};
			var id = this.options.flash_container;
			
			this.obj = swfobject.createSWF(att, par, id);
			
			if ( $(this.options.title_id) ) {
				$(this.options.title_id).set( 'text', nazwa );
			}
			this.opened = 1;
		},
		
		removeObj: function () {
			this.opened = 0;
			swfobject.removeSWF( this.options.flash_container );
		}
		
		
});

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

		initialize: function( options )	{
			this.setOptions( options );
			
			var ops = this.options;
			
			if ( ops.container.getElement('a') ) {
				
				this.obj = ops.container.getElement('a');
				this.img = this.obj.getElement('img');
				
			} else {
			
				this.obj = new Element('a', {
						href:'#',
						id:'zoom',
						rel:'zoom'
				});
				this.img = new Element('img');
				this.obj.grab(this.img);
				
			}

			SqueezeBox.assign(this.obj);
			
			this.big = '';
			
			this.size = this.options.container.getSize();

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

			this.preloadimg = new Element('img', {
				events: {
					load: function(){
						this.show.delay(100, this)
					}.bind(this)
				}
			});

			this.img.addEvent('load', function(ev) {
					this.showReal.delay(10, this)
			}.bind(this));
			
		},
		
		getObj: function( src, big, nazwa )	{
			this.setTarget(src, big, nazwa);
			return this.obj;
		},
		
		setTarget: function( src, big, nazwa ) {
			var s = this.img.getSize();
			this.big = big;
			this.nazwa = nazwa;
			
			this.preload.setStyles({
				left:(this.size.x - s.x)/2,
				width:s.x,
				height:s.y
			});
			
//			console.log(src, big);
			
			this.preload.inject( this.options.container, 'top' );
			this.preloadimg.set('src', src );
		},
		
		show: function()	{
			this.img.set( 'src', this.preloadimg.src );
		},
		
		showReal: function()	{
			if ( $(this.options.title_id) ) {
				$(this.options.title_id).set( 'text', this.nazwa );
			}
			
			this.obj.set( 'href', this.big );
			if ( this.preload )
				this.preload = this.preload.dispose();
		},
		
		grabObj: function ( obj ) {
			this.obj = obj.dispose();
		}
		
});




window.addEvent('load', function()	{
		
		var s = new Switcher({
				images:$$('#gallery-links a'),
				container:$$('div.slides')[0],
				zoom_link:$('zoom'),
				zoom_obj:$$('#zoom img')[0],
				container_id:'slides',
				title_id:'file-title',
				rgt_button:$('nxt'),
				lft_button:$('prv'),
				indicator:$('count')
		});

});


