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

/*
 * 	Notes:
 * 	1. Nice HTML thumbsheet here: http://plt-scheme.org/screenshots/
 */

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.thumbsheetNoImageSiteGrinderCSS =
function (thumbSheetXMLIn, modeIn, docentIn) { 
	var that=this;
	var debug = false;
	var sgalert = function(msg) { if (debug) {
		alert(msg);
	} };
	var docent= docentIn;

	//alert(docentIn);
	var xml = thumbSheetXMLIn;
    var cssInitialized=false;
	var thumbWidth = 0;
	var thumbHeight = 0;
	var sheetWidth = 0;
	var sheetHeight = 0;
	var sheetMode = modeIn;
	var sheetDivID = "not set yet";
	var thumbDivID = "not set yet";
	var linkClass = "not set yet";
	var changeimageonhover = "false";
	
	this.select = function (thumbnum) {
		// called whenever a new image is selected to sync
		// could be called becuase a thumb (including this one) is clicked
		// or for any other reason the docent wants, like next/prev buttons.
		
		// don't do anything if already synced 
		
		
		// If not synced then hilite apropriate thumb if necessary
		// and dehilite others if necessary
		docent.sgconsole("thubsheet select called");
		initSheet();
		
		
	}
	
	function getAThumb(thumbnum, bkgdURL) {
		var tdiv = "";
		
		// Thumb div
		//tdiv += '<div class="'+ thumbDivID + '">';
		var curThumb=0;
		var humanizedNum = thumbnum+1;
		if(sheetMode=='exhibit') { curThumb = docent.getCurrentExhibit(); }
		else { curThumb = docent.getCurrentView(); }
		
		if(thumbnum == curThumb) {
			tdiv += '<strong>' + humanizedNum + '</strong>';
		}
		else {
			tdiv += '<a '
			tdiv += 'href="#" onclick="';
			tdiv += docent.getName() + '.selectThumb(' + thumbnum + ',\''+sheetMode+'\',true);return false;"';
			tdiv += '>' + humanizedNum +'</a>';
		}
		// Thumb anchor
		
		// Close thumb div
//		tdiv += '</div>';
		
		docent.sgconsole ("Adding thumb div: " + tdiv);
		return tdiv;
	}
	
	
	function init() {
		sgalert("SG No Image Thumbsheet: Init", this);
		if(getOption("type")!="thumbsheetNoImageSiteGrinderCSS") { docent.sgconsole("Type mismatch between thumbsheet javascript(thumbsheetNoImageSiteGrinderCSS) and data ("+getOption("type")+")"); return;}
		if(getOption("version") > 1.0) { docent.sgconole("Thumbsheet javascript version older than data version!"); return;}
		processXML();
		initSheet();
	}
	
	 function processXML () {
		sgalert("SG Standard Thumbsheet: processXML", this);
		/*
		 * we'll need to know:
		 * 
		 * 		- thumb div name prefix
		 * 		- options (scroll? change on hover?)
		 * 
		 *     1. count the thumbs (to figure out how to go page to page
		 */
		numExhibits = docent.getExhibitCount();
		sgalert("ne:"+numExhibits);
		sheetWidth = getOption("sheetwidth");
		sheetHeight = getOption("sheetheight");
		thumbWidth = getOption("thumbwidth");
		thumbHeight = getOption("thumbheight");
		sheetDivID = getOption("sheetdivname");
		thumbDivID = getOption("thumbdivname");
		linkClass = getOption("linkclassname");
		changeimageonhover = getOption("changeimageonhover");
//		sheetWidth = $ml('#'+sheetDivID).width(); //("sheetwidth");
//		sheetHeight = $ml('#'+sheetDivID).height();

		return;
	}
		
	this.updateSheet = function() {
		initSheet();
	}
	
	this.getAThumbIterator = function(n,data,url){
		data.containerText += getAThumb(n,url);
	}

// New version of initsheet using docent iterator

	function initSheet () { 
		initSheetCSS();
		var data = new Object();
		data.containerText = "";
		// Create thumbs
		if (sheetMode == "exhibit") {
			docent.iterateExhibitThumbImageUrls(that.getAThumbIterator, data);
		}
		else {
			docent.iterateViewThumbImageUrls(that.getAThumbIterator, data, null);	// null means use current exhibit	
		}
		data.containerText += '<div style="clear:left"></div>';
		$ml("div#"+sheetDivID).css("height","");  // get rid of height for growing
		$ml("#"+sheetDivID).html(data.containerText);
		if(typeof doResize == 'function') { doResize(null,null); }
	}

	function initSheetCSS() {
		if(!cssInitialized) {
			var ruleObj = {};
//			var aAndStrong ="border: 1px solid #CCDBE4; display:block; float:left; margin: 5px 5px 5px 5px; padding: 10px 30px; text-align:center; text-decoration:none;";
			ruleObj["#"+sheetDivID+" a"]=[getAnchorNormalStyle() ];
			ruleObj["#"+sheetDivID+" a:hover"]=[getAnchorHoverStyle()];
			
			ruleObj["#"+sheetDivID+" strong"]=[getCurrentPageStyle()];
			
			$ml.cssRule(ruleObj);
			cssInitialized = true;
		}		
	}
	
	function getAnchorNormalStyle() {
	    var s='';
		s+='border: '+ getBorderOptions('normal');
		s+='background:'+ getColorOption('normalbackgroundcolor') +';';
		s+=' display:block; float:left;';
		s+='margin: '+Math.round(getOption('vspacing')/2)+'px '+Math.round(getOption('hspacing')/2)+'px '+Math.round(getOption('vspacing')/2)+'px '+Math.round(getOption('hspacing')/2)+'px;'
//		s+=' padding: 10px 50px; text-align:center;';
		s+=' width: '+ getPXOption('thumbwidth') +'; height:'+ getPXOption('thumbheight') +'; line-height:'+ thumbHeight + 'px; text-align:center;';
		s+= ' text-decoration:none;';
		s+= 'color:'+getColorOption('normalfontcolor')+';';
		docent.sgconsole(s);
		return s;
	}
	function getAnchorHoverStyle() {
	    var s='';
		s+='border: '+ getBorderOptions('hover');
		s+='background:'+ getColorOption('hoverbackgroundcolor') +';';
//		s+=' display:block; float:left;';
//		s+=' margin: '+Math.round(getOption('vspacing')/2)+'px '+Math.round(getOption('vspacing')/2)+'px '+Math.round(getOption('vspacing')/2)+'px '+Math.round(getOption('vspacing')/2)+'px;';
//		s+=' padding: 10px 30px; text-align:center;';
//		s+= ' text-decoration:none;';
		s+= 'color:'+getColorOption('hoverfontcolor')+';';
		docent.sgconsole(s);
		return s;
	}
	function getCurrentPageStyle() {
	    var s='';
		s+='border: ' + getBorderOptions('current');
		s+='background:'+ getColorOption('currentbackgroundcolor') +';';
		s+='font-weight:bold;';
		s+='display:block;';
		s+='float:left;';
		s+='margin: '+Math.round(getOption('vspacing')/2)+'px '+Math.round(getOption('hspacing')/2)+'px '+Math.round(getOption('vspacing')/2)+'px '+Math.round(getOption('hspacing')/2)+'px;'
		docent.sgconsole('MARGIN STUFF margin: '+Math.round(getOption('vspacing')/2)+'px '+Math.round(getOption('hspacing')/2)+'px '+Math.round(getOption('vspacing')/2)+'px '+Math.round(getOption('hspacing')/2)+'px;');
//		s+='padding: 10px 30px;';
		s+=' width: '+ getPXOption('thumbwidth') +'; height: '+ getPXOption('thumbheight') +'; line-height:'+ thumbHeight +'px; text-align:center;';
		s+='text-align:center;';
		s+='text-decoration:none;'
		s+= 'color:'+getColorOption('currentfontcolor')+';';
		docent.sgconsole(s);
		return s;
	}
	 
	function getPXOption(optName) {
		var pxOpt = getOption(optName);
		if (pxOpt==undefined) { docent.sgconsole("no image thumb: px option not found!"); return "10px"; }
		else if (typeof(s)=='string' && pxOpt.substring(pxOpt.length-2)=='px') { return pxOpt; }
		else if (isNaN(pxOpt)) { docent.sgconsole("no image thumb: px option not a number!"); return "10px";}
		else { return pxOpt + 'px'; }
	}
	
    function getBorderOptions(borderType){
		var borderWidth = getOption('borderwidth');
		if (borderWidth == 0) {
			return 'none;';
		}
		else 
			return borderWidth + 'px ' + 'solid ' + getColorOption(borderType + 'bordercolor') + ';';
	}

	
    function getColorOption(optName) {
		var hexColor = getOption(optName);
		if (hexColor != undefined) {
			if (hexColor.substring(0, 1) == '#') {
				return hexColor;
			} // already css style for some reason
			else 
				if (hexColor.substring(0, 2) == '0x') {
					return '#' + hexColor.substring(2);
				}
				else 
					if (!isNaN('0x' + hexColor)) {
						return '#' + hexColor;
					}
		}
		return null;
	}
	
	function getOption(opt) {
		var w = docent.getThumbSheetOption(sheetMode,opt);
		//var w = $ml('option[varname='+opt+']', options).attr("value");
		return w;
	}
		
		
	init();
}
