
/* Disable right click */
function right(e) 
{
    if (navigator.appName == 'Netscape' && (e.which == 3 || e.which == 2))
    {
        return false;
    }
    else if (navigator.appName == 'Microsoft Internet Explorer' &&  (event.button == 2 || event.button == 3))
    {
        alert("Sorry, you do not have permission to right click.");
        return false;
    }
    else
    {
        return true;
    }
}

document.onmousedown=right;
document.onmouseup=right;
if (document.layers) window.captureEvents(Event.MOUSEDOWN);
if (document.layers) window.captureEvents(Event.MOUSEUP);
window.onmousedown=right;
window.onmouseup=right;



function cancelReturnKey(objEvent)
{
    if (objEvent.keyCode == 13)
    {
        objEvent.returnValue = false;
        return false;
    }
    else
    {
        return true;
    }
}


function openWindow(pstrLocation, pintWidth, pintHeight, pstrWindowName) 
{
    leftVal = (pintWidth - screen.width) / 2;
    topVal = (pintHeight - screen.height) / 2;
    strOptions = "width=" + pintWidth + ",height=" + pintHeight + ",left=" + leftVal + ",top=" + topVal + ",scrollbars=yes";

    window.open(pstrLocation, pstrWindowName, strOptions);
}



function eventSearchText(pstrEventCategoryCode, pstrSearchText)
{
	//window.location.href = "EventSearch.aspx?Category=" + escape(pstrEventCategoryCode) + "&SearchText=" + escape(pstrSearchText) + "&ShowSearch=Y&AutoSearch=Y";

    document.getElementById("divDHTMLPost").innerHTML = 
        "<form id=\"frmESEventSearchText\" name=\"frmESEventSearchText\" method=\"post\" action=\"/EventSearch.aspx\">" + 
        "   <input name=\"hdnESCategory\" value=\"" + escape(pstrEventCategoryCode) + "\" />" + 
        "   <input name=\"hdnESSearchText\" value=\"" + escape(pstrSearchText) + "\" />" + 
        "   <input name=\"hdnESShowSearch\" value=\"Y\" />" +         
        "   <input name=\"hdnESAutoSearch\" value=\"Y\" />" +         
        "   <input name=\"hdnESIsCrossPagePostBack\" value=\"Y\" />" +         
        "</form>";

    document.getElementById("frmESEventSearchText").submit();
    
	return false;
}


function imageSearchText(pstrEventCategoryCode, pstrSearchText)
{
	//window.location.href = "ImageSearch.aspx?Category=" + escape(pstrEventCategoryCode) + "&SearchText=" + escape(pstrSearchText) + "&ShowSearch=Y&AutoSearch=Y";

    document.getElementById("divDHTMLPost").innerHTML = 
        "<form id=\"frmISImageSearchText\" name=\"frmISImageSearchText\" method=\"post\" action=\"/ImageSearch.aspx\">" + 
        "   <input name=\"hdnISCategory\" value=\"" + escape(pstrEventCategoryCode) + "\" />" + 
        "   <input name=\"hdnISSearchText\" value=\"" + escape(pstrSearchText) + "\" />" + 
        "   <input name=\"hdnISShowSearch\" value=\"Y\" />" +         
        "   <input name=\"hdnISAutoSearch\" value=\"Y\" />" +         
        "   <input name=\"hdnISIsCrossPagePostBack\" value=\"Y\" />" +         
        "</form>";

    document.getElementById("frmISImageSearchText").submit();

	return false;
}


function login(pstrReference, pstrPassword)
{	
	if (pstrReference.length = 0)
	{
		alert("Reference must be specified");
	}
	else
	{
	    //window.location.href = "EventPassword.aspx?Reference=" + escape(pstrReference) + "&Password=" + escape(pstrPassword);

        document.getElementById("divDHTMLPost").innerHTML = 
            "<form id=\"frmEPLogin\" name=\"frmEPLogin\" method=\"post\" action=\"/EventPassword.aspx\">" + 
            "   <input name=\"hdnEPReference\" value=\"" + escape(pstrReference) + "\" />" + 
            "   <input name=\"hdnEPPassword\" value=\"" + escape(pstrPassword) + "\" />" + 
            "   <input name=\"hdnEPIsCrossPagePostBack\" value=\"Y\" />" +         
            "</form>";

        document.getElementById("frmEPLogin").submit();
	}

	return false;
}



function checkout()
{
	if (getCookie("Order") != null)
	{
		window.location.href = "CheckoutDetails.aspx";
	}
	else
	{
		alert("Shopping Basket is currently empty");
	}	
}


// ********************************************* //
function GetImageUrl(pstrReference, pstrFileName, pstrSize)
{
	return "/EventImageFile.aspx?Reference=" + escape(pstrReference) + "&FileName=" + escape(pstrFileName) + "&Size=" + escape(pstrSize);
}


function displayBasket(intThumbSize)
{
	var strOrderCookie;
	var objOrderItems;
	var objOrderItem;
	var x;
	var intRowNumber = 1;
	var strTable;
	
	var intNumber;
	var strReference;
	var strFileName;
	var strPhotoSizeCode;
	var strPhotoSizeName;
	var strQty;
	var strPhotoPrice;
	var fltItemTotal = 0;
	var fltOrderTotal = 0;
	var strOddEven;
	
	var strCurrencySymbol;
	var fltVATPercentage = 0;
	var fltPostageAmount = 0;
	var fltTemp = 0;

	if (document.getElementById("divBasket") == null)
	{
		return;
	}

	strCurrencySymbol = getCookie("CurrencySymbol");	
	fltVATPercentage = parseFloat(getCookie("VATPercentage"));
	fltPostageAmount = parseFloat(getCookie("PostageAmount"));
		
	strTable = '';

	strTable = strTable + "	<div id=\"divBasketTitle\">Shopping Basket</div>";
	strTable = strTable + "	<!-- Header -->";
	strTable = strTable + "	<div id=\"divBasketHead\">";
	strTable = strTable + "		<div id=\"divBasketHeadPhoto\">Photo</div>";
	strTable = strTable + "		<div id=\"divBasketHeadDetails\">Details</div>";
	strTable = strTable + "		<div id=\"divBasketHeadPrice\">Price</div>";
	strTable = strTable + "	</div>";
	strTable = strTable + "	<div id=\"divBasketData\">";
	
	if (getCookie("Order") != null && getCookie("Order").length > 0)
	{			
		strOrderCookie = getCookie("Order");

		
		objOrderItems = strOrderCookie.split("|");


		for(x=0;x<objOrderItems.length;x++)
		{			
			objOrderItem = objOrderItems[x].split(",");
			
			intNumber = parseInt(objOrderItem[0]);
			strReference = objOrderItem[1];
			strFileName = objOrderItem[2];
			strPhotoSizeCode = objOrderItem[3];
			strPhotoSizeName = objOrderItem[4];
			strQty = objOrderItem[5];
			strPhotoPrice = objOrderItem[6];			
			
			fltItemTotal = parseFloat(strPhotoPrice) * parseInt(strQty);
			
			if ((x + 1) % 2 == 1)
			{
				strTable = strTable + "	<div class=\"divBasketRowOdd\">";
			}
			else
			{
				strTable = strTable + "	<div class=\"divBasketRowEven\">";
			}

			strTable = strTable + "		<div class=\"divBasketDataPhoto\">";
			strTable = strTable + "			<table class=\"tableBasketDataPhoto\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">";
			strTable = strTable + "				<tr>";
			strTable = strTable + "					<td align=\"center\" valign=\"middle\"><img class=\"imgBasketDataPhoto\" src=\"" + GetImageUrl(strReference, strFileName, intThumbSize) + "\"></td>";
			strTable = strTable + "				</tr>";
			strTable = strTable + "			</table>";
			strTable = strTable + "		</div>";
			strTable = strTable + "		<div class=\"divBasketDataDetails\">";
			strTable = strTable + "			<div class=\"divBasketFileNameLabel\">File Name</div>";
			strTable = strTable + "			<div class=\"divBasketFileNameData\">" + strFileName + "</div>";
			strTable = strTable + "			<div class=\"divBasketPhotoSizeLabel\">Product</div>";
			strTable = strTable + "			<div class=\"divBasketPhotoSizeData\">" + strPhotoSizeName + "</div>";
			strTable = strTable + "			<div class=\"divBasketQtyLabel\">Qty</div>";
			strTable = strTable + "			<div class=\"divBasketQtyData\">" + strQty + "</div>";
			strTable = strTable + "			<div class=\"divBasketPriceEachLabel\">Price Each</div>";
			strTable = strTable + "			<div class=\"divBasketPriceEachData\">" + strPhotoPrice + "</div>";
			strTable = strTable + "			<div class=\"divBasketRemove\"><a href=\"javascript: removeFromOrder(" + intNumber + "," + intThumbSize + ");\">Remove</a></div>";
			strTable = strTable + "		</div>";
			strTable = strTable + "		<div class=\"divBasketDataPrice\">" + strCurrencySymbol + " " + formatCurrency(fltItemTotal) + "</div>";
			strTable = strTable + "	</div>";
			
			fltOrderTotal = fltOrderTotal + fltItemTotal;
		}
	}
	else
	{
		strTable = strTable + "	<div class=\"divBasketDataPhoto\">";
		strTable = strTable + "		<div id=\"divBasketEmpty\">Shopping Basket is currently empty</div>";
		strTable = strTable + "	</div>";
	}

	strTable = strTable + "</div>";
	
	//Order Total	
	strTable = strTable + "<div id=\"divBasketFoot\">";
	
	//Shipping	
	strTable = strTable + "	<div id=\"divPostage\">";
	strTable = strTable + "		<span id=\"spanPostageLabel\">Shipping Amount</span>";
	
	// Postage
	if (fltPostageAmount != 0)
	{
		strTable = strTable + "		<span id=\"spanPostageData\">" + strCurrencySymbol + " " + formatCurrency(fltPostageAmount) + "</span>";
	}
	else
	{
		strTable = strTable + "		<span id=\"spanPostageData\" class=\"DataLabel\">free</span>";
	}
	strTable = strTable + "</div>";
	
	//Total Excluding VAT
	if (fltVATPercentage != 0)
	{
		fltTemp = (fltOrderTotal + fltPostageAmount);
		strTable = strTable + "	<div id=\"divTotalExcVAT\">";
		strTable = strTable + "		<span id=\"spanTotalExcVATLabel\">Total ex. VAT</span>";
		strTable = strTable + "		<span id=\"spanTotalExcVATData\" class=\"DataLabel\">" + strCurrencySymbol + " " + formatCurrency(fltTemp) + "</span>";
		strTable = strTable + "	</div>";
	}
	
	// VAT Amount
	if (fltVATPercentage != 0)
	{
		fltTemp = ((fltOrderTotal + fltPostageAmount) / 100) * (fltVATPercentage);
		strTable = strTable + "	<div id=\"divVAT\">";
		strTable = strTable + "		<span id=\"spanVATLabel\">VAT @ " + fltVATPercentage + "%</span>";
		strTable = strTable + "		<span id=\"spanVATData\" class=\"DataLabel\">" + strCurrencySymbol + " " + formatCurrency(fltTemp) + "</span>";
		strTable = strTable + "	</div>";
	}
	
	//Total Price
	fltTemp = ((fltOrderTotal + fltPostageAmount) / 100) * (100 + fltVATPercentage);
	strTable = strTable + "	<div id=\"divTotalIncVAT\">";
	if (fltVATPercentage != 0)
	{
		strTable = strTable + "		<span id=\"spanTotalIncVATLabel\">Total inc. VAT</span>";
	}
	else
	{
		strTable = strTable + "		<span id=\"spanTotalIncVATLabel\">Total price</span>";
	}
		
	strTable = strTable + "		<span id=\"spanTotalIncVATData\" class=\"DataLabel\">" + strCurrencySymbol + " " + formatCurrency(fltTemp) + "</span>";

	strTable = strTable + "	</div>";


	//Buttons
	strTable = strTable + "	<div id=\"divButtons\">";
	strTable = strTable + "		<INPUT id=\"btnBasketClose\" name=\"btnContinueShopping\" type=\"button\" value=\"Close\" onclick=\"closeBasket();\">";
	
	if (getCookie("Order") != null)
	{
		strTable = strTable + "		<INPUT id=\"btnCheckout\" name=\"btnCheckout\" type=\"button\" value=\"Checkout\" onclick=\"checkout();\">";
	}
	
	strTable = strTable + "	</div>";
	
	strTable = strTable + "</div>";

	document.getElementById("divBasket").innerHTML = strTable;
	document.getElementById("divBasket").style.display = "block";
	WCH.Apply("divBasket");
	return;
}

function closeBasket()
{
	document.getElementById("divBasket").style.display = "none";
	WCH.Discard("divBasket");
}


// ********************************************* //


function addToOrderCookieData(pstrOrderCookieData,pstrReference,pstrFileName,pstrPhotoSizeCode,pstrPhotoSizeName,pstrQty,pstrPhotoPrice)
{
	var strNewOrderCookieData;
	var strNewID;
	var objOrderItems;
	var objOrderItem;

	if (pstrOrderCookieData == null || pstrOrderCookieData == '')
	{
		strNewOrderCookieData = '';
		strNewID = '0';
	}
	else
	{
		objOrderItems = pstrOrderCookieData.split("|");
		objOrderItem = objOrderItems[objOrderItems.length - 1].split(",");
		strNewID = parseInt(objOrderItem[0]) + 1;

		strNewOrderCookieData = pstrOrderCookieData + "|";
	}
	
	strNewOrderCookieData = strNewOrderCookieData + 
							strNewID + ',' +  
							pstrReference + ',' +  
							pstrFileName + ',' +  
							pstrPhotoSizeCode + ',' +  
							pstrPhotoSizeName + ',' +  
							pstrQty + ',' +  
							pstrPhotoPrice;		
							
	return strNewOrderCookieData
}


function HideAddToOrder()
{
	document.getElementById("divAddedToOrder").style.display = "none";
}

function removeFromOrder(intItemNumber, intThumbSize)
{
	// Add Item to Cookie
	var strOrderCookieData;
	var strNewOrderCookieData;
	var objCookieValues;
	var strNewID;
		
	strOrderCookieData = getCookie("Order");
	if (strOrderCookieData == null)
	{
		strOrderCookieData = '';
	}
				
	strNewOrderCookieData = removeFromOrderCookieData(strOrderCookieData, intItemNumber); 

	deleteCookie("Order");
	setCookie("Order", strNewOrderCookieData);
							
	displayBasket(intThumbSize);
	
	return;
}



function removeFromOrderCookieData(pstrOrderCookieData, pintItemNumber)
{
	var objOrderItems;
	var objOrderItem;
	var strNewOrderCookieData;
	var x;
	var intNumber;
	
	objOrderItems = pstrOrderCookieData.split("|");
	
	strNewOrderCookieData = '';
	
	for(x=0;x<objOrderItems.length;x++)
	{			
		objOrderItem = objOrderItems[x].split(",");
		intNumber = parseInt(objOrderItem[0]);

		if (intNumber != pintItemNumber)
		{
			if (strNewOrderCookieData.length == 0)
			{				
				strNewOrderCookieData = strNewOrderCookieData + objOrderItems[x];
			}
			else
			{
				strNewOrderCookieData = strNewOrderCookieData + "|"	+ objOrderItems[x];	
			}
		}
	}		

	return 	strNewOrderCookieData;
}														








// Sets a Cookie with the given name and value.
//
// name       Name of the cookie
// value      Value of the cookie
// [expires]  Expiration date of the cookie (default: end of current session)
// [path]     Path where the cookie is valid (default: path of calling document)
// [domain]   Domain where the cookie is valid
//              (default: domain of calling document)
// [secure]   Boolean value indicating if the cookie transmission requires a
//              secure transmission

function setCookie(name, value, expires, path, domain, secure)
{
	document.cookie= name + "=" + escape(value) +
		((expires) ? "; expires=" + expires.toGMTString() : "") +
		((path) ? "; path=" + path : "") +
		((domain) ? "; domain=" + domain : "") +
		((secure) ? "; secure" : "");
}



// Gets the value of the specified cookie.
//
// name  Name of the desired cookie.
//
// Returns a string containing value of specified cookie,
//   or null if cookie does not exist.

function getCookie(name)
{
	var dc = document.cookie;
	var prefix = name + "=";
	var begin = dc.indexOf("; " + prefix);
	if (begin == -1)
	{
		begin = dc.indexOf(prefix);
		if (begin != 0) return null;
	}
	else
	{
		begin += 2;
	}
	var end = document.cookie.indexOf(";", begin);
	if (end == -1)
	{
		end = dc.length;
	}
	return unescape(dc.substring(begin + prefix.length, end));
}

// Deletes the specified cookie.
//
// name      name of the cookie
// [path]    path of the cookie (must be same as path used to create cookie)
// [domain]  domain of the cookie (must be same as domain used to create cookie)

function deleteCookie(name, path, domain)
{
	if (getCookie(name))
	{
		document.cookie = name + "=" + 
			((path) ? "; path=" + path : "") +
			((domain) ? "; domain=" + domain : "") +
			"; expires=Thu, 01-Jan-70 00:00:01 GMT";
	}
}



// ********************************************* //
// General Methods

function indexOf(LookFor,Ar)
{
	var intFound = -1;
	var x;

	for(x=0;x<Ar.length;x++)
	{
		if (Ar[x] == LookFor)
		{
			intFound = x;
		}
	}		
	
	return intFound;
}		

function formatCurrency(amount)
{
	var i = parseFloat(amount);

	if(isNaN(i)) 
	{ 
		i = 0.00; 
	}
	
	var minus = '';
	
	if (i < 0)
	{
		minus = '-';
	}
	i = Math.abs(i);
	i = parseInt((i + .005) * 100);
	i = i / 100;
	s = new String(i);
	if(s.indexOf('.') < 0) { s += '.00'; }
	if(s.indexOf('.') == (s.length - 2)) { s += '0'; }
	s = minus + s;
	return s;
}

// ********************************************* //












// Title: tigra menu
// Description: See the demo at url
// URL: http://www.softcomplex.com/products/tigra_menu/
// Version: 2.0 (commented source)
// Date: 04-05-2003 (mm-dd-yyyy)
// Tech. Support: http://www.softcomplex.com/forum/forumdisplay.php?fid=40
// Notes: This script is free. Visit official site for further details.

// --------------------------------------------------------------------------------
// global collection containing all menus on current page
var A_MENUS = [];

// --------------------------------------------------------------------------------
// menu class
function menu (a_items, a_tpl) {

	// browser check
	if (!document.body || !document.body.style)
		return;

	// store items structure
	this.a_config = a_items;

	// store template structure
	this.a_tpl = a_tpl;

	// get menu id
	this.n_id = A_MENUS.length;

	// declare collections
	this.a_index = [];
	this.a_children = [];

	// assigh methods and event handlers
	this.expand      = menu_expand;
	this.collapse    = menu_collapse;

	this.onclick     = menu_onclick;
	this.onmouseout  = menu_onmouseout;
	this.onmouseover = menu_onmouseover;
	this.onmousedown = menu_onmousedown;

	// default level scope description structure 
	this.a_tpl_def = {
		'block_top'  : 16,
		'block_left' : 16,
		'top'        : 20,
		'left'       : 4,
		'width'      : 120,
		'height'     : 22,
		'hide_delay' : 0,
		'expd_delay' : 0,
		'css'        : {
			'inner' : '',
			'outer' : ''
		}
	};
	
	// assign methods and properties required to imulate parent item
	this.getprop = function (s_key) {
		return this.a_tpl_def[s_key];
	};

	this.o_root = this;
	this.n_depth = -1;
	this.n_x = 0;
	this.n_y = 0;

	// 	init items recursively
	for (n_order = 0; n_order < a_items.length; n_order++)
		new menu_item(this, n_order);

	// register self in global collection
	A_MENUS[this.n_id] = this;

	// make root level visible
	for (var n_order = 0; n_order < this.a_children.length; n_order++)
		this.a_children[n_order].e_oelement.style.visibility = 'visible';
}

// --------------------------------------------------------------------------------
function menu_collapse (n_id) {
	// cancel item open delay
	clearTimeout(this.o_showtimer);

	// by default collapse to root level
	var n_tolevel = (n_id ? this.a_index[n_id].n_depth : 0);
	
	// hide all items over the level specified
	for (n_id = 0; n_id < this.a_index.length; n_id++) {
		var o_curritem = this.a_index[n_id];
		if (o_curritem.n_depth > n_tolevel && o_curritem.b_visible) {
			o_curritem.e_oelement.style.visibility = 'hidden';
			o_curritem.b_visible = false;
		}
	}

	// reset current item if mouse has gone out of items
	if (!n_id)
		this.o_current = null;
}

// --------------------------------------------------------------------------------
function menu_expand (n_id) {

	// expand only when mouse is over some menu item
	if (this.o_hidetimer)
		return;

	// lookup current item
	var o_item = this.a_index[n_id];

	// close previously opened items
	if (this.o_current && this.o_current.n_depth >= o_item.n_depth)
		this.collapse(o_item.n_id);
	this.o_current = o_item;

	// exit if there are no children to open
	if (!o_item.a_children)
		return;

	// show direct child items
	for (var n_order = 0; n_order < o_item.a_children.length; n_order++) {
		var o_curritem = o_item.a_children[n_order];
		o_curritem.e_oelement.style.visibility = 'visible';
		o_curritem.b_visible = true;
	}
}

// --------------------------------------------------------------------------------
//
// --------------------------------------------------------------------------------
function menu_onclick (n_id) {
	// don't go anywhere if item has no link defined
	return Boolean(this.a_index[n_id].a_config[1]);
}

// --------------------------------------------------------------------------------
function menu_onmouseout (n_id) {

	// lookup new item's object	
	var o_item = this.a_index[n_id];

	// apply rollout
	o_item.e_oelement.className = o_item.getstyle(0, 0);
	o_item.e_ielement.className = o_item.getstyle(1, 0);
	
	// update status line	
	o_item.upstatus(7);

	// run mouseover timer
	this.o_hidetimer = setTimeout('A_MENUS['+ this.n_id +'].collapse();',
		o_item.getprop('hide_delay'));
}

// --------------------------------------------------------------------------------
function menu_onmouseover (n_id) {

	// cancel mouseoute menu close and item open delay
	clearTimeout(this.o_hidetimer);
	this.o_hidetimer = null;
	clearTimeout(this.o_showtimer);

	// lookup new item's object	
	var o_item = this.a_index[n_id];

	// update status line	
	o_item.upstatus();

	// apply rollover
	o_item.e_oelement.className = o_item.getstyle(0, 1);
	o_item.e_ielement.className = o_item.getstyle(1, 1);
	
	// if onclick open is set then no more actions required
	if (o_item.getprop('expd_delay') < 0)
		return;

	// run expand timer
	this.o_showtimer = setTimeout('A_MENUS['+ this.n_id +'].expand(' + n_id + ');',
		o_item.getprop('expd_delay'));

}

// --------------------------------------------------------------------------------
// called when mouse button is pressed on menu item
// --------------------------------------------------------------------------------
function menu_onmousedown (n_id) {
	
	// lookup new item's object	
	var o_item = this.a_index[n_id];

	// apply mouse down style
	o_item.e_oelement.className = o_item.getstyle(0, 2);
	o_item.e_ielement.className = o_item.getstyle(1, 2);

	this.expand(n_id);
//	this.items[id].switch_style('onmousedown');
}


// --------------------------------------------------------------------------------
// menu item Class
function menu_item (o_parent, n_order) {

	// store parameters passed to the constructor
	this.n_depth  = o_parent.n_depth + 1;
	this.a_config = o_parent.a_config[n_order + (this.n_depth ? 3 : 0)];

	// return if required parameters are missing
	if (!this.a_config) return;

	// store info from parent item
	this.o_root    = o_parent.o_root;
	this.o_parent  = o_parent;
	this.n_order   = n_order;

	// register in global and parent's collections
	this.n_id = this.o_root.a_index.length;
	this.o_root.a_index[this.n_id] = this;
	o_parent.a_children[n_order] = this;

	// calculate item's coordinates
	var o_root = this.o_root,
		a_tpl  = this.o_root.a_tpl;

	// assign methods
	this.getprop  = mitem_getprop;
	this.getstyle = mitem_getstyle;
	this.upstatus = mitem_upstatus;

	this.n_x = n_order
		? o_parent.a_children[n_order - 1].n_x + this.getprop('left')
		: o_parent.n_x + this.getprop('block_left');

	this.n_y = n_order
		? o_parent.a_children[n_order - 1].n_y + this.getprop('top')
		: o_parent.n_y + this.getprop('block_top');

	// generate item's HMTL
	document.write (
		'<a id="e' + o_root.n_id + '_'
			+ this.n_id +'o" class="' + this.getstyle(0, 0) + '" href="' + this.a_config[1] + '"'
			+ (this.a_config[2] && this.a_config[2]['tw'] ? ' target="'
			+ this.a_config[2]['tw'] + '"' : '')
			+ (this.a_config[2] && this.a_config[2]['tt'] ? ' title="'
			+ this.a_config[2]['tt'] + '"' : '') + ' style="position: absolute; top: '
			+ this.n_y + 'px; left: ' + this.n_x + 'px; width: '
			+ this.getprop('width') + 'px; height: '
			+ this.getprop('height') + 'px; visibility: hidden;'
			+' z-index: ' + this.n_depth + ';" '
			+ 'onclick="return A_MENUS[' + o_root.n_id + '].onclick('
			+ this.n_id + ');" onmouseout="A_MENUS[' + o_root.n_id + '].onmouseout('
			+ this.n_id + ');" onmouseover="A_MENUS[' + o_root.n_id + '].onmouseover('
			+ this.n_id + ');" onmousedown="A_MENUS[' + o_root.n_id + '].onmousedown('
			+ this.n_id + ');"><div  id="e' + o_root.n_id + '_'
			+ this.n_id +'i" class="' + this.getstyle(1, 0) + '">'
			+ this.a_config[0] + "</div></a>\n"
		);
	this.e_ielement = document.getElementById('e' + o_root.n_id + '_' + this.n_id + 'i');
	this.e_oelement = document.getElementById('e' + o_root.n_id + '_' + this.n_id + 'o');

	this.b_visible = !this.n_depth;

	// no more initialization if leaf
	if (this.a_config.length < 4)
		return;

	// node specific methods and properties
	this.a_children = [];

	// init downline recursively
	for (var n_order = 0; n_order < this.a_config.length - 3; n_order++)
		new menu_item(this, n_order);
}

// --------------------------------------------------------------------------------
// reads property from template file, inherits from parent level if not found
// ------------------------------------------------------------------------------------------
function mitem_getprop (s_key) {

	// check if value is defined for current level
	var s_value = null,
		a_level = this.o_root.a_tpl[this.n_depth];

	// return value if explicitly defined
	if (a_level)
		s_value = a_level[s_key];

	// request recursively from parent levels if not defined
	return (s_value == null ? this.o_parent.getprop(s_key) : s_value);
}
// --------------------------------------------------------------------------------
// reads property from template file, inherits from parent level if not found
// ------------------------------------------------------------------------------------------
function mitem_getstyle (n_pos, n_state) {

	var a_css = this.getprop('css');
	var a_oclass = a_css[n_pos ? 'inner' : 'outer'];

	// same class for all states	
	if (typeof(a_oclass) == 'string')
		return a_oclass;

	// inherit class from previous state if not explicitly defined
	for (var n_currst = n_state; n_currst >= 0; n_currst--)
		if (a_oclass[n_currst])
			return a_oclass[n_currst];
}

// ------------------------------------------------------------------------------------------
// updates status bar message of the browser
// ------------------------------------------------------------------------------------------
function mitem_upstatus (b_clear) {
	window.setTimeout("window.status=unescape('" + (b_clear
		? ''
		: (this.a_config[2] && this.a_config[2]['sb']
			? escape(this.a_config[2]['sb'])
			: escape(this.a_config[0]) + (this.a_config[1]
				? ' ('+ escape(this.a_config[1]) + ')'
				: ''))) + "')", 10);
}

// --------------------------------------------------------------------------------
// that's all folks

