function FindPos (obj) {
//--- Find the current position of an object on the page

	var curL = 0;
	var curT = 0;

	if (obj.offsetParent) {
		curL = obj.offsetLeft
		curT = obj.offsetTop
		while (obj = obj.offsetParent) {
			curL += obj.offsetLeft
			curT += obj.offsetTop
		}
	}

	return [curL, curT]; // return as array

}

function GetBrowserDimensions () {
//--- Returns browser dimensions

	var browserW = 0;
	var browserH = 0;

	if (parseInt (navigator.appVersion) > 3) {

		if ((navigator.appName == "Microsoft Internet Explorer") && (document.body)) {
			browserW = document.body.offsetWidth;
			browserH = document.body.offsetHeight;
		} else
		if (navigator.appName == "Netscape") {
			browserW = window.innerWidth;
			browserH = window.innerHeight;
		}

	}

	return [browserW, browserH];

}

function SwitchSelects (Display) {
//--- Switches the display of a select field on or off

	IE6 = (navigator.userAgent.toLowerCase ().indexOf ('msie 6') != -1);

	if (IE6) {
		for (f = 0; f < document.forms.length; f++) {
			var elements = document.forms[f].elements;
			for (e = 0; e < elements.length; e++) {
				if (elements[e].type == 'select-one') {
					elements[e].style.visibility = Display;
				}
			}
		}
	}

}

//-------------------------------------------------------

function showSubMenuDelayed (menuLayer) {
//--- The real function

	obj = lastSubMenu;

	if (!document.getElementById ('left_flyout' + menuLayer)) {
		return;
	}

	if (lastMenu != '') {
		document.getElementById (lastMenu).style.visibility = 'hidden';
		document.getElementById (lastMenu).style.left = '0px';
		document.getElementById (lastMenu).style.top = '0px';
	}

	SwitchSelects ('hidden');

	tPos = FindPos (obj);
	tBrowser = GetBrowserDimensions ();
	if (tPos[1] + document.getElementById ('left_flyout' + menuLayer).offsetHeight > tBrowser[1]) {
		document.getElementById ('left_flyout' + menuLayer).style.left = (tPos[0] + 176) + 'px';
		document.getElementById ('left_flyout' + menuLayer).style.top  = (tPos[1] + 25 - document.getElementById ('left_flyout' + menuLayer).offsetHeight + 10 < 10 ? 10 : (tPos[1] + 25 - document.getElementById ('left_flyout' + menuLayer).offsetHeight + 10)) + 'px'
	} else {
		document.getElementById ('left_flyout' + menuLayer).style.left = (tPos[0] + 176) + 'px';
		document.getElementById ('left_flyout' + menuLayer).style.top  = (tPos[1] - 10) + 'px'
	}
	changeOpac(0, 'left_flyout' + menuLayer);
	document.getElementById ('left_flyout' + menuLayer).style.visibility = 'visible';
	fade('left_flyout' + menuLayer);

	//--- Save
	lastMenu = 'left_flyout' + menuLayer;

}

function showSubMenu (obj, menuLayer) {
//--- Displays the sub-menu as a hover over

	if (lastTimeout != null) {
		clearTimeout (lastTimeout);
	}

	lastSubMenu = obj;
	showSubMenuDelayed (menuLayer);

//	intTimeout = setTimeout ("showSubMenuDelayed ('" + menuLayer + "')", 100);

}

function hideSubMenu () {
//--- Hides the sub-menu

	if (!lastMenu) {
		return;
	}

	lastTimeout = setTimeout ("SwitchSelects ('visible'); document.getElementById ('" + lastMenu + "').style.visibility = 'hidden'; document.getElementById ('" + lastMenu + "').style.left = '0px'; document.getElementById ('" + lastMenu + "').style.top = '0px';", 100);

}

//-------------------------------------------------------

function showTopMenu (obj, menuLayer) {
//--- Displays the top-menu hover over

	if (!document.getElementById ('top_flyout' + menuLayer)) {
		return;
	}

	if (lastTimeout != null) {
		clearTimeout (lastTimeout);
	}
	if (lastMenu != '') {
		document.getElementById (lastMenu).style.visibility = 'hidden';
		document.getElementById (lastMenu).style.left = '0px';
		document.getElementById (lastMenu).style.top = '0px';
	}

	SwitchSelects ('hidden');

	tPos = FindPos (obj);
	tBrowser = GetBrowserDimensions ();
	if (tPos[0] + document.getElementById ('top_flyout' + menuLayer).offsetWidth > tBrowser[0]) {
		document.getElementById ('top_flyout' + menuLayer).style.left = (tPos[0] + obj.width - document.getElementById ('top_flyout' + menuLayer).offsetWidth + 10) + 'px';
		document.getElementById ('top_flyout' + menuLayer).style.top  = (tPos[1] + 30) + 'px'
	} else {
		document.getElementById ('top_flyout' + menuLayer).style.left = (tPos[0] - 10) + 'px';
		document.getElementById ('top_flyout' + menuLayer).style.top  = (tPos[1] + 30) + 'px'
	}
	changeOpac(0, 'top_flyout' + menuLayer);
	document.getElementById ('top_flyout' + menuLayer).style.visibility = 'visible';
	fade('top_flyout' + menuLayer);

	//--- Save
	lastMenu = 'top_flyout' + menuLayer;

}

function hideTopMenu () {
//--- Hides the top-menu

	if (!lastMenu) {
		return;
	}

	lastTimeout = setTimeout ("SwitchSelects ('visible'); document.getElementById ('" + lastMenu + "').style.visibility = 'hidden'; document.getElementById ('" + lastMenu + "').style.left = '0px'; document.getElementById ('" + lastMenu + "').style.top = '0px';", 100);

}

//-------------------------------------------------------

function showPromo (obj, promoLayer, image) {
//--- Displays the sub-menu as a hover over

	if (!document.getElementById ('promo' + promoLayer)) {
		return;
	}

	if (lastTimeout != null) {
		clearTimeout (lastTimeout);
	}
	if (lastMenu != '') {
		document.getElementById (lastMenu).style.visibility = 'hidden';
		document.getElementById (lastMenu).style.left = '0px';
		document.getElementById (lastMenu).style.top = '0px';
		lastMenu = '';
	}
	if (lastPromo != '') {
		document.getElementById (lastPromo).style.visibility = 'hidden';
		document.getElementById (lastPromo).style.left = '0px';
		document.getElementById (lastPromo).style.top = '0px';
	}
	if (lastPromoImageSrc != '') {
		lastPromoImage.src = lastPromoImageSrc;
	}

	SwitchSelects ('hidden');

	tPos = FindPos (obj);
	document.getElementById ('promo' + promoLayer).style.visibility = 'visible';
	document.getElementById ('promo' + promoLayer).style.left = (tPos[0] + 0) + 'px';
	document.getElementById ('promo' + promoLayer).style.top  = (tPos[1] + 69) + 'px';

	//--- Save
	lastPromo = 'promo' + promoLayer;
	lastPromoImage = obj;
	lastPromoImageSrc = obj.src;
	obj.src = image;

}

function hidePromo () {
//--- Hides the sub-menu

	if (!lastPromo) {
		return;
	}

	lastTimeout = setTimeout ("SwitchSelects ('visible'); document.getElementById ('" + lastPromo + "').style.visibility = 'hidden'; document.getElementById ('" + lastPromo + "').style.left = '0px'; document.getElementById ('" + lastPromo + "').style.top = '0px'; lastPromoImage.src = lastPromoImageSrc", 500);

}

//-------------------------------------------------------

function showStock (obj, germiston, milnerton, rossburgh, crown_mines, ottery, springfield, pietermaritzburg, centurion, woodmead, port_elizabeth, strubens_valley, wonderboom, silverlakes) {
//--- Displays the stock pop up

	SwitchSelects ('hidden');

	tPos = FindPos (obj);
	document.getElementById ('stock_germiston').src = '/live/images/' + (germiston == '1' ? 'Yes.gif' : 'No.gif');
	document.getElementById ('stock_milnerton').src = '/live/images/' + (milnerton == '1' ? 'Yes.gif' : 'No.gif');
	document.getElementById ('stock_rossburgh').src = '/live/images/' + (rossburgh == '1' ? 'Yes.gif' : 'No.gif');
	document.getElementById ('stock_crown_mines').src = '/live/images/' + (crown_mines == '1' ? 'Yes.gif' : 'No.gif');
	document.getElementById ('stock_ottery').src = '/live/images/' + (ottery == '1' ? 'Yes.gif' : 'No.gif');
	document.getElementById ('stock_springfield').src = '/live/images/' + (springfield == '1' ? 'Yes.gif' : 'No.gif');
	document.getElementById ('stock_pietermaritzburg').src = '/live/images/' + (pietermaritzburg == '1' ? 'Yes.gif' : 'No.gif');
	document.getElementById ('stock_centurion').src = '/live/images/' + (centurion == '1' ? 'Yes.gif' : 'No.gif');
	document.getElementById ('stock_woodmead').src = '/live/images/' + (woodmead == '1' ? 'Yes.gif' : 'No.gif');
	document.getElementById ('stock_port_elizabeth').src = '/live/images/' + (port_elizabeth == '1' ? 'Yes.gif' : 'No.gif');
	document.getElementById ('stock_strubens_valley').src = '/live/images/' + (strubens_valley == '1' ? 'Yes.gif' : 'No.gif');
	document.getElementById ('stock_wonderboom').src = '/live/images/' + (wonderboom == '1' ? 'Yes.gif' : 'No.gif');
	document.getElementById ('stock_silverlakes').src = '/live/images/' + (silverlakes == '1' ? 'Yes.gif' : 'No.gif');
	document.getElementById ('in_stock').style.visibility = 'visible';
	document.getElementById ('in_stock').style.left = (tPos[0] + 0) + 'px';
	document.getElementById ('in_stock').style.top  = (tPos[1] - document.getElementById ('in_stock').offsetHeight - 2) + 'px';

}

function hideStock () {
//--- Hides the stock pop up

	document.getElementById ('in_stock').style.visibility = 'hidden';
	document.getElementById ('in_stock').style.left = '0px';
	document.getElementById ('in_stock').style.top  = '0px';

	SwitchSelects ('visible');

}

//-------------------------------------------------------

function XHTTPRequest_Categories (url, handler) {
//--- Send an HTTP request

	if (window.XMLHttpRequest) {

		categoryReq = new XMLHttpRequest ();
		categoryReq.onreadystatechange = handler;
		categoryReq.open ("GET", url, true);
		categoryReq.send (null);

    } else if (window.ActiveXObject) {

		categoryReq = new ActiveXObject ("Microsoft.XMLHTTP");
		if (categoryReq) {
			categoryReq.onreadystatechange = handler;
			categoryReq.open ("GET", url, true);
			categoryReq.send ();
        } else {
    		categoryReq = new ActiveXObject ("Microsoft.XMLHTTP");
    		categoryReq.onreadystatechange = handler;
			categoryReq.open ("GET", url, true);
			categoryReq.send ();
    	}

    } else {
    	//--- AJAX is not supported
    }

}

function ShowLoading (parentID) {
//--- Shows a loading message

	document.getElementById (parentID).innerHTML = '&nbsp;&nbsp;&nbsp;<img src=\"/live/images/loading.gif\" width=\"18\" height=\"18\" align=\"absmiddle\" alt=\"Loading...\" /> Loading...<br />';

}

function ShowCategories () {
//--- Loads the most recent posts from the server

	if (categoryReq.readyState == 4) {

		switch (categoryReq.status) {
			case 200:	//--- Display response text
						var hasError = categoryReq.responseXML.getElementsByTagName ("error");
						if (hasError.length) {
							alert ('An error occured while downloading sub-categories. Please try again.');
						} else {
							var categories = categoryReq.responseXML.getElementsByTagName ("categories")[0].getElementsByTagName ("category");
						}
						var parentID = categoryReq.responseXML.getElementsByTagName ("categories")[0].getAttribute ('parentID');
						var tempHTML = '';
						if (categories.length) {
							for (i = 0; i < categories.length; i++) {
								catid = (categories[i].getElementsByTagName ('id')[0].firstChild ? categories[i].getElementsByTagName ('id')[0].firstChild.nodeValue : '');
								catdescription = (categories[i].getElementsByTagName ('description')[0].firstChild ? categories[i].getElementsByTagName ('description')[0].firstChild.nodeValue : '');
								hasSubCats = (categories[i].getElementsByTagName ('subcats')[0].firstChild ? categories[i].getElementsByTagName ('subcats')[0].firstChild.nodeValue : '');
								if (hasSubCats != 0) {
									tempHTML += "&nbsp;&nbsp;&nbsp;&raquo; <a href=\"#\" onclick=\"SubCats ('" + catid + "', 'ffth'); return false\">" + catdescription + "</a>&nbsp;&nbsp;<br /><span id=\"ffth_" + catid + "\"></span>\n";
								} else {
									tempHTML += "&nbsp;&nbsp;&nbsp;" + (parentID.substr (0, 4) == 'ffth' ? "&nbsp;&nbsp;&nbsp;" : "") + "&raquo; <a href=\"/live/content.php?Action=catalog&Cat=" + catid + "\">" + catdescription + "</a>&nbsp;&nbsp;<br />\n";
								}
							}
						}
						document.getElementById (parentID).innerHTML = tempHTML;
						break;
			default:	break;
		}

	}

}

function SubCats (Cat, Level) {
//--- Gets the sub-categories
  
	ShowLoading ((Level ? Level + '_' : 'frth_') + Cat);
	XHTTPRequest_Categories ('/live/pagebuilder/components/makro/menu-xml.php?LayerID=' + (Level ? Level + '_' : 'frth_') + Cat + '&Cat=' + Cat, ShowCategories);

}

//-------------------------------------------------------

function XHTTPRequest_Suggestions (url, handler) {
//--- Send an HTTP request

	if (window.XMLHttpRequest) {

		suggestReq = new XMLHttpRequest ();
		suggestReq.onreadystatechange = handler;
		suggestReq.open ("GET", url, true);
		suggestReq.send (null);

    } else if (window.ActiveXObject) {

		suggestReq = new ActiveXObject ("Microsoft.XMLHTTP");
		if (suggestReq) {
			suggestReq.onreadystatechange = handler;
			suggestReq.open ("GET", url, true);
			suggestReq.send ();
        } else {
    		suggestReq = new ActiveXObject("Microsoft.XMLHTTP");
    		suggestReq.onreadystatechange = handler;
			suggestReq.open ("GET", url, true);
			suggestReq.send ();
    	}

    } else {
    	//--- AJAX is not supported
    }

}

function ShowQuickSearch () {
//--- Displays quick search results

	if (suggestReq.readyState == 4) {

		switch (suggestReq.status) {
			case 200:	//--- Display response text
						SearchFieldPos = FindPos (document.getElementById ('queryField'));
						document.getElementById ('quickSearchResults').innerHTML = suggestReq.responseText;
						document.getElementById ('quickSearch').style.top = (SearchFieldPos[1] + document.getElementById ('queryField').offsetHeight + 0) + 'px';
						document.getElementById ('quickSearch').style.left = (SearchFieldPos[0] + 0) + 'px';
						document.getElementById ('quickSearch').style.visibility = 'visible';
						break;
			default:	break;
		}

	}

}

function HideQuickSearch () {
//--- Hides the quick search results

	document.getElementById ('quickSearch').style.visibility = 'hidden';

}

function GetQuickSearch (value) {
//--- Queries quick search results

	if (value.length > 2) {
		XHTTPRequest_Suggestions ('/live/pagebuilder/components/makro/quick-search-xml.php?Query=' + value, ShowQuickSearch);
	}

}

//-------------------------------------------------------

function fade (id) {

	opacity(id, 0, 100, 200);

}

function opacity(id, opacStart, opacEnd, millisec) {
    //speed for each frame
    var speed = Math.round(millisec / 100);
    var timer = 0;

    //determine the direction for the blending, if start and end are the same nothing happens
    if(opacStart > opacEnd) {
        for(i = opacStart; i >= opacEnd; i--) {
            setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
            timer++;
        }
    } else if(opacStart < opacEnd) {
        for(i = opacStart; i <= opacEnd; i++)
            {
            setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
            timer++;
        }
    }
}

//change the opacity for different browsers
function changeOpac(opacity, id) {
    var object = document.getElementById(id).style;
    object.opacity = (opacity / 100);
    object.MozOpacity = (opacity / 100);
    object.KhtmlOpacity = (opacity / 100);
    object.filter = "alpha(opacity=" + opacity + ")";
} 

//-------------------------------------------------------

lastSubMenu = null;
lastTimeout = null;
lastMenu = '';
lastPromo = '';
lastPromoImage = null;
lastPromoImageSrc = '';
intTimeout = null;