function debug(p_args) {
	alert(p_args);
}

function displayPopupPanel(p_display) {
	if (p_display == undefined) p_display = true;
	var popup = $('popup');
	if (popup == undefined) return;
	Element.addClassName($('popup'), (p_display ? "visible" : "hidden"));
	Element.removeClassName($('popup'), (p_display ? "hidden" : "visible"));
}

function getFrameDocument(p_frame) {
	if (p_frame.contentWindow != undefined && p_frame.contentWindow.document != undefined) return p_frame.contentWindow.document;
	if (p_frame.document != undefined) return p_frame.document;
	if (p_frame.contentDocument == undefined) return;
	if (p_frame.contentDocument.document != undefined) return p_frame.contentDocument.document;
	return p_frame.contentDocument;
}

// Read the stuff from the iframes
function loadContent(p_content, p_contentId) {
	if (p_contentId == undefined)
		p_contentId = "loadedPopup";
	/*
	var req;
	if (window.XMLHttpRequest && !(window.ActiveXObject)) {
		try {
			req = new XMLHttpRequest();
			if (req.overrideMimeType != undefined)
				req.overrideMimeType("text/xml");
		} catch (e) {
			// Nothing to return
			return;
		}
	} else if (window.ActiveXObject) {
		try {
			req = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				req = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {
				return;
			}
		}
	}
	if (req == undefined) return;

	req.open("GET", p_content, false);
	req.send("");
	if (req.status != 0)
		return;

	var content;
	try {
		content = req.responseXML.getElementById(p_contentId);
	} catch (e) {
		content = req.responseXML.nodeFromID(p_contentId);
	}
	*/

	var name = p_content.replace(/^.*\/([^\/]*)$/, "$1");
	var iframe = $("__" + name + "__");
	if (iframe == undefined) return;
	var doc = getFrameDocument(iframe);
	var content = doc.getElementById(p_contentId);
	if (content == undefined) return;
	if (content.tagName != 'DIV' && content.tagName != "div") return;
	return content;
}

function isIE() {
	return (/MSIE/.test(navigator.userAgent) && !window.opera);
}

function isSafari() {
	return (/Safari/.test(navigator.userAgent));
}

function getScrollPosition() {
	if (window.scrollY != undefined) {
		return {
			browser : "FF",
			top : window.scrollY,
			left : window.scrollX
		};
	} else
	if (window.pageYOffset != undefined) {
		return {
			browser : "Other",
			top : window.pageYOffset,
			left : window.pageXOffset
		};
	} else
	if (document.documentElement.scrollTop != undefined) {
		return {
			browser : "IE",
			top : document.documentElement.scrollTop,
			left : document.documentElement.scrollLeft
		};
	} else
	if (document.body.scrollTop != undefined) {
		return {
			browser : "IE",
			top : document.body.scrollTop,
			left : document.body.scrollLeft
		};
	}
	throw new Error("Unsupported browser - can't get scroll location");
}

// Show the popup
function showPopup(p_content, p_contentId, p_darken) {
	if (p_darken == undefined) p_darken = true;
	var popupTopOffset = 20;

	function doShowPopup() {
		var content = loadContent(p_content, p_contentId);
		if (content != undefined) {
			var scrollPos = getScrollPosition();
			var popup = $("popup");

			// Now, figure out how tall the popup is, and how tall the body
			// needs to be to accommodate it

			var renderArea = $("renderArea");
			renderArea.innerHTML = content.innerHTML;

			var delta = (scrollPos.top + (2 * popupTopOffset) + renderArea.offsetHeight) - document.body.offsetHeight + $("popupSpacer").offsetHeight;
			if (delta > 0) {
				$("popupSpacer").style.height = delta + "px";
				$("popupSpacer").style.display = "block";
			} else {
				$("popupSpacer").style.display = "none";
			}

			// Fade the background and show the popup
			popup.style.visibility = "visible";
			popup.style.height = document.body.offsetHeight + "px";
			// popup.style.width = document.body.offsetWidth + "px";
			var popupContent = $("popupContent");
			if (!p_darken) {
				new Effect.Appear(popupContent, { duration : 0.250 });
				return false;
			}

			// Set the popup content's vertical position
			popupContent.style.top = (scrollPos.top + popupTopOffset) + "px";

			// First, fade in the dark background
			// Now, fade in the content
			var darken = $("darken");
			if (darken.style.display != "none") {
				var scalePct = (renderArea.offsetHeight / popupContent.offsetHeight) * 100;
				// Stretch out the box
				if (scalePct > 100.0) {
					new Effect.BlindDown(popupContent, {
						scaleFrom : 100.0,
						scaleTo : scalePct,
						duration : 0.250,
						afterFinish : function() {
							popupContent.style.display = "block";
							popupContent.innerHTML = renderArea.innerHTML;
							renderArea.innerHTML = "";
							var cb = $("closeButton");
							if (cb != undefined) cb.style.display = "block";
						}
					});
				} else
				if (scalePct < 100.0) {
					new Effect.BlindUp(popupContent, {
						scaleFrom : 100.0,
						scaleTo : scalePct,
						duration : 0.250,
						afterFinish : function() {
							popupContent.style.display = "block";
							popupContent.innerHTML = renderArea.innerHTML;
							renderArea.innerHTML = "";
							var cb = $("closeButton");
							if (cb != undefined) cb.style.display = "block";
						}
					});
				} else {
					popupContent.innerHTML = renderArea.innerHTML;
					renderArea.innerHTML = "";
					var cb = $("closeButton");
					if (cb != undefined) cb.style.display = "block";
				}
			} else {
				// New popup, darken the BG
				new Effect.Appear(darken, {
					from: 0.0,
					to: 0.30,
					duration: 0.250,
					afterFinish : function() {
						popupContent.innerHTML = content.innerHTML;
						var cb = $("closeButton");
						if (cb != undefined) cb.style.display = "block";
						new Effect.Appear(popupContent, { duration : 0.250 });
					}
				});
			}
		}
		return false;
	}

	doShowPopup();
	return false;
}

function closePopup() {
	// remove the old content and replace with newly loaded stuff
	var popupContent = $("popupContent");
	var darken = $("darken");
	new Effect.Fade(popupContent, {
		duration : 0.250,
		afterFinish : function() {
			popupContent.innerHTML = "";
			new Effect.Fade($("darken"), {
				duration : 0.250,
				afterFinish : function() {
					$("popupSpacer").style.display = "none";
					$("popup").style.visibility = "hidden";
					$("popup").style.height = "1px";
				}
			});
		}
	});
	return false;
}

function switchPopupLink(p_link) {
	closePopup(p_link.href);
	return false;
}

function gridMove(p_count, p_state, p_grid) {
	if (p_count == 0) return false;
	var current = parseInt(p_state.counter.innerHTML);
	var max = parseInt(p_state.total.innerHTML);

	current += p_count;
	if (current < 1) return false;
	if (current > max) return false;

	p_state.counter.innerHTML = current;
	if (current > 1) {
		Element.removeClassName(p_state.ePrev, "leftoff");
		Element.addClassName(p_state.ePrev, "lefton");
	} else {
		Element.removeClassName(p_state.ePrev, "lefton");
		Element.addClassName(p_state.ePrev, "leftoff");
	}
	if (current < max) {
		Element.removeClassName(p_state.eNext, "rightoff");
		Element.addClassName(p_state.eNext, "righton");
	} else {
		Element.removeClassName(p_state.eNext, "righton");
		Element.addClassName(p_state.eNext, "rightoff");
	}
	if ((p_state.ref != undefined) && (p_state.copies != undefined)) {
		for (var i = 0 ; i < p_state.copies.length ; i++) {
			p_state.copies[0].innerHTML = p_state.ref.innerHTML;
		}
	}
	new Effect.Fade(p_grid, { duration: 0.250, afterFinish: function () { new Effect.Appear(p_grid, {duration: 0.250 }); } });
	return false;
}

function gridReset(p_state, p_grid) {
	var current = parseInt(p_state.counter.innerHTML);
	var max = parseInt(p_state.total.innerHTML);

	if (current <= 1) return false;
	current = 1;

	p_state.counter.innerHTML = current;
	Element.removeClassName(p_state.ePrev, "lefton");
	Element.addClassName(p_state.ePrev, "leftoff");
	Element.removeClassName(p_state.eNext, "rightoff");
	Element.addClassName(p_state.eNext, "righton");
	if ((p_state.ref != undefined) && (p_state.copies != undefined)) {
		for (var i = 0 ; i < p_state.copies.length ; i++) {
			p_state.copies[0].innerHTML = p_state.ref.innerHTML;
		}
	}
	new Effect.Fade(p_grid, { duration: 0.250, afterFinish: function () { new Effect.Appear(p_grid, {duration: 0.250 }); } });
	return false;
}

var pagers = {};

function getPager(p_pfx) {
	if (pagers[p_pfx] == undefined) {
		pagers[p_pfx] = {
			ref : $(p_pfx + "TopPager"),
			copies : [$(p_pfx + "BotPager")],
			ePrev : $(p_pfx + "Prev"),
			eNext : $(p_pfx + "Next"),
			counter : $(p_pfx + "Counter"),
			total    : $(p_pfx + "Total")
		};
	}
	return pagers[p_pfx];
}

function pagerMove(p_pfx, p_off, p_grid) {
	return gridMove(p_off, getPager(p_pfx), $(p_grid));
}

function pagerReset(p_pfx, p_grid) {
	return gridReset(getPager(p_pfx), $(p_grid));
}

function ogNext() {
	return pagerMove("og", 1, "scrollerArea");
}

function ogPrev() {
	return pagerMove("og", -1, "scrollerArea");
}

function ogReset() {
	return pagerReset("og", "scrollerArea");
}

function rvNext() {
	return pagerMove("rv", 1, "rvItems");
}

function rvPrev() {
	return pagerMove("rv", -1, "rvItems");
}

function rvReset() {
	return pagerReset("og", "rvItems");
}

function srNext() {
	return pagerMove("sr", 1, "srItems");
}

function srPrev() {
	return pagerMove("sr", -1, "srItems");
}

function srReset() {
	return pagerReset("og", "srItems");
}

function switchGrid() {
	var p_element = $('offerGrid');
	var parent = p_element.parentNode;
	parent.style.height = p_element.offsetHeight + "px";
	new Effect.Fade(p_element, {
		duration: 0.250,
		afterFinish: function () {
			ogReset();
			$("offerFrame").style.height = "";
			hideOGAllOffers(false);
			showOGPager(false);
			new Effect.Appear(p_element, {
				duration: 0.250,
				afterFinish: function() {
					parent.style.height = "";
				}
			});
		}
	});
	return false;
}

function switchGridAndMasthead(p_mastHead) {
	var p_element = $('categoryContent');
	var parent = p_element.parentNode;
	parent.style.height = p_element.offsetHeight + "px";
	new Effect.Fade(p_element, {
		duration: 0.250,
		afterFinish: function () {
			ogReset();
			$("offerFrame").style.height = "";
			hideOGAllOffers(false);
			showOGPager(false);
			// Set the topbanner to point to the right image
			var banner = $('topbanner');
			banner.src = "assets/images/cat_" + p_mastHead + ".jpg";
			// TODO: Set the alt as well
			// banner.alt = "";
			new Effect.Appear(p_element, {
				duration: 0.250,
				afterFinish: function() {
					// Clean out the parent's height so the page sizes
					// automatically
					parent.style.height = "";
				}
			});
		}
	});
	return false;
}

function setSelected(p_leftNav, p_selected) {
	var selectedClass = "selected";
	if (p_selected == undefined) p_selected = true;
	var ol = p_leftNav.parentNode;
	var currentSel = (Element.hasClassName(p_leftNav, "selected") ? p_leftNav : undefined);
	if (currentSel == undefined) {
		for (var i = 0 ; i < ol.childNodes.length ; i++) {
			var li = ol.childNodes[i];
			if (li.tagName != 'LI') continue;
			if (Element.hasClassName(li, "selected")) {
				currentSel = li;
				break;
			}
		}
	}
	if (!p_selected || (p_selected && (currentSel != undefined) && (currentSel != p_leftNav))) {
		// Unselect the previously selected one
		Element.removeClassName(currentSel, selectedClass);
		if (Element.hasClassName(currentSel, "last")) {
			Element.removeClassName(currentSel, "final");
		}
		var ul = currentSel.getElementsByTagName("ul");
		if (ul != undefined && ul.length == 1)
			new Effect.BlindUp(ul[0], {duration: 0.250});
	}
	// Set the category link as active
	{
		var links = p_leftNav.getElementsByTagName("a");
		for (var i = 0 ; i < links.length ; i++) {
			Element.removeClassName(links[i], "active");
		}
		var kids = p_leftNav.childNodes;
		var foundLink = false;
		for (var i = 0 ; i < kids.length ; i++) {
			if (kids[i].tagName == 'A') {
				Element.addClassName(kids[i], "active");
				foundLink = true;
				break;
			}
		}
		if (!foundLink) throw new Error("No category link found - structure is incorrect");
	}
	if (currentSel == p_leftNav) return;
	if (p_selected && (currentSel != p_leftNav)) {
		// Select the newly selected one
		Element.addClassName(p_leftNav, selectedClass);
		if (Element.hasClassName(p_leftNav, "last")) {
			Element.addClassName(p_leftNav, "final");
		}
		// Animate the UL
		var ul = p_leftNav.getElementsByTagName("ul");
		var kids = p_leftNav.childNodes;
		if (kids.length == 0)
		{
		  // don't do any effects if no children
		  placeRecentlyViewed();
		}
		else
		{
		  if (ul != undefined && ul.length == 1) {
			new Effect.BlindDown(ul[0], {
				duration: 0.250,
				afterUpdate : placeRecentlyViewed
			});
		  }
		}
	}
}

function switchCategory(p_navItem) {
	var baseLI = p_navItem.parentNode;
	var wasSelected = Element.hasClassName(p_navItem.parentNode, "selected");
	var wasActive = Element.hasClassName(p_navItem, "active");
	setSelected(baseLI, true);
	
	// REMOVED EI
	//if (wasSelected) {
	//	if (!wasActive) switchGrid();
	//} else {
	//	switchGridAndMasthead(p_navItem.parentNode.id);
	//}
	return false;
}

function switchSubCategory(p_navItem) {
	var baseLI = p_navItem.parentNode;
	var ol = baseLI.parentNode;
	var selectedClass = "active";

	if (Element.hasClassName(p_navItem, "active")) return false;

	// Un-select all links within this category
	{
		var cat = p_navItem.parentNode.parentNode.parentNode;
		var links = cat.getElementsByTagName("a");
		for (var i = 0 ; i < links.length ; i++) {
			Element.removeClassName(links[i], selectedClass);
		}
	}

	// Now, set this link as active
	Element.addClassName(p_navItem, selectedClass);
	// REMOVED EI
	// switchGrid();
	return false;
}

function od_showHowTo() {
	var ht = $("howToList");
	var hl = $("howToUL");
	var htd = $("howToDivider");
	var hti = $("howToImage");

	var l = $("locationList");
	var ll = $("locationUL");
	var ld = $("locationDivider");
	var li = $("locationImage");

	if (hl.style.display == "none") {
		new Effect.Fade(ll, {
			duration: 0.250,
			afterFinish : function() {
				new Effect.BlindUp(l, {
					duration: 0.250,
					afterFinish : function() {
						ld.style.display = "none";
						li.src = "assets/images/od_location_inactive.gif";
					}
				});
				new Effect.BlindDown(ht, {
					duration: 0.250,
					afterFinish : function() {
						htd.style.display = "block";
						hti.src = "assets/images/od_howto_active.gif";
						new Effect.Appear(hl, { duration: 0.250 });
					}
				});
			}
		})
	}
	return false;
}

function od_showLocations() {
	var ht = $("howToList");
	var hl = $("howToUL");
	var htd = $("howToDivider");
	var hti = $("howToImage");

	var l = $("locationList");
	var ll = $("locationUL");
	var ld = $("locationDivider");
	var li = $("locationImage");

	if (l.style.display == "none") {
		new Effect.Fade(hl, {
			duration: 0.250,
			afterFinish : function() {
				new Effect.BlindUp(ht, {
					duration: 0.250,
					afterFinish : function() {
						htd.style.display = "none";
						hti.src = "assets/images/od_howto_inactive.gif";
					}
				});
				new Effect.BlindDown(l, {
					duration: 0.250,
					afterFinish : function() {
						ld.style.display = "block";
						li.src = "assets/images/od_location_active.gif";
						new Effect.Appear(ll, { duration: 0.250 });
					}
				});
			}
		})
	}
	return false;
}

function placeToolTip(p_obj, p_id) {
	var tgt = $(p_id);
	if (tgt != undefined)
	{
    	var pos = findPos(p_obj);
    	tgt.style.top = (pos.top - 53) + "px";
    	tgt.style.left = pos.left - 144 + "px";
	}
	//tgt.style.left = (pos.left - 144 - (isIE() ? 122 : 0)) + "px";
}

function showToolTip(p_obj, p_id) {
	var tgt = $(p_id);
	placeToolTip(p_obj, p_id);
	new Effect.Appear(tgt, { duration: 0.250 });
}

function hideToolTip(p_id) {
	new Effect.Fade($(p_id), { duration: 0.250 });
}

function trim(p_str) {
        if (p_str == undefined) return;
        return p_str.replace(/^\s*(.*)$/, "$1").replace(/\s*$/, "")
}

function validateEmail(p_email) {
	if (p_email == undefined) return false;
	if (p_email.length == 0) return false;
	if (!/^[^@]+@[^@]+\.[^@]+$/.test(p_email)) return false;
	return true;
}

function validateTAF(p_form) {
	var cn = [];
	var error = false;

	// Validate first-name as non-empty
	var fn = trim(p_form.FNAME.value);
	var ln = trim(p_form.LNAME.value);
	var em = trim(p_form.email.value);
	var friends = [
		trim(p_form.friend1.value),
		trim(p_form.friend2.value),
		trim(p_form.friend3.value),
		trim(p_form.friend4.value),
		trim(p_form.friend5.value)
	];

	if (fn.length == 0) {
		p_form.className = "error_FNAME";
		return false;
	}

	if (ln.length == 0) {
		p_form.className = "error_LNAME";
		return false;
	}

	if ((em.length == 0) || !validateEmail(em)) {
		p_form.className = "error_email";
		return false;
	}

	var friendCount = 0;
	var friendError = false;
	for (var i = 0 ; i < friends.length ; i++) {
		if (friends[i].length == 0) continue;
		if (validateEmail(friends[i])) {
			friendCount++;
			continue;
		}
		p_form.className = "showError";
		return false;
	}

	if ((friendCount == 0) && !friendError) {
		p_form.className = "showError";
		return false;
	}

	// Do the actual submit, etc...
	return showPopup("tellAFriend_thank_you.html");
}

function validateRO(p_form) {
	var cn = [];
	var error = false;

	// Validate first-name as non-empty
	var fn = trim(p_form.FNAME.value);
	var ln = trim(p_form.LNAME.value);
	var em = trim(p_form.email.value);

	if (fn.length == 0) {
		p_form.className = "error_FNAME";
		return false;
	}

	if (ln.length == 0) {
		p_form.className = "error_LNAME";
		return false;
	}

	if ((em.length == 0) || !validateEmail(em)) {
		p_form.className = "error_email";
		return false;
	}

	// Do the actual submit, etc...
	return showPopup("getOfferDetailsEmail_thankYou.html");
}

function validateRV(p_form) {
	var cn = [];
	var error = false;

	// Validate first-name as non-empty
	var fn = trim(p_form.FNAME.value);
	if (fn.length == 0) {
		p_form.className = "error_FNAME";
		return false;
	}

	var ln = trim(p_form.LNAME.value);
	if (ln.length == 0) {
		p_form.className = "error_LNAME";
		return false;
	}

	var em = trim(p_form.email.value);
	if ((em.length == 0) || !validateEmail(em)) {
		p_form.className = "error_email";
		return false;
	}

	// Do the actual submit, etc...
	return showPopup("recentlyViewedThankYou.html");
}

function showWindow(p_url) {
	window.open(p_url, "_blank", "width=600,menubar=0,resizable=0,scrollbars=1,status=0,titlebar=1");
	return false;
}

function switchRVGrid() {
	var p_element = $('rvItems');
	new Effect.Fade(p_element, { duration: 0.250, afterFinish: function () { new Effect.Appear(p_element, {duration: 0.250 }); } });
	return false;
}

function findPos(obj) {
	var curleft = 0;
	var curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft;
		curtop = obj.offsetTop;
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		}
	}
	return {
		left : curleft,
		top  : curtop
	};
}

function scrollHandler() {
	placeRecentlyViewed();
}

function loadHandler() {
	placeRecentlyViewed();
	replaceDDLs();
	hideSubmits();
}

function placeRecentlyViewed() {
	if ($("recentlyViewed") != null)
	{	
	var rv = $("recentlyViewed");
	var ln = $("leftNav");
	var rvPos = findPos(rv);
	var lnPos = findPos(ln);

	// Calculate where the "top barrier" is, so we don't position
	// the element closer to the top than that
	var barrier = lnPos.top + ln.offsetHeight;

	// Detect the browser's current vertical position, and
	// calculate the position that the element must be shown in
	var scrollPos = getScrollPosition();
	var scrollY = scrollPos.top;
	if (scrollPos.browser == "FF") {
		// Reduce the bottom margin for the leftnav from the scroll position
		// for Firefox
		// TODO: Find a way to softcode this
		// scrollY -= 50;
	} else
	if (scrollPos.browser == "IE") {
		scrollY += 72;
		barrier += 78;
	}

	rv.style.position = "absolute";
	rv.style.top = Math.max(scrollY, barrier) + "px";
	// rv.style.width = (ln.offsetWidth - 8) + "px";
	placeToolTip($("emailIcon"), "emailMsg");
	}
}

var DDL = [];
function getDDL(p_id) {
	if (DDL[p_id] == undefined) {
		var element = $(p_id);
		if (element == undefined) return;
		DDL[p_id] = {
			element : element,
			isOpen : false,
			mouseOver : false,
			clocked : false
		};
	}
	return DDL[p_id];
}

function openDDL(p_id) {
	var ddl = getDDL(p_id);
	if (ddl.clicked == true) return;
	ddl.mouseOver = true;
	if (ddl.isOpen == true) return;
	if (ddl.opener != undefined) return;
	ddl.opener = new Effect.Appear(ddl.element, {
		duration : 0.250,
		delay : 0.500,
		afterFinish : function() {
			ddl.isOpen = true;
			ddl.opener = undefined;
			if (!ddl.mouseOver) closeDDL(p_id);
		}
	});
}

function closeDDL(p_id, p_delay) {
	var ddl = getDDL(p_id);
	if (ddl.clicked == true) return;
	ddl.mouseOver = false;
	if (ddl.isOpen == false) return;
	if (ddl.closer != undefined) return;
	ddl.closer = new Effect.Fade(ddl.element, {
		duration : 0.250,
		delay : 0.250,
		beforeUpdate : function(effect) {
			if (ddl.mouseOver) {
				ddl.closer.cancel();
				new Effect.Appear(ddl.element, { duration : 0.100 });
				ddl.closer = undefined;
			}
		},
		afterFinish : function() {
			ddl.isOpen = false;
			ddl.closer = undefined;
			if (ddl.mouseOver) openDDL(p_id);
		}
	});
}

function terminateDDL(p_id) {
	var ddl = getDDL(p_id);
	if (ddl.isOpen == false) return;
	if (ddl.clicked == true) return;
	ddl.clicked = true;
	if (ddl.closer != undefined) {
		ddl.closer.cancel();
	}
	ddl.closer = new Effect.Fade(ddl.element, {
		duration : 0.250,
		afterFinish : function(effect) {
			ddl.isOpen = false;
			ddl.clicked = false;
			ddl.mouseOver = false;
			ddl.closer = undefined;
		}
	});
}

function hideSubmits() {
	var e = document.body.getElementsByTagName("input");
	if (e == undefined) return;
	for (var i = 0 ; i < e.length ; i++) {
		if (!Element.hasClassName(e[i], "hide")) continue;
		e[i].style.visibility = "hidden";
	}
}

function replaceDDLs() {
	var selects = document.body.getElementsByTagName("select");
	if (selects == undefined) return;
	for (var i = 0 ; i < selects.length ; i++) {
		if (!Element.hasClassName(selects[i], "replace")) continue;
		var sel = selects[i];
		if (sel.id == undefined) continue;
		var ddl = $("ddl_" + sel.id);
		if (ddl == undefined) continue;
		var pos = findPos(sel);

		ddl.style.position = "absolute";
		ddl.style.top = (pos.top - (isIE() ? 0 : 1)) + "px";
		ddl.style.left = pos.left + "px";
		ddl.style.width = sel.offsetWidth + "px";
		sel.style.visibility = "hidden";
		ddl.style.display = "block";
	}
}

function chooseCountry(p_link) {
	var parent = p_link.parentNode;
	if (Element.hasClassName(parent, "selected")) return false;

	var countries = $("countries");
	if (countries == undefined) return false;
	var nodes = countries.getElementsByTagName('LI');
	if (nodes == undefined) return false;
	for (var i = 0 ; i < nodes.length ; i++) {
		var li = nodes[i];
		if (li.tagName != 'LI') continue;
		if (Element.hasClassName(li, "selected")) {
			currentSel = li;
			break;
		}
	}
	if (currentSel != undefined) Element.removeClassName(currentSel, "selected");
	Element.addClassName(parent, "selected");
	$("countryName").innerHTML = p_link.innerHTML;
	terminateDDL('countries');
	showPopup("switchingLanguageWarning.html");
	return false;
}

function chooseCity(p_link) {
	var parent = p_link.parentNode;
	if (Element.hasClassName(parent, "selected")) return false;

	var currentSel;
	var ul = parent.parentNode;
	for (var i = 0 ; i < ul.childNodes.length ; i++) {
		var li = ul.childNodes[i];
		if (li.tagName != 'LI') continue;
		if (Element.hasClassName(li, "selected")) {
			currentSel = li;
			break;
		}
	}
	if (currentSel != undefined) Element.removeClassName(currentSel, "selected");
	Element.addClassName(parent, "selected");
	$("cityName").innerHTML = p_link.innerHTML;
	terminateDDL('cities');
	return false;
}

function chooseLanguage(p_link) {
	var parent = p_link.parentNode;
	if (Element.hasClassName(parent, "selected")) return false;
	terminateDDL('languages');
	var currentSel;
	var ul = parent.parentNode;
	for (var i = 0 ; i < ul.childNodes.length ; i++) {
		var li = ul.childNodes[i];
		if (li.tagName != 'LI') continue;
		if (Element.hasClassName(li, "selected")) {
			currentSel = li;
			break;
		}
	}
	if (currentSel != undefined) Element.removeClassName(currentSel, "selected");
	Element.addClassName(parent, "selected");
	$("languageName").innerHTML = p_link.innerHTML;
	return false;
}

function showOGAllOffers(p_anim, p_afterFinishTop, p_afterFinishBot) {
	if (p_anim === false) {
		$("ogTopAllOffers").style.display = "block";
		if (p_afterFinishTop != undefined) p_afterFinishTop();
		$("ogBotAllOffers").style.display = "block";
		if (p_afterFinishBot != undefined) p_afterFinishBot();
		return;
	}

	new Effect.Appear($("ogTopAllOffers"), { duration : 0.250, afterFinish : p_afterFinishTop });
	new Effect.Appear($("ogBotAllOffers"), { duration : 0.250, afterFinish : p_afterFinishBot });
}

function hideOGAllOffers(p_anim, p_afterFinishTop, p_afterFinishBot) {
	if (p_anim === false) {
		$("ogTopAllOffers").style.display = "none";
		if (p_afterFinishTop != undefined) p_afterFinishTop();
		$("ogBotAllOffers").style.display = "none";
		if (p_afterFinishBot != undefined) p_afterFinishBot();
		return;
	}

	new Effect.Fade($("ogTopAllOffers"), { duration : 0.250, afterFinish : p_afterFinishTop });
	new Effect.Fade($("ogBotAllOffers"), { duration : 0.250, afterFinish : p_afterFinishBot });
}

function showOGPager(p_anim, p_afterFinishTop, p_afterFinishBot) {
	if (p_anim === false) {
		$("ogTopPager").style.display = "block";
		if (p_afterFinishTop != undefined) p_afterFinishTop();
		$("ogBotPager").style.display = "block";
		if (p_afterFinishBot != undefined) p_afterFinishBot();
		return;
	}
	new Effect.Appear($("ogTopPager"), { duration : 0.250, afterFinish : p_afterFinishTop });
	new Effect.Appear($("ogBotPager"), { duration : 0.250, afterFinish : p_afterFinishBot });
}

function hideOGPager(p_anim, p_afterFinishTop, p_afterFinishBot) {
	if (p_anim === false) {
		$("ogTopPager").style.display = "none";
		if (p_afterFinishTop != undefined) p_afterFinishTop();
		$("ogBotPager").style.display = "none";
		if (p_afterFinishBot != undefined) p_afterFinishBot();
		return;
	}
	new Effect.Fade($("ogTopPager"), { duration : 0.250, afterFinish : p_afterFinishTop });
	new Effect.Fade($("ogBotPager"), { duration : 0.250, afterFinish : p_afterFinishBot });
}

function expandGrid() {
	var og = $("offerFrame");
	var th = og.offsetHeight;
	if (og.__trueHeight == undefined)
		og.__trueHeight = th;
	var max = $("scrollerArea").offsetHeight;
	if (max <= th) return false;

	var pct = (max / th) * 100;
	var anim = (!isSafari());
	hideOGPager(anim);
	new Effect.BlindDown(og, {
		scaleFrom : 100.0,
		scaleTo : pct,
		duration : 1,
		afterFinish : function() {
			og.style.height = max + "px";
			og.style.display = "block";
			showOGAllOffers(anim);
		}
	});
	return false;
}

function shrinkGrid() {
	var og = $("offerFrame");
	if (og.__trueHeight == undefined)
		throw new Error("Grid can't start expanded (not supported yet)");
	var th = og.__trueHeight;
	var max = $("scrollerArea").offsetHeight;
	if (th >= max) return false;

	var pct = (th / max) * 100;
	var anim = (!isSafari());
	hideOGAllOffers(anim);
	new Effect.BlindUp(og, {
		scaleFrom : 100.0,
		scaleTo : pct,
		duration : 1,
		afterFinish : function() {
			og.style.height = th + "px";
			og.style.display = "block";
			showOGPager(anim);
		}
	});
	return false;
}

function getWindowSize(p_window) {
	if (p_window == undefined)
		p_window = window;

	var ret = {
		width : 0,
		height : 0
	};

	if (window.innerWidth != undefined ) {
		ret.width = window.innerWidth;
		ret.height = window.innerHeight;
	} else
	if (document.documentElement != undefined && document.documentElement.clientWidth != undefined) {
		ret.width = document.documentElement.clientWidth;
		ret.height = document.documentElement.clientHeight;
	} else
	if (document.body != undefined && document.body.clientWidth != undefined) {
		ret.width = document.body.clientWidth;
		ret.height = document.body.clientHeight;
	}
	return ret;
}

function openInstructions(p_link) {
	var w = 505 + (isIE() ? 20 : 0);
	var h = 295 + (isIE() ? 10 : 0);
	window.open(p_link.href, p_link.target, "width=" + w + ",height=" + h + ",menubar=0,resizable=0,scrollbars=0,status=0,titlebar=1");
	return false;
}

function setSortOrder(p_link) {
	if (p_link == undefined) return false;
	if (Element.hasClassName(p_link, "sortActive")) return false;
	var ul = p_link.parentNode.parentNode;
	var links = ul.getElementsByTagName("a");
	for (var i = 0 ; i < links.length ; i++) {
		Element.removeClassName(links[i], "sortActive");
	}
	Element.addClassName(p_link, "sortActive");
	return false;
}

window.onscroll = scrollHandler;
window.onload = loadHandler;
