Art.Gallery = {
	effectSpeed: 300,
	currentURL: '',
	currentLocation: '',
	getURL: function(loc) {
		if (typeof loc == 'undefined')
			loc = Art.Gallery.currentURL;
		if (loc == '')
			loc = new String(window.location);
			
		var url = new String(loc);
		var hashPos = url.lastIndexOf('#');
		if (hashPos == -1) {
			return url;
		} else {
			return url.substr(hashPos+1);
		}
	},
	setURL: function(url) {
		Art.Gallery.currentURL = url;
		Art.Gallery.currentLocation = '' + window.location;
	},
	browse: function(url, effect, force) {
	
		var lastURL = Art.Gallery.getURL();
			
		if (lastURL == url && typeof force == 'undefined') {
			Art.Gallery.setURL(url);
			return false;
		}
			
		if (typeof effect == 'undefined') {
		
			if ($.browser.msie) {
				effect = Art.Gallery.browseEffects.show;
			//} else if ($.browser.mozilla) {
			//	effect = Art.Gallery.browseEffects.fade;
			} else {
				var urlRegex = new RegExp("\\/art\\/browse\\/([a-z]*)[\\/]*([A-Za-z0-9 _]*)[\\/]*([0-9]*)[\\/]*");
				
				var oldURL = urlRegex.exec(lastURL);
				var newURL = urlRegex.exec(url);
									
				// Default page
				if (oldURL != null && oldURL[1] == '')
					oldURL[1] = 'all';
				if (oldURL != null && oldURL[2] == '')
					oldURL[2] = '0';
				if (oldURL != null && oldURL[3] == '')
					oldURL[3] = '1';
						
				// Default page
				if (newURL != null && newURL[1] == '')
					newURL[1] = 'all';
				if (newURL != null && newURL[2] == '')
					newURL[2] = '0';
				if (newURL != null && newURL[3] == '')
					newURL[3] = '1';
					
							
				if (oldURL != null && newURL != null && 
					oldURL[1] == newURL[1] && oldURL[2] == newURL[2]) {
					if (parseInt(oldURL[3]) > parseInt(newURL[3])) {
						effect = Art.Gallery.browseEffects.slideRight;
					} else if (parseInt(oldURL[3]) == parseInt(newURL[3])) {
						effect = Art.Gallery.browseEffects.show;
					} else {
						effect = Art.Gallery.browseEffects.slideLeft;
					}
				} else {
					effect = Art.Gallery.browseEffects.show;
				}
			}
		}
		
		Art.Gallery.setURL(url);
		
		window.location = '#' + url;
		$.getJSON(url + '?' + (new Date()).getTime(), effect);
	},
	browseEffects: {
		show: function(data){
			$('#title').html(data.title);
			$('#sidepanel').html(data.navigation);
			$('#pagination').html(data.pagination);
			$('#art-folder').html(data.folderInfo);
			$('#art').html(data.gallery);
		},
		fade: function(data){
			$('#title').html(data.title);
			$('#sidepanel').html(data.navigation);
			$('#pagination').html(data.pagination);
			$('#art-folder').html(data.folderInfo);
			$('#art').fadeOut(Art.Gallery.effectSpeed, function(){
				$('#art').html(data.gallery).fadeIn(Art.Gallery.effectSpeed);
			});
		},
		slideLeft: function(data){
			$('#title').html(data.title);
			$('#sidepanel').html(data.navigation);
			$('#pagination').html(data.pagination);
			$('#art-folder').html(data.folderInfo);
			
			var oldId = 'old-slider';
			var newId = 'new-slider';
			var slider = $('#art');
			var width = slider.width();
			var height = slider.height();
			slider.css('width', width + 'px');
			slider.css('height', height + 'px');
			slider.css('overflow', 'hidden');
			slider.css('position', 'relative');
			slider.css('white-space', 'nowrap');
			
			slider.html(	'<div style="position: absolute;top: 0;left: 0;width: '+width+'px;" id="'+oldId+'">' + slider.html() + '</div>' + 
					'<div style="position: absolute;top: 0;left: '+width+'px;width: '+width+'px;" id="'+newId+'">' + data.gallery + '</div>');
					
			
			$('#'+oldId).animate({left:'-'+width+'px'}, Art.Gallery.effectSpeed);
			$('#'+newId).animate({left:'0px'}, Art.Gallery.effectSpeed, null, function(){
				slider.html(data.gallery);
			});
			slider.animate({height: $('#'+newId).height()+'px'}, Art.Gallery.effectSpeed);
		},
		slideRight: function(data){
			$('#title').html(data.title);
			$('#sidepanel').html(data.navigation);
			$('#pagination').html(data.pagination);
			$('#art-folder').html(data.folderInfo);
			
			var oldId = 'old-slider';
			var newId = 'new-slider';
			var slider = $('#art');
			var width = slider.width();
			var height = slider.height();
			slider.css('width', width + 'px');
			slider.css('height', height + 'px');
			slider.css('overflow', 'hidden');
			slider.css('position', 'relative');
			slider.css('white-space', 'nowrap');
			
			slider.html(	'<div style="position: absolute;top: 0;left: 0;width: '+width+'px;" id="'+oldId+'">' + slider.html() + '</div>' + 
					'<div style="position: absolute;top: 0;left: -'+width+'px;width: '+width+'px;" id="'+newId+'">' + data.gallery + '</div>');
					
			
			$('#'+oldId).animate({left: width+'px'}, Art.Gallery.effectSpeed);
			$('#'+newId).animate({left:'0px'}, Art.Gallery.effectSpeed, null, function(){
				slider.html(data.gallery);
			});
			slider.animate({height: $('#'+newId).height()+'px'}, Art.Gallery.effectSpeed);
		}
	},
	initialize: function()
	{
		var url = new String(window.location);
		var hashPos = url.lastIndexOf('#');
		if (hashPos != -1) {
			Art.Gallery.browse(url.substr(hashPos+1), Art.Gallery.browseEffects.show, true);
		}
		Art.Gallery.setURL(url);
		setInterval(Art.Gallery.checkURL, 500);
	},
	checkURL: function()
	{
		var url = '' + window.location;
		
		if (url != Art.Gallery.currentLocation) {
			var hashPos = url.lastIndexOf('#');
			if (hashPos == -1)
				var hashPos = url.lastIndexOf('.com')+3;
			Art.Gallery.browse(url.substr(hashPos+1));
		}
	},
	search: function(query)
	{
		Art.Gallery.browse('/art/browse/search/' + query + '/');
	}
}