
// figure out our browser type...

var dom_engine = '';
if (document.getElementById)
	dom_engine = 1;					// mozilla, opera etc..
else if (document.all)
	dom_engine = 0;					// IE (pls die, kthx)
else if (document.layers)
	dom_engine = 2;					// NS4, should never happen :P

var active_menu = "";
var mouse_over_menu = "";

function getObject(id)
{
	if(dom_engine == 1)
		obj = document.getElementById(id);
	else if(dom_engine == 0)
		obj = document.all[id];
	else if(dom_engine == 2)
		obj = document.layers[id];
		
	return obj;
}

function getCookieFromDocument(cookie_name)
{
	cname = cookie_name + "=";
	clength = document.cookie.length;
	begin = 0;
	
	while (begin < clength) {
	    vbegin = begin + cname.length;
	    if (document.cookie.substring(begin, vbegin) == cname) {
		var end = document.cookie.indexOf (";", vbegin);
		if (end == -1) {
		    end = clength;
		}
		return unescape(document.cookie.substring(vbegin, end));
	    }
	    begin = document.cookie.indexOf(" ", begin) + 1;
	    if (begin == 0)	{
		break;
	    }
	}
	return null;
}

function setCookieToDocument(cookie_name, cookie_expiredate, cookie_value)
{
    document.cookie=cookie_name+"="+escape(cookie_value)+"; expires="+cookie_expiredate.toGMTString()+"; path=/";
}

function saveObjectToCookie(obj, mode, cookiename)
{
	var already_collapsed=getCookieFromDocument(cookiename);
	var temp = new Array();
	cookieExpireDate = new Date();
	cookieExpireDate.setTime(cookieExpireDate.getTime() + 86400*1000*300);			// 300 days expiration date

	if (already_collapsed) {
	    already_collapsed = already_collapsed.split("\n");

	    for (i in already_collapsed) {
		if (already_collapsed[i] != obj && already_collapsed[i] != "")
		    temp[temp.length] = already_collapsed[i];
	    }
	}

	if (mode)
	    temp[temp.length] = obj;

	setCookieToDocument(cookiename, cookieExpireDate, temp.join("\n"));
}

function doCollapseObject(id, cookiename)
{
	obj = getObject(id);	
	imageid = getObject("img_" + id);
	tempobj = getObject(id);
			
	if (obj.style.display == "none") {	// object is collapsed, show it, clear the cookie
	    obj.style.display = "";
	    saveObjectToCookie(id, 0, cookiename);
	    if (imageid) {
		imageid.src = imageid.src.replace('expand.gif', 'collapse.gif');
	    }
	} else {				// hide the object, save it to the cookie
	    obj.style.display = "none";
	    saveObjectToCookie(id, 1, cookiename);
	    if (imageid) {
		imageid.src = imageid.src.replace('collapse.gif', 'expand.gif');
	    }
	}
	return false;
}

/*
 * functions to change the stylesheet using DOM w/o reloading the page
 */
 
function setActiveStyleSheet(title) {
    var i, a, main;
    for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
	if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {
	    a.disabled = true;
	    if(a.getAttribute("title") == title) 
		a.disabled = false;
	}
    }
}

function getActiveStyleSheet() {
    var i, a;
    for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
	if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title") && !a.disabled) 
	    return a.getAttribute("title");
    }
    return null;
}

function createCookie(name,value,days) {
    if (days) {
	var date = new Date();
	date.setTime(date.getTime()+(days*24*60*60*1000));
	var expires = "; expires="+date.toGMTString();
    }
    else 
	expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
	var c = ca[i];
	while (c.charAt(0)==' ') c = c.substring(1,c.length);
	if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}


function getPreferredStyleSheet() {
    var i, a;
    for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
	if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("rel").indexOf("alt") == -1 && a.getAttribute("title")) 
	    return a.getAttribute("title");
    }
    return null;
}

/*
 * hide the active menu, unless the mouse pointer is over it
 * force = true - hide it immediately
 */
 
function hideActiveMenu(force) {

    if(active_menu != "") {
	if(force == false) {
	    if(mouse_over_menu != "")
		return false;
	}
	obj = getObject(active_menu);
	obj.style.display = "none";
	active_menu = "";
    }
}

/*
 * calculate the top offset of an element, using its parent(s)
 */
 
function getTopOffset(id) {
    
    var offset = id.offsetTop;
    
    while((id = id.offsetParent) != null)
	offset = offset + id.offsetTop;

    return offset;
}

/*
 * same for the left offset
 */
 
function getLeftOffset(id) {
    var offset = id.offsetLeft;
    
    while((id = id.offsetParent) != null)
	offset = offset + id.offsetLeft;

    return offset;
}

/*
 * show a menu (id) at the given anchor element (where)
 * direction: 0 > show downwards
 *	      1 > show upwards
 */
	      
function showDMenu(id, where, direction) {
    
    var x;
    var y;
    var m_clientWidth;
    if(active_menu != id)
	hideActiveMenu(true);
    
    anchor = getObject(where);
    x = anchor.offsetLeft;
    if(direction == 0)
	y = getTopOffset(anchor) + anchor.offsetHeight;
    else
	y = getTopOffset(anchor);
    x = getLeftOffset(anchor);    
    obj = getObject(id);
        
    if(obj.style.display == "none") {
	m_clientWidth = document.body.clientWidth;
	obj.style.top = y + "px";
	obj.style.left = x + "px";
	obj.style.display = "";
	if((x + obj.offsetWidth) >= m_clientWidth)
	    obj.style.left = (m_clientWidth - obj.offsetWidth) + "px";
	if(direction == 1)
	    obj.style.top = y - obj.offsetHeight + "px";
	else {
	    if(document.all && navigator.userAgent.toLowerCase().indexOf("opera") == -1)
		winHeight = document.documentElement.offsetHeight;
	    else
		winHeight = window.innerHeight;
	    //alert("y = " + y + "height = " + obj.offsetHeight + " clientH = " + winHeight + "  top = " + document.documentElement.scrollTop);
	    if((y + obj.offsetHeight) >= (document.documentElement.scrollTop + winHeight)) {
		y = y - obj.offsetHeight - anchor.offsetHeight;
		obj.style.top = y + 'px';
	    }
	}
	active_menu = id;
	mouse_over_menu = id;
    }
    else {
	obj.style.display = "none";
	active_menu = "";
	mouse_over_menu = "";
    }
    
    return false;
}

/*
 * dynamicall build and show the user menu, using the predefined template (id = user_dmenu)
 * id = menu id
 * where = id of the anchor element (where the menu should pop up)
 */
 
function buildUserMenu(scripturl, user_id, email, pm, icq, msn, aim, yim, id, where) {

    iobj = getObject('um_profilelink');
    iobj.href = scripturl + '?action=profile;u=' + user_id;
    
    row = getObject('um_pmrow');
    if(pm == 1) {
	iobj = getObject('um_pmlink');
	row.style.display = '';
	iobj.href = scripturl + '?action=pm;sa=send;u=' + user_id;
    }
    else
	row.style.display = 'none';
	
    row = getObject('um_mailrow');
    if(email != '') {
	row.style.display = '';
	iobj = getObject('um_emaillink');
	iobj.href = 'mailto:' + email;
    }
    else
	row.style.display = 'none';
	
    row = getObject('um_searchrow');
    iobj = getObject('um_searchlink');
    iobj.href = scripturl + '?action=profile;u=' + user_id + ';sa=showPosts';

    iobj.style.display = '';
    row = getObject('um_icqrow');
    iobj = getObject('um_icqlink');
    iobj.href = 'http://web.icq.com/whitepages/about_me/1,,,00.html?Uin=' + icq;
    iobj.innerHTML = '<img class="midimage" src="http://web.icq.com/whitepages/online?icq=' + icq + '&img=5" width="16" height="16" alt="icq" border="0" />&nbsp;' + icq;

    if(icq != '')
	row.style.display = '';
    else
	row.style.display = 'none';
	

    row = getObject('um_msnrow');
    iobj = getObject('um_msnlink');
    iobj.href = 'http://members.msn.com/' + msn;
    img = getObject('um_msnimg');
    iobj.innerHTML = '<img id="um_msnimg" class="midimage" src="' + img.src + '" width="16" height="16" alt="msn" border="0" />&nbsp;' + msn;
    if(msn != '')
	row.style.display = '';
    else
	row.style.display = 'none';
	

    row = getObject('um_aimrow');
    iobj = getObject('um_aimlink');
    iobj.href = 'aim:goim?screenname=' + aim + '&message=Hi.+Are+you+there?;';
    img = getObject('um_aimimg');
    iobj.innerHTML = '<img id="um_aimimg" class="midimage" src="' + img.src + '" width="16" height="16" alt="aim" border="0" />&nbsp;' + aim;
    if(aim != '')
	row.style.display = '';
    else
	row.style.display = 'none';

    row = getObject('um_yimrow');
    iobj = getObject('um_yimlink');
    iobj.href = 'http://edit.yahoo.com/config/send_webmesg?.target=' + yim;
    iobj.innerHTML = '<img id="um_yimimg" class="midimage" src="http://opi.yahoo.com/online?u=' + yim + '" width="16" height="16" alt="yim" border="0" />&nbsp;' + yim;
    if(yim != '')
	row.style.display = '';
    else
	row.style.display = 'none';
			    
    iobj = getObject('um_imheader');
    if(icq == '' && msn == '' && aim == '' && yim == '')
	iobj.style.display = 'none';
    else
	iobj.style.display = '';
    showDMenu(id, where, 0);
}
