(function($) {
	$.fn.wallpaperGallery = function(data, options) {
		var wallpaperData = data;
		var current = null;
		var xPos = 0;
		var defaults = {};
		var loading;
		var pageTitle = null;

		var options = $.extend(defaults, options);	
		
		pageTitle = document.title.split('|');
		pageTitle = pageTitle[pageTitle.length-1];
		loading = $('<img src="/styles/images/ajax-loader.gif" alt="Loading" />').css({ position:'absolute', top:182, left:245 }).appendTo('#wallpaper').hide();
		SWFAddress.addEventListener(SWFAddressEvent.CHANGE, changeImage);
		return this.each(function() {
			$('<a href="">I wanna create my own resolution ></a>').appendTo('#resolutions-custom').click(toggleCustomRes);
			setupResolutions();
			initalizeMenu();
			preloadImages();
			
			
			if(options.autoStart) 
				changeImage(); 
			else if(options.startingImage) 
				setupStarting(options.startingImage);
		});
		
		function setupStarting(url) {
			for(var i=0; i<wallpaperData.wallpaper.length; i++) {
				if(wallpaperData.wallpaper[i].url == url) {
					current = wallpaperData.wallpaper[i];	
					i = 999;
				};
			};
		};
		
		function initalizeMenu() {
			var ul = $('<ul>').appendTo("#wallpaper-bottom");
			$.each(wallpaperData.wallpaper, function(i,item){
				var li = $('<li><a href="/wallpaper/'+item.url+'/"><img src="/images/wallpaper/thumbs/'+item.filename+'" /></a></li>');
				li.appendTo(ul);
				li.children().filter('a').click(function(e) { SWFAddress.setValue(item.url+'/'); return false; });
			});
			$(ul).wrap('<div id="wallpaper-menu"></div>').parent().css({ 'overflow':'hidden' });
			$('<img id="next-arrow" alt="Next" src="/images/wallpaper/next-arrow.gif" />').appendTo("#wallpaper-bottom").css({ 'cursor':'pointer', opacity:.7 }).hover(function() { $(this).css({ 'opacity':1 }); }, function() { $(this).css({ 'opacity':.7 }); }).click(function() { moveMenu('next') });
			$('<img id="prev-arrow" alt="Prev" src="/images/wallpaper/prev-arrow.gif" />').appendTo("#wallpaper-bottom").css({ 'cursor':'pointer', opacity:.7 }).hide().hover(function() { $(this).css({ 'opacity':1 }); }, function() { $(this).css({ 'opacity':.7 }); }).click(function() { moveMenu('prev') });
		}
		
		function changeImage() {
			var v = SWFAddress.getValue().substr(1).split('/');
			if(!v[0]) return false;
			
			for(var i=0; i<wallpaperData.wallpaper.length; i++) {
				if(wallpaperData.wallpaper[i].url == v[0]) {
					current = wallpaperData.wallpaper[i];	
					i = 999;
				};
			};
		
			$('form input[@name=wID]').attr('value', current.id);
			$('#wallpaper img:first').stop().animate({ marginTop:420 }, 200, function() {
				$(loading).fadeIn({ duration:300, queue:false });
				$(this).load(function() { 
					$(loading).fadeOut({ duration:150, queue:false });	
					$(this).animate({ marginTop:0 }, {duration:250, queue:false}); 
				}).attr('src','/images/wallpaper/preview/'+current.filename);														 
			});
			setTimeout(function() {
				if(current.title) 
					SWFAddress.setTitle(current.title+' | ' + pageTitle); 
				else  
					SWFAddress.setTitle('Desktop Wallpaper | ' + pageTitle);
				urchinTracker('/wallpaper/'+current.url+'/');
			}, 100);
		}
		
		function moveMenu(direction) {
			if(direction == 'next') {
				if(-(wallpaperData.wallpaper.length*130-650)<xPos-390) xPos -= 390; else xPos = -(wallpaperData.wallpaper.length*130-650);
				$('#wallpaper-menu ul').animate({ 'left':xPos }).each(function() {  if(-(wallpaperData.wallpaper.length*130-650)>=xPos) $(this).parent().siblings('#next-arrow').fadeOut('fast'); }).parent().siblings('#prev-arrow').fadeIn('fast');
			} else if (direction == 'prev') {
				if(xPos+390<0) xPos += 390; else xPos = 0;
				$('#wallpaper-menu ul').animate({ 'left':xPos }).each(function() {  if(xPos>=0) $(this).parent().siblings('#prev-arrow').fadeOut('fast'); }).parent().siblings('#next-arrow').fadeIn('fast');
			}
		}
		
		function preloadImages() {
			$.each(wallpaperData.wallpaper, function(i,item){
				$('<img src="/images/wallpaper/thumbs/'+item.preview+'" alt="Preloading" />');
			});
		}
		
		function setupResolutions(id) {
			$('.resolutions a').click(function(e) { 
				e.preventDefault(); 
				var id = (current ? current.id : wallpaperData.wallpaper[0].id);
				var t = $(this).html();
				var w = t.substr(0,t.indexOf('x'));
				var h = t.substr(t.indexOf('x')+1);
				urchinTracker('/wallpaper/'+(current ? current.filename : wallpaperData.wallpaper[0].filename)+'/'+w+'x'+h+'/');
				window.open('/scripts/download-wallpaper.php?wID='+id+'&width='+w+'&height='+h, '_self');
				this.blur();
				return false;
			});
		}
		
		function toggleCustomRes(e) {
			e.preventDefault();	
			$(this).animate({ right:'-240px' }, 250, function() { 
				$('#resolutions-custom form').animate({ right:0 }).submit(function() { 
					var w = $(this).find('input[@name=width]').attr('value');
					var h = $(this).find('input[@name=height]').attr('value');
					rexp  = /^[0-9]{1,4}$/;
					if(!w || !h || !rexp.test(w) || !rexp.test(h)) {
						alert('You must enter a valid height and width.');
						return false;
					}
					if(w > 2560 || h > 1600) {
						alert('What are you trying to do to our servers?  Please keep your wallpapers under 2560x1600px.');
						return false;
					}
					urchinTracker('/wallpaper/'+(current ? current.filename : wallpaperData.wallpaper[0].filename)+'/'+w+'x'+h+'/');
					window.open('scripts/download-wallpaper.php?wID='+(current ? current.id : wallpaperData.wallpaper[0].id)+'&width='+w+'&height='+h, '_self');
				}); 
			});
		}
	};
})(jQuery);

$(document).ready(function(){	
	var bh = String(window.location).split('/');
						   
	var v = SWFAddress.getValue().substr(1).split('/');
	var initValue = false;
	if(v[0]) initValue = true;	
	
	$('#resolutions-custom form').css({ right:'-290px' });
	$.getJSON('/ajax-data.php', { 'action':'wallpaper' }, function(data) { $('#wallpaper').wallpaperGallery(data, { autoStart:initValue, startingImage:bh[4] }); });
});
