/*
    Title:          Palm Photo Gallery JavaScript
    Description:
        The file contains the gallery JavaScript object within the defined
        name-space of 'palm'. All method, properties and variables are to be
        contained within this name-space to prevent conflicts and promote
        consistency.
        
    Created:        22nd Oct 2008
    Last Modified:  22nd Oct 2008
    
    Author:         Jamie Newman
    Contact:        jnewman@digitas.com
    
    Requirements:
        * MooTools 1.2
		* Palm Global Javascript (palm.js)
*/

palm.tools.gallery = {
	/*  Function: Gallery Javascript
	 *  Version: 0.1
	 *
	 *  Description:
	 *      Gallery with 6 thumbnail images and one large image.
	*/
	showTime: 300,
	init: function(){
        window.addEvent('domready', function() {
			palm.tools.gallery.setup();
        });
	},
	setup: function(){
        if (!$("autorun")) return false;
		this.myImg = $("autorun");
		this.elementsL = $("left_content").getElements("DIV");
		this.elementsLA = $("left_content").getElements("A");
		this.elementsR = $("right_top").getElements("LI");
		this.elementsB = $("bottom_content").getElements("DIV");
		this.myImg.set('tween', {duration: palm.tools.gallery.showTime, link: 'chain'});

		this.sel_pic_sel = "sel_pic_sel";
		this.sel_pic = "sel_pic";
		this.send_to = "send_to";
		this.send_to_sel = "sel_send_to";
		this.path_big_pic = "images/standard/big_pic_";
		this.path_big_pic_images = "images/";
		this.path_big_pic_big = "/big_pic_";

		this.timer = {};

		this.elementsR.each(function(el){
			/* 
			 *	Add mouse behaviours - over/out/click
			*/
			if(el.className==palm.tools.gallery.sel_pic || el.className==palm.tools.gallery.sel_pic_sel){
				el.addEvent("mouseover",function(){
					el.className = palm.tools.gallery.sel_pic_sel; 
				});
				el.addEvent("mouseout",function(){
					el.className = palm.tools.gallery.sel_pic; 
					palm.tools.gallery.selSmallPic();
				});
				el.getFirst().addEvent("click",function(){
					$clear(palm.tools.gallery.timer);
					var imgele = el.getElements("IMG");
					imgele.each(function(ele){
						var s = ele.src.substring(ele.src.indexOf("sel_pic_")+8);
						s = s.substring(0, s.indexOf("."));
						palm.tools.gallery.showImg(ele,s);
					});
					return false;
				});
			}
		});

		this.galleryTitle = this.myImg.get("title");

		palm.tools.gallery.autoRun();
		palm.tools.gallery.rightPortClick();
		palm.tools.gallery.conBotClick();
		palm.tools.gallery.selSmallPic();
		palm.tools.gallery.loadPic();
		palm.tools.gallery.reattachLightbox(this.myImg.src.substr(this.myImg.src.indexOf("big_pic_")+8,1));
	},
	reattachLightbox: function(currentImage){
		var activeLB = palm.tools.gallery.myImg.getParent();
		if(activeLB.get("id") == "lbActivator"){
			$$("a.dynamicLightbox").destroy();
			activeLB.set("href",palm.tools.gallery.myImg.src.replace("big_pic_","light_"));

			var i = 1;

			$$("div#right_top img").each(function(el) {
				if(i != currentImage){
					var newA = new Element("A",
					{
						"title": activeLB.title,
						"href": el.src.replace("sel_pic_","light_"),
						"class": "dynamicLightbox",
						"rel": "lightbox[heroImage]"
					});
					if(i < currentImage) {
						$("main_pic_id").grab(newA,'top');
					}else{
						$("main_pic_id").grab(newA,'bottom');
					}
				}
				i++;
			});

			Slimbox.scanPage();
		}
	},
	showImg: function(thumbnailLink, imageIndex) {
		var bigImgSrc = thumbnailLink.src.substring(thumbnailLink.src.indexOf("images/")+7, thumbnailLink.src.lastIndexOf("/"));
		var altText = thumbnailLink.alt;
		var randNum = $random(0,999999);

		var newImg = new Element("img").setStyle("display","none").set('tween',{duration: 0}).tween('opacity',0);
		newImg.injectAfter(this.myImg);

		$(newImg).addEvent("load", function() {
			function fadeIn(){
				/*
				 * Old method using 2 image elements to replace each other
				palm.tools.gallery.myImg.destroy();
				palm.tools.gallery.myImg = $(newImg);
				*/
				palm.tools.gallery.myImg.set('src',newImg.src);
				palm.tools.gallery.myImg.setStyle('display','block'); 
				palm.tools.gallery.myImg.set('id','autorun');
				palm.tools.gallery.myImg.set('tween',{duration: palm.tools.gallery.showTime, link: 'chain'});
				palm.tools.gallery.myImg.set('alt', altText);
				palm.tools.gallery.myImg.tween('opacity',[0.1,1]);
				palm.tools.gallery.displayNone();

				$(newImg).destroy();

				palm.tools.gallery.reattachLightbox(newImg.src.substr(newImg.src.indexOf("big_pic_")+8,1));
				
				if($("main_text_"+imageIndex)){
					$("main_text_"+imageIndex).setStyle("display","");
				}
				palm.tools.gallery.clearBorder();
				$("sel_pic_"+imageIndex).className = palm.tools.gallery.sel_pic_sel;
			};
							
			palm.tools.gallery.myImg.tween('opacity',[1,0.1]);
			fadeIn.delay(palm.tools.gallery.showTime);
		});

		newImg.src = palm.asset_prefix+this.path_big_pic_images+bigImgSrc+this.path_big_pic_big+imageIndex+".jpg?"+randNum;
	},
	autoRun: function (i){
		if($("autorun")){
			var startingId = (this.elementsR.filter(".sel_pic_sel").get("id"));
			startingId = startingId.toString().replace("sel_pic_","");	

			var i = parseInt(startingId) + 1;

			changeImg = function(){
				if(i == 7){
					i = 1;
					var z = i++;
				} else {
					var z = i++;
				}
				var ele = $("sel_pic_"+(i-1)).getElement("img");

				palm.tools.gallery.showImg(ele,z);			
			}

			this.timer = changeImg.periodical(5000);
		}		
	},
	rightPortClick: function (){
		this.elementsR.each(function(el){
			if(el.get("class").indexOf("right_list_stand")!=-1){
				el.addEvent("click",function(){
					document.location.href = el.getElement("A").href;
				});
			}					   
		});
	},
	conBotClick: function conBotClick(){
		this.elementsB.each(function(el){
			if(el.id=="bot_left"){
				el.addEvent("click",function(){
					document.location.href = el.getElement("A").href;
				});
			}	
			if(el.id=="bot_right"){
				el.addEvent("click",function(){
					document.location.href = el.getElement("A").href;
				});
			}
		});
	},
	loadPic: function(){
		var j = 0;
		var loadPics = new Array();
		this.elementsR.each(function(el){
			if(el.className==palm.tools.gallery.sel_pic || el.className==palm.tools.gallery.sel_pic_sel){
				j++;
				loadPics[j-1] = el.getElement("IMG").src.replace("sel_pic_","big_pic_");			
			}					   
		});
		new Asset.images(loadPics);
	},
	selSmallPic: function(){
		this.elementsR.each(function(el){
			if(el.className==palm.tools.gallery.sel_pic){
				var s = palm.tools.gallery.myImg.src.substring(palm.tools.gallery.myImg.src.indexOf("big_pic_")+8);
				s = s.substring(0,s.indexOf("."));
				$("sel_pic_"+s).className = palm.tools.gallery.sel_pic_sel; 
			}				
		});		
	},
	clearBorder: function(){
		this.elementsR.each(function(el){
			if(el.className==palm.tools.gallery.sel_pic_sel){
				el.className = palm.tools.gallery.sel_pic; 
			}					   
		});
	},
	displayNone: function(){
		this.elementsR.each(function(el){
			if(el.id.indexOf("main_text_")!=-1){
				el.setStyle("display","none");	
			}
		});
	},
	setTextHeight: function(){
		var a = $("right_content").getStyle("height");
		var b = $("main_pic_id").getStyle("height");
		var c = parseInt(a) - parseInt(b);
		this.elementsL.each(function(el){
			if(el.className=="main_text")
				el.setStyle("height",c+"px");
		});
	}
};

palm.tools.gallery.init();
