
var errorStr = "";	// to be read with i.e. firebug
var adminAjax = "";	// link to php-file for ajax calls
var nonce = "";		// wp nonce

var loadAtInit = 12;	// number of slogans to load at init
var containerNum = 12;	// maximum number container
var slogansNum;			// Number of slogans available

var contentInit = 0;	// counter for content initialization
var slogan2contIDoffs = 0;	// difference between loaded slogan ids and container ids ; slogan2contIDoffs = sloganID - containerID
var visibleDate_id = -1;	// ID of the date, that is currently visible 

var scroller;		// jQuery object of the scroller navigation
var scrollerLeft;
var scrollerRight;
var scrollableAPI;	// API of scrollable
var scrollerDate;	// jQuery object of the date area inside scroller navigation


function initSpruecheScoller(adminAjaxUrl, wpNonce)
{
	// vars
	adminAjax = adminAjaxUrl;
	nonce = wpNonce;

	// prep remaining content container
	var cc = jQuery('#scrollable .items');
	for (i=containerNum-1; i>=3; i--)
	{
		cc.append('<div id="container'+i+'"><div class="spruecheLoader"></div></div>');
	}
	
	// scroller UI
	initScroller();
	
	// get slogans number
	jQuery.ajax({
		type: "post",
		url: adminAjax,
		data: { action: 'getnumslogans', _ajax_nonce: nonce },
		success: function(received)
		{
			slogansNum = Number(received);
			initSpruecheScollerII();
		},
		error: function (XMLHttpRequest, textStatus, errorThrown) { 
			jQuery("div#scrollable").html("Ajax--Error connecting server ...  Javascript disabled?");
		}
	});
}

function initSpruecheScollerII()
{
	if (loadAtInit > slogansNum) loadAtInit = slogansNum;
	if (containerNum > slogansNum) containerNum = slogansNum;
	if (containerNum < 3) containerNum = 3;
	
	// prep content container
	var cc = jQuery('#scrollable .items');
	cc.html("");
	for (i=containerNum-1; i>=0; i--)
	{
		cc.append('<div id="container'+i+'"><div class="spruecheLoader"></div></div>');
	}
	jQuery("div#scrollable .items").attr( "style", "left:-"+(loadAtInit*240)+"px" );
	
	// load slogans into container
	for (var sloganID=0; sloganID<loadAtInit; sloganID++)
	{
		loadSlogan( sloganID, Math.floor(sloganID/3) * 300 );
	}
	// latest loadSlogan()-response calls initScrollable()
}

function initScroller()
{
	scroller = jQuery("#spruchScroller");
	
	// The scoller arrows
	fade(scroller, 'fast', 0.0);
	jQuery("div#spruch").hover( function(e){
		fade(scroller, 400, 1.0);
	}, function(e) {
		fade(scroller, 400, 0.0);
	});
	
	scrollerLeft = jQuery("#spruchScroller #left");
	scrollerLeft.hover( function(e){
		scrollerLeft.addClass("hover");
	}, function(e){
		scrollerLeft.removeClass("hover");
	});
	
	scrollerRight = jQuery("#spruchScroller #right");
	scrollerRight.hover( function(e){
		scrollerRight.addClass("hover");
	}, function(e){
		scrollerRight.removeClass("hover");
	});
	

	// the date field
	scrollerDate = jQuery("#spruchScroller #date");
}

function initScrollable()
{
	// scrollable init
	scrollableAPI = jQuery("div#scrollable").scrollable({
		api : true,
		clickable : false,
		keyboardSteps: 3,
		size: 3,
		speed: 0,
		globalNav : true,
		next: "#spruchScroller #right",
		prev: "#spruchScroller #left",
		disabledClass: "dis",
		onSeek: update
	});
	// quickly jump to last, than set normal speed
	scrollableAPI.seekTo(slogansNum-2);
	scrollableAPI.getConf().speed = 800;
}



/**********
**  Runtime functions... 
**/


// Ajax-load slogans
function loadSlogan( id, delay )
{
	if (delay && delay>0)
	{
		setTimeout("loadSlogan("+id+")", delay);
		return;
	}
	
	jQuery.ajax({
		type: "post",
		url: adminAjax,
		data: { 
			action: 'getslogan',
			slogan_id: id,
			img_frmt: jQuery.browser.msie ? 'jpg' : 'png',
			_ajax_nonce: nonce 
		},
		error: function (XMLHttpRequest, textStatus, errorThrown) { 
			errorStr = textStatus +" , "+errorThrown+ " , "+XMLHttpRequest;
		},
		success: function(received)
		{
			var findID = received.match(/class="spruchGrau" id="([0-9]+)"/);
			if (findID != null) var sloganID = findID[1];
			else return;
			
			contID = getContainerID(sloganID, received);
			if (contID<0) return;

			jQuery("div#scrollable div.items #container"+contID).html(received);
			jQuery(".date").appendTo(scrollerDate);
			
			if (id != visibleDate_id)
				fade(jQuery("#d"+id+".date"), 0, 0);
		
			contentInit++;
			if (contentInit==loadAtInit && scrollableAPI == null) 
				initScrollable();
		}
	});
}

// get id of the container for slogan with given id and content
function getContainerID(id, content)
{
	var contID = Number(id - slogan2contIDoffs);
	var offset = 0;
	var headl = content.match(/<span class="spruch">([a-zA-Z]+)<\/span>/);
	if (headl != null) 
	{
		headline = headl[1];
		switch (headline.toLowerCase()) {
			case "farbrausch" : offset = 2; break;
			case "holzblock" : offset = 1; break;
			case "freispruch" : offset = 0; break;
		}
	}
	if (offset >= 0)
		contID = Math.floor((contID)/3)*3 + offset;
	return (contID < 0 || contID >= containerNum) ? -1 : contID;
}

// Update after scrolling -- called as onSeek event by scrollable
function update( e, index )
{
	var idx = containerNum - index;
	
	// update which slogans are in which containers
	var centerI = containerNum/2;
	var jumpToHigher = (idx > centerI) && ((containerNum + slogan2contIDoffs) < slogansNum);
	var jumpToLower = (idx < centerI) && (slogan2contIDoffs > 0);
	
	if (jumpToLower || jumpToHigher)
	{
		scrollableAPI.getConf().speed = 1;
		scrollableAPI.getConf().onSeek = setBackToUpdate;
		if (jumpToHigher)
		{
			shiftContainers(+1);
			scrollableAPI.seekTo(index+1);
			loadSlogan( containerNum + slogan2contIDoffs);
			slogan2contIDoffs++;
		}
		else
		{
			shiftContainers(-1);
			scrollableAPI.seekTo(index-1);
			slogan2contIDoffs--;
			loadSlogan(slogan2contIDoffs);
		}
		scrollableAPI.getConf().speed = 800;
	}
	
	// Updates per 3 blocks ... do it just for the center index
	if (index % 3 == 0)
	{
		// show/hide dates
		idxAbs = idx - 1 + slogan2contIDoffs;
		for (i=containerNum; i>=0; i--)
		{
			var cid = i + slogan2contIDoffs;
			if (cid!=idx) jQuery("#d"+cid+".date").hide();
		}
		jQuery("#d"+idxAbs+".date").show();
		visibleDate_id = idxAbs;
		fade(jQuery("#d"+idxAbs+".date"), 0, 1);

		// update slider state
		if (idxAbs <= 2)
			scrollerRight.addClass("disabled");
		else
			scrollerRight.removeClass("disabled");
		if (idxAbs >= slogansNum - 1)
			scrollerLeft.addClass("disabled");
		else
			scrollerLeft.removeClass("disabled");
	}
}

function setBackToUpdate()
{
	scrollableAPI.getConf().onSeek = update;
}

function shiftContainers(by)
{
	var final_cID;
	if (by > 0)
		for (var cID = 0; cID < containerNum - 1; cID++)
		{
			var source = jQuery("div#scrollable div.items #container"+Number(cID+1)).html();
			jQuery("div#scrollable div.items #container"+cID).html( source );
			final_cID = cID+1;
			jQuery("div#scrollable div.items #container"+Number(cID+1)).html('<div class="spruecheLoader"></div>');
		}
	else
		for (var cID = containerNum - 1; cID > 0; cID--)
		{
			var source = jQuery("div#scrollable div.items #container"+Number(cID-1)).html();
			jQuery("div#scrollable div.items #container"+cID).html( source );
			final_cID = cID-1;
			jQuery("div#scrollable div.items #container"+Number(cID-1)).html('<div class="spruecheLoader"></div>');
		}
	
}

// should be fadeIn/out, but IE ...
function fade(jQueryObj, ms, alpha)
{
	if (jQuery.browser.msie || ms == 0)
	{
		if (alpha<1) jQueryObj.hide();
		else jQueryObj.show();
	}
	else
	{
		if (alpha == 1) jQueryObj.stop(true);
		jQueryObj.fadeTo(ms, alpha);
	}
}

