
/**
 * ui.js -> http://theatre-la-passerelle.eu/
 * manage style design : zoom property and blocks position using JavaScript
 * (cc) creative commons by 3.0
 */
 
 
 

var _logo		= null;		// the header logo element
var _nav		= null;		// the header navigation bar
var _container	= null;		// the document top level element
var _footer		= null;		// the footer block element
var _grid		= null;		// the grid element
var _extended	= null;		// the extended or scalable element
var _fheight	= 0;		// the footer height dimension
var _vport		= [];		// list of viewport element



var _MSIE = /MSIE (\d+\.\d+);/.test(navigator.userAgent);





// initialyze variables
function setup()
{
	
	// header
	_logo = document.getElementById( "logo" );
	_nav  = document.getElementById( "nav" );

	// container
	_container = document.getElementById( "container" );
	
	// footer
	_footer  = document.getElementById( "footer" );
	_fheight = _footer.offsetHeight;
	
	// scalable element
	_extended = document.getElementById( "extended" );
	_grid = document.getElementById( "grid" );
	
	
	// viewport
	if ( document.getElementById("content") ) register( "content" );
	if ( document.getElementById("content_sub") ) register( "content_sub" );
	if ( document.getElementById("content_left")  ) _vport.push( new Viewport("content_left") );
	if ( document.getElementById("content_right") ) _vport.push( new Viewport("content_right") );
	
	
	// initialyze position
	onresize();
	
}


// compute viewport proportion
// and create it
function register( id ) {
	
	var div = document.getElementById( id );
	var hdr = document.getElementById( id+"_hdr" );
	var pad = CSS.get( div.offsetParent, !_MSIE ? "padding-top" : "padding", true );
	
	div.style.top = ( hdr.offsetHeight + hdr.offsetTop + pad*4 ) + 'px';
	div.style.minHeight = CSS.get("main",!_MSIE ? "min-height" : "minHeight", true ) - hdr.offsetHeight - ( 47 * 2 ) + 'px';

	
	_vport.push( new Viewport(id) );
	
	if ( id=='content_sub' ) div.offsetParent.style.display = 'none';
	
}


	
// fix IE mouseout flick
window.onload = function()
{
	if ( _MSIE && window.event ) {
		var li = document.getElementsByTagName('li');
		for( var i=0; i<li.length; i++ ) {
			if ( li[i].onmouseout ) {
				li[i].onmouseleave = function()  { nav(this) };
				li[i].onmouseout  = null;
			}
		}
	}
}


// fix miscelleaneous properties
window.onresize = function()
{

	var winw  = CSS.windowWidth();
	var winh  = CSS.windowHeight();
	var inner = 650;
	
	
	// for home page only
	// center everything and exit
	if ( _HOME ) {
		_container.style.left = Math.max( 0, (winw-1000)/2 ) + 'px';
		_container.style.top  = Math.max( 0, (winh-650)/2 ) + 'px';
		return;
	}

	// fix footer position at absolute bottom
	if ( _grid ) inner = CSS.offsetTop(_grid) + _grid.offsetHeight + 84 + _fheight;
	if ( _extended ) inner = CSS.offsetTop(_extended) + _extended.offsetHeight + 84;
	_footer.style.top = Math.max( Math.max(650,inner), winh )-_fheight + 'px';
	_container.style.height = Math.max( Math.max(650,inner), winh ) + 'px';
	
	
	// zoom document content
	if( _container.style.zoom!=undefined && !_MSIE ) 
		_container.style.zoom = Math.max( 1.0, (winw-15) / 1000 );
		
	// update viewport
	for( var i in _vport ) _vport[i].update();
}


// fix header position on top
window.onscroll = function()
{
	var y = CSS.pageOffsetLeft();
	
	if ( !y ) y = 0; // ??? fix IE undefined value
	if ( _logo ) _logo.style.left = ( 28 - y ) + 'px';
	if ( _nav ) _nav.style.left = -y+'px';
}



// show/hide submenu
function nav( elem, over ) {
	
	var lnk = document.getElementById( elem.id+"_a" );
	var sub = document.getElementById( elem.id+"_ul");
	
	sub.style.display = over ? "inline" : "none";
	sub.style.left = lnk.offsetLeft + 'px';
	
	lnk.className = lnk.className.replace( " hover", "" );
	if ( over && lnk.className.indexOf("hover")==-1 ) lnk.className += " hover";
	
}



// show/hide panel
var curpanel = null;
var curelem  = null;
function panel( id, elem ) {

	if ( curpanel ) {
		curpanel.style.display = "none";
		if ( curelem && !lock ) curelem.className = "";
		if ( curpanel.id=="panel_"+id ) {
			curpanel = null;
			return;
		}
	}
	
	curpanel = document.getElementById( "panel_"+id );
	if ( curpanel ) {
		curpanel.style.display = "block";
		
		if ( elem ) {
			curelem = elem;
			curelem.className = "cur"
		};
	}
	
	
	onresize();
}


// toggle panel/main block content
var lock = false;
function toggle( elem, id, main ) {

	if ( !lock || (curpanel && curpanel.id=="panel_"+id) ) panel( id ); 
	if ( main && document.getElementById(main+'_alt') ) {
		
		var alt  = document.getElementById( main+'_alt' );
		var main = document.getElementById( main );
		
		lock = !lock;
		
		main.style.display = lock ? 'none'  : 'block';
		alt.style.display  = lock ? 'block' : 'none';
		elem.className = lock ? "cur" : "";
		
		for( var i in _vport ) _vport[i].update();
	}


}


// POST data between pages 
function post( to, data ) {

	var f = document.createElement( "form" );
	f.method = "post";
	f.action = to;

	for( var i in data ) {
		var e = document.createElement( "input" );
		e.setAttribute( "type", "hidden" );
		e.setAttribute( "name", i );
		e.setAttribute( "value", data[i] );
		f.appendChild(e);
	}
	
	document.body.appendChild(f);
	f.submit();
	document.body.removeChild(f);
}



function countElementsByClassName( tag, classname ) {
	var i = len = 0; 
	var tags = document.getElementsByTagName( tag );
	while( e=tags[i++] ) {
		if ( e.className==classname ) len++;
	}
	return len;
}

