/**
 *    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.slimbox = function(thumbSheetXMLIn, docentIn){
	var that = this;
	var debug = false;
	var sgalert = function(msg){
		if (debug) {
			alert(msg);
		}
	};
	var docent = docentIn;
	var slimboxGallery = null;
	var useAllViews = true;
	var titleMetaField = "";
	var showControls = true;	
	
	var slimBoxOptions = null;
	
	var xml = thumbSheetXMLIn;
	
	var loop = true;
	var overlayOpacity = .8;
	var overlayFadeDuration = 400;
	var resizeDuration = 400
	var initialWidth = 250;
	var initialHeight = 250;
	var imageFadeDuration = 400;
	var captionAnimationDuration = 400;
	var counterText = "Image {x} of {y}";
	
	function init(){
		docent.sgconsole("Bigbox slimbox Init()");

		loop = docent.getBigboxOption('loop');	
		overlayOpacity = docent.getBigboxOption('overlayOpacity');	
		overlayFadeDuration = docent.getBigboxOption('overlayFadeDuration');	
		resizeDuration = docent.getBigboxOption('resizeDuration');	
		initialWidth = docent.getBigboxOption('initialWidth');	
		initialHeight = docent.getBigboxOption('initialHeight');	
		imageFadeDuration = docent.getBigboxOption('imageFadeDuration');	
		captionAnimationDuration = docent.getBigboxOption('captionAnimationDuration');	
		counterText = docent.getBigboxOption('counterText');	
		
		titleMetaField = docent.getBigboxOption('titlemetafield');

		slimBoxOptions = makeSlimboxOptions();
		slimboxGallery = makeSlimboxGallery();
	}
	
	function makeSlimboxOptions() {
		
		return {
			loop : loop,
			overlayOpacity : overlayOpacity,
			overlayFadeDuration : overlayFadeDuration,
			resizeDuration : resizeDuration,	
			initialWidth: initialWidth,	
			initialHeight : initialHeight,	
			imageFadeDuration : imageFadeDuration,	
			captionAnimationDuration : captionAnimationDuration,	
			counterText : counterText	
		};
	}
	
	function makeSlimboxGallery(mode, curExhibit){
		var gal = new Array();
		if (!curExhibit) { curExhibit=0; }
		if (!mode) { mode = 'exhibit'; }
		docent.sgconsole('makeSlimGallery, mode: ' + mode);
		if (mode == 'exhibit') {
			$ml('exhibit', xml).each(function(n){
				//console.log('processing bigbox exhibit: ' + n);
				var myUrl = $ml('views > view > bigbox > url', this).eq(0).text();
				//console.log('bigbox url for gallery: '+myUrl);
				if (!myUrl || myUrl == "") {
					myUrl = $ml('views > view > picturebox > url', this).eq(0).text();
				}
				if (myUrl && myUrl != "") {
					var myGalEntry = makeSlimboxEntry(myUrl,n);
					gal.push(myGalEntry);
				}
			})
		}
		else {
			$ml('exhibit:eq('+curExhibit+') view', xml).each(function(n){
				var myUrl = $ml('bigbox > url', this).text();
				if (!myUrl || myUrl == "") {
					myUrl = $ml('picturebox > url', this).text();
				}
				if (myUrl && myUrl != "") {
					var myGalEntry = makeSlimboxEntry(myUrl,n);
					gal.push(myGalEntry);
				}
			})
		}
		return gal;
	}
	
	function getSlimBoxMetadata (imageIndex) {
		var mdata = docent.getMetadata(titleMetaField,imageIndex);
		if (typeof mdata == 'undefined') {
			return "";
		}
		else {
			return mdata;
		}
	}
	
	function makeSlimboxEntry(url,imageIndex) {		
			return [url, getSlimBoxMetadata (imageIndex)];
	}

	this.openByURL = function (url) {  // metadata not supported here
		docent.sgconsole("open slimbox with " + url);
		$ml.slimbox(url, "", slimBoxOptions);
	}
	
	this.openByView = function(mode, exhibitnum, viewnum) {
		docent.sgconsole("slimbox: openByView trying to start " + exhibitnum + " " + viewnum);
		slimBoxGallery = makeSlimboxGallery(mode, exhibitnum);
		
		var current = exhibitnum;
		if (mode == 'view') {	current = viewnum;		}
		$ml.slimbox(slimBoxGallery, current, slimBoxOptions);
	}
	init();
}
