function Querystring(qs) { // optionally pass a querystring to parse
		this.params = new Object();
		this.get=Querystring_get;
		
		if (qs == null) qs=location.search.substring(1,location.search.length);
		if (qs.length == 0) return;
		if (qs.length > 0 && qs.indexOf('?') > -1) qs=qs.substring(1,qs.length);

	qs = qs.replace(/\+/g, ' ');
		var args = qs.split('&'); // parse out name/value pairs separated via &
		
	// split out each name=value pair
		for (var i=0;i<args.length;i++) {
			var value;
			var pair = args[i].split('=');
			var name = unescape(pair[0]);
	
			if (pair.length == 2)
				value = unescape(pair[1]);
			else
				value = name;
			
			this.params[name] = value;
		}
	}
	
	function Querystring_get(key, default_) {
		// This silly looking line changes UNDEFINED to NULL
		if (default_ == null) default_ = null;
		
		var value=this.params[key];
		if (value==null) value=default_;
		
		return value;
	}

	function stopDescendantEvents(el,tag){
		
		// Stop specified tag, or all
		var arr = tag ? el.getElements(tag) : el.getChildren();
		
		for (var i=0; i<arr.length; i++){
			var el = arr[i]
		
			el.addEvent('click',function(e){
				var e = new Event(e).stop();
			
			});
		
		};
	
	};
	
	function ratio(a,b){
		return a>b ? a/b : b/a
	}

	function getPHPvar(name){ return $$('input[name=var_'+name+']').getProperty('value'); };
	function setPHPvar(name,value){ $$('input[name=var_'+name+']').setProperty('value',value); };

window.addEvent('domready',function(){
// Begin.

	PhotoGallery = new Class({

		initialize : function(el){
			setPHPvar('img','1');
			
			var obj = this
			if (!el) return;
			
			this.view = new Object();
			this.view.el = el;
			this.view.size = el.getCoordinates();
			this.img = new Object();
			
			this.view.el.setStyles({
				'overflow':'hidden',
				'position':'relative'
			});
			
			var thumbs = $('thumbnails').getElements('a')
			
			for (var i=0; i<thumbs.length; i++){
				var el = thumbs[i]
				el.img = thumbs[i].getElement('img')
				
				if (el.getProperty('rel') == i+1) continue;
				
				if (el.hasClass('active')) this.prevThumb = $(el.img)
				el.setProperty('rel',i+1)
					
				el.addEvent('click',function(e){
					e = new Event(e).stop();
						
					obj.view.el.empty();
								
					obj.prevThumb.setProperty('src',obj.prevThumb.getProperty('src').replace('.gif','a.gif'));
					obj.prevThumb = this.img
	
					this.img.setProperty('src',this.img.getProperty('src').replace('a.gif','.gif'));
					
					var src = new Asset.image(getPHPvar('path') + this.getProperty('rel') +'.jpg',{
						onload : function(){ obj.overview(); }
					});
						
					setPHPvar('img',this.getProperty('rel'));

					src.inject(obj.view.el,'top')
					
				});				
				
			};
	
		},
				
		update : function(){
			
			
			this.img.el = this.view.el.getElement('img');
			this.img.size = this.img.el.getCoordinates();		
				
			//stopDescendantEvents(this.view.el,'a');

		},
		
		overview : function(e){
			var obj = this
			
			this.update();
			
			this.img.el.addEvent('click',function(e){				
				
				e = new Event(e).stop();
				
				// Calculate mouse offset point
				obj.img.offset = [Math.abs(obj.img.el.getPosition().x - e.page.x),Math.abs(obj.img.el.getPosition().y - e.page.y)]
				// Save image size
				obj.img.p_size = this.getCoordinates();
								
				obj.view.el.empty();
				
				obj.loading = new Element('div',{'class':'loading'}).inject(obj.view.el,'top')
				
				var src = new Asset.image(getPHPvar('zoom') + getPHPvar('img') +'.jpg',{
					onload : function(){ 
						src.inject(obj.view.el,'top')
						obj.zoom();
					}
				});
				
			});
		},
		
		zoom : function(){
			var obj = this
			
			this.update();
		
			var myDrag = new Drag(this.img.el,{limit:{x:[-this.img.size.width+this.view.size.width,0],y:[-this.img.size.height+this.view.size.height,0]}})
			
			// Calculate the scale ratio
			obj.img.scale = [ratio(obj.img.size.width,obj.img.p_size.width),ratio(obj.img.size.height,obj.img.p_size.height)]
			
			// Set the offset, based on mouse click and ratio
			var offsetX = (-(obj.img.offset[0] * obj.img.scale[0])) + (this.view.size.width/2)
			var offsetY = (-(obj.img.offset[1] * obj.img.scale[1])) + (this.view.size.height/2)
			
			// Place the image
			this.img.el.setStyles({
				'position':'absolute',
				'margin' : 0,
				'top': offsetY,
				'left': offsetX
			});		
			
			obj.loading.destroy();
			
			this.img.el.addEvent('click',function(e){
				e = new Event(e).stop();
			});
			
			this.img.el.addEvent('dblclick',function(e){				
				
				e = new Event(e).stop();
				
				obj.view.el.empty();
			
				var src = new Asset.image(getPHPvar('path') + getPHPvar('img') +'.jpg',{
					onload : function(){ 
						src.inject(obj.view.el,'top')
						obj.overview();
						}
				});
				
			
				
			});
		}

	});
	
	if ($('viewer')){
		var gallery = new PhotoGallery($('viewer'))
		var qs = new Querystring();
		
		if (!qs.get('detail')) gallery.overview();
		else if (qs.get('detail') == 'zoom') gallery.zoom();
	}
});