/*
 * bm_poems
 */

;(function($){

var $$;


$$ = $.fn.bm_poems = function($options) {

	// check for basic CSS support
	if (!$$.hasCSS()) { return false; }
	// init the modified history object
	$.historyInit($$.onPageLoad);
		
	// set default options
	var $defaults = {
		poemid   : 0,
		container : "#poems",
		container_image : "#poems-text",
		clickNext : true, // helper for making the image clickable
		history : true,
		onPoem     : function(image,caption,thumb) {}
	};
	
	// extend the options
	var $opts = $.extend($defaults, $options);
	
	// bring the options to the jquery object
	for (var i in $opts) {
		$.bm_poems[i]  = $opts[i];
	}
	/* make the first poem active */
	$($opts["container"]+" li").eq($opts["poemid"]).addClass('active');
	$($opts["container_image"]+" li").eq($opts["poemid"]).addClass('active');
	$.bm_poems.poemid = $opts["poemid"];
	$.bm_poems.selector = $opts["container"];
	$.bm_poems.selector_image = $opts["container_image"];
};


/**
 *
 * @name NextSelector
 *
 * @desc Returns the sibling sibling, or the first one
 *
**/
$$.nextSelector = function(selector) {
	return $(selector).is(':last-child') ?
		   $(selector).siblings(':first-child') :
    	   $(selector).next();
    	   
};

/**
 *
 * @name previousSelector
 *
 * @desc Returns the previous sibling, or the last one
 *
**/

$$.previousSelector = function(selector) {
	return $(selector).is(':first-child') ?
		   $(selector).siblings(':last-child') :
    	   $(selector).prev();	   
};

/**
 *
 * @name hasCSS
 *
 * @desc Checks for CSS support and returns a boolean value
 *
**/

$$.hasCSS = function()  {
	$('body').append(
		$(document.createElement('div')).attr('id','css_test')
		.css({ width:'1px', height:'1px', display:'none' })
	);
	var _v = ($('#css_test').width() != 1) ? false : true;
	$('#css_test').remove();
	return _v;
};

/**
 *
 * @name onPageLoad
 *
 * @desc The function that displays the poem and alters the active classes
 *
 * Note: This function gets called when:
 * 1. after calling $.historyInit();
 * 2. after calling $.historyLoad();
 * 3. after pushing "Go Back" button of a browser
 *
**/

$$.onPageLoad = function(_src) {	
	if (!_src){
		//alert("no src");
		return;
	} else
	{
		alert("src "+_src);
	}
	// get the wrapper
	if (_src) {

	}
}
/**
 *
 * @name jQuery.bm_poems
 *
 * @desc The global colflow object holds four constant variables and four public methods:
 *       $.colflow.history = a boolean for setting the history object in action with named URLs
 *       $.colflow.current = is the current source that's being viewed.
 *       $.colflow.clickNext = boolean helper for adding a clickable image that leads to the next one in line
 *       $.colflow.nextImage() = displays the next image in line, returns to first image after the last.
 *       $.colflow.previousImage() = displays the previous image in line, returns to last image after the first.
 *       $.colflow.activate(_src) = displays an image from _src in the colflow container.
 *       $.colflow.onImage(image,caption) = gets fired when the image is displayed.
 *
**/

$.extend({bm_poems : {
	poemid : 0,
	poem_width : 600, /* NBNB width and padding should be derived from the css settings of the ul li img appears to be poem-inner width plus 60 + 40.Uncertain what the 60 and 40 are. */
	poem_padding : 0,
	page_height : 700,
	cancel_serial_scroll : true,
	scroll_duration : 1000,
	selector : "#poems-text", //should be same as target used to initialize serial scroll in bm_poems
	selector_image : "#poems-slideshow",
	toc_expand : true,
	activate : function(_src) { 
	},
	goto : function(e)
	{
		var selector = $.bm_poems.selector;
		var selector_image = $.bm_poems.selector_image;
		var goto_index = $(e).attr("id");
		goto_index=Number(goto_index)-1;
		var iWhichPoem = $(selector+" li").index($(selector+" li[id='poem-"+goto_index+"']"));
		//alert("in goto - index goto_index "+goto_index+" which poem "+iWhichPoem+" offset "+$.bm_poems.getPoemOffset_i(iWhichPoem));
		$.bm_poems.vAlignImage(iWhichPoem);
		$(selector).scrollLeft($.bm_poems.getPoemOffset_i(iWhichPoem));
		$(selector).trigger('notify.serialScroll',[iWhichPoem]);
		//$(selector_image+" li.active img").fadeOut(100);

		$(selector+" li.active").removeClass("active");
		$(selector+" li").eq(iWhichPoem).addClass("active");
		$(selector_image+" li.active").removeClass("active");
		$(selector_image+" li").eq(iWhichPoem).addClass("active");

	},
	next : function(e)
	{
		//alert("cancel serial scroll "+$.bm_poems.cancel_serial_scroll);
		//$.bm_poems.cancel_serial_scroll = false;
		var selector = $.bm_poems.selector;
		var next;
		if ($(selector+" li.active").is(':last-child'))
		{
			$(selector+" li:last-child").after($(selector+" li:first-child").clone());
			$(selector+" li:first-child").remove();
			$(selector).scrollLeft($.bm_poems.getPoemOffset());
		}
		$.bm_poems.cancel_serial_scroll = false;
		next = $(selector+" li").index($(selector+" li.active"))+1;
		
		//$.bm_poems.vAlignImage(next);

		$(selector+" li.active").removeClass("active");

		$(selector).trigger( 'goto', [ next ] );
		//alert("jquery.bm_poems.next "+next);

		
		//$($.bm_poems.selector_image).trigger( 'goto', [ next ] );
		$(selector+" li").eq(next).addClass("active");
		$.bm_poems.cancel_serial_scroll = true;
		$.bm_poems.vAlignImage(next);
	},
	previous : function(e)
	{
		var selector = $.bm_poems.selector;
		if ($(selector+" li.active").is(':first-child'))
		{

			$(selector+" li:last-child").after($("#poems-text li:first-child").clone());
			$(selector+" li:last-child").addClass("active");
			$(selector+" li:first-child").remove();


			$(selector).scrollLeft($.bm_poems.getPoemOffset());
			$(selector).trigger('notify.serialScroll',[$(selector+" li").size()]);
			setTimeout('$.bm_poems.shiftLeft()',1);
		} else
		{
			$.bm_poems.shiftLeft();
		}
	},
	shiftLeft : function()
	{
		//To do fix selector
		var selector = $.bm_poems.selector;
		var previous = $(selector+" li").index($(selector+" li.active"))-1;
		$.bm_poems.vAlignImage(previous);
		/*scroll to image*/
		$.bm_poems.cancel_serial_scroll = false;
		$(selector+" li.active").removeClass("active");
		$(selector).trigger("goto", [ previous ] );
		$(selector+" li").eq(previous).addClass("active");
		$.bm_poems.cancel_serial_scroll = true;
	},
	vAlignImage : function(iWhichPoem)
	{
		var selector = $.bm_poems.selector;
		var iPoemHeight = Number($(selector+" li").eq(iWhichPoem).children("div.poem-text").attr("clientHeight"));
		var iImageHeight = $(selector+" li").eq(iWhichPoem).children("div.poem-image").attr("clientHeight");
		var iImageTop = ($.bm_poems.page_height-(iPoemHeight+iImageHeight));
		iImageTop = Number(iImageTop)/3;
		iMageTop = Number(iImageTop)-60;  // a fudge.
		if (iPoemHeight<1) return;// this is firing when poem is invisible creating a NaN iPoemHeight
		$(selector+" li").eq(iWhichPoem).children("div.poem-image").css({top:iImageTop});
	},
	getPoemOffset : function()
	{
		return $.bm_poems.poem_width*$("#poems-text li").index($("#poems-text li.active"))+$.bm_poems.poem_padding;
	},
	getPoemOffset_i : function(piPoemNumber)
	{
		return $.bm_poems.poem_width*piPoemNumber+$.bm_poems.poem_padding;
	},
	TOCClick : function(e)
	{
		//alert("in TOCClick");
		if ($.bm_poems.toc_expand)
		{
			$("#poetry-toc-navigation").animate({ 
				height: "0px",
				/*width: "0px",*/
				fontSize: "1pt",
				opacity: 0.5,
				border: "0px"
      		}, 750 );
		} else
		{
				$("#poetry-toc-navigation").animate({ 
				height: "700px",
				/*width: "200px",*/
				fontSize: "12pt",
				opacity: 1,
				border: "1px"
	      		}, 750 );
		}
		$.bm_poems.toc_expand = !$.bm_poems.toc_expand;
	}
}
})

})(jQuery);


/**
 *
 * Packed history extension for jQuery
 * Credits to http://www.mikage.to/
 *
**/


jQuery.extend({historyCurrentHash:undefined,historyCallback:undefined,
historyInit:function(callback)
{
	jQuery.historyCallback=callback;
	var current_hash=location.hash;jQuery.historyCurrentHash=current_hash;if(jQuery.browser.msie){if(jQuery.historyCurrentHash==''){jQuery.historyCurrentHash='#'}$("body").prepend('<iframe id="jQuery_history" style="display: none;"></iframe>');
	var ihistory=$("#jQuery_history")[0];
	var iframe=ihistory.contentWindow.document;
	iframe.open();iframe.close();iframe.location.hash=current_hash}else if($.browser.safari){jQuery.historyBackStack=[];
		jQuery.historyBackStack.length=history.length;
		jQuery.historyForwardStack=[];
		jQuery.isFirst=true}jQuery.historyCallback(current_hash.replace(/^#/,''));
		setInterval(jQuery.historyCheck,100)},historyAddHistory:function(hash){jQuery.historyBackStack.push(hash);
		jQuery.historyForwardStack.length=0;this.isFirst=true
},
historyCheck:function(){if(jQuery.browser.msie){var ihistory=$("#jQuery_history")[0];
var iframe=ihistory.contentDocument||ihistory.contentWindow.document;
var current_hash=iframe.location.hash;if(current_hash!=jQuery.historyCurrentHash){location.hash=current_hash;
jQuery.historyCurrentHash=current_hash;
jQuery.historyCallback(current_hash.replace(/^#/,''))}}else if($.browser.safari){if(!jQuery.dontCheck){var historyDelta=history.length-jQuery.historyBackStack.length;
if(historyDelta){jQuery.isFirst=false;
if(historyDelta<0){for(var i=0;i<Math.abs(historyDelta);i++)jQuery.historyForwardStack.unshift(jQuery.historyBackStack.pop())}else{for(var i=0;i<historyDelta;i++)jQuery.historyBackStack.push(jQuery.historyForwardStack.shift())}
var cachedHash=jQuery.historyBackStack[jQuery.historyBackStack.length-1];
if(cachedHash!=undefined){jQuery.historyCurrentHash=location.hash;
	jQuery.historyCallback(cachedHash)}}else if(jQuery.historyBackStack[jQuery.historyBackStack.length-1]==undefined&&!jQuery.isFirst){if(document.URL.indexOf('#')>=0){jQuery.historyCallback(document.URL.split('#')[1])}else{var current_hash=location.hash;jQuery.historyCallback('')}jQuery.isFirst=true}}}else{var current_hash=location.hash;
	if(current_hash!=jQuery.historyCurrentHash){jQuery.historyCurrentHash=current_hash;
jQuery.historyCallback(current_hash.replace(/^#/,''))}}},
historyLoad:function(hash)
{
	var newhash;

	if(jQuery.browser.safari){newhash=hash}else{newhash='#'+hash;location.hash=newhash}
	jQuery.historyCurrentHash=newhash;
	if(jQuery.browser.msie){var ihistory=$("#jQuery_history")[0];
	var iframe=ihistory.contentWindow.document;
	iframe.open();iframe.close();iframe.location.hash=newhash;
	jQuery.historyCallback(hash)
	}else if(jQuery.browser.safari){jQuery.dontCheck=true;this.historyAddHistory(hash);
	var fn=function(){jQuery.dontCheck=false};
	window.setTimeout(fn,200);jQuery.historyCallback(hash);
	location.hash=newhash}else{jQuery.historyCallback(hash)}
	//alert("in history load end "+hash);
	}
 });

