$E = YAHOO.util.Event;
$D = YAHOO.util.Dom;
$ = $D.get;

YAHOO.namespace('gallery');
YAHOO.gallery = function()
{
	return {
		slideCount : 1 ,
		frameCount : 1 ,
		imageCount : 1 ,
		navKey : 1 ,
		innerPanel : '' ,
		init : function() {
			var slideButtons = $D.getElementsByClassName('slide');
			var frames = $D.getElementsByClassName('frame');
			var thumbnails = $D.getElementsByClassName('thumb-link');
			YAHOO.gallery.frameCount = frames.length;
			YAHOO.gallery.imageCount = thumbnails.length;
			$E.on(slideButtons,'click', YAHOO.gallery.slide);
			$E.on(thumbnails,'click', YAHOO.gallery.imageSwap);

			if (YAHOO.gallery.imageCount > 1) {
				$('next').href = galleryNav[this.navKey]['src'];
			} else {
				$('next').href = "";
			}

			$('previous').href = "";

			$E.on('next','click', YAHOO.gallery.next);
			$E.on('previous','click', YAHOO.gallery.previous);

			YAHOO.gallery.toggleHighlight(YAHOO.gallery.navKey);
		},

		slide : function(e) {
			targ = YAHOO.gallery.resolveTarget(e);

			if(targ.id == 'slider-next' && YAHOO.gallery.slideCount < YAHOO.gallery.frameCount) {
				YAHOO.gallery.slideCount++;
				var attributes = {
					points: { by: [-445, 0] }
				};
			} else if (targ.id == 'slider-previous' && YAHOO.gallery.slideCount > 1) {
				YAHOO.gallery.slideCount--;
				var attributes = {
					points: { by: [445, 0] }
				};
			} else if (targ.id == 'slider-reset') {
				var move = 445*(YAHOO.gallery.slideCount-1);
				YAHOO.gallery.slideCount = 1;
				var attributes = {
					points: { by: [move, 0] }
				}
			}

			var anim = new YAHOO.util.Motion('inner', attributes, 2);
			anim.animate();
			YAHOO.util.Event.stopEvent(e);
		},

		resolveTarget : function(e) {
			//do a bit of IE friendly stuff
			if (e.target) targ = e.target;
			else if (e.srcElement) targ = e.srcElement;
			if (targ.nodeType == 3) // defeat Safari bug
			targ = targ.parentNode;

			return targ;
		},

		imageSwap : function(e) {
			var targ = YAHOO.gallery.resolveTarget(e);
			var holder = $('holder');
			var next = $('next');
			var previous = $('previous');
			var navKey = targ.title.substr(targ.title.indexOf(" "), targ.title.length);

			galleryImage = new Image;
			navKey = parseFloat(navKey);
			galleryImage.src = galleryNav[navKey]['src'];

			holder.removeChild(holder.childNodes[0]);
			holder.appendChild(galleryImage);
			YAHOO.gallery.swapDescription(navKey);

			if ((navKey+1) == YAHOO.gallery.imageCount) {
				next.href = '';
			} else {
				next.href = galleryNav[navKey+1]['src'];
			}
			if ((navKey-1) <= 0) {
				previous.href = '';
			} else {
				previous.href = galleryNav[navKey-1]['src'];
			}

			YAHOO.gallery.navKey = navKey+1;
			YAHOO.gallery.displayNavKey();
			YAHOO.gallery.updateOrderLink(YAHOO.gallery.navKey);
			YAHOO.gallery.toggleHighlight(YAHOO.gallery.navKey);
			YAHOO.util.Event.stopEvent(e);
		},

		displayNavKey : function() {
			$('nav-key').innerHTML = YAHOO.gallery.navKey;
		},

		next : function(e) {
			var targ = YAHOO.gallery.resolveTarget(e);
			var holder = $('holder');
			var next = $('next');
			var previous = $('previous');

			if(YAHOO.gallery.imageCount > YAHOO.gallery.navKey) {
				galleryImage = new Image;
				galleryImage.src = galleryNav[YAHOO.gallery.navKey]['src'];

				holder.removeChild(holder.childNodes[0]);
				holder.appendChild(galleryImage);
				YAHOO.gallery.swapDescription(YAHOO.gallery.navKey);

				if ((YAHOO.gallery.navKey+1) < YAHOO.gallery.imageCount) {
					next.href = galleryNav[YAHOO.gallery.navKey+1]['src'];
				} else {
					next.href = '';
				}

				if((YAHOO.gallery.navKey-2) == -1) {
					previous.href = galleryNav[0]['src'];
				} else {
					previous.href = galleryNav[YAHOO.gallery.navKey-1]['src'];
				}

				YAHOO.gallery.navKey++;
			} else {
				next.href = '';
			}
			YAHOO.gallery.updateOrderLink(YAHOO.gallery.navKey);
			YAHOO.gallery.toggleHighlight(YAHOO.gallery.navKey);
			YAHOO.gallery.displayNavKey();
			YAHOO.util.Event.stopEvent(e);
		},

		previous : function(e) {
			var targ = YAHOO.gallery.resolveTarget(e);
			var holder = $('holder');
			var next = $('next');
			var previous = $('previous');

			if(YAHOO.gallery.navKey > 1) {

				galleryImage = new Image;
				galleryImage.src = galleryNav[YAHOO.gallery.navKey-2]['src'];
				YAHOO.gallery.swapDescription(YAHOO.gallery.navKey-2);

				holder.removeChild(holder.childNodes[0]);
				holder.appendChild(galleryImage);

				if ((YAHOO.gallery.navKey+1) < YAHOO.gallery.imageCount) {
					next.href = galleryNav[YAHOO.gallery.navKey]['src'];
				} else {
					next.href = '';
				}

				if((YAHOO.gallery.navKey-3) < 0) {
					previous.href = '';
				} else {
					previous.href = galleryNav[YAHOO.gallery.navKey-3]['src'];
				}
				YAHOO.gallery.navKey--;
			}

			YAHOO.gallery.toggleHighlight(YAHOO.gallery.navKey);
			YAHOO.gallery.updateOrderLink(YAHOO.gallery.navKey);
			YAHOO.gallery.displayNavKey();
			YAHOO.util.Event.stopEvent(e);
		},

		swapDescription : function (navKey) {
			var summaryholder = $('image-description');
			summaryholder.innerHTML = galleryNav[navKey]['summary'];
		},

		toggleHighlight : function (navKey) {
			var liImageHolders = $D.getElementsByClassName("frame");
			var currentImageHolders = $D.getElementsByClassName("image-container-"+navKey);

			for (i=0;i < liImageHolders.length;i++) {
				liImageHolders[i].style.backgroundColor = "#7fcdef";
			}
			for (i=0;i < currentImageHolders.length;i++) {
				currentImageHolders[i].style.backgroundColor = "#ffffff";
			}
		},

		updateOrderLink : function (navKey) {
			var orderLink = $('order-img');
			orderLink.href = galleryNav[YAHOO.gallery.navKey-1]['order_link'];
		}
	}

}();

$E.onDOMReady(YAHOO.gallery.init, '', YAHOO.gallery);
