/*-------------------------------------------------------------------------*/
// Sniffer based on http://www.mozilla.org/docs/web-developer/sniffer/browser_type.html
/*-------------------------------------------------------------------------*/

var uagent    = navigator.userAgent.toLowerCase();
var is_safari = ( (uagent.indexOf('safari') != -1) || (navigator.vendor == "Apple Computer, Inc.") );
var is_opera  = (uagent.indexOf('opera') != -1);
var is_webtv  = (uagent.indexOf('webtv') != -1);
var is_ie     = ( (uagent.indexOf('msie') != -1) && (!is_opera) && (!is_safari) && (!is_webtv) );
var is_ie4    = ( (is_ie) && (uagent.indexOf("msie 4.") != -1) );
var is_moz    = ( (navigator.product == 'Gecko')  && (!is_opera) && (!is_webtv) && (!is_safari) );
var is_ns     = ( (uagent.indexOf('compatible') == -1) && (uagent.indexOf('mozilla') != -1) && (!is_opera) && (!is_webtv) && (!is_safari) );
var is_ns4    = ( (is_ns) && (parseInt(navigator.appVersion) == 4) );
var is_kon    = (uagent.indexOf('konqueror') != -1);

var is_win    =  ( (uagent.indexOf("win") != -1) || (uagent.indexOf("16bit") !=- 1) );
var is_mac    = ( (uagent.indexOf("mac") != -1) || (navigator.vendor == "Apple Computer, Inc.") );
var ua_vers   = parseInt(navigator.appVersion);

/*-------------------------------------------------------------------------*/
// IPS BASIC MENU CLASS
// (c) 2005 Invision Power Services, Inc
// ASSUMES "ips_global.js" has been loaded
/*-------------------------------------------------------------------------*/

var pop_registered = new Array();
var pop_openfuncs  = new Array();
var pop_built      = new Array();
var pop_open_menus = new Array();
var pop_cur_open   = false;

/*-------------------------------------------------------------------------*/
// menu_do_global_init: Initiate all registered menus in HTML
/*-------------------------------------------------------------------------*/

function pop_do_global_init() {
	if ( pop_registered.length > 0 ) {
		for( var i in pop_registered ) {
			pop_init( pop_registered[i] );
		}
		
		//----------------------------------
		// Close all menus on click
		//----------------------------------
		
		//document.onclick = pop_action_close;

		if (typeof document.addEventListener != 'undefined')
		document.addEventListener('click', pop_action_close, false);
		else if (typeof document.attachEvent != 'undefined')
		document.attachEvent('onclick', pop_action_close);
	}
}

/*-------------------------------------------------------------------------*/
// pop_init: Initiate a single menu
/*-------------------------------------------------------------------------*/

function pop_init(cid) {
	var mid  = "hlpp_" + _pop_get_base_name(cid);
	var mobj = my_getbyid(mid);

	if ( document.getElementsByTagName && mobj ) {
		//----------------------------------
		// Control object (link / img, etc)
		//----------------------------------
		
		var cobj = my_getbyid(cid);
		
		// Change cursor to show link
		try	{
			cobj.style.cursor = "pointer";
		}
		catch(e) {
			cobj.style.cursor = "hand";
		}
	
		cobj.unselectable = true;
		cobj.onclick      = _event_pop_click;
		cobj.onmouseover  = _event_pop_mouseover;
		
		//----------------------------------
		// Save CPU - already init?
		//----------------------------------
		
		if ( typeof( pop_built[mid]) != "undefined" ) {
			return;
		}
		
		//----------------------------------
		// Pop-up menu obj (hidden div)
		//----------------------------------
		
		var pobj = my_getbyid(mid);
		
		// Set up style defaults
		pobj.style.display  = "none";
		pobj.style.position = "absolute";
		pobj.style.left     = "0px";
		pobj.style.top      = "0px";
		pobj.onclick        = _cancel_bubble;
		pobj.zIndex         = 1000;
		
		pop_built[mid] = true;
	}
}

/*-------------------------------------------------------------------------*/
// Register menu control ID (add to array)
/*-------------------------------------------------------------------------*/

function pop_register(cid, callback) {
	if ( document.getElementsByTagName ) {
		var cobj = my_getbyid(cid);

		if (cobj) {
			pop_registered[pop_registered.length] = cid;

			if ( callback ) {
				pop_openfuncs[ cobj ] = callback;
			}

			return true;
		}
	}

	return false;
}

/*-------------------------------------------------------------------------*/
// ACTION: If registered control ID clicked, open menu
/*-------------------------------------------------------------------------*/

function pop_action_open(e) {
	var openmenu = pop_cur_open;
	var negpad   = true;
	
	//----------------------------------
	// Close current menu(s)
	//----------------------------------
	
	pop_action_close();
	
	//----------------------------------
	// Save CPU - cur open clicked?
	//----------------------------------
	
	if ( openmenu == e.id )	{
		return false;
	}
	
	//----------------------------------
	// Get ID of menu DIV to show
	//----------------------------------
	
	var mid         = "hlpp_" + _pop_get_base_name(e.id);
	var mobj        = my_getbyid(mid);
	var left_px     = _get_obj_leftpos(e);
	var top_px      = _get_obj_toppos(e) + e.offsetHeight;
	var callbackobj = my_getbyid( e.id );
	var ifid        = e.id;
	
	pop_open_menus[e.id] = true;
	pop_cur_open         = e.id;
	
	//----------------------------------
	// Show menu DIV
	//----------------------------------
	
	mobj.style.display = "";
	
	//----------------------------------
	// Try and keep it on screen
	//----------------------------------
	
	var width = parseInt( mobj.style.width ) ? parseInt( mobj.style.width ) : mobj.offsetWidth;
	
	if ( (left_px + width) >= document.body.clientWidth ) {
		left_px = left_px + e.offsetWidth - width;
		negpad  = false;
	}
	
	//----------------------------------
	// IE needs a tweak...
	//----------------------------------
	
	if ( is_ie ) {
		left_px += ( negpad ) ? -2 : 2;
	}
	
	//----------------------------------
	// Finalize menu position
	//----------------------------------
	
	mobj.style.left   = left_px + "px";
	mobj.style.top    = top_px  + "px";
	mobj.style.zIndex = 100;
	
	//----------------------------------
	// Run a custom function?
	//----------------------------------
	
	if ( pop_openfuncs[ callbackobj ] ) { 
		eval( pop_openfuncs[ callbackobj ] );
	}
	
	//----------------------------------
	// Workaround for IE bug which shows
	// select boxes and other windows GUI
	// over divs. SHOW IFRAME
	//----------------------------------
	
	if ( is_ie ) {
		try
		{
			if ( ! document.getElementById( 'ifhlp_' + e.id ) ) { 
				var iframeobj = document.createElement('iframe');
				
				iframeobj.src = 'javascript:;';
				iframeobj.id  = 'ifhlp_' + e.id;
				
				document.getElementsByTagName('body').appendChild( iframeobj );
			}
			else {
				var iframeobj = document.getElementById( 'ifhlp_' + e.id );
			}
			
			iframeobj.scrolling      = 'no';
			iframeobj.frameborder    = 'no';
			iframeobj.className      = 'iframeshim';
			iframeobj.style.position = 'absolute';
				
			iframeobj.style.width   = parseInt(mobj.offsetWidth)  + 'px';
			iframeobj.style.height  = parseInt(mobj.offsetHeight) + 'px';
			iframeobj.style.top     = mobj.style.top;
			iframeobj.style.left    = mobj.style.left;
			iframeobj.style.zIndex  = 99;
			iframeobj.style.display = "block";
    		
    	}
    	catch(e)
    	{
    		//alert(e); // Oh dear, someones stolen the iframe
    	}
	}
	
	//----------------------------------
	// Work around for safari which doesnt
	// allow a hrefs top be clickable in
	// a pop up div
	//----------------------------------
	
	if ( is_safari ) {
		try
		{
			mlinks = mobj.getElementsByTagName('a');
			
			for ( var i = 0 ; i <= mlinks.length ; i++ ) {
				//----------------------------------
				// Ignore non links and links that end with #
				// As safari likes to do that with href='#' links
				//----------------------------------
				
				if ( mlinks[i].href && ( mlinks[i].href.indexOf( '#', 0 ) != (mlinks[i].href.length - 1) ) ) {
					mlinks[i].onmousedown = _safari_onclick_handler;
					mlinks[i].id          = 'saf-link-' + mid + i;
				}
			}
		}
		catch( e )
		{
			//alert( e );
		}
	}
	
	return false;
}

/*-------------------------------------------------------------------------*/
// Safari: bug fix
/*-------------------------------------------------------------------------*/

function _safari_onclick_handler() {
	if ( this.id ) {
		window.location = document.getElementById( this.id ).href;
	}
}


/*-------------------------------------------------------------------------*/
// ACTION: Close all open menus
/*-------------------------------------------------------------------------*/

function pop_action_close() {
	if ( pop_cur_open ) {
		for ( i in pop_open_menus ) {
			my_getbyid("hlpp_" + _pop_get_base_name(i)).style.display = "none";
			
			//----------------------------------
			// Workaround for IE bug which shows
			// select boxes and other windows GUI
			// over divs. Hide IFRAME
			//----------------------------------
			
			if ( is_ie ) {
				try
				{
					document.getElementById( 'ifhlp_' + i ).style.display = "none";
				}
				catch(e)
				{
					//alert(e);// Oh dear, someones stolen the iframe
				}
			}
	
			pop_open_menus[i] = false;
		}
	}
	
	pop_cur_open = false;
}

/*-------------------------------------------------------------------------*/
// ACTION: If menu open and hover over another cid, close cur open new
/*-------------------------------------------------------------------------*/

function pop_action_hover(e) {
	for ( i in pop_open_menus ) {
		if (pop_open_menus[i] == true && i != e.id) {
			pop_action_open(e);
			return;
		}
	}
}

/*-------------------------------------------------------------------------*/
// Prevent browser bubblin'
/*-------------------------------------------------------------------------*/

function _cancel_bubble(obj, extra) {
	if ( ! obj || is_ie) {
		if ( extra ) {
			window.event.returnValue = false;
		}
		
		window.event.cancelBubble = true;
		
		return window.event;
	}
	else {
		if (obj.target.type == 'submit') {
			obj.target.form.submit();
		}
		
		obj.stopPropagation();
		
		if ( extra ) {
			obj.preventDefault();
		}
		
		return obj;
	}
}

/*-------------------------------------------------------------------------*/
// EVENT : Mouse over menu
/*-------------------------------------------------------------------------*/

function _event_pop_mouseover(e) {
	e = _cancel_bubble(e, true);
	pop_action_hover(this);
}

/*-------------------------------------------------------------------------*/
// EVENT: Menu click
/*-------------------------------------------------------------------------*/

function _event_pop_click(e) {
	e = _cancel_bubble(e, true);
	pop_action_open(this);
}

/*-------------------------------------------------------------------------*/
// Get menu basename
/*-------------------------------------------------------------------------*/

function _pop_get_base_name(cid) {

	var endpos = cid.indexOf(".");
	
	if (endpos != -1) {
		return cid.substr(0, endpos);
	}
	else {
		return cid;
	}
}

/*-------------------------------------------------------------------------*/
// Get left posititon of object
/*-------------------------------------------------------------------------*/

function _get_obj_leftpos(obj) {

	var left = obj.offsetLeft;
	
	while( (obj = obj.offsetParent) != null ) {
		left += obj.offsetLeft;
	}
	
	return left;
}

/*-------------------------------------------------------------------------*/
// Get top position of object
/*-------------------------------------------------------------------------*/

function _get_obj_toppos(obj) {

	var top = obj.offsetTop;
	
	while( (obj = obj.offsetParent) != null )
	{
		top += obj.offsetTop;
	}
	
	return top;
}


/*-------------------------------------------------------------------------*/
// IPS BASIC MENU CLASS (EXTENSION: BUILD SIMPLE MENU)
// (c) 2005 Invision Power Services, Inc
/*-------------------------------------------------------------------------*/

/*-------------------------------------------------------------------------*/
// menu_build_menu
// cid: ID of opener object (img, div, etc)
// menuinput: Array of menu entries | Variable of menu HTML
// complexmenu: Treat as HTML stream if true, else treat as array of HTML
/*-------------------------------------------------------------------------*/

function build_pop(cid, menuinput) {

	var html = "\n<div class='hlpp' id='hlpp_" + cid + "' style='display:none;z-index:100;'>\n";
	html += menuinput;
	html += "\n</div>\n";
	
	//----------------------------------
	// Workaround for IE bug which shows
	// select boxes and other windows GUI
	// over divs. Write iframe
	//----------------------------------

	if ( is_ie && false) {
		html += "\n"+'<iframe id="ifhlp_' + cid + '" src="" scrolling="no" frameborder="1" style="position:absolute;top:0px;left:0px;display:none;"></iframe>'+"\n";
	}
	
	//----------------------------------
	// Write the html
	//----------------------------------
	
	if ( html != '' ) {
		document.open();
		document.writeln( html );
		document.close();
	}
	
	if ( is_ie ) {
		my_getbyid('hlpp_'+cid).style.width = '400px';
	}
	//----------------------------------
	// Register and init
	//----------------------------------
	
	pop_register( cid );
}



