/**
*	expander.js	- expand/collapse nested lists
*	This version depends on prototype-1.6.0.2.js
**/

// id of top-most element - not a list itself -
// 		this is the container of the top-most ul tag
var listTopNode 	= 'sidebar';
// class selector which elects a list 
var listClass 		= 'dynamicList';
// depth of elements which start in open position
var startDepth  	= 2;
var activeNode 		= '';
var activeBreadcrumb = '';
var previousNode 	= '';

var pathRoot		= '/bccd/';
var service 		= pathRoot + 'index.php/browse/fetch';

var floatBox 	= '';
var jpegURI 	= '';
var tiffURI 	= '';
var pdfURI 		= '';
var xmpURI 		= '';
var feedback 	= '';

function setRelativeNav( elem )
{
	elem = $(elem);
	var ancestors = elem.ancestors();
	var gp = ancestors[1];	// grandparent of elem
	var uncles = $(gp).childElements();  // siblings of parent of elem
	var nestedSibs = new Array();	// siblings of elem
	
	uncles.each( function(e,i){
		child = $(e.firstDescendant());
		nestedSibs.push( child );
	});
	var navNextNode, nextLink, navPrevNode, prevLink;
	var idx = nestedSibs.indexOf(elem);
	if( idx < nestedSibs.length-1 )
	{
		val = idx;
		val++;
		navNextNode = nestedSibs[val];
        navNextNode.id = navNextNode.id.toString().replace( /'/g, '%27' );
		nextLink	= '<a class="relativeLink" onclick="javascript:fetch('+"'"+navNextNode.id+"'"+');">next page-&gt;</a>';
	}
	else { 
		nextLink	= '<span class="relativeLink_disabled">last is shown</span>';
	}
	if( idx > 0 )
	{
		val = idx;
		val--;
		navPrevNode = nestedSibs[val];
        navPrevNode.id = navPrevNode.id.toString().replace( /'/g, '%27' );
		prevLink	= '<a class="relativeLink" onclick="javascript:fetch('+"'"+navPrevNode.id+"'"+');">&lt;-previous page</a>';
	}
	else {
		prevLink	= '<span class="relativeLink_disabled">first is shown</span>';
	}
	var uri = prevLink+ " | " +nextLink;
	$('relativeNavigator1').update( uri );
	$('relativeNavigator2').update( uri );
}


function expand(element) 
{
    element = $(element);
	var kid = $(element).firstDescendant();
	$(kid).removeClassName('collapsed');
	$(kid).addClassName('expanded');
	$(element).removeClassName('collapsed');
	$(element).addClassName('expanded');
	
    return element;
}
function contract(element) 
{
    element = $(element);
	var kid = $(element).firstDescendant();
	$(kid).removeClassName('expanded');
	$(kid).addClassName('collapsed');
	$(element).removeClassName('expanded');
	$(element).addClassName('collapsed');
    return element;
}
function toggle(event) 
{
	try {
		var element = Event.element(event);
		element = $(element);
		Event.stop(event);		
		if( Element.hasClassName(element,'expanded')) { 
			contract(element); 
		}
		else { 
			expand(element); 
		}
	
	} catch( ex ) { }
}

function myDepth(element) 
{
	element = $(element);
	var ances = $(element).ancestors();
	var topsAncestors = listTopNode.ancestors();
	return ances.length - topsAncestors.length;
}

function _whine( r ){
	alert( r.status +': '+ r.statusMessage );
}

var tiffStr = '<span class="larger">TIFF</span><br/><br/>High-resolution format for offset print reproduction.';
/* var jpegStr = '<span class="larger">JPEG</span><br/>Low-resolution format for web reproduction.'; */
var pdfStr  = '<span class="larger">PDF</span><br/><br/>Multi-purpose format for business workflows.';
var xmpStr  = '<span class="larger">XMP</span><br/><br/>XML meta-data file for database applications.';

function _resetLinks() {
	
	jpegURI = pathRoot + activeNode;
	tiffURI = jpegURI.toString().replace( /jpeg/g,'tiff');
	tiffURI = tiffURI.toString().replace( /.tiff$/,'.tif');
	pdfURI =  jpegURI.toString().replace( /jpeg/g,'pdf');
	pdfURI =  pdfURI.toString().replace( /_Page_\d*/g,'');
	var pcs = new Array();
		pcs = pdfURI.split(/\//);
		pc = pcs.pop();
		pc = pc.toString().replace( /_/g,' ');
		pcs.push(pc);
	pdfURI =  pcs.join('/');
		
	xmpURI =  jpegURI.toString().replace( /jpeg/g,'xmp');
		pcs = jpegURI.split(/\//);
		pc = pcs.pop();
		pc = pcs.pop();
		pc = pcs.pop();
		pcs.push( pc, 'xmp', pc+'.xmp' );
	xmpURI =  pcs.join('/');
	
	var t = new Element('li').update(new Element('a',{'target':'_blank','href': tiffURI}).update(tiffStr));
	/*	redundant - JPEG is displayed in main page body */
	/* var j = new Element('li').update(new Element('a',{'target':'_blank','href': jpegURI}).update(jpegStr));  */
	var p = new Element('li').update(new Element('a',{'target':'_blank','href': pdfURI}).update(pdfStr));
	var x = new Element('li').update(new Element('a',{'target':'_blank','href': xmpURI}).update(xmpStr));
	
	var ul = $('linkList');
		ul.innerHTML = '';
		ul.appendChild(t);
	/*	ul.appendChild(j);  */
		ul.appendChild(p); 
		ul.appendChild(x); 
	$('download_links').innerHTML = ul;
	
}

function _refreshNavigation( ajaxResult ) {

	if( previousNode != '' ) {
        previousNode = previousNode.toString().replace(/'/, '%27');
		// find the element with this attribute
		$(previousNode).removeClassName('activeNode');
	}
	if( activeNode != '' ) {
        activeNode = activeNode.toString().replace(/'/, '%27');
		// set the activeNode class
		$(activeNode).addClassName('activeNode');
		// save this one for next pass
		previousNode = activeNode;
		// set the format-download links
		_resetLinks();
	}
	if( $F('resetDepth') != null && $F('resetDepth') == startDepth ){return;}
	if( $('resetDepth') != null ){  startDepth = $F('resetDepth');}
	try {   var sel = 'li.activatorTag';   listTopNode = $(listTopNode);  var liNodes =	listTopNode.select(sel);} catch(ex){};
	try {   liNodes.each( function(li,i) {
                li = $(li);
                li.depth = myDepth(li);
                if( li.depth > startDepth ) {
                    contract(li);
                } else {
                    expand(li);
                }
            });
        } catch(ex) { alert( ex.toString());}
}

/**
	Update, link, actions and eye-candy 
	for various-formats downloading buttons.
**/

function setBtn( o ) {	o = $(o);o.observe('mouseover', function(e){ Event.element(e).addClassName('hovering')});o.observe('mouseout', function(e){ Event.element(e).removeClassName('hovering')});}
function setBtnHandlers() {
	if( $('tiff') == null ) { return; }
	var btns = new Array('tiff','pdf','xmp');
	btns.each( function(o,i){	o = $(o);	setBtn(o);	c = o.childElements();	c.each( function(e,i) { setBtn(e) });});
}

function fetch( image ) 
{
	image = $(image);
	activeNode = image.id.toString();

	try{ if( activeNode != '' ){ setRelativeNav( activeNode ); } } catch(ex) { alert(ex.toString); }
	var params = 'image='+activeNode;
	new Ajax.Updater( 'display_area',service, {postBody: params,onFailure: _whine,onSuccess: _refreshNavigation});
}

function _init()
{
	try { jpegURI = pathRoot + activeNode; }catch(ex) { alert(ex.toString()); }
	try { if( $('resetDepth') != null ){startDepth = $('resetDepth').value;}}catch(ex){ alert( ex.toString() );}
	try { var sel = 'ul.'+listClass;	listTopNode = $(listTopNode);var ulNodes =	listTopNode.select(sel);} catch(ex){alert( ex.toString());};
	try { ulNodes.each( function(e,i) {e = $(e);// Parent of any list is the activator for the list
			var a = new Array();a = $(e).ancestors();a = $(a[0]);var p = $(a);
			if( myDepth(p) > startDepth ) {$(p).addClassName('collapsed');}else {$(p).addClassName('expanded');}
			Event.observe( p,'click',toggle );});
	} catch(ex) { alert( ex.toString());}
}

Event.observe( window, 'load', _init);
Event.observe( window, 'load', setBtnHandlers );

// EOF
