var DEFAULT_SEARCH_TEXT = "";
//set to true on the user profile page to
var _isUserProfile = false;

//default user id value
var _userprofileID = 0;

var _user = null;

var pageTracker;

function toggleView(elementToHide, elementToShow, fNoFocus)
{
	elementToHide.className = 'off';
	elementToShow.className = '';
	if (!fNoFocus)
		elementToShow.focus();
}

function hideLogin ()
{
	var eltPanel = document.getElementById ('loginContainer');
	if (eltPanel) {
		eltPanel.style.height = "0px";
	}
	var eltContent = document.getElementById ('loginContent');
	if (eltContent)
		eltContent.innerHTML = "";
}

function closeLogin()
{
	var eltFrame = document.getElementById ("loginContainer");

	new Tween (
		500,
		eltFrame.scrollHeight, 0,
		Tween_evaluate (
			Tween_easeOut,
			function (value)
			{
				eltFrame.style.height = value + "px";
			}
		),
		function ()
		{
			hideLogin ();
			if (_fnPending)
			{
				_fnPending (false);
				_fnPending = null;
			}
		}
	);
	document.getElementById('loginContainer').style.display = "none";		
	return false;
}

function showLoginPanel (from, to, callbackOnExposed)
{
	var eltFrame = document.getElementById ("loginContainer");
	eltFrame.style.height = from + "px";

	ScrollBodyToVertical (eltFrame, to, 500);
	
	new Tween (
		500,
		from, to,
		Tween_evaluate (
			Tween_easeOut,
			function (value)
			{
				eltFrame.style.height = "43px";
			}
		),
		callbackOnExposed
	);
			
	return false;
}


function ShowPanel(url, callback, callbackOnExposed)
{
	var eltPanel = document.getElementById ('loginContainer');
	var eltContent = document.getElementById ('loginContent');
	if (!eltPanel)
		return false;

	LoadXML(url,
		function (req)
		{
			var heightCurrent = eltPanel.scrollHeight;
			eltPanel.className = 'loginContainer_On';
			eltContent.innerHTML = req.responseText;
			eltPanel.style.height = "";
			showLoginPanel (heightCurrent, eltPanel.scrollHeight, callbackOnExposed);
			
			if (callback)
				callback ();
		}
	);
	if (url.indexOf("login.htm")!=-1)
	    pageTracker._trackPageview("/Actions/Login_Form");
	else if (url.indexOf("create.aspx")!=-1)
	    pageTracker._trackPageview("/Actions/Signup_Form");
	return false;
}

var _fnPending = null;

function openLogin(fnPending, strMessage)
{
	/*_fnPending = fnPending;
	ShowPanel('/accounts/login.htm',
		function ()
		{
			var eltLogin = document.getElementById ('loginTitle');
			if (strMessage && eltLogin)
				InnerText (eltLogin, "Please login to " + strMessage);
		},
		function ()
		{
			document.getElementById ('usernameText').focus ();
		}
	);
	document.getElementById('loginLinks').style.display = "none";
	document.getElementById('loginContainer').style.display = "block";
	return false;
	*/
	
	// authreason = authentication reason in plaintext for tracking.  Hijacking message for this
	
	var authReason = "";
	if (strMessage.match("rate"))
		authReason = "rate";
	else if (strMessage.match("playlist"))
		authReason = "playlist";
	
	window.location.href="/accounts/login/Login.aspx?authreason=" + authReason + "&urlReturn=" + window.location.href;
	return false;
}

function onMyAccount ()
{
	if (_user && _user.IsLoggedIn())
		location.href = "/members/" + _user.ID;
	else
		openLogin (OpenProfileOnLogin);
	return false;
}

function OpenProfileOnLogin (fSuccess)
{
	if (fSuccess)
		location.href = "/members/" + _user.ID;
}

function RequireLogin (fnPending, strMessage)
{
	if (fnPending && fnPending.tagName == "A")
	{
		var _elt = fnPending;
		fnPending = function ()
		{
			location.href = _elt.href;
		}
	}
	if (_user && _user.IsLoggedIn && (_user.IsLoggedIn() == true))
	{
		if (!fnPending)
			return true;

		fnPending (true);
	}
	else
		openLogin (fnPending, strMessage);
		
	return false;
}

function openSignup(fnPending)
{
	_fnPending = fnPending;
	var strFailedSignup = getCookie('ineligible');
	if (strFailedSignup)
	{
		ShowPanel('/accounts/ineligible.htm');
	}
	else
	{
		ShowPanel('/accounts/create.aspx');
	}
	return false;
}

function openLoginEmailConfirmation(id, mode, emailtoken)
{
	ShowPanel('/accounts/EmailConfirmation.aspx?mode=' + mode + '&id=' + id + "&emailtoken=" + emailtoken);
}

function User(id, nickname, img)
{
	this.ID = id;
	this.NickName = nickname;

	this.IsLoggedIn = function() { return !!this.ID; }

	this.DisplayUser = function ()
	{
		var fLoggedIn = this.IsLoggedIn ();
		
		SetClass (document.body, "loggedIn", fLoggedIn);
		SetClassOption (document.body, "loggedInAs", fLoggedIn ? id : null);

		var _eleusernameLink = document.getElementById('linkUserName');
		var _eleuserthumb = document.getElementById('userThumb');
		var _eleeditprofileLink = document.getElementById('linkEditProfile');
		if (_eleusernameLink)
		{
		    _eleeditprofileLink.href = '/members/' + this.ID;
			//InnerText (_eleusernameLink, this.NickName);
		}

		//user profile specific block
		if (_isUserProfile && (_userprofileID == this.ID))
		{
			var eltSubscribe = document.getElementById('SubscribeLink');
			if (eltSubscribe)
				eltSubscribe.className = 'off';
			
			var eltReportUserLink = document.getElementById('userProfileReportUserLink');
			if (eltReportUserLink)
				eltReportUserLink.className = 'off';
				
			var eltEditProfileLink = document.getElementById('userProfileEditLink');
			if (eltEditProfileLink)
				eltEditProfileLink.className = 'editProfileLink';
		}
	}
}

function LoadEmailConfirmation(req)
{
	var xmlDoc = req.responseXML;
	var error = xmlDoc.getElementsByTagName("error")[0].childNodes[0].nodeValue

	if (error == 0)
	{
		var id = xmlDoc.getElementsByTagName("id")[0].childNodes[0].nodeValue;
		var nickname = xmlDoc.getElementsByTagName("name")[0].childNodes[0].nodeValue;
		var emailtoken = xmlDoc.getElementsByTagName("emailtoken")[0].childNodes[0].nodeValue;
		
		openLoginEmailConfirmation(id, 'signup', emailtoken);
	}
	else
	{

		//reload captchIt image when creating new account fails
		if(error == 'failed captchIt')
		{
			error = "Please type the 4 digit code in the image.";
			ReloadImage();

		}
		else if (error == 'ineligible')
		{
			setCookie('ineligible', 'ineligible', 1, "/");
			ShowPanel('/accounts/ineligible.htm')
			return false;
		}
		else if (error == 'Email is not confirmed')
		{
			var id = xmlDoc.getElementsByTagName("id")[0].childNodes[0].nodeValue;
			var emailtoken = xmlDoc.getElementsByTagName("emailtoken")[0].childNodes[0].nodeValue;
			//hideLogin ();
			openLoginEmailConfirmation(id, 'login', emailtoken);
			return false;
		}
		document.getElementById('errorMsg').innerHTML = error;
		document.getElementById('errorMsg').className = "errorMsg";
	}

	return (error == 0);
}

function Delegate ()
{
	var _rgfn = [];

	this.Register = function (fn, wnd)
	{
		_rgfn.push (fn);
		AttachEvent (wnd || window, "unload",
			function ()
			{
				for (var i = _rgfn.length - 1; i >= 0; i--)
					if (_rgfn [i] == fn)
						_rgfn.splice (i, 1);
			}
		);
	}

	this.Invoke = function ()
	{
		var rgArgs = new Array ();
		for (var iArg = 0; iArg < arguments.length; iArg ++)
			rgArgs.push (arguments [iArg]);
	
		var fRet = false;
		
		var c = _rgfn.length;
		for (var i = 0; i < c; i ++)
			try { fRet = fRet || _rgfn [i].apply (null, rgArgs); } catch (e) {}
		
		return fRet;
	}
}

var _delegateLoginStatusChanged = new Delegate ();

function LoadUser(req)
{
	var xmlDoc = req.responseXML;

	var error = xmlDoc.getElementsByTagName("error")[0].childNodes[0].nodeValue

	if (error == 0)
	{
		var id = xmlDoc.getElementsByTagName("id")[0].childNodes[0].nodeValue;
		var nickname = xmlDoc.getElementsByTagName("name")[0].childNodes[0].nodeValue;

		_user = new User (id, nickname);
		_user.DisplayUser ();

		closeLogin ();

		if (_fnPending)
		{
			_fnPending (true);
			_fnPending = null;
		}
		
		_delegateLoginStatusChanged.Invoke (true);

		if (parent.OnLoggedIn)
			parent.OnLoggedIn();
	}
	else
	{
		//reload captchIt image when creating new account fails
		if(error == 'failed captchIt')
		{
			error = "Please type the 4 digit code in the image.";
			ReloadImage();

		}
		else if (error == 'ineligible')
		{
			setCookie('ineligible', 'ineligible', 1, "/");
			ShowPanel('/accounts/ineligible.htm')
			return false;
		}
		else if (error == 'Email is not confirmed')
		{
			var id = xmlDoc.getElementsByTagName("id")[0].childNodes[0].nodeValue;
			var emailtoken = xmlDoc.getElementsByTagName("emailtoken")[0].childNodes[0].nodeValue;
			//hideLogin ();
			openLoginEmailConfirmation(id, 'login', emailtoken);
			return false;
		}
		document.getElementById('errorMsg').innerHTML = error;
		document.getElementById('errorMsg').className = "errorMsg";
	}

	return (error == 0);
}

function onLoginSubmit()
{
	var eltError = document.getElementById('errorMsg');
	
	var eltUsername = document.getElementById('usernameText');
	var strUsername = trim (eltUsername.value);
	
	if (eltUsername.fDefault || !IsValidEmail (strUsername))
	{
		eltError.innerHTML = 'Please enter an email address.';
		eltError.className = 'errorMsg';
		return false;
	}
	
	var eltPassword = document.getElementById('passwordText');
	var strPassword = trim (eltPassword.value);
	if (eltPassword.fDefault || !strPassword)
	{
		eltError.innerHTML = 'Please enter a password.';
		eltError.className = 'errorMsg';
		return false;
	}

	var strURL = "/accounts/login.ashx?un="+encodeURIComponent(strUsername)+"&pw="+encodeURIComponent(strPassword);
	LoadXML(strURL, LoadUser);
	pageTracker._trackPageview("/Actions/Login_Form_Submit");
	return false;
}


function TrackPanelView(pagename, channel)
{
	_hbSet ('n', HitboxClean(pagename));
	_hbSet ('vcon', HitboxClean(channel));
	_hbSet ('cv.c15', 'website|panelview'); // count all panelviews in a global counter
	_hbSend ();
}

function HitboxClean(str)
{
	var ret = str.replace (' ', '+');
	ret = ret.replace (':', '-');
	ret = ret.toLowerCase ();
	return ret;
}


//Fetch password
function SendEmailRequest()
{
	var email = document.getElementById('txtEmailAddress').value;
	if (email)
	{
		LoadXML ("/accounts/FetchPassword.ashx?email=" + encodeURIComponent(email),
			function (req)
			{
				var xmlDoc = req.responseXML;
				var error = xmlDoc.getElementsByTagName("error")[0].childNodes[0].nodeValue
				var message = xmlDoc.getElementsByTagName("message")[0].childNodes[0].nodeValue;

				ShowErrorText ('requestEmailRespone', message, error != 0);
			}
		);
	}
	
	return false;
}

/* Create Account Page */

function doCreateAccountSubmit(form, evt)
{
	var qs;
	var _dob = null;

	//format date of birth
	_dob = GetDob(form);

	//create account if form validates
	if(fValidateForm())
	{
		qs = "?name=" + encodeURIComponent(form["userName"].value);
		qs += "&email=" + encodeURIComponent(form["emailAddress"].value);
		qs += "&pw=" + encodeURIComponent(form["password"].value);
		qs += "&gender=" + encodeURIComponent(form["gender"].options[form["gender"].selectedIndex].value);
		qs += "&dob=" + encodeURIComponent(_dob);
		qs += "&nl=" + encodeURIComponent(form["newsletter"].checked);
		qs += "&captch=" + encodeURIComponent(form["captch"].value);
		CreateAccount(qs);
		// TRACKING
		pageTracker._trackPageview("/Actions/Signup_Form_Submit");	//GA
		var s=s_gi(s_account); s.linkTrackVars='events,eVar3'; s.linkTrackEvents='event3'; s.events='event3';
		s.eVar3='standard registration'; s.trackingServer='omn.crackle.com'; s.trackingServerSecure='omn.crackle.com';
		s.tl(true,'o','registration');
	}
	
	CancelEvent(evt || window.event);

	return false;
}



function AddDefaultName()
{
	var emailTxt = document.getElementById('emailAddress');
	var userNameTxt = document.getElementById('userName');

	if(fEmailAddress())
	{
		if(emailTxt.value.indexOf("@") > -1 )
		{
			var namesarr = emailTxt.value.split("@" );
			userNameTxt.value = namesarr[0];
		}
	}

}


function fValidateForm()
{
	var strErrorMsg = "Please enter all fields marked with *";
	var fValid = fEmailAddress();
	fValid = fUsername() && fValid;
	fValid = fPassword() && fValid;
	fValid = fPasswordConfirm() && fValid;
	fValid = fGender() && fValid;
	fValid = fDob() && fValid;
	fValid = fTos() && fValid;
	fValid = fCode() && fValid;
	
	if(fValid)
	{
		fValid = IsValidEmail (document.getElementById("emailAddress").value);
		ShowError ('emailAddressReq', !fValid);
		if (!fValid)
			strErrorMsg = "Enter a valid email address.";

		var strPassword = trim(document.getElementById("password").value);

		if (fValid)
		{
			fValid = (strPassword.length == document.getElementById("password").value.length);
			ShowError ('passwordReq', !fValid);
			
			if (!fValid)
				strErrorMsg = "The password cannot begin or end with spaces.";
		}	

		if (fValid)
		{
			fValid = (strPassword.length >= 4);
			ShowError ('passwordReq', !fValid)
			if (!fValid)
				strErrorMsg = "The password must contain at least 4 characters.";
		}
		
		if (fValid)
		{
			fValid = (document.getElementById("password").value == document.getElementById("passwordConfirm").value);
			ShowError ('passwordConfirmReq', !fValid);
			if (!fValid)
				strErrorMsg = "Passwords do not match.";
		}
	}

	var eltErrorMsg = document.getElementById('errorMsg');
	SetClass (eltErrorMsg, "errorMsg", !fValid);
	if (!fValid)
		InnerText (eltErrorMsg, strErrorMsg);

	return fValid;

}


function trim(stringToTrim) 
{
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}

function fEmailAddress( )
{
	return ShowInputError ("emailAddress", 'emailAddressReq');
}

function fCode()
{
	return ShowInputError ("captch", 'codeReq');
}

function fUsername()
{
	return ShowInputError ("userName", 'nameReq');
}

function fPassword()
{
	return ShowInputError ("password", 'passwordReq');
}

function fPasswordConfirm()
{
	return ShowInputError ("passwordConfirm", 'passwordConfirmReq');
}

function fGender()
{
	var eltGender = document.getElementById("gender");
	return ShowError ('genderReq', eltGender.options[eltGender.selectedIndex].value == '0');
}

function fDob()
{
	var eltYear = document.getElementById("year");
	var eltMonth = document.getElementById("month");
	var eltDay = document.getElementById("day");
	var fError = eltMonth.options[eltMonth.selectedIndex].value == 'none' || eltDay.options[eltDay.selectedIndex].value == 'none' || eltYear.options[eltYear.selectedIndex].value == 'none';
	
	return ShowError ('dobReq', fError);
}

function fTos()
{
	return ShowError ('tosReq', !document.getElementById('tos').checked);
}

function ShowError (idError, fError)
{
	var eltError = document.getElementById (idError);
	if (!eltError)
		return;
	SetClass (eltError, "errorMsg", fError);
	return !fError;
}

function ShowInputError (idInput, idError)
{
	var eltInput = document.getElementById (idInput);
	var eltError = document.getElementById (idError);
	if (!eltInput || !eltError)
		return;
	
	var fError = eltInput.fDefault || !trim (eltInput.value);
	SetClass (eltError, "errorMsg", fError);
	return !fError;
}

function ShowErrorText (idError, strError, fError)
{
	var eltError = document.getElementById (idError);
	if (!eltError)
		return;
	InnerText (eltError, strError);
	SetClass (eltError, "errorMsg", fError);
	SetClass (eltError, "txtMsg", !fError);
}

function GetDob(form)
{
	var month, day, year, dob;

	month = form["month"].options[form["month"].selectedIndex].value;

	day = form["day"].options[form["day"].selectedIndex].value;

	year = form["year"].options[form["year"].selectedIndex].value;

	dob = month + "-" + day + "-" + year;

	return dob;
}

function CreateAccount(qs)
{
	strURL = "/accounts/CreateUserAccount.ashx" + qs;
	LoadXML(strURL, LoadEmailConfirmation);
}

function ReloadImage()
{
	var today = new Date();

	_image1 = document.getElementById('Image1');
	_image1.src = "/accounts/create/image.ashx?cacheBust=" + Date.UTC(today.getFullYear(), today.getMonth(), today.getDay(), today.getHours(), today.getMinutes(), today.getSeconds(), today.getMilliseconds());;

	var eltCaptchaField = document.getElementById('captch');
	if (eltCaptchaField)
	{
		eltCaptchaField.value = '';
		eltCaptchaField.focus();
	}
}



/* End Create Account Page */


function LoadUrl(strUrl)
{
	window.location.href = strUrl;
}

function SubscribeToUser(idUser)
{
	var strML = "fu=" + idUser + "&fx=";
	SubscribeToList(strML, "subscribe to this user.");
}

function SubscribeToList(strML, strLoginMsg)
{
	if (!strLoginMsg)
		strLoginMsg = "subscribe to this show.";

	RequireLogin (
		function (fSuccess)
		{
			if (fSuccess)
				CallSubscription(strML);
		},
		strLoginMsg
	);
}

function showChangeVerificationEmailForm()
{
	document.getElementById("DivChangeVerificationEmailForm").style.display = 'block';
}

function doSendConfirmationEmail(userid, emailtoken)
{
	DoAjax("/accounts/SendConfirmationEmail.ashx?mode=resend&id=" + encodeURIComponent(userid) + "&emailtoken=" + encodeURIComponent(emailtoken),
		function ()
		{
			var eltResponseMsg = document.getElementById('DivEmailSentMsg');
			if (eltResponseMsg)
			{
				eltResponseMsg.innerHTML = "The confirmation email has been resent.";
				eltResponseMsg.style.display = 'inline';
			}
		},
		function (error)
		{
			var eltResponseMsg = document.getElementById('DivEmailSentMsg');
			if (eltResponseMsg)
			{
				eltResponseMsg.innerHTML = error;
				eltResponseMsg.style.display = 'inline';
			}
		}
	);
}

function doSendConfirmationEmailWhenLogin(userid, emailtoken)
{
	DoAjax("/accounts/SendConfirmationEmail.ashx?mode=resend&id=" + encodeURIComponent(userid) + "&emailtoken=" + encodeURIComponent(emailtoken),
		function ()
		{
		},
		function (error)
		{
			var eltResponseMsg = document.getElementById('DivEmailSentMsg');
			if (eltResponseMsg)
			{
				eltResponseMsg.innerHTML = error;
				eltResponseMsg.style.display = 'inline';
			}
		}
	);
}

function doSendtoDifferentEmailAddress(userid, email)
{
	var eltEmailErrorMsg = document.getElementById('emailErrorMsg')
	if(eltEmailErrorMsg)
		eltEmailErrorMsg.style.display = 'none';
			
	if(IsValidEmail(email))
	{
		DoAjax("/accounts/SendConfirmationEmail.ashx?mode=login&id=" + encodeURIComponent(userid) + "&email=" + email,
			function ()
			{
				var eltResponseMsg = document.getElementById('DivEmailSentMsg');
				if (eltResponseMsg)
				{
					eltResponseMsg.innerHTML = "The confirmation email has been resent to the new email address.";
					eltResponseMsg.style.display = 'inline';
				}
			},
			function (error)
			{
				var eltResponseMsg = document.getElementById('DivEmailSentMsg');
				if (eltResponseMsg)
				{
					eltResponseMsg.innerHTML = error;
					eltResponseMsg.style.display = 'inline';
				}
			}
		);
	}
	else{
		if(eltEmailErrorMsg)
			eltEmailErrorMsg.style.display = 'inline';
	}
}


function CallSubscription(strML)
{
	DoAjax("/subscriptions/create.ashx?p=1&ml=" + encodeURIComponent(strML),
		function (idSubscription, strName, nSubscribers)
		{
			ShowPanel('/accounts/subscribed.aspx');
			var eltSubscribeLink = document.getElementById('SubscribeLink');
			if (eltSubscribeLink)
			{
				eltSubscribeLink.innerHTML = "Subscribed";
				eltSubscribeLink.href = "#";
			}

			var eltSubscriberCount = document.getElementById('subscriberCount');
			if (eltSubscriberCount)
			{
				var n = parseInt(eltSubscriberCount.innerHTML);
				n++;
				InnerText(eltSubscriberCount, n);
			}


		},
		function (strError)
		{
			//for now just change the link anyway if the user accidentally subscribes twice.
			if (strError.indexOf("another subscription with that query already exists") != -1)
			{
				ShowPanel('/accounts/subscribed.aspx?error=1');
				var eltSubscribeLink = document.getElementById('SubscribeLink');
				eltSubscribeLink.innerHTML = "Subscribed";
				eltSubscribeLink.href = "#";
			}
			else
			{
				alert (strError);
			}
		}
	);
}

function WithdrawEntry(idMedia,strElementID)
{
	if (confirm('Are you sure you wish to withdraw this entry?'))
	{
		DoAjax("/app/WithdrawEntry.ashx?id=" +idMedia,
			function (id)
			{

				if (strElementID)
				{
					var elt = document.getElementById(strElementID);
					if (elt)
					{
						elt.style.display="none";
					}
				}

			},
			function (strError)
			{

				alert (strError);

			}

		);
		return false;
	}
}





function __FlashExternalCall (arguments)
{
	var strControl = arguments [0];
	if (!strControl)
		return;
	var eltPlayer = document.getElementById (strControl);
	if (!eltPlayer)
		return;

	var strFunc = arguments [1];
	var rgArgs = [];

	for (var i = 2; i < arguments.length; i++)
	{
		var arg = arguments [i];
		if (typeof (arg) == "string" && arg.substr (0, "__FlashArg".length) == "__FlashArg")
		{
			var arg2 = arg;
			rgArgs.push (
				function ()
				{
					// this craziness is to work around a bug in firefox
					var rgArgs2 = Array.prototype.slice.call (arguments, 0);
					switch (rgArgs2.length)
					{
						case 1: return eltPlayer [arg2] (rgArgs2 [0]);
						case 2: return eltPlayer [arg2] (rgArgs2 [0], rgArgs2 [1]);
						case 3: return eltPlayer [arg2] (rgArgs2 [0], rgArgs2 [1], rgArgs2 [2]);
						case 4: return eltPlayer [arg2] (rgArgs2 [0], rgArgs2 [1], rgArgs2 [2], rgArgs2 [3]);
						case 5: return eltPlayer [arg2] (rgArgs2 [0], rgArgs2 [1], rgArgs2 [2], rgArgs2 [3], rgArgs2 [4]);
						case 6: return eltPlayer [arg2] (rgArgs2 [0], rgArgs2 [1], rgArgs2 [2], rgArgs2 [3], rgArgs2 [4], rgArgs2 [5]);
					}
				}
			);
		}
		else
		{
			rgArgs.push (arg);
		}
	}

	setTimeout (function () { window [strFunc].apply (null, rgArgs); }, 1);
}

//247 classifications
function GetClassificationName(nClassification)
{
	if (nClassification <= 100)
		return "G";
	else if (nClassification <= 120)
		return "PG";
	else if (nClassification <= 140)
		return "PGP";
	else
		return "MA";
}

var _month =
[
	"",
	"January",
	"February",
	"March",
	"April",
	"May",
	"June",
	"July",
	"August",
	"September",
	"October",
	"November",
	"December"
];

// called by flash to navigate to URLs
function flashNavigate (url, windowStr, fSecure)
{
	if (fSecure)
	{
		if (url.indexOf ("http://") == 0)
			url = "https://" + url.substr (7);
		else if (url.charAt (0) == '/')
			url = "https://" + location.host + url;
		else
			url = "https://" + location.host + '/' + url;
	}
	if (windowStr == "_self")
		location.href = url;
	else
		window.open (url, windowStr);
}


function IsValidEmail (str)
{
	return str.match (/^[_a-zA-Z0-9-']+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.(([0-9]{1,3})|([a-zA-Z]{2,3})|(arpa|aero|asia|coop|info|jobs|mobi|museum|name|travel))$/);
}

function star_onMouseClick (elt, mediaID)
{
	//if (!evt) evt=window.event;
	//var elt = GetTarget (evt);
	
	//var strClass = elt.className;
	var iStar = elt.charAt (5) - '0';
	UpdateRating(mediaID, iStar);
	shareRatingOnFacebook(iStar);
}

function star_onMouseMove (evt)
{

	if (!evt) evt=window.event;
	var elt = GetTarget (evt);

	var strClass = elt.className;
	var iStar = strClass.charAt (5) - '0';
	star_Hover (iStar);
}

function star_Hover (iStar)
{
	var eltHover = document.getElementById ('hover');
	eltHover.className = "hover" + iStar;
}

function UpdateRating(mediaID, myRating, event)
{
	DoAjax("/app/RateMedia.ashx?id=" + mediaID + "&rating=" + myRating,
	function (rating) 
	{
		if (rating != -1)
		{
			document.getElementById("RatingWrapper").className = ("rated star_" + myRating);
			//document.getElementById("RatingWrapper").className = ("star_" + rating);
			if (document.getElementById("RatingText"))
			{
				if (document.getElementById("RatingTextHover"))
					document.getElementById("RatingTextHover").style.display = "none";

				document.getElementById("RatingText").innerHTML = "Thanks for Rating";
				document.getElementById("RatingText").style.display = "block";
			}
		}
	});
}

function rating_MouseOver (elt)
{
	if (document.getElementById("RatingText"))
		document.getElementById("RatingText").style.display = "none";

	var eltRatingText = document.getElementById("RatingTextHover");
	if (! eltRatingText)
		return;
	else
		eltRatingText.style.display = "block";

	if (!(_user && _user.IsLoggedIn && (_user.IsLoggedIn() == true)))
	{
		eltRatingText.innerHTML = "Login or Join to Rate";
		return;
	}
	
	var iStar = elt.charAt (5) - '0';
	
	switch (iStar)
	{
	case 1:
		eltRatingText.innerHTML = "Poor";
		break;
	case 2:
		eltRatingText.innerHTML = "Nothing Special";
		break;
	case 3:
		eltRatingText.innerHTML = "Worth Watching";
		break;
	case 4:
		eltRatingText.innerHTML = "Pretty Cool";
		break;
	case 5:
		eltRatingText.innerHTML = "Awesome";
		break;
	default:
		return;
	}
	
//	if (_user.ID == creatorID)
//	{
//		eltRatingText.InnerHTML = "You cannot rate your own video"
//		return;
//	}
}

function rating_MouseOut ()
{
	var eltRatingText = document.getElementById("RatingTextHover");
	if (! eltRatingText)
		return;
	else
		eltRatingText.style.display = "none";
	
	if (document.getElementById("RatingText"))
		document.getElementById("RatingText").style.display = "block";
}






function HoverDelay (_elt, _fnOpen, _fnClose, _delayOpen, _delayClose)
{
	if (isNaN (_delayOpen))
		_delayOpen = 1000;
		
	if (isNaN (_delayClose))
		_delayClose = 1000;
	
	var _timerOpen;
	var _timerClose;
	var _fOpen;
	AttachEvent (_elt, "mousemove", onMouseMove);
	var _this = this;
	
	function onMouseMove (evt)
	{
		if (!evt) evt = window.event;
		
		if (_timerClose)
		{
			clearTimeout (_timerClose);
			_timerClose = null;
			
			AttachEvent (document, "mousemove", onDocumentMouseMove);
			return;
		}
		
		if (_timerOpen || _fOpen)
			return;

		AttachEvent (document, "mousemove", onDocumentMouseMove);
		if (_delayOpen)
			_timerOpen = setTimeout (onOpenTimer, _delayOpen);
		else
			onOpenTimer ();
	}
	
	function onDocumentMouseMove (evt)
	{
		if (!evt) evt = window.event;
		
		var eltTarget = GetTarget (evt);
		if (IsParentOf (_elt, eltTarget))
			return;
		
		DetachEvent (document, "mousemove", onDocumentMouseMove);
		
		if (_timerOpen)
		{
			clearTimeout (_timerOpen);
			_timerOpen = null;
		}
		else if (_fOpen && !_timerClose)
		{
			_timerClose = setTimeout (_this.onCloseTimer, _delayClose);
		}
	}
	
	function onOpenTimer ()
	{
		_timerOpen = null;
		_fOpen = true;
		
		if (_fnOpen)
			_fnOpen ();
	}
	
	this.onCloseTimer = function ()
	{
		_timerClose = null;
		_fOpen = false;
		
		if (_fnClose)
			_fnClose ();
	}
	
	this.Close = function ()
	{
		if (_fOpen)
		{
			DetachEvent (document, "mousemove", onDocumentMouseMove);
			if (_timerClose)
				clearTimeout (_timerClose);
			this.onCloseTimer ();
		}
		return false;
	}
}

function ToolTip (_elt)
{
	_elt._tt = this;
	
	function onOpen ()
	{
		AddClass (_elt, "hover");
	}
	
	function onClose ()
	{
		RemoveClass (_elt, "hover");
	}
	
	HoverDelay.call (this, _elt, onOpen, onClose, 500, 150);
}

function BlockingToolTip (_elt)
{
	ToolTip.call (this, _elt);

	var _fBlocked = false;
	this.Block = function ()
	{
		_fBlocked = true;
	}
	this.Unblock = function ()
	{
		_fBlocked = false;
	}
	

	var _fnonCloseTimer = this.onCloseTimer;
	this.onCloseTimer = function ()
	{
		if (_fBlocked)
			return;
		_fnonCloseTimer.call (this);

	}
}

function ShowsSlidey (_elt)
{
	function onOpen ()
	{
		_elt.className = "showsMenuContainerOpen";

		var eltMenu = document.getElementById ("showsMenu");
		var eltNavigation = document.getElementById ("navigation");
		var width = eltNavigation.scrollWidth - eltMenu.parentNode.offsetLeft;

		new Tween (
			1500,
			eltMenu.offsetWidth, width,
			Tween_evaluate (
				Tween_easeOut,
				function (value)
				{
					eltMenu.style.width = value + "px";
				}
			)
		);
	}
	
	function onClose ()
	{
		_elt.className = "showsMenuContainerClosed";

		var eltMenu = document.getElementById ("showsMenu");
		
		new Tween (
			1500,
			eltMenu.scrollWidth, 25,
			Tween_evaluate (
				Tween_easeOut,
				function (value)
				{
					eltMenu.style.width = value + "px";
				}
			),
			function ()
			{
				eltMenu.style.width = "";
			}
		);
	}

	HoverDelay.call (this, _elt, onOpen, onClose);
}


function assignUserName()
{
	var emailTxt = document.getElementById('emailAddress');
	var userNameTxt = document.getElementById('userName');
	var straddr = emailTxt.value;
	if(straddr.indexOf("@") > -1 && userNameTxt.value == "")
	{
		var namesarr = straddr.split("@" );
		userNameTxt.value =  namesarr[0];
	}
}

function SelectCategory (idCategory)
{
	var eltCategoryScroller = document.getElementById ("scrollerCategories");
	if (eltCategoryScroller)
		SelectLI (eltCategoryScroller, idCategory);
}

function SelectLI (eltUL, id, fScroll)
{

   for (var eltLI = eltUL.firstChild; eltLI; eltLI = eltLI.nextSibling)
	    {
		    if (!eltLI.tagName || eltLI.tagName.toUpperCase () != "LI")
			    continue;
    		
		    var attrID = eltLI.getAttribute ("g:id");
		    if (!attrID)
			    continue;
    		
		    var fCurrent = parseInt (attrID) == id;
    		
		    SetClass (eltLI, "selectedItem", fCurrent);
    		
		    //if (fScroll && fCurrent)
		    //	return eltLI;
	}
}

function navCat () { return true; }

function scheduleAlert (elt, idMedia)
{
	var eltDL = elt.parentNode.parentNode.parentNode.parentNode.parentNode;
	var tooltip = eltDL.parentNode._tt;
	
	if (tooltip)
		tooltip.Block ();
	
	if(!_user)
	{
		AddClass(eltDL, 'login');
		eltDL.style.height = eltDL.scrollHeight + "px";
	}
	
	RequireLogin (
		function (user)
		{
			if (user)
			{
				// schedule alert
				LoadXML ("/schedule/saveschedule.ashx?idMedia=" + encodeURIComponent(idMedia),
					function (req)
					{
						var xmlDoc = req.responseXML;
						var error = xmlDoc.getElementsByTagName("error")[0].childNodes[0].nodeValue;
						//var message = xmlDoc.getElementsByTagName("message")[0].childNodes[0].nodeValue;
						//ShowErrorText ('requestEmailRespone', message, error != 0);
						RemoveClass(eltDL, "login");
						
						if(error == 0)
							AddClass (eltDL, "thankYou", true);
						else
							AddClass (eltDL, "error", true);
							
						eltDL.style.height = eltDL.scrollHeight + "px";
					}
				);
			}

			if (tooltip)
			{
				tooltip.Unblock ();
				
				if(HasClass(eltDL, "login")) 
				{
					RemoveClass(eltDL, "login");
					eltDL.style.height = eltDL.scrollHeight + "px";
				}
					
				if (!user)
				{
					tooltip.Close ();
				}
				
			
			}
		},
		"get an alert for this episode"
	);
	

	
	return false;
}
