/**
 *    Copyright (c) 2009-2010, As Is Software, dba Media Lab Inc.
 *    http://www.medialab.com
 */

var com;
if(!com) { com = {}; } else if(typeof(com) != "object") { throw new Error("can't initialize...com is not an object."); }
if(!com.medialab) { com.medialab = {}; } else if(typeof(com.medialab) != "object") { throw new Error("can't initialize...com.medialab is not an object."); }
if(!com.medialab.sg) { com.medialab.sg = {}; }
if (!com.medialab.sg.gallery1) {
	com.medialab.sg.gallery1 = {};
}


com.medialab.sg.gallery1.pictureboxSiteGrinderCSSAnim = function(pictureboxXMLIn, docentIn){
	var that = this;
	var debug = false;
	var sgalert = function(msg){
		if (debug) {
			alert(msg);
		}
	};
	var docent = docentIn;
	var xml = pictureboxXMLIn;
	
	var myWidth = 0;
	var myHeight = 0;
	var myDivID = "not set yet";
	var myClickAction = "not set yet";
	var myHoverAction = "not set yet";
	var rightClickBlock = false;
	var curImageUrl = "not set yet";
	var halfPreloader = 15;
	var preloadImgHTML = null;
	var exhibitArray = [];
	var fadeTime = 500;
	var delay = 5000;
	var goNextTimerID = null;
	var checkLoadTimerID = null;
	var autoPlay = false;
	var endAction = 'loop';
	var endUrl = 'index.html';
	var viewDiv = null;
	var pboxAlign = "not set yet";
		
	function getPictureboxQuery() {
		// sample : '#divname img'
		return '#'+myDivID+' img';
	}
	
	this.getRightClickBlock = function () { return rightClickBlock; }
	
	this.displayByUrl = function(imageUrl) {
		var pbq = getPictureboxQuery();
		//$ml(pbq).attr('src', imageUrl);
	}
	
	this.displayByNum = function(exhibitNum, viewNum) {
		docent.sgconsole('CSS PICTUREBOX displayByNum()');
		autoPlayed = false;
		if (viewNum != 0) {
			autoPlay = false;
		}
		gotoPicNum(exhibitNum,viewNum);
		//this.displayByUrl(getUrlFromNum(exhibitNum,viewNum));
	}
	
	function getUrlFromNum(exhibitNum, viewNum){
		return $ml('exhibits exhibit:eq('+ exhibitNum +') views view:eq('+ viewNum +') picturebox url',xml).text();

	}
	
	function getPictureDiv(urlIn) {
		var left = 0;
		var top = 0;
		return "<img style='position:absolute;left:0px;top:0px;display:none' src='" + urlIn + "'>";
	}
	
/*	function startShow() {
		$ml('#'+myDivID+' img:eq(0)').css('display','block');
		setInterval(function(){
			$ml('#'+myDivID+' :first-child').fadeOut()
			.next('img').fadeIn()
			.end().appendTo('#'+myDivID);}, 
		6000);	
	}
*/	

	function gotoPicNum(exhibitNum, viewNum) {
		clearTimeout(goNextTimerID);
		if(typeof viewNum == 'undefined') { viewNum = 0; }
		if (exhibitNum <= exhibitArray.length - 1) {
			var imageHero = exhibitArray[exhibitNum].images[viewNum];
			if(typeof imageHero == 'undefined') {
				//if(typeof imageHero == 'undefined') {
					exhibitArray[exhibitNum].images[viewNum] = new Object();
					exhibitArray[exhibitNum].images[viewNum].img = new Image();
					exhibitArray[exhibitNum].images[viewNum].img.src = getUrlFromNum(exhibitNum,viewNum);
					exhibitArray[exhibitNum].images[viewNum].aligned = false;
					exhibitArray[exhibitNum].images[viewNum].html = $ml(getPictureDiv(exhibitArray[exhibitNum].images[viewNum].img.src));
					imageHero = exhibitArray[exhibitNum].images[viewNum];
				//}
			}
						
			if (!imageHero.img.width!=0) {
				goNextTimerID = setTimeout(function(){
					gotoPicNum(exhibitNum,viewNum);
					exhibitNum = null;
				}, 10);
			}
			else {
				if (!imageHero.aligned) { alignInPicturebox(imageHero); }
				setNextImgHTML(imageHero.html);
				$ml(getDivContainerString() + ' :first-child')
					.fadeOut(fadeTime, function(){fadeDone(exhibitNum);})
					.next('img').fadeIn(fadeTime)
					.end().appendTo(getDivContainerString());
				if (autoPlayed) {
					docent.pictureboxSelectByNum(exhibitNum, false);
				}
			}
		}
//			viewDiv = $ml(getPictureDiv(getUrlFromNum(nextNum,nextView)));
	}



/*  // This one works well without views
	function gotoPicNum(nextNum) {
		clearTimeout(goNextTimerID);
		if (nextNum <= imgArray.length - 1) {
			if (!imgArray[nextNum].img.complete) {
				goNextTimerID = setTimeout(function(){
					gotoPicNum(nextNum);
					nextNum = null;
				}, 10);
			}
			else {
				if (!imgArray[nextNum].centered) { centerInPicturebox(nextNum); }
				setNextImgHTML(imgArray[nextNum].html);
				$ml('#' + myDivID + ' :first-child')
					.fadeOut(fadeTime, function(){fadeDone(nextNum);nextNum=null;})
					.next('img').fadeIn(fadeTime)
					.end().appendTo('#' + myDivID);
				if (autoPlayed) {
					docent.pictureboxSelectByNum(nextNum, false);
				}
			}
		}
//			viewDiv = $ml(getPictureDiv(getUrlFromNum(nextNum,nextView)));
	}
	*/
	
	function alignInPicturebox(imageObjToAlign) {
		var pboxWidth = $ml('#'+myDivID).width();
		var pboxHeight = $ml('#'+myDivID).height();
		// assume center h & v
		var top =  Math.floor(pboxHeight/2) - Math.floor(imageObjToAlign.img.height/2);
		var left = Math.floor(pboxWidth/2) - Math.floor(imageObjToAlign.img.width/2);
		// check for non centered
		if(pboxAlign.indexOf("left") != -1) {
			left = 0;
		}
		if(pboxAlign.indexOf("right") != -1) {
			left = pboxWidth-imageObjToAlign.img.width;
		}
		if(pboxAlign.indexOf("top") != -1) {
			top = 0;
		}
		if(pboxAlign.indexOf("bottom") != -1) {
			top = pboxHeight-imageObjToAlign.img.height;
		}
		
		imageObjToAlign.html.css('top',top+'px');
		imageObjToAlign.html.css('left',left+'px');
		imageObjToAlign.aligned = true;
	}
	
	function setNextImgHTML(htmlIn) {
		$ml(getDivContainerString() + ' :eq(1)').remove();
		htmlIn.appendTo(getDivContainerString());
	}
	
	function fadeDone(replacedByNum) { 
		var targetNum = replacedByNum + 1;
		if (autoPlay) {
			if (targetNum == docent.getExhibitCount()) {
				if (endAction == 'loop') {
					targetNum = 0;
				} else {
					if(endAction=='gotourl') {
						if(endUrl!=null && endUrl!='') {
							docent.gotoUrl(endUrl);
						}
					}
				}
			}
			autoPlayNext(targetNum);
		}
	}
	
	
	function preload() {
		for(var curSlide = 0; curSlide < docent.getExhibitCount(); curSlide++) {
			var victim = new Object();
			victim.images = [];
			victim.images[0] = new Object();
			victim.images[0].img = new Image();
			var imgSrc = getUrlFromNum(curSlide,0);
			victim.images[0].img.src = imgSrc;
			victim.images[0].html = $ml(getPictureDiv(imgSrc));
			victim.images[0].positioned = false;
			exhibitArray[curSlide]  = victim;
		}
		checkLoad();
	}

	function autoPlayNext(nextToPlay) {
		autoPlayed = true;
		clearTimeout(goNextTimerID);
		goNextTimerID = setTimeout(function(){
			gotoPicNum(nextToPlay); nextToPlay = null;
		}, delay);
	}
	
	function checkLoad() {		
		var startImgNum = docent.getCurrentExhibit();
		var nextImgNum = docent.getCurrentExhibit()+1;
		if(nextImgNum == docent.getExhibitCount()) { nextImgNum = 0; }
		if(exhibitArray[startImgNum].images[0].img.width!=0 && exhibitArray[nextImgNum].images[0].img.width!=0) {
			alignInPicturebox(exhibitArray[startImgNum].images[0]);
			preloadImgHTML.remove();
			exhibitArray[startImgNum].images[0].html.appendTo(getDivContainerString());
			exhibitArray[nextImgNum].images[0].html.appendTo(getDivContainerString());
			exhibitArray[startImgNum].images[0].html.fadeIn(fadeTime);
			if (autoPlay) {
				autoPlayNext(nextImgNum);
			}
		} else {
			checkLoadTimerID = setTimeout(checkLoad,10) 
		}
	}
	
	function getDivContainerString() {
		return '#' + myDivID + ' > div';
	}
	
	
 	function initPictureBox() {
		var ptop = Math.floor(myHeight/2) - halfPreloader;
		var pleft = Math.floor(myWidth/2) - halfPreloader;
		preloadImgHTML= $ml("<img style='position:absolute;left:"+pleft+"px;top:"+ptop+"px;display:block' src='"+getOption('preloaderimage')+"'>");
		var container = $ml('<div style="position:relative"></div>');
		preloadImgHTML.appendTo(container);
		container.appendTo('#'+myDivID);

		preload();

		docent.sgconsole('made thumbs... ');
		
		var exhibitToShow = 0;

		if(rightClickBlock) { 
			docent.sgconsole('3 disabling right click');
			$ml(getDivContainerString()).bind("contextmenu",function(e){ alert('Context menu disabled for this image.'); return false; } ); 
		}
		
		if (myClickAction != "none") {
			$ml(getDivContainerString()).bind('click',function(event){myClick(event);});

		}
	}
	
	function myClick(e) { 
		docent.sgconsole("picturebox clicked");
		docent.pictureboxClick(true,null);
		return false;
	}
	
	function init() {
		sgalert("SG Standard Picturebox: Init", this);
		if(getOption("type")!="animatedcss") { alert("Type mismatch between picturebox javascript and data!"); return;}
		if(getOption("version") > 1.0) { alert("Picturebox javascript version older than data version!"); return;}
		processXML();
		initPictureBox();
	}
	
	 function processXML () {
		sgalert("SG Standard Picturebox: processXML", this);
		
		numExhibits = docent.getExhibitCount();
		myWidth = getOption("width");
		myHeight = getOption("height");
		myDivID = getOption("divname");
		pboxAlign = getOption("alignment");
		rightClickBlock = getOption("rightclickblock");
		myClickAction = getOption("clickaction");
		myHoverAction = getOption("hoveraction");
		
		fadeTime = getOption("autoadvancedtransitiontimeseconds")*1000;
		delay = getOption("autoadvancedelayseconds")*1000;
		autoPlay = getOption("autoadvance");
		
		endAction = getOption("endaction");
		endUrl = getOption("endurl");

	
		return;
	}
		
	function getOption(opt) {
		return docent.getPictureboxOption(opt);
		//var w = $ml('options > picturebox > option[varname='+opt+']', xml).attr("value");
		
	}
		
		
	init();
}


