// Constants
var I_QUA_HEIGHT		= 56;	// Quick URL Access height
var I_QUA_INTERVAL	= 20;	// Quick URL Access sliding interval
var I_QUA_CHANGE		= 10;	// Quick URL Access sliding increment

var I_TAGS_INTERVAL 	= 50;	// Tags list slising interval
var I_TAGS_GRATE    	= 1.5;// Tags list sliding increment

var I_TIME_TO_CLOSE_FILTER_MENU = 2000;	// Time in miliseconds to wait before automatically closing the types filter menu

var I_USER_STATS_UPDATE_RATE = 120000;	// Time to wait before updating the user's stats in User.asp
var I_HOMEPAGE_SHOWCASE_INTERVAL = 7000;	// Time between sites in the Index Showcase

var I_WIZARD_HEIGHT = 580;
var I_WIZARD_WIDTH = 830;

var WIZARD_NEW_GRAZE = 1;
var WIZARD_EDIT_GRAZE = 2;
var WIZARD_SPREAD_GRAZE = 3;

// Global Variables
var oQuickUrl = null;
var bRequestingQUA = false;
var aQUAResultsCache = new Array();
var oQUAxmlHttp = null;
var oQUASelectedItem = null;

var vCloseFilter = "";
var iProfileCurrentMessage = 1;

var bSliding = false;
var oActiveSlider = null;

var iShowcaseCurrent = 1;
var oShowcaseInterval = null;

var searchWordsStr = "";

$(window).addEvent("domready", domReady);
function domReady()
{
	fixBorderPosition();

	oQuickUrl = $("QuickUrlAccess");

	if (oQuickUrl)
		oQuickUrl.style.top = "-" + I_QUA_HEIGHT + "px";

	$$("object").each(function(oE)
	{
		oE.outerHTML = oE.outerHTML;
	});

	$$(".abuse").each(function(oE){ switchClass(oE, "abuseover"); });

	$$(".FilterMenuButton").each(function(oE){ switchClass(oE, "FilterMenuButtonHover"); });

	$$(".graze[class!=CommentsTitle]").each(function(oE){ switchClass(oE, "grazehover"); });

	$$(".graze .left .thumb").each(function(oE){ switchClass(oE, "thumbover"); });

	var aShowcaseSites = $$(".Showcase .Site");
	for(var i=1; i<aShowcaseSites.length; i++)
	{
		aShowcaseSites[i].fade("in");
		aShowcaseSites[i].fade("out");
	}

	$$(".tabs li a").each(function(oE)
	{
		var oTopLeft = new Element("span", {
			"class": "topleft",
			"html": "&#160;"});
		var oTopRight = new Element("span", {
			"class": "topright",
			"html": "&#160;"});

		oE.appendChild(oTopLeft);
		oE.appendChild(oTopRight);
	});


	var aSliders = $$(".slider");
	if(aSliders.length > 0)
	{
		aSliders.each(function(oE)
		{
			oE.onmousemove = function(e){ slide(e || event, this); }
			oE.onselectstart = function(e){ return false; }
			oE.style.MozUserSelect = "none";
			oE.getElements(".sig").each(function(oES)
			{
				oES.sIndex = iS+1;
				oES.onmousedown = function(e){ sliderJump(this); startSliding(this.parentNode); }
				oES.onselectstart = function(e){ return false; }
			});
		});
		$(document).addEvent("mouseup", function(e){ sliderJump(); });

		window.setInterval(updateUserStats, I_USER_STATS_UPDATE_RATE);
	}

	if ($("Footer"))
		$("Footer").style.display = "block";

	if(searchWordsStr != "")
	{
		doHighlightPage(searchWordsStr);
	}

	resetShowcasePaging();
}

function doHighlightPage(searchWordsStr)
{
	if($("the_page_title"))
	{
		highlightSearchWords(searchWordsStr,$("the_page_title"));
	}
	var aGrazeTitles = $$(".graze .content h1 a");
	for(var i=0; i<aGrazeTitles.length; i++)
	{
		highlightSearchWords(searchWordsStr,aGrazeTitles[i]);
	}
	var aGrazeDesc = $$(".graze .content .description");
	for(var i=0; i<aGrazeDesc.length; i++)
	{
		highlightSearchWords(searchWordsStr,aGrazeDesc[i]);
	}
	var aGrazeTags = $$(".graze .bottom .tags a");
	for(var i=0; i<aGrazeTags.length; i++)
	{
		highlightSearchWords(searchWordsStr,aGrazeTags[i]);
	}

}

function switchClass(oE, sOver)
{
	oE.addEvent("mouseover", function(){ this.addClass(sOver); });
	oE.addEvent("mouseout", function(){ this.removeClass(sOver); });
}

document.onclick = function(e)
{
	if ($("QUAResults"))
		$("QUAResults").style.display = "none";
}

function attachEnterEvent(oInput, refFunction)
{
	if (oInput)
	{
		oInput.refFunction = refFunction;
		oInput.onkeyup = function(e){
							var e = e || event;
							if (e.keyCode == 13)
								this.refFunction();
							}
	}
}

function showHide(oObject)
{
	oObject = $(oObject);
	oObject.style.display = (oObject.offsetHeight > 0)? "none" : "block";
	return (oObject.offsetHeight > 0);
}

function hideFirstVisit()
{
	var xmlHttp = new createXMLHttpRequest();
	xmlHttp.open("GET", "/server/s_fvisit_hide.asp?seed=" + Math.random(), true);
	xmlHttp.onreadystatechange = function()
	{
		if (xmlHttp.readyState == 4)
		{
			if (xmlHttp.status == 200)
			{
				$("fvisit").style.display = "none";
			}
		}
	}
	xmlHttp.send("");
}

function loadFirstVisit(type,q,url,plug_ver,frame_type)
{
	var xmlHttp = new createXMLHttpRequest();
	xmlHttp.open("GET", "/includes/fvisit_text.asp?v=1&type="+type+"&q="+q+"&url="+url+"&ver="+plug_ver+"&frame_type="+frame_type+"&seed=" + Math.random(), true);
	xmlHttp.onreadystatechange = function()
	{
		if (xmlHttp.readyState == 4)
		{
			if (xmlHttp.status == 200)
			{
				$("fvisit").innerHTML = xmlHttp.responseText;
			}
		}
	}
	xmlHttp.send("");
}

function showHideUserStats(oObject, oTitle)
{
	$(oTitle).className = (showHide(oObject))? "" : "closed" ;
}

function fixBorderPosition()
{
	if ($("Middle"))
	{
		var iContentHeight = $("Middle").offsetHeight;
		var iWindowHeight = window.innerHeight;

		var iHeaderAndFooterHeight = $("Header").offsetHeight + $("Footer").offsetHeight;

		if(!iWindowHeight)
			iWindowHeight = document.documentElement.clientHeight;

		if(iWindowHeight - iHeaderAndFooterHeight - 40 > iContentHeight)
		{
			$("Middle").style.paddingBottom = (iWindowHeight - iHeaderAndFooterHeight - 40 - iContentHeight) + "px";
			$("Footer").style.display = "block";
		}
	}
}

function hideIntroText()
{
	$("WelcomeContent").style.display = "none";
}

function hideSearchText(oInput, sText)
{
	if(oInput.value == sText)
	{
		oInput.value = "";
		oInput.style.color = "#000000";
	}
	else
	{
		if(oInput.value == "")
		{
			oInput.value = sText;
			oInput.style.color = "#999";
		}
	}
}

// This function calls starts the scrolling
function slideQuickUrl()
{
	if($defined(oQuickUrl))
	{
		oQuickUrl.slideMargin = oQuickUrl.style.top.replace("px","")*1;
		scrollQuickAccess((oQuickUrl.slideMargin == -I_QUA_HEIGHT));

		$("QUAResults").style.display = "none";
		$("txtQUA").value = "";
		hideSearchText($("txtQUA"), "http://www.example.com/");
	}
}

// This function does the actual sliding using the "top" style property.
// padding-top is also applied to the <body> in order to push the page's content
function scrollQuickAccess(isShowing)
{
	if (isShowing)
	{
		if (oQuickUrl.slideMargin + I_QUA_CHANGE < 0)
		{
			oQuickUrl.slideMargin += I_QUA_CHANGE;
			window.setTimeout(function(){ scrollQuickAccess(isShowing); }, I_QUA_INTERVAL);
		}
		else
		{
			oQuickUrl.slideMargin = 0;
			$("txtQUA").focus();
		}
	}
	else
	{
		if (oQuickUrl.slideMargin - I_QUA_CHANGE > -I_QUA_HEIGHT)
		{
			oQuickUrl.slideMargin -= I_QUA_CHANGE;
			window.setTimeout(function(){ scrollQuickAccess(isShowing); }, I_QUA_INTERVAL);
		}
		else
		{
			oQuickUrl.slideMargin = -I_QUA_HEIGHT;
		}
	}

	oQuickUrl.style.top = oQuickUrl.slideMargin + "px";
	$("FooterBackground").style.marginTop = I_QUA_HEIGHT + oQuickUrl.slideMargin + "px";
}

function openAbuseMenu(oCaller, iGrazeId, user_id, iSpreadId)
{
	var bCreate = true;
	if ($defined($("AbuseWindow")))
	{
		if ($("AbuseWindow").oParent == oCaller)
			bCreate = false;

		actualAbuseMenuRemove();
		oCaller.removeClass("abuseopen");
	}

	if(bCreate)
	{
		oCaller.addClass("abuseopen");
		var oAbuse = document.createElement("div");

		oAbuse.id = "AbuseWindow";
		oAbuse.oParent = oCaller;

		oCaller.onmouseout = null;
		oAbuse.onmouseover = function(){ this.oParent.addClass("abuseopen"); }

		oAbuse.innerHTML = "<ul>" +
						"<li onclick=\"reportAbuse(2, " + user_id + ", " + iSpreadId + ", " + iGrazeId + ");\">Spam</li>" +
						"<li onclick=\"reportAbuse(1, " + user_id + ", " + iSpreadId + ", " + iGrazeId + ");\">Irrelevant</li>" +
						"<li onclick=\"reportAbuse(3, " + user_id + ", " + iSpreadId + ", " + iGrazeId + ");\">Offensive</li>" +
						"<li onclick=\"openAbuseOther();\">Other...</li>" +
					"</ul>" +
					"<div class=\"other\">" +
						"<textarea onclick=\"selectText(this, 'What made you upset?');\">What made you upset?</textarea>" +
						"<div>" +
							"<img src=\"/images/b_smallform_ok.gif\" onclick=\"reportAbuse(4, " + user_id + ", " + iSpreadId + ", " + iGrazeId + ",this.parentNode.parentNode.getElementsByTagName('textarea')[0]);\" alt=\"Report\" />" +
							"<img src=\"/images/b_smallform_cancel.gif\" onclick=\"actualAbuseMenuRemove();\" alt=\"Don't Report\" />" +
						"</div>" +
					"</div>" +
					"<div class=\"fixtopborder\">&#160;</div>";

		document.body.appendChild(oAbuse);

		oAbuse.style.top = oCaller.getTop() + oCaller.offsetHeight - 1 + "px";
		oAbuse.style.left = oCaller.getLeft() + oCaller.offsetWidth - oAbuse.offsetWidth + "px";

		$$("#AbuseWindow li").each(function(oE){ switchClass(oE, "abuseactionover"); });

		window.setTimeout(function(){ $("FooterBackground").onclick = removeAbuseMenu; }, 50);
	}
}

function selectText(oText, sText)
{
	if(oText.value ==  sText || oText.innerText == sText)
	{
		oText.focus();
		oText.select();
	}
}

function removeAbuseMenu(e, bForce)
{
	var aElements = $("AbuseWindow").getElementsByTagName("*");
	var bRemove = true;
	var e = e || event;

	if(!bForce)
	{
		for(var i=0; i<aElements.length; i++)
			if(aElements[i] == e.srcElement)
				bRemove = false;
	}

	if(bRemove)
	{
		if($$("#AbuseWindow .other")[0].style.display != "block" || e.srcElement.alt == "Don't Report")
			actualAbuseMenuRemove();
	}
}

function actualAbuseMenuRemove()
{
	$("AbuseWindow").oParent.removeClass("abuseover");
	$("AbuseWindow").oParent.removeClass("abuseopen");
	$("AbuseWindow").oParent.onmouseout = function(){ this.removeClass("abuseopen"); this.removeClass("abuseover"); }
	$("AbuseWindow").destroy();
	$("FooterBackground").onclick = null;
}

function openAbuseOther()
{
	$$("#AbuseWindow ul")[0].style.display = "none";
	$$("#AbuseWindow .other")[0].style.display = "block";
	selectText($$("#AbuseWindow .other textarea")[0], "What made you upset?");
}

function toggleMoreTags()
{
	var oTags = $("HiddenTags");

	$("MoreTagsButton").innerHTML = (oTags.offsetHeight == 0)? "Less..." : "More..." ;
	slideMoreTags(oTags, (oTags.offsetHeight == 0), 4);
}

function slideMoreTags(oTags, isShowing, it)
{
	if (isShowing)
	{
		if (oTags.offsetHeight + it < oTags.scrollHeight)
		{
			oTags.style.height = (oTags.offsetHeight + it) + "px";
			window.setTimeout(function(){ slideMoreTags(oTags, isShowing, it*I_TAGS_GRATE); }, I_TAGS_INTERVAL);
		}
		else
		{
			oTags.style.height = oTags.scrollHeight + "px";
		}
	}
	else
	{
		if (oTags.offsetHeight - it > 0)
		{
			oTags.style.height = (oTags.offsetHeight - it) + "px";
			window.setTimeout(function(){ slideMoreTags(oTags, isShowing, it*I_TAGS_GRATE); }, I_TAGS_INTERVAL);
		}
		else
		{
			oTags.style.height = "0";
		}
	}
}

function reportAbuse(abuse_type, user_id, iSpreadId, iGrazeId, oReportText)
{
	var report_text;
	if(oReportText != undefined)
	{
		if(oReportText.value != undefined)
			report_text = oReportText.value;
		else
			report_text = oReportText.innerText;
	}

	var strURLWithParams = "/server/s_report_abuse.asp?abuse_type="+abuse_type+"&user_id="+user_id+"&spread_id="+iSpreadId+"&graze_id="+iGrazeId+"&report_text="+report_text;
	var ret = SyncHTTPRequest(strURLWithParams);

	if (ret == "report_text_html")
	{
		alert("Reporting text cannot contain HTML tags");
		return false;
	}
	var oAbuseParent = $("AbuseWindow").oParent;
	oAbuseParent.innerHTML = "<b>!</b>  Reported. Thanks.";
	oAbuseParent.onclick = null;
	oAbuseParent.onmouseover = null;
	oAbuseParent.onmouseout = null;
	oAbuseParent.style.cursor = "text";
	oAbuseParent.style.fontWeight = "normal";

	actualAbuseMenuRemove();
}

function canDelete(graze_id)
{
	var strURLWithParams = "/server/s_delete_graze_check.asp?graze_id="+graze_id
	var ret = SyncHTTPRequest(strURLWithParams);
	if (ret == "0")
		return true;

	return false;
}

function restoreGraze(graze_id)
{
	var strURLWithParams = "/server/s_graze_restore.asp?gid="+graze_id;
	SyncHTTPRequest(strURLWithParams);

	var oGraze = $("graze_" + graze_id);
	oGraze.removeClass("deletedgraze");
}

function deleteGraze(graze_id, bdelete)
{
	//other users spread this graze as well - it cannot be deleted, only unspread in all of user's spreads!
	if (!bdelete)
	{
		strURLWithParams = "/server/s_delete_graze.asp?graze_id="+graze_id
	}
	else
	{
		strURLWithParams = "/server/s_delete_graze.asp?delete_graze=yes&graze_id="+graze_id
	}
	SyncHTTPRequest(strURLWithParams);

	var oGraze = $("graze_" + graze_id);
	slideDeleteGraze(oGraze, oGraze.offsetHeight - 10);
}

function unspreadGraze(graze_id, iSpreadId, retURL)
{
	var ret = SyncHTTPRequest("/server/s_delete_spread.asp?spread_id="+iSpreadId)
	if (ret == "ok")
	{
		closeLightBox();
		if (retURL)
		{
			window.location = retURL;
		}
		else
		{
			//erase the graze from page
			var oGraze = $("graze_"+graze_id);
			if (oGraze)
			{
				slideDeleteGraze(oGraze, oGraze.offsetHeight - 10);
			}
		}
	}
}

function slideDeleteGraze(oGraze, iHeight)
{
	oGraze.style.overflow = "hidden";
	if (iHeight > 0)
	{
		oGraze.style.height = iHeight + "px";
		window.setTimeout(function() { slideDeleteGraze(oGraze, iHeight-10); }, 25);
	}
	else
	{
		oGraze.style.display = "none";
	}
}

function scrollQUAResults(e)
{
	var iKey = e.keyCode;
	var aResults = $$("#QUAResults a");
	if ((iKey == 38 || iKey == 40) && aResults.length > 0)
	{
		if (oQUASelectedItem == null)
		{
			oQUASelectedItem = (iKey == 38)? aResults[aResults.length - 1] : aResults[0] ;
		}
		else
		{
			oQUASelectedItem.removeClass("selected");
			oQUASelectedItem = (iKey == 38)? oQUASelectedItem.getPrevious() : oQUASelectedItem.getNext() ;

			if (oQUASelectedItem == null)
				oQUASelectedItem = (iKey == 38)? aResults[aResults.length - 1] : aResults[0] ;
		}

		oQUASelectedItem.addClass("selected");

		return false;
	}

	if (iKey == 13 && oQUASelectedItem != null)
	{
		window.location = oQUASelectedItem.href;
		return false;
	}
}

function loadQUAResults(e, sValue)
{
	var iKey = e.keyCode;
	if (iKey == 18 || iKey == 17 || iKey == 37 || iKey == 39 || iKey == 16 || iKey == 38 || iKey == 40)
		return false;

	var sQuery = sValue.toLowerCase();
	if(sQuery.indexOf("htt") == 0)
	{
		if(sQuery.indexOf("//") == -1)
			sQuery = "";
		else
			sQuery = sQuery.substring(sQuery.indexOf("//") + 2);
	}

	if(sQuery.indexOf("www") == 0)
	{
		if(sQuery.indexOf("w.") == -1)
			sQuery = "";
		else
			sQuery = sQuery.substring(4);
	}

	if(sQuery.length >= 3)
	{
		$("QUAResults").style.height = "";

		if(bRequestingQUA)
		{
			oQUAxmlHttp.abort();
			oQUAxmlHttp = null;
			bRequestingQUA = false;
		}

		var sResultsHTML = "";

		if(aQUAResultsCache[sQuery] != undefined)
		{
			$("QUAResults").innerHTML = aQUAResultsCache[sQuery];
			$("QUAResults").style.display = "block";

			var aResults = $$("#QUAResults a");
			if (aResults.length > 0)
			{
				oQUASelectedItem = aResults[0];
				oQUASelectedItem.addClass("selected");
			}
			else
			{
				//$("QUAResults").style.height = "24px";
			}
		}
		else
		{
			bRequestingQUA = true;
			oQUAxmlHttp = new createXMLHttpRequest();

			$("QUAResults").style.display = "block";
			//$("QUAResults").style.height = "24px";
			$("QUAResults").innerHTML = '<div class="loading">Loading...</div>';

			oQUAxmlHttp.open("GET", "/server/s_url_lookup.asp?url=" + encodeURI(sQuery) + "&seed=" + Math.random(), true);
			oQUAxmlHttp.onreadystatechange = function()
			{
				if (oQUAxmlHttp.readyState == 4 && oQUAxmlHttp != null)
				{
					if (oQUAxmlHttp.status == 200)
					{
						$("QUAResults").style.height = "";
						var oXml = oQUAxmlHttp.responseXML;
						var aUrls = oXml.getElementsByTagName("page");

						if(aUrls.length != 0)
						{
							for(var i=0; i<aUrls.length; i++)
							{
								var oE = aUrls[i];

								var iPages = (oE.getElementsByTagName("grazeit_url")[0]).getAttribute("graze_count");
								var sS = (iPages == 1)? "" : "s";
								sResultsHTML +=	"<a href=\"" + getNodeValue(oE, "grazeit_url") + "\" title=\"" + getNodeValue(oE, "complete_orig_url ") + "\">" +
												"<span>" + iPages + " graze" + sS + "</span>" +
												getNodeValue(oE, "orig_url").replace(sQuery, "<b>" + sQuery + "</b>") +
											"</a>";
							}
						}
						else
						{
							$("QUAResults").style.height = "24px";
							sResultsHTML = '<div class="noresults"><img src="/images/wizard/wizard-customize-error.gif" /> No web pages containing grazes match "<b>' + sQuery + '</b>"</div>';
						}

						$("QUAResults").innerHTML = sResultsHTML;

						var aResults = $$("#QUAResults a");
						if (aResults.length > 0)
						{
							oQUASelectedItem = aResults[0];
							oQUASelectedItem.addClass("selected");
						}

						aQUAResultsCache[sQuery] = sResultsHTML;
						bRequestingQUA = false;
					}
				}
			}
			oQUAxmlHttp.send("");
		}
	}
	else
	{
		$("QUAResults").style.display = "none";
	}
}

function createXMLHttpRequest()
{
    try
    {
        return new XMLHttpRequest();
    }catch(e){}

    var aTypes = new Array('Microsoft.XMLHTTP','MSXML2.XMLHTTP.5.0','MSXML2.XMLHTTP.4.0','MSXML2.XMLHTTP.3.0','MSXML2.XMLHTTP');

    for (var i = 0; i < aTypes.length; i++)
    {
        try
        {
            return new ActiveXObject(aTypes[i]);
        }catch(e){}
    }

    return false;
}

function SyncHTTPRequest(strURLWithParams, isXml)
{
	var oXMLHttp = new createXMLHttpRequest();
	oXMLHttp.open("GET", encodeURI(strURLWithParams), false);
	oXMLHttp.send("");

	if(isXml)
		return oXMLHttp.responseXML;
	else
		return oXMLHttp.responseText;
}

function getNodeValue(oFather,nameOfNode)
{
    var oNode = oFather.getElementsByTagName(nameOfNode);

    if(oNode.length > 0)
    {
        oNode = oNode[0];
        if(oNode.hasChildNodes())
            return oNode.firstChild.nodeValue;
    }

    return "";
}

function validate_username(username_txtbox)
{
	return (/^[a-zA-Z0-9_]+$/).test(username_txtbox.value);
}

function validate_password(pass_txtbox)
{
	return (/^[a-zA-Z0-9_@.!]+$/).test(pass_txtbox.value);
}

function validate_email(email_txtbox)
{
	return validate_email_val(email_txtbox.value);
}

function validate_email_val(email)
{
	return (/^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/).test(email);
}

function validate_emails(emails_txtbox)
{
	var emails = emails_txtbox.value;
	if (!emails)
	{
		return false;
	}

	emails += ","
	var emails_arr = emails.split(",");
	for (var i=0; i<emails_arr.length; i++)
	{
		if(emails_arr[i] != "")
		{
			if(validate_email_val(emails_arr[i].trim()) == false)
			{
				return false;
			}
		}
	}
	return true;
}

function checkConfirmationCode(form, userId)
{
	var oCode = $("lb_code");
	var sCode = oCode.value;

	removeFormError();

	var oError = document.createElement("div");
		oError.className = "formerror";
		oError.id = "FormError";

	if (sCode.replace(/ /g, "") != "")
	{
		var xmlHttp = new createXMLHttpRequest();
		var sData = "module=lightbox&code=" + sCode + "&user_id=" + userId;
		xmlHttp.open("GET", "/server/s_verify_account.asp?" + sData + "&seed=" + Math.random(), true);
		xmlHttp.onreadystatechange = function()
		{
			if(xmlHttp.readyState == 4)
			{
				var sStat = xmlHttp.responseText;
				if (sStat == "ok")
				{
					window.location.href = "/join/welcome/";
				}
				else
				{
					oError.innerHTML = "Verification failed. Please check the code in your email, and try again.";
					oCode.parentNode.appendChild(oError);
				}
			}
		}
		xmlHttp.send("");
	}
}

function signup_validity_check(form)
{
	removeFormError();

	var oError = document.createElement("div");
		oError.className = "formerror";
		oError.id = "FormError";

	if (validate_username(form.lb_username) == false)
	{
		oError.innerHTML = "Please insert a valid username (a-z,A-Z,0-9 or underscore).";
		form.insertBefore(oError, form.lb_username.parentNode);
		form.lb_username.focus();
		return false;
	}
	if (form.lb_username.value.length > 100)
	{
		oError.innerHTML = "username can be up to 100 characters long.";
		form.insertBefore(oError, form.lb_username.parentNode);
		form.lb_username.focus();
		return false;
	}
	if (validate_email(form.lb_email) == false)
	{
		oError.innerHTML = "Please insert a valid email address.";
		form.insertBefore(oError, form.lb_email.parentNode);
		form.lb_email.focus();
		return false;
	}

	if (form.lb_password.value == "")
	{
		oError.innerHTML = "Please insert password";
		form.insertBefore(oError, form.lb_password.parentNode);
		form.lb_password.focus();
		return false;
	}
	if (validate_password(form.lb_password) == false)
	{
		oError.innerHTML = "Please insert a valid password (a-z,A-Z,0-9, underscore, @, dot or exclamation mark).";
		form.insertBefore(oError, form.lb_username.parentNode);
		form.lb_username.focus();
		return false;
	}
	if (form.lb_password.value.length > 10)
	{
		oError.innerHTML = "Password can be up to 10 characters long";
		form.insertBefore(oError, form.lb_password.parentNode);
		form.lb_password.focus();
		return false;
	}
	if (form.lb_confirmpassword.value == "")
	{
		oError.innerHTML = "Please confirm your password";
		form.insertBefore(oError, form.lb_confirmpassword.parentNode);
		form.lb_confirmpassword.focus();
		return false;
	}
	if (form.lb_confirmpassword.value.length > 10)
	{
		oError.innerHTML = "Password can be up to 10 characters long.";
		form.insertBefore(oError, form.lb_confirmpassword.parentNode);
		form.lb_confirmpassword.focus();
		return false;
	}
	if (form.lb_password.value != form.lb_confirmpassword.value)
	{
		oError.innerHTML = "Passwords do not match.";
		form.insertBefore(oError, form.lb_confirmpassword.parentNode);
		form.lb_confirmpassword.focus();
		return false;
	}

	var xmlHttp = new createXMLHttpRequest();
	var sData = "module=lightbox&src=lb_"+encodeURI(location.href)+"&username=" + encodeURI(form.lb_username.value) + "&email=" + encodeURI(form.lb_email.value) + "&website=" + encodeURI(form.lb_website.value) + "&password=" + encodeURI(form.lb_password.value) + "&confirmpassword=" + encodeURI(form.lb_confirmpassword.value) + "&coupon=" + encodeURI(form.lb_coupon.value) + "&tosagree=" + ((form.lb_tosagree.checked)? "yes" : "no") + "&newletter=" + ((form.lb_newsletter.checked)? "yes" : "no");
	xmlHttp.open("GET", "/server/s_signup_1.asp?" + sData + "&seed=" + Math.random(), true);
	xmlHttp.onreadystatechange = function()
	{
		if(xmlHttp.readyState == 4)
		{
			var sStat = xmlHttp.responseText;
			if (sStat.split("^")[0] == "ok" && sStat.split("^")[1])
			{
				openLBRegisterationStep2(sStat.split("^")[1],encodeURI(form.lb_username.value),encodeURI(form.lb_email.value));
			}
			else
			{
				oError.innerHTML = sStat.split("^")[0];
				form.insertBefore(oError, form.lb_username.parentNode);
			}
		}
	}
	xmlHttp.send("");

	return false;
}

function login_validity_check(form)
{
	var oError = document.createElement("div");
		oError.className = "formerror";
		oError.id = "FormError";

	if (validate_username(form.username) == false)
	{
		removeFormError();
		oError.innerHTML = "Please insert a valid username.";
		form.appendChild(oError);

		form.username.focus();
		return false;
	}
	if (form.username.value.length > 100)
	{
		removeFormError();
		oError.innerHTML = "username can be up to 100 characters long.";
		form.appendChild(oError);
		form.username.focus();
		return false;
	}

	if (form.password.value == "")
	{
		removeFormError();
		oError.innerHTML = "Please insert password";
		form.appendChild(oError);
		form.password.focus();
		return false;
	}
	if (form.password.value.length > 10)
	{
		removeFormError();
		oError.innerHTML = "Password can be up to 10 characters long";
		form.appendChild(oError);
		form.password.focus();
		return false;
	}
	var xmlHttp = new createXMLHttpRequest();
	var rememberme = "no";
	if($("RememberMe").checked)
	{
		rememberme = "yes";
	}
	var sData = "module=lightbox&username=" + encodeURI(form.username.value) + "&password=" + encodeURI(form.password.value) + "&rememberme=" + rememberme;
	xmlHttp.open("GET", "/server/s_login.asp?" + sData + "&seed=" + Math.random(), true);
	xmlHttp.onreadystatechange = function()
	{
		if(xmlHttp.readyState == 4)
		{
			var sStat = xmlHttp.responseText;
			if(sStat == "ok")
			{
				window.location.href = window.location.href;
			}
			else
			{
				removeFormError();
				oError.innerHTML = sStat;
				form.appendChild(oError);
			}
		}
	}
	xmlHttp.send("");

	return false;
}

function logout()
{
	var xmlHttp = new createXMLHttpRequest();

	xmlHttp.open("GET", "/server/s_logout.asp?seed=" + Math.random(), true);
	xmlHttp.onreadystatechange = function()
	{
		if(xmlHttp.readyState == 4)
		{
			if(xmlHttp.status == 200)
			{
				window.location.href = window.location.href;
			}
		}
	}
	xmlHttp.send("");
}

function removeFormError()
{
	if($("FormError"))
		$("FormError").destroy();
}

function openFilterMenu(oCaller, sType, sUrl, sParam)
{
	closeFilterMenu();
	var oFilter = document.createElement("div");
		oFilter.id = "FilterMenu";
		oFilter.onmouseout = countdownToCloseFilter;
		oFilter.onmouseover = resetCountdownToCloseFilter;

	var sHTML = "";
	var sLink = sUrl;

	switch(sType)
	{
		case "type":
			sHTML = "<a href=\"" + sLink + sParam + "\" class=\"default\">All types</a>" +
				  "<a href=\"" + sLink + "Blog/"+ sParam + "\" class=\"Blog\">Blog/Article</a>" +
				  "<a href=\"" + sLink + "Image/" + sParam +"\"  class=\"Images\">Image</a>" +
				  "<a href=\"" + sLink + "Video/" + sParam +"\" class=\"Video\">Video</a>" +
				  "<a href=\"" + sLink + "Profile/" + sParam +"\" class=\"Personals\">Profile</a>" +
				  "<a href=\"" + sLink + "Music/" + sParam +"\" class=\"Music\">Music</a>" +
				  "<a href=\"" + sLink + "Product/" + sParam +"\" class=\"Product\">Product/Service</a>" +
				  "<a href=\"" + sLink + "Discussion/" + sParam +"\" class=\"Discussion\">Discussion</a>";


			var sCurrentFilter = window.location.href;
			if (sCurrentFilter.indexOf("?") != -1)
				sCurrentFilter = sCurrentFilter.substring(0, sCurrentFilter.indexOf("?"));

			if (sCurrentFilter.lastIndexOf("/") == sCurrentFilter.length - 1)
				sCurrentFilter = sCurrentFilter.substring(0, sCurrentFilter.lastIndexOf("/"));

			sCurrentFilter = sCurrentFilter.substring(sCurrentFilter.lastIndexOf("/"));
			sCurrentFilter = sCurrentFilter.replace("/", "");

			sHTML = sHTML.replace('class="' + sCurrentFilter, 'class="current Current' + sCurrentFilter);
			break;
		case "from":
			if(sLink.indexOf("?") == -1)
				sLink += "?";
			else
				sLink += "&";

			sHTML = "<a href=\"" + sLink + "sf=e\" class=\"default\">Everyone</a>" +
				  "<a href=\"" + sLink + "sf=f\" class=\"noicon\">My Favorites</a>" +
				  "<a href=\"" + sLink + "sf=m\" class=\"noicon\">Me</a>";

			var sCurrentFilter = window.location.href;
			if (sCurrentFilter.indexOf("?sf=") != -1)
			{
				sCurrentFilter = sCurrentFilter.substr(sCurrentFilter.indexOf("?sf=") + 4, 1);
			}

			sHTML = sHTML.replace('sf=' + sCurrentFilter + '" class=\"', 'sf=' + sCurrentFilter + '" class="current ');
			break;

		case "by":
			if(sLink.indexOf("?") == -1)
				sLink += "?";
			else
				sLink += "&";

			sHTML = "<a href=\"" + sLink + "by=e\" class=\"default\">Everyone</a>" +
				  "<a href=\"" + sLink + "by=y\" class=\"noicon\">" +sParam+ "</a>";

			var sCurrentFilter = window.location.href;
			if (sCurrentFilter.indexOf("?by=") != -1)
			{
				sCurrentFilter = sCurrentFilter.substr(sCurrentFilter.indexOf("?by=") + 4, 1);
			}

			sHTML = sHTML.replace('by=' + sCurrentFilter + '" class=\"', 'by=' + sCurrentFilter + '" class="current ');
			break;
	}

	oFilter.innerHTML = sHTML;

	document.body.appendChild(oFilter);

	oFilter.style.top = oCaller.getTop() + "px";
	oFilter.style.left = oCaller.getLeft() + "px";

	window.setTimeout(function(){ $("FooterBackground").onclick = closeFilterMenu; }, 50);
}

function closeFilterMenu()
{
	if($("FilterMenu"))
	{
		$("FilterMenu").destroy();
		$("FooterBackground").onclick = null;
	}
}

function countdownToCloseFilter()
{
	vCloseFilter = window.setTimeout(closeFilterMenu, I_TIME_TO_CLOSE_FILTER_MENU);
}
function resetCountdownToCloseFilter()
{
	if(vCloseFilter != "")
		window.clearInterval(vCloseFilter);

	vCloseFilter = "";
}

function checkForFormSubmission(e, sFunc)
{
	if(e.keyCode == 13)
		eval(sFunc);
	else
		return true;
}

function read_message(message_id, inbox, to_user_id)
{
	var oMessageRow = $("message" + message_id);
	var sMessageContent = "";
	if($("message" + message_id + "content"))
	{
		if(oMessageRow.hasClass("open"))
		{
			$("message" + message_id + "content").addClass("closed");
			oMessageRow.removeClass("open");
		}
		else
		{
			$("message" + message_id + "content").removeClass("closed");
			oMessageRow.addClass("open");
		}
	}
	else
	{
		var strURLWithParams;

		if (oMessageRow.hasClass("unread"))
		{
			oMessageRow.removeClass("unread");
			strURLWithParams = "/server/s_read_message.asp?message_id=" + message_id + "&unread=yes";

			var oMsgCountHead = $("msg_count_head");
			if (oMsgCountHead)
			{
				var msg_count = oMsgCountHead.innerHTML.substr(1,oMsgCountHead.innerHTML.length-2)
				msg_count--;
				oMsgCountHead.innerHTML = "[" + msg_count + "]";
			}
		}
		else
		{
			strURLWithParams = "/server/s_read_message.asp?message_id=" + message_id;
		}

		var ret = SyncHTTPRequest(strURLWithParams);

		var sSubject = "RE: " + $$("#title-" + message_id + " span")[0].innerHTML;
		sSubject = sSubject.replace(/'/g,"&amp;apos;").replace(/"/g, "&amp;quot;");
		sMessageContent = ret + " ";
		if (inbox)
		{
			sMessageContent = sMessageContent.replace(/((?:http|ftp|https):\/\/(?:\w+\.)+\w{2,3}\.?(?:\/[\w.])*\/?)(?=\]|\)|\s)/gi,'<a href="$1" target="_blank">$1</a>');
			sMessageContent = sMessageContent.replace(/\n/gi, "<br />");
			sMessageContent += "<br /><span class=\"link reply\" onclick=\"openLBSendMessage(this, " + message_id + "," + to_user_id + ",'" + sSubject + "');\">[Reply]</span>";
		}

		oMessageRow.addClass("open");

		var oContentRow = createContentRow(sMessageContent, message_id);

		oMessageRow.parentNode.insertBefore(oContentRow, oMessageRow.nextSibling);
	}
}

function createContentRow(sMessageContent, message_id)
{
	var oContentRow = document.createElement("tr");
		oContentRow.className = "content";
		oContentRow.id = "message" + message_id + "content";

		var oBefore = document.createElement("td");
			$(oBefore).setProperty("colspan", "2");
			oBefore.innerHTML = "&#160;";
		var oContent = document.createElement("td");
			oContent.innerHTML = sMessageContent;
		var oAfter = document.createElement("td");
			$(oAfter).setProperty("colspan", "2");
			oAfter.innerHTML = "&#160;";

		oContentRow.appendChild(oBefore);
		oContentRow.appendChild(oContent);
		oContentRow.appendChild(oAfter);

	return oContentRow;
}

function swapMessageClass(oInput, bForce, bIsCheck)
{
	var sClass = oInput.parentNode.parentNode.className;

	if(bForce)
	{
		oInput.parentNode.parentNode.className = (bIsCheck)? sClass + ' selected' : sClass.replace(/selected/gi,'') ;
		oInput.checked = bIsCheck;
	}
	else
	{
		oInput.parentNode.parentNode.className = (oInput.checked)? sClass + ' selected' : sClass.replace(/selected/gi,'') ;
	}
}

function selectAllMessages(oCaller)
{
	var aRows = $$(".messages tr input");
	var bSelect = (oCaller.innerHTML == "Select All");

	for(var i=0; i<aRows.length; i++)
		swapMessageClass(aRows[i], true, bSelect);

	oCaller.innerHTML = (bSelect)? "Select None" : "Select All";
}

function deleteMessages()
{
	var aMessages = $$(".messages tr input");
	var sIds = "";
	var aToRemove = new Array();
	for(var i=0; i<aMessages.length; i++)
	{
		if(aMessages[i].checked)
		{
			sIds += aMessages[i].parentNode.parentNode.id + ", ";
			aToRemove.push(aMessages[i].parentNode.parentNode.id);
		}
	}
	sIds = sIds.replace(/message/g, "");
	sIds += "0";

	var serverurl = "/server/s_delete_messages.asp?message_ids=" + sIds;
	var ret = SyncHTTPRequest(serverurl);

	for(var i=0; i<aToRemove.length; i++)
		$(aToRemove[i]).destroy();

	var oCurrentTab = $$(".tabs .current a em b")[0];
	oCurrentTab.innerHTML = "[" + (oCurrentTab.innerHTML.replace("[","").replace("]","")*1 - aToRemove.length) + "]";
}

function click_graze(oLink,iSpreadId,user_id)
{
	if (user_id == 0)
		user_id = 10 //dummy user for non-registered users' clicks

	var serverurl = "/server/s_click_graze.asp?spread_id=" + iSpreadId + "&user_id=" + user_id;
	var ret = SyncHTTPRequest(serverurl);
	window.location = oLink.href;

	pageTracker._trackPageview('/outgoing/spread_'+iSpreadId);
	pageTracker._trackEvent('Grazes', 'click', 'Click on spread id '+iSpreadId, user_id);	

	return true;
}

function showProfileMessage(iAdvance)
{
	var oCurrentMessage = $("msg_" + iProfileCurrentMessage);
	iProfileCurrentMessage += iAdvance;
	var oNextMessage = $("msg_" + iProfileCurrentMessage);

	if(oNextMessage)
	{
		oCurrentMessage.style.display = "none";
		oNextMessage.style.display = "block";
		var prev_link = $("prev_msg");
		var next_link = $("next_msg");
		if((!next_link) || (!prev_link))
		{
			return;
		}
		next_link.style.display = "block";
		prev_link.style.display = "block";
		prev_link.style.borderRight = "1px solid #cecece";
		if(oNextMessage.className == "unread msg_first")
		{
			prev_link.style.display = "none";
		}
		if(oNextMessage.className == "unread msg_last")
		{
			next_link.style.display = "none";
			prev_link.style.borderRight = "none";
		}
	}
	else
	{
		iProfileCurrentMessage -= iAdvance;
	}
}

function showHideGrazeUrls(sLink, sGrazeId)
{
	var oUrls = $$("#graze_" + sGrazeId + " .urls");
	var oLink = $(sLink);

	if(oLink.innerHTML == "Show")
	{
		oLink.removeClass("show");
		oLink.addClass("hide");
		oLink.innerHTML = "Hide";
	}
	else
	{
		oLink.removeClass("hide");
		oLink.addClass("show");
		oLink.innerHTML = "Show";
	}

	$("Footer").style.marginTop = "10px";
	$("Footer").style.marginTop = "";

	if(oUrls.length > 0)
	{
		oUrls = oUrls[0];
		oUrls.style.display = (oUrls.style.display == "block")? "none" : "block";
	}
	else
	{
		var xmlHttp = new createXMLHttpRequest();
		xmlHttp.open("GET", "/server/s_graze_pages_get.asp?pd=min&l=5&gid=" + sGrazeId + "&seed=" + Math.random(), true);
		xmlHttp.onreadystatechange = function()
		{
			if(xmlHttp.readyState == 4)
			{
				var oXml = xmlHttp.responseXML;
				var aUrls = oXml.getElementsByTagName("page");
				var oGrazeBottom = $$("#graze_" + sGrazeId + " .bottom")[0];
				var sHTML = "";
				oUrls = document.createElement("div");
				oUrls.id = "GrazeUrls";
				oUrls.className = "urls";
				sHTML = 	'<span class="close" id="close_urls_' + sGrazeId + '">X</span>' +
						'<h4>This graze was <strong>spread on ' + $("graze" + sGrazeId + "spreadon").innerHTML + '</strong>. Showing <strong>recent ' + aUrls.length + '</strong> spreads. <a href="/graze.asp?gid=' + sGrazeId + '">Show all</a></h4>' +
						'<table><tbody>' +
							'<tr>' +
								'<th>Spread on</th>' +
								'<th>Spread by</th>' +
								'<th>When</th>' +
							'</tr>';

				for(var i=0; i<aUrls.length; i++)
				{
					var oE = aUrls[i];
					sHTML += 	'<tr>' +
								'<td><p><a href="' + oE.getAttribute("url") + '" title="'+ oE.firstChild.nodeValue.replace(/"/g, "&quot;") +'">' + oE.getAttribute("short_title") + '</a></p></td>' +
								'<td><a href="/users/' + oE.getAttribute("username") + '"><img src="' + oE.getAttribute("user_photo") + '" class="avatar" /> ' + oE.getAttribute("username") + '</a></td>' +
								'<td>' + oE.getAttribute("spread_date_time") + '</td>' +
							'</tr>';
				}
				sHTML += '</tbody></table>';

				oUrls.innerHTML = sHTML;
				oGrazeBottom.parentNode.insertBefore(oUrls, oGrazeBottom);
				oUrls.style.display = "block";

				var oClose = $("close_urls_" + sGrazeId);
					oClose.sLink = sLink;
					oClose.sGrazeId = sGrazeId;
				oClose.onclick = function(){ showHideGrazeUrls(this.sLink, this.sGrazeId); }

				$("Footer").style.marginTop = "10px";
				$("Footer").style.marginTop = "";
			}
		}
		xmlHttp.send("");
	}
}

function post_comment (tid, graze_id, user_id)
{
	var ret = SyncHTTPRequest("/server/s_comment_insert.asp?graze_id="+graze_id+"&comment="+$("comment_txt").value+"&user_id="+user_id)
	if (ret == "ok")
	{
		window.location = "/grazes/"+tid+"-"+graze_id+"/comments/";
	}
	else
	{
		if(ret == "comment_html")
		{
			alert("Comments cannot contain HTML tags");
			return false;
		}
	}
}


/* ------------------ */
/* Slider Functions
/* ------------------ */
function startSliding(oSlider)
{
	bSliding = true;
	oActiveSlider = oSlider;
}

function sliderJump(oSegment)
{
	if(oSegment)
	{
		var iPosition = (oSegment.sIndex)? oSegment.sIndex : oSegment.getAttribute("sIndex");
		var oSlider = oSegment.parentNode;

		oActiveSlider = oSlider;

		setStats(oSlider, iPosition);
	}
	else
	{
		bSliding = false;
		oActiveSlider = null;
	}
}

function slide(event, oSlider)
{
	if(bSliding)
	{
		var iPosition = event.clientX - oSlider.getLeft() - 5;

		if(iPosition < 9)
			iPosition = 1;
		else
			if(iPosition < 28)
				iPosition = 2;
			else
				if(iPosition < 47)
					iPosition = 3;
				else
					iPosition = 4;

		setStats(oSlider, iPosition);
	}
}

function setStats(oSlider, iPosition)
{
	var oPoint = oSlider.getElementsByTagName("span")[0];
	var sLeft = 0;
	var sPositionDescription = "";
	var iDaysAgo = 0;

	switch(iPosition)
	{
		case 1: sLeft = "-5px"; iDaysAgo = 1; sPositionDescription = "Today&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"; break;
		case 2: sLeft = "15px"; iDaysAgo = 2; sPositionDescription = "Past 2 days"; break;
		case 3: sLeft = "34px"; iDaysAgo = 7; sPositionDescription = "Past 7 days"; break;
		case 4: sLeft = "54px"; iDaysAgo = 14; sPositionDescription = "Past 14 days"; break;
	}

	oPoint.style.left = sLeft;
	oSlider.iDaysAgo = iDaysAgo;

	var aResponse = ((oSlider.sResponse)? oSlider.sResponse : oSlider.getAttribute("sResponse")).split("~")[iPosition - 1].split("_");
	$$("#StatsGrazes strong")[0].innerHTML   = aResponse[0];
	$$("#StatsSpreadon strong")[0].innerHTML = aResponse[1];
	$$("#StatsClicked strong")[0].innerHTML  = aResponse[2];
	$$("#StatsReceived strong")[0].innerHTML = aResponse[3];
	oSlider.getElements(".desc")[0].innerHTML = sPositionDescription;
}

function updateUserStats()
{
	var strURLWithParams = "/server/s_my_grazes_stats.asp?seed=" + Math.random();
	var xmlHttp = new createXMLHttpRequest();
	xmlHttp.open("GET", encodeURI(strURLWithParams), true);
	xmlHttp.onreadystatechange = function(e)
	{
		if(xmlHttp.readyState == 4)
		{
			if(xmlHttp.status == 200)
			{
				$("StatsSlider").sResponse = xmlHttp.responseText;
			}
		}
	}
	xmlHttp.send("");
}

function showHideUnspreadGrazes()
{
	var oUnspread = $("unspread-grazes");
	var oUnspreadAlert = $("unspread-grazes-alert");

	showHide(oUnspread);
	oUnspreadAlert.innerHTML = (oUnspread.style.display == "none")? "Show unspread grazes" : "Hide unspread grazes";

	return true;
}

function morePagesFromSet(oOpener, iSetId)
{
	var sUrl = "/server/s_sets_pages.asp?set_id=" + iSetId + "&seed=" + Math.random();
	var oSet = $("Set" + iSetId);

	if (oSet.full)
	{
		if(oSet.className.indexOf("opened") == -1 && oSet.numberOfPages > 5)
			oSet.className += " opened";
		else
		{
			oSet.className = oSet.className.replace("opened", "");
			oOpener.innerHTML = "more";
		}
		$("Footer").style.marginTop = "10px";
		$("Footer").style.marginTop = "";
	}
	else
	{
		var xmlHttp = new createXMLHttpRequest();
		xmlHttp.open("GET", sUrl, true);
		xmlHttp.onreadystatechange = function(e)
		{
			if(xmlHttp.readyState == 4)
			{
				if(xmlHttp.status == 200)
				{
					var oXml = xmlHttp.responseXML;
					var aPages = oXml.getElementsByTagName("page");
					var sHTML = "";
					oSet.numberOfPages = aPages.length;

					for(var i=0; i<aPages.length; i++)
					{
						var oE = aPages[i];
						var sUrl		= oE.getAttribute("url");
						var sThumbnail	= oE.getAttribute("thumbnail");
						var sTitle		= oE.firstChild.nodeValue.replace(/"/g, "&quot;");

						sHTML += 	'<li>' +
									'<a href="' + sUrl + '" title="' + sTitle + '">' +
										'<img width="100" height="75" src="' + sThumbnail + '" alt="' + sTitle + '" class="thumbnail" />' +
									'</a>' +
									'<a href="' + sUrl + '" title="' + sTitle + '">' +
										sTitle +
									'</a>' +
								'</li>';
					}

					oSet.innerHTML = sHTML;
					$("Footer").style.marginTop = "10px";
					$("Footer").style.marginTop = "";

					if (oSet.numberOfPages > 5)
					{
						oSet.className += " opened";
						oOpener.innerHTML = "close";
					}

					oSet.full = true;
				}
			}
		}
		xmlHttp.send("");
	}
}

function renameSet(iSetId)
{
	if (!$("RenameSet"))
	{
		var oInput = document.createElement("input");
			oInput.type = "text";
			oInput.id = "RenameSet";
			oInput.value = $("SetName").innerHTML;
			oInput.style.width = "150px";
			oInput.setAttribute("setid", iSetId);
			oInput.setAttribute("maxLength", 20);
			oInput.onkeyup = checkRename;
		var oSave = document.createElement("input");
			oSave.setAttribute("type", "button");
			oSave.className = "button";
			oSave.onclick = function(){ renameSetSave(iSetId); };
			oSave.id = "actSave";
			oSave.value = "Save";
		var oCancel = document.createElement("input");
			oCancel.setAttribute("type", "button");
			oCancel.className = "button";
			oCancel.onclick = renameSetCancel;
			oCancel.id = "actCancel";
			oCancel.value = "Cancel";

		$("SetName").parentNode.appendChild(oInput);
		$("SetName").parentNode.appendChild(oSave);
		$("SetName").parentNode.appendChild(oCancel);
	}

	$("RenameSet").value = $("SetName").innerHTML;
	$("RenameSet").style.display = "";
	$("SetName").style.display = "none";
	$("actRename").style.display = "none";
	$("actSave").style.display = "";
	$("actCancel").style.display = "";
}

function checkRename(e)
{
	var e = e || event;

	switch (e.keyCode)
	{
		case 13:
			renameSetSave(this.getAttribute("setid"));
			break;
		case 27:
			renameSetCancel();
			break;
	}
}

function shareSetSave(iSetId, bChecked)
{
	var xmlHttp = new createXMLHttpRequest();
	var set_public = (bChecked ? "yes" : "no");
	xmlHttp.open("GET", "/server/s_set_update.asp?set_id=" + iSetId + "&set_public=" + set_public + "&seed=" + Math.random());
	xmlHttp.onreadystatechange = function(e)
	{
		if(xmlHttp.readyState == 4)
		{
			if(xmlHttp.status == 200)
			{
			}
			else
			{
				alert("Change was not saved. Something went wrong...");
			}
		}
	}
	xmlHttp.send("");
}

function renameSetSave(iSetId)
{
	var sNewName = $("RenameSet").value;

	$("SetName").innerHTML = sNewName;
	removeSetEditElements();
	var xmlHttp = new createXMLHttpRequest();
	var set_name = $("RenameSet").value;
	xmlHttp.open("GET", "/server/s_set_update.asp?set_id=" + iSetId + "&set_name=" + $("RenameSet").value + "&seed=" + Math.random(), true);
	xmlHttp.onreadystatechange = function(e)
	{
		if(xmlHttp.readyState == 4)
		{
			if(xmlHttp.status == 200)
			{
				window.location.href = "/me/sets/"+set_name+"-"+iSetId+"/";
			}
			else
			{
				alert("Name not saved. Something went wrong...");
			}
		}
	}
	xmlHttp.send("");

}
function renameSetCancel()
{
	removeSetEditElements();
}

function removeSetEditElements()
{
	$("RenameSet").style.display = "none";
	$("SetName").style.display = "";
	$("actRename").style.display = "";
	$("actSave").style.display = "none";
	$("actCancel").style.display = "none";
}

function validateNewMessage(to_user_id)
{
	var oForm = $("SendMessageForm");
	var oSubject = $("lb_subject");

	if(oSubject.value.replace(/ /g, "") == "")
	{
		alert("Please enter a subject");
		oSubject.focus();
		return false;
	}

	var oMessage = $("lb_content");
	var strURLWithParams = "/server/s_message_send.asp?subject=" + oSubject.value + "&message=" + oMessage.value + "&to_user_id=" + to_user_id;
	var sResponse = SyncHTTPRequest(strURLWithParams);
	if (sResponse == "message_html")
	{
		alert("Message subject or body text cannot contain HTML tags");
		return false;
	}

	closeLightBox();
}

function userFavorites(oSender, sUserId, isAdding, isProfile)
{
	var sAction = (isAdding)? "add" : "remove";
	var strURLWithParams = "/server/s_favorite_insert.asp?favorite_user_id=" + sUserId + "&action=" + sAction + "&seed=" + Math.random();
	var ret = SyncHTTPRequest(strURLWithParams);
	if(isAdding)
	{

		if($("favorite_"+sUserId))
		{
			($("favorite_"+sUserId)).style.display = "none";
		}
		if($("username_"+sUserId))
		{
			($("username_"+sUserId)).removeClass("non-user-favorite");
			($("username_"+sUserId)).addClass("user-favorite");
		}
		oSender.innerHTML = "Remove from favorites";
		oSender.className = "link removefavorite";
		if(isProfile) //if adding user to favorites from within the favorite user's profile - add icon to user's header
		{
			var UserPublicTopFavorite = $("UserPublicTopFavorite");
			if(UserPublicTopFavorite)
			{
				UserPublicTopFavorite.innerHTML = "Remove from favorites";
				UserPublicTopFavorite.className = "link removefavorite";
			}

			var oImg = document.createElement("img");
				oImg.src = "/images/icon-user-favorite.gif";
				oImg.alt = "Favorite User";
				oImg.className = "Favorite";

			var oPageTitle = $$("#PageTitle .PageTopHeader")[0];
			oPageTitle.insertBefore(oImg, oPageTitle.firstChild);
			if($("empty_graze_tab_txt"))
			{
				$("empty_graze_tab_txt").innerHTML = "Now, ";
				$("empty_graze_tab_txt").className = "";
			}
		}
	}
	else
	{
		if(!isProfile && ($("FavoritesTab"))) //if we're in the viewing user's favorites tab - refresh the window
		{
			window.location.href = window.location.href;
		}
		else
		{
			oSender.innerHTML = "Add to favorites";
			oSender.className = "link addfavorite";
			if(isProfile) //if removing user from favorites from within the favorite user's profile - remove icon from user's header
			{
				var UserPublicTopFavorite = $("UserPublicTopFavorite");
				if(UserPublicTopFavorite)
				{

					UserPublicTopFavorite.innerHTML = "Add to favorites";
					UserPublicTopFavorite.className = "link addfavorite";
				}

				var oImg = $$("#PageTitle .PageTopHeader .Favorite")[0];
				oImg.destroy();
				var oEmptyGraze = $("empty_graze_tab_txt");
				if(oEmptyGraze)
				{
					oEmptyGraze.innerHTML = "Add to your favorite grazers list, ";
					oEmptyGraze.onclick = function(){ userFavorites(oSender, sUserId, !isAdding, isProfile); };
					oEmptyGraze.className = "link addfavorite";
				}
			}
		}
	}
	oSender.onclick = function(){ userFavorites(oSender, sUserId, !isAdding, isProfile); }
}

//var WIZARD_NEW_GRAZE = 1;
//var WIZARD_EDIT_GRAZE = 2;
//var WIZARD_SPREAD_GRAZE = 3;
function openWizard(wizardAction, sFriendlyUrl)
{
	var sUrl = "/create-a-graze/";

	switch(wizardAction)
	{
		case WIZARD_EDIT_GRAZE:
			sUrl = "/edit-a-graze/" + sFriendlyUrl + "/";
			break;
		case WIZARD_SPREAD_GRAZE:
			sUrl = "/spread-a-graze/" + sFriendlyUrl + "/";
			break;
	}
	var oCurrentWindow = window.open(sUrl, "grazewizard", "height=" + I_WIZARD_HEIGHT + ",width=" + I_WIZARD_WIDTH + ",resizable=no,resizable=false,resize=no,resize=false");
	oCurrentWindow.focus();
}

function replaceFaviconImage(oImg)
{
	oImg.onerror = function(){ return false; }
	oImg.src = "/images/favicon-default.gif";
}

function setDelete(iSetId)
{
	var xmlHttp = new createXMLHttpRequest();
	xmlHttp.open("GET", "/server/s_delete_set.asp?set_id=" + iSetId, true);
	xmlHttp.onreadystatechange = function(e)
	{
		if(xmlHttp.readyState == 4)
		{
			if(xmlHttp.status == 200)
			{
				window.location.href = "/me/sets/"
			}
		}
	}
	xmlHttp.send("");
}

function addPageToSet(iSetId, sTitle, sUrl, iPageId, sDesc)
{
	var sXml = '<set_info><pages save_set="existing" existing_set_id="' + iSetId + '" return_html="yes">';

	if (iPageId && iPageId != -1)
	{
		sXml += '<page id="' + iPageId + '" />';
	}
	else
	{
		sXml += '<page url="' + sUrl + '">' +
				'<title><![CDATA[' + sTitle + ']]></title>' +
				'<description><![CDATA[' + sDesc + ']]></description>' +
			  '</page>';
	}

	sXml += '</pages></set_info>';

	sSetManage(sXml, sTitle, sUrl, iPageId, sDesc, iSetId);
}

function setCopy(iSetId, iPageId)
{
	var sXml = "<set_info><pages ";
	var save_set = "existing";
	var new_set_name = "";
	var existing_set_id = "";

	if ($("chkNewSet").checked)
	{
		save_set = "new";
		new_set_name = 'new_set_name="' + $("iSetName").value + '"';
	}
	else
		existing_set_id = 'existing_set_id="' + $("slctSet").value + '"';

	if (existing_set_id == -1)
	{
		alert("Select a set");
		$("slctSet").focus();
		return false;
	}

	sXml += 'save_set="' + save_set + '" ' + new_set_name + ' ' + existing_set_id + '>';

	if (iPageId && iPageId != undefined && iPageId != -1)
	{
		sXml += '<page id="' + iPageId + '" />';
	}
	else
	{
		$$("#spages input").each(function(el){
				if (el.checked)
					sXml += '<page id="' + el.value + '" />';
			});
	}
	sXml += "</pages></set_info>";
	sSetManage(sXml);

	return true;
}

function sSetManage(sXml, sTitle, sUrl, iPageId, sDesc, iSetId)
{
	var xmlHttp = new createXMLHttpRequest();
	xmlHttp.open("POST", "/server/s_set_manage.asp", true);
	xmlHttp.onreadystatechange = function(e)
	{
		if(xmlHttp.readyState == 4)
		{
			var sMessage = "";
			//alert("sent:\n-----------------\n" + sXml + "\n\n\n\nrecieved:\n-----------------\n" + xmlHttp.responseText);
			if(xmlHttp.status == 200)
			{
				sMessage = "<br /><br /><br /><br /><br /><br /><br /><br /><b>The page was successfully added to your set</b>";
			}
			else
			{
				sMessage = "<br /><br /><br /><br /><br /><br /><br /><br /><b>We were unable to add the page to your set</b>";
			}

			if ($("acont"))
			{
				var oContent = $("acont");
				oContent.innerHTML = sMessage;
				window.setTimeout(closeLightBox, 4000);
				if ($("LightBoxSubmit"))
					$("LightBoxSubmit").style.display = "none";
				if ($("LightBoxCancel"))
					$("LightBoxCancel").value = "Close";
			}
			else if ($("s-pages"))
			{
				var aResponse = xmlHttp.responseText.split("^^GRAZEIT^^");

					var oPage = new Element("li");
						oPage.id = "sp" + aResponse[0];
						oPage.innerHTML = aResponse[1];
						oPage.style.visibiltiy = "hidden";
						oPage.style.opacity = "0";

				$("s-pages").insertBefore(oPage, $("s-pages").firstChild);

				oPage.fade("in");

				$("nofpagesinset").innerHTML = $("nofpagesinset").innerHTML - -1;
				$("totalsetpages").innerHTML = $("totalsetpages").innerHTML - -1;
				var iToPages = $("tosetpages").innerHTML*1;
				if (iToPages < 20)
				{
					iToPages+=1;
					$("tosetpages").innerHTML = iToPages;
				}
				else
				{
					$("s-pages").removeChild($("s-pages").getElements("li").getLast());
				}
			}
		}
	}
	xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xmlHttp.send(sXml);
}

function toggleSetPages()
{
	var bShow = !($("spages").style.display == "block");

	$("spages").style.display = (bShow)? "block" : "none";
	var iHeight = 250;
	var imgColExp = $("xpp");

	if (bShow)
	{
		iHeight += $("spages").getHeight();
		imgColExp.src = "/images/minus-collapse.gif";
		imgColExp.alt = "Collapse";
	}
	else
	{
		imgColExp.src = "/images/plus-expand.gif";
		imgColExp.alt = "Expand";
	}

	resizeLightBoxHeight(iHeight);
}

function countSelectedSetPages()
{
	var iCount = 0;
	$$("#spages input").each(function(el){
			if (el.checked)
				iCount++;
		});
	$("nop").innerHTML = iCount;
}

function populateSetPages(iSetId)
{
	var xmlHttp = new createXMLHttpRequest();
	xmlHttp.open("POST", "/server/s_sets_pages.asp?set_id=" + iSetId + "&seed=" + Math.random(), true);
	xmlHttp.onreadystatechange = function()
	{
		if(xmlHttp.readyState == 4)
		{
			if(xmlHttp.status == 200)
			{
				var aPages = xmlHttp.responseXML.getElementsByTagName("page");
				var sHtml = "";
				for(var i=0; i<aPages.length; i++)
				{
					var el = aPages[i];
					sHtml += '<li><input type="checkbox" value="' + el.getAttribute("page_id") + '" id="spage_' + el.getAttribute("page_id") + '" checked="true" onchange="countSelectedSetPages();" /> <label for="spage_' + el.getAttribute("page_id") + '" title="' + el.firstChild.nodeValue + '">' + el.getAttribute("short_title") + '</label></li>';
				}

				$("nop").innerHTML = aPages.length;
				$("spages").innerHTML = sHtml;
			}
		}
	}
	xmlHttp.send("");
}

function deleteSetPage(iPageId, iSetId)
{
	var xmlHttp = new createXMLHttpRequest();
	xmlHttp.open("POST", "/server/s_set_page_delete.asp?set_id=" + iSetId + "&page_id=" + iPageId, true);
	xmlHttp.onreadystatechange = function()
	{
		if(xmlHttp.readyState == 4)
		{
			if(xmlHttp.status == 200)
			{
				$("sp" + iPageId).fade("out");
				window.setTimeout(function(){ $("sp" + iPageId).destroy(); }, 600);
			}
		}
	}
	xmlHttp.send("");
}

function checkNewSetStatus(bNew)
{
	$("slctSet").disabled = bNew;
	$("iSetName").disabled = !bNew
}

function showEditSetTab(iTab, oSender, oFocus)
{
	$$("#stabs .current")[0].className = "";
	$$("#sctabs .current")[0].removeClass("current");

	$(oSender.parentNode).addClass("current");
	$("tab" + iTab).addClass("current");

	if (oFocus)
		$(oFocus).focus();
}

function showChangeProfileImage(bShow)
{
	$("ChangeImageLink").style.display = (bShow)? "none" : "block";
	$("ChangeImageForm").style.display = (bShow)? "block" : "none";

	if (!bShow)
		$("userimage").value = "";
}

function loadAdvancedSearch(q, sdy, fd, sun, sod, spc)
{
	var xmlHttp = new createXMLHttpRequest();
	var sURL = "/includes/advanced_search.asp?q=" + encodeURIComponent(q) + "&sdy=" + encodeURIComponent(sdy) + "&fd=" + encodeURIComponent(fd) + "&sun=" + encodeURIComponent(sun) + "&sod=" + encodeURIComponent(sod) + "&spc=" + encodeURIComponent(spc) + "&seed=" + Math.random();
	xmlHttp.open("GET", sURL, true);
	xmlHttp.onreadystatechange = function()
	{
		if(xmlHttp.readyState == 4)
		{
			if(xmlHttp.status == 200)
			{
				var oAdvanced = $("AdvancedSearch");
				if(oAdvanced)
				{
					oAdvanced.innerHTML = xmlHttp.responseText;
				}
			}
		}
	}
	xmlHttp.send("");
}

function openAdvancedSearch(oCaller)
{
	var oSearch = $("Search");
	var oAdvanced = $("AdvancedSearch");
	var oAdvancedTxt = $("AdvancedTxt");
	var oQ = $("q");
	var oAdvQ = $("advQuery");
	if (oAdvanced.getElements("form").length == 0)
	{
		loadAdvancedSearch("",0,"","","","");
	}

	oAdvanced.style.display = (oAdvanced.style.display == "block")? "" : "block";
	oSearch.className = (oAdvanced.style.display == "block")? "disabled" : "";

	if (oAdvancedTxt)
	{
		oAdvancedTxt.innerHTML = (oAdvanced.style.display == "block")? "Hide search options" : "Advanced search options";
	}

	if (oAdvanced.style.display == "block")
	{
		var sQuery = oQ.value;
		if (sQuery != "search...")
			oAdvQ.value = sQuery;
		oAdvQ.focus();
	}
	else
	{
		var sQuery = oAdvQ.value;
		oAdvQ.value = "";
		if (sQuery != "")
			oQ.value = sQuery;

		oQ.focus();
		oQ.style.color = "#000000";
	}
}

function validateAdvancedSearch(oForm)
{
	var advQuery = $("advQuery");
	var advFromDomain = $("advFromDomain");
	var advOnDomain = $("advOnDomain");
	var advPages = $("advPages");

	if (advQuery.value.indexOf("<") != -1 || advQuery.value.indexOf(">") != -1)
	{
		alert("Please insert valid characters");
		advQuery.focus();
		return false;
	}

	if (advPages.value.replace(/ /g, "") != "" && advPages.value*1 != advPages.value)
	{
		alert("Please insert numbers only");
		advPages.focus();
		return false;
	}
	else
	{
		advPages.value = advPages.value.replace(/ /g, "");
	}

	return true;
}

function removeToolTips()
{
	$$(".tooltip").destroy();
}

function share_validity_check(oForm,sUsername)
{
	removeFormError();

	var oError = document.createElement("div");
		oError.className = "formerror";
		oError.id = "FormError";

	if (!validate_emails(oForm.lb_share_emails))
	{
		oError.innerHTML = "Please insert valid email addresses.";
		oForm.insertBefore(oError, oForm.lb_share_emails.parentNode);
		oForm.lb_share_emails.focus();
		return false;
	}

	var sData = "", sCA = "", st = "";

	sData += "message=" + escape(oForm.lb_share_message.value);
	try{ sData += "&gid=" + oForm.lb_share_gid.value; st = "graze"; sCA ='openLBShareGraze(\'graze_' + $("lb_share_gid").value + '\',\''+sUsername+'\');'; }catch(e){}
	try{ sData += "&pid=" + oForm.lb_share_pid.value; st = "page";  sCA ='openLBSharePage(\'' + $("lb_share_pid").value + '\',\''+sUsername+'\');'; }catch(e){}
	sData += "&emails=" + oForm.lb_share_emails.value;
	var xmlHttp = new createXMLHttpRequest();
	xmlHttp.open("POST", "/server/s_share.asp", true);
	xmlHttp.onreadystatechange = function()
	{
		if(xmlHttp.readyState == 4)
		{
			if(xmlHttp.status == 200)
			{
				if (xmlHttp.responseText == "ok")
				{
					$("ShareGrazeForm").innerHTML = '<p class="sent">Message sent. Weepee!<br><span class="link" onclick="closeLightBox(); ' + sCA + '">Would you like to share this ' + st + ' again?</span></p>';
				}
				else
				{
					$("ShareGrazeForm").innerHTML = '<p class="sent fail">We\'re sorry, your message was not sent. Something went wrong.<br /><span class="link" onclick="closeLightBox(); ' + sCA + '">Please try again</span></p>';
				}

				$$("#LightBox .buttons .cancel")[0].style.display = "none";
				$("LightBoxSubmit").value = "Close";
				$("LightBoxSubmit").onclick = closeLightBox;
			}
		}
	}
	xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
	xmlHttp.send(sData);
}

function removePicture(genderType)
{
	if (confirm("Are you sure you want to remove?"))
	{
		if(genderType == 2)
		{
			$("MyAvatar").src = "/images/base_mid_avatar_female.gif";
			$("header_avatar").src = "/images/base_small_avatar.gif";
		}
		else
		{
			$("MyAvatar").src = "/images/base_mid_avatar.gif";
			$("header_avatar").src = "/images/base_small_avatar.gif";
		}
		$("MyAvatar").width = "100";
		$("MyAvatar").height = "100";

		var strURLWithParams = "/server/s_photo_remove.asp?seed=" + Math.random();
		var ret = SyncHTTPRequest(strURLWithParams);
		$("removePicture").innerHTML = "";
		return true;
	}
	else
	{
		return false;
	}
}

function switchShowcase(oSender, sId, iIndex, bAuto)
{
	var aSites = $$("#Changing .Site");
	var oCurrentSite = null;
	var oNewSite = null;
	var oItem = null;

	if (bAuto)
	{
		oNewSite = aSites[iShowcaseCurrent];
		oItem = $$(".Showcase li")[iShowcaseCurrent];

		iShowcaseCurrent = iShowcaseCurrent + 1;
	}
	else
	{
		oNewSite = $("Site_" + sId);
		oItem = oSender;
	}

	oCurrentSite = $$("#Changing .CurrentSite")[0];

	if (oCurrentSite != oNewSite)
	{
		oCurrentSite.removeClass("CurrentSite");
		oNewSite.addClass("CurrentSite");

		oNewSite.fade('in');
		oCurrentSite.fade('out');

		$$(".Showcase li.Current")[0].className = "";
		oItem.className = "Current";
	}

	if (!bAuto)
	{
		iShowcaseCurrent = iIndex;

		if (oShowcaseInterval != null)
			window.clearInterval(oShowcaseInterval);

		window.setTimeout(resetShowcasePaging, 60000);
	}

	if (iShowcaseCurrent >= aSites.length)
		iShowcaseCurrent = 0;
}

function resetShowcasePaging()
{
	if ($("Changing"))
	{
		if (oShowcaseInterval != null)
			window.clearInterval(oShowcaseInterval);

		oShowcaseInterval = window.setInterval(function(){ switchShowcase(null, "", -1, true); }, I_HOMEPAGE_SHOWCASE_INTERVAL);
	}
}

function checkTextLength(oTxt, iLength)
{
	if (oTxt.value.length > iLength)
		oTxt.value = oTxt.value.substring(0, iLength);
}

function replaceImage(oImg)
{
	oImg.onerror = function(){ return false; }
	oImg.src = "http://www.grazeit.com/images/favicon-default.gif";
}

function highlightSearchWords(searchWords,obj)
{
	var str = obj.innerHTML;
	var wordsArr = searchWords.split("+");
	for(var i=0; i<wordsArr.length; i++)
	{
		var regexp = new RegExp("(" + wordsArr[i] + ")", "gi");
		str = str.replace(regexp,"<span class='highlight'>$1</span>");
	}
	obj.innerHTML = str;
}

function downloadFF(xpiFileName,downloadSrc)
{
	//window.location = "/install/GRAZEit.FF."+xpiFileName+".xpi";
	//window.location = "https://addons.mozilla.org/en-US/firefox/downloads/file/55473/grazeit_extension-"+xpiFileName+"-fx.xpi?confirmed";
	window.location = "https://addons.mozilla.org/en-US/firefox/downloads/latest/10980/"
	window.setTimeout(showFFAllowDownload, 500);
	var xmlHttp = new createXMLHttpRequest();
	xmlHttp.open("GET", "/server/s_download.asp?browser_name=ff&seed=" + Math.random(), true);
	xmlHttp.onreadystatechange = function()
	{
		if (xmlHttp.readyState == 4)
		{
			if (xmlHttp.status == 200)
			{
			}
		}
	}
	xmlHttp.send("");
	pageTracker._trackEvent('DownloadFF', downloadSrc);
	pageTracker._trackPageview('/outgoing/download/FF');	
}

function downloadIE(downloadSrc)
{
	pageTracker._trackEvent('DownloadIE', downloadSrc);
	pageTracker._trackPageview('/outgoing/download/IE');	

}


function showFFAllowDownload()
{
	if (!$("ffallow"))
	{
		var oAllow = new Element("div", {id: "ffallow"});
		oAllow.innerHTML = '<img src="/images/allow-ff-x.gif" alt="Close" title="Close" onclick="$(this.parentNode).destroy(); />';

		document.body.appendChild(oAllow);
	}
}

function setStatusBarButterflyX(offsetX)
{
	//$("statusbar_arrow").style.marginLeft = document.body.offsetWidth-offsetX;
}