event_queue("onload", site_first_load);
event_queue("onresize", fix_height);

if (document.addEventListener)
	document.addEventListener("DOMContentLoaded", site_first_load, false);

/*@cc_on @*/
/*@if (@_win32)
	document.write('<script id="__ie_onload" defer="defer" src="javascript:void(0);"><\/script>');
	var script = $("__ie_onload");
	script.onreadystatechange = function ()
	{
		if (this.readyState == "complete")
			site_first_load();
	};
/*@end @*/

function site_first_load()
{
	fix_height();

	var inputs = document.getElementsByTagName("input");
	var imgs = document.getElementsByTagName("img");
	var i;

	function install_toggled(o)
	{
		o.onmouseover = function ()
		{
			site_toggle_img(this, true);
		}
		o.onmouseout = function ()
		{
			site_toggle_img(this, false);
		}
	}

	for (i = 0; i < inputs.length; i++)
	{
		if (inputs[i].name != "username" && inputs[i].name != "password" && inputs[i].name != "password2" && inputs[i].name != "email_address")
			inputs[i].setAttribute("spellcheck", "true");

		if (/(^| )toggled($| )/.test(inputs[i].className))
			install_toggled(inputs[i]);
	}

	for (i = 0; i < imgs.length; i++)
	{
		if (/(^| )toggled($| )/.test(imgs[i].className))
			install_toggled(imgs[i]);
	}

	window.setTimeout(site_keepalive, 600000);
}

function site_keepalive()
{
	var img = new Image();
	img.src = site_url + "/keepalive.html?t=" + new Date().getTime();

	window.setTimeout(site_keepalive, 600000);
}

window.onerror = event_log_error;
function event_log_error(message, source, line)
{
	function ifdef(v, alt)
	{
		if (typeof(v) == "undefined")
			return typeof(alt) == "undefined" ? "" : alt;
		else
			return v;
	}

	function finish()
	{
	}

	var site_url = ifdef(window.site_url, "");
	var flash = {major: "unknown", minor: "", rev: ""};
	if (ifdef(window.deconcept, null) != null)
		flash = deconcept.SWFObjectUtil.getPlayerVersion();

	var info = {
		"cookies": ifdef(navigator.cookieEnabled),
		"navigator": ifdef(navigator.appName) + " " + ifdef(navigator.appVersion),
		"agent": ifdef(navigator.userAgent),
		"platform": ifdef(navigator.platform),
		"flash": flash.major + "." + flash.minor + "." + flash.rev,
		"referrer": document.referrer
	};
	var info_text = "";
	for (var k in info)
		info_text += k + ": " + info[k] + "\n";

	var data = "message=" + encodeURIComponent(message) + "&file=" + encodeURIComponent(source) + "&line=" + encodeURIComponent(line);
	data += "&location=" + encodeURIComponent(window.location.href);
	data += "&info=" + encodeURIComponent(info_text);

	http_post(site_url + "/js-error.html?t=" + new Date().getTime(), data, finish);
}

var fix_height_ignore_next = false;
function fix_height()
{
	if (fix_height_ignore_next)
	{
		fix_height_ignore_next = false;
		return;
	}

	var h = 0;

	if (window.innerHeight)
		h = window.innerHeight;
	else if (document.documentElement && document.documentElement.offsetHeight)
		h = document.documentElement.offsetHeight;

	if ($("site-overlay-container") && $("site-overlay-container").offsetHeight > h)
		h = $("site-overlay-container").offsetHeight + 100;

	if ($("site-container") && $("site-container").style)
	{
		$("site-container").style.minHeight = h + "px";
		if ($("site-container").style.height != "")
		{
			$("site-container").style.height = "";
			fix_height_ignore_next = true;
		}
	}

	function fix_no_min()
	{
		if ($("site-container") && $("site-container").offsetHeight < (h - 5))
		{
			$("site-container").style.height = (h - 5) + "px";
			fix_height_ignore_next = true;
		}
	}

	window.setTimeout(fix_no_min, 0);
}

function fix_height_reflow()
{
	fix_height();

	window.setTimeout(function ()
	{
		// Force a darn reflow!
		if ($("site-footer"))
			$("site-footer").style.bottom = $("site-footer").style.bottom ? '' : '18px';
		fix_height();
	}, 0);
}

function site_goal_search_clear(el)
{
	var textbox = $(el ? el : "site-goal-search-textbox");
	if (typeof(textbox.site_cleared) != "undefined")
		return;

	textbox.value = "";
	textbox.site_cleared = false;
}

function site_toggle_inside_img(parent, toggle)
{
	var imgs = parent.getElementsByTagName ? parent.getElementsByTagName("img") : parent.all.tags.img;

	for (var i = 0; i < imgs.length; i++)
		site_toggle_img(imgs[i], toggle);

	if (toggle)
		parent.className += " hover";
	else
		parent.className = parent.className.replace(/\bhover\b/, "");
}

function site_toggle_img(img, toggle)
{
	if (typeof(img.toggleDefault) == "undefined")
		img.toggleDefault = img.src.indexOf("-default.") != -1;

	if (toggle)
		img.src = img.src.replace(img.toggleDefault ? "-default." : "-off.", "-over.");
	else
		img.src = img.src.replace("-over.", img.toggleDefault ? "-default." : "-off.");
}

function site_toggle_class(el, name, toggle)
{
	if (toggle)
		el.className += " " + name;
	else
		el.className = el.className.replace(new RegExp("\\b" + name + "\\b"), "");
}

function get_mouse_pos(ev)
{
	var pos = {x: 0, y: 0};

	if (ev.pageX || ev.pageY)
	{
		pos.x = ev.pageX;
		pos.y = ev.pageY;
	}
	else if (ev.clientX || ev.clientY)
	{
		pos.x = ev.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
		pos.y = ev.clientY + document.body.scrollTop + document.documentElement.scrollTop;
	}

	return pos;
}

function get_element_pos(el)
{
	var pos = {x: 0, y: 0};

	if (el.offsetParent)
	{
		do
		{
			pos.x += el.offsetLeft;
			pos.y += el.offsetTop;
			el = el.offsetParent;
		}
		while (el);
	}

	return pos;
}

var slider_drag_state = {};
function slider_setup(id, min_id, max_id, min_value, max_value)
{
	var range_value = max_value - min_value;
	var min_el, max_el, label_el;

	var imgs = $(id).getElementsByTagName("img");
	for (var i = 0; i < imgs.length; i++)
	{
		if (imgs[i].className == "min")
			min_el = imgs[i];
		else if (imgs[i].className == "max")
			max_el = imgs[i];
	}

	var divs = $(id).getElementsByTagName("div");
	for (var i = 0; i < divs.length; i++)
	{
		if (divs[i].className == "label")
			label_el = divs[i];
	}

	function label_update()
	{
		label_el.innerHTML = $(min_id).value + " - " + $(max_id).value;
	}

	function slider_v_to_x(v)
	{
		var floating = (Number(v) - min_value) / range_value;
		return Math.ceil(floating * 140 - 4);
	}

	function slider_x_to_v(x)
	{
		x = Number(x.replace("px", "")) + 4;
		var v = Math.ceil((x / 140) * range_value + min_value);
		return v > max_value ? max_value : v;
	}

	min_el.style.left = slider_v_to_x($(min_id).value) + "px";
	max_el.style.left = slider_v_to_x($(max_id).value) + "px";
	label_update();

	min_el.ondragstart = function ()
	{
		return false;
	}
	max_el.ondragstart = function ()
	{
		return false;
	}

	min_el.onmousedown = function (ev)
	{
		if (!ev)
			ev = event;
		if (ev.button == 2)
			return true;

		var pos = get_mouse_pos(ev);

		slider_drag_state.el = min_el;
		slider_drag_state.offset = pos.x - Number(min_el.style.left.replace("px", ""));
		slider_drag_state.min = slider_v_to_x(min_value);
		slider_drag_state.max = slider_v_to_x($(max_id).value);
		slider_drag_state.label_update = label_update;
		slider_drag_state.update_pos = function ()
		{
			$(min_id).value = slider_x_to_v(min_el.style.left);
		}

		slider_drag_set_handlers(id);

		return false;
	}

	max_el.onmousedown = function (ev)
	{
		if (!ev)
			ev = event;
		if (ev.button == 2)
			return true;

		var pos = get_mouse_pos(ev);

		slider_drag_state.el = max_el;
		slider_drag_state.offset = pos.x - Number(max_el.style.left.replace("px", ""));
		slider_drag_state.min = slider_v_to_x($(min_id).value);
		slider_drag_state.max = slider_v_to_x(max_value);
		slider_drag_state.label_update = label_update;
		slider_drag_state.update_pos = function ()
		{
			$(max_id).value = slider_x_to_v(max_el.style.left);
		}

		slider_drag_set_handlers(id);

		return false;
	}
}

function slider_drag_set_handlers(id)
{
	$(id).style.cursor = "ew-resize";

	document.body.onmousemove = slider_drag_continue;
	document.body.onmouseup = function ()
	{
		document.body.onmousemove = null;
		document.body.onmouseup = null;

		$(id).style.cursor = "";

		slider_drag_state.update_pos();
		slider_drag_state.label_update();
	}
}

function slider_drag_continue(ev)
{
	if (!ev)
		ev = event;
	pos = get_mouse_pos(ev);

	var x = (pos.x - slider_drag_state.offset);

	if (x < slider_drag_state.min)
		x = slider_drag_state.min;
	if (x > slider_drag_state.max)
		x = slider_drag_state.max;

	slider_drag_state.el.style.left = x + "px";

	slider_drag_state.update_pos();
	slider_drag_state.label_update();
}

function profile_flag_comment(href)
{
	function finish(request)
	{
		if (request.responseText == "1")
			alert("The comment has been flagged.");
		else
			alert("You\'ve already flagged this comment.");
	}

	if (user_is_guest)
		window.location.href = site_url + "/login/index.html";
	else
	{
		http_get(href + ";ajax", finish);
		return false;
	}
}

function show_login_overlay()
{
	function finish(request)
	{
		show_overlay_content(request.responseText, 645);
		make_overlay_dark();
	}

	http_get(site_url + "/login/ajax.html", finish);
	
	return false;
}

function make_overlay_dark()
{
	$("site-overlay-background").className = "dark";

	window.setTimeout(function ()
	{
		fix_height_reflow();
	}, 0);
}

function profile_flag_overlay(href)
{
	function finish(request)
	{
		show_overlay_content(request.responseText, 340);
	}

	if (user_is_guest)
		window.location.href = site_url + "/login/index.html";
	else
		http_get(href + ";ajax", finish);

	return false;
}

function profile_flag_validate(form)
{
	for (var i = 0; i < form.reason.length; i++)
	{
		if (form.reason[i].checked)
			return true;
	}

	alert("Please select a reason.");
	return false;
}

function goal_add_cheer(href)
{
	function finish(request)
	{
		if (request.responseText == "1")
		{
			alert("Thanks for cheering this person on!");

			window.location.reload();
		}
		else
			alert("You\'ve already cheered this person on.");
	}
	
	if (user_is_guest)
		return true;

	http_get(href + ";ajax", finish);
	return false;
}

function site_apply_scripts(el)
{
	try
	{
		var scripts = el.getElementsByTagName("script");
		var divs = el.getElementsByTagName("div");
		var script;

		for (var i = 0; i < divs.length; i++)
		{
			var div = divs[i];
			if (div.getAttribute("data-script"))
			{
				script = document.createElement("script");
				script.type = "text/javascript";
				script.src = div.getAttribute("data-script");
				document.getElementsByTagName("head")[0].appendChild(script);
			}
		}

		for (var i = 0; i < scripts.length; i++)
		{
			if (scripts[i].src)
			{
				script = document.createElement("script");
				script.type = "text/javascript";
				script.src = scripts[i].src;
				document.getElementsByTagName("head")[0].appendChild(script);
				continue;
			}

			var t = scripts[i].text;
			t = t.replace("<!-- // --><![CDATA[", "");

			if ("execScript" in window)
				window.execScript(t);
			else if ("eval" in window)
				window.eval(t);
			else
				eval(t);
		}
	}
	catch (e)
	{
		// Ignore.
	}
}

function show_overlay_content(html, w, skip_scripts)
{
	var container = $("site-overlay-container");

	if (!container)
	{
		var pos = get_element_pos($("site-content"));

		var container = document.createElement("div");
		container.id = "site-overlay-container";
		container.style.top = (pos.y - 80) + "px";
		container.style.visibility = "hidden";

		$("site-content").appendChild(container);
	}

	function finish()
	{
		if (!skip_scripts)
			site_apply_scripts(container);

		site_first_load();
	}

	window.overlayCloseWarning = null;

	show_overlay_background(true);
	container.style.width = w + "px";
	if (typeof(html) == "object")
		container.appendChild(html);
	else
		container.innerHTML = html;

	window.scrollTo(0, 0);
	window.setTimeout(finish, 0);

	show_overlay_fix_size(true);
	site_first_load();
}

function hide_overlay_content()
{
	show_overlay_background(false);

	fix_height_reflow();

	if ($("site-overlay-container"))
		$("site-overlay-container").innerHTML = "";
}

function show_overlay_background(toggle)
{
	if (!$("site-overlay-background"))
		return;

	$("site-overlay-background").className = "";
	$("site-overlay-background").style.display = toggle ? "block" : "none";

	window.setTimeout(show_overlay_fix_size, 0);
	window.setTimeout(show_overlay_fix_size, 10);

	$("site-overlay-background").onclick = function ()
	{
		if (confirm(window.overlayCloseWarning ? window.overlayCloseWarning : 'Discard changes and return to what you were doing?'))
			hide_overlay_content();	
	}
}

event_queue("onresize", show_overlay_fix_size_ev);
function show_overlay_fix_size_ev(ev)
{
	if ("timeout" in show_overlay_fix_size_ev)
		clearTimeout(show_overlay_fix_size_ev.timeout);

	show_overlay_fix_size_ev.timeout = setTimeout(show_overlay_fix_size, 5);
}

function show_overlay_fix_size(skip_height)
{
	if (!document.body)
	{
		window.setTimeout(show_overlay_fix_size, 0);
		return;
	}

	var backgrounds = [$("site-overlay-background")];
	var props = ["Height"];

	if ("$j" in window)
	{
		var $cover = $j(".html5-chart .cover");
		if ($cover.length > 0)
			backgrounds.push($cover[0]);
	}

	for (var j = 0; j < backgrounds.length; j++)
	{
		var background = backgrounds[j];

		for (var i = 0; i < props.length; i++)
		{
			var prop = props[i];
			background.style["min" + prop] = "";
			if ("inner" + prop in window && background["client" + prop] < window["inner" + prop])
				background.style["min" + prop] = window["inner" + prop] + "px";
		}
	}

	var container = $("site-overlay-container");
	if (!container)
		return;

	var width = container.offsetParent.offsetParent.clientWidth;

	if ($("site-overlay-background").className == "")
	{
		var left = (width - container.clientWidth) / 2;
		if (left < -container.offsetParent.offsetLeft)
			left = -container.offsetParent.offsetLeft;
		left -= $get_style_num(container.offsetParent, "margin-left");

		container.style.left = left + "px";
		container.style.visibility = "visible";
	}
}

function show_help_overlay(rel, id)
{
	var pos = get_element_pos(rel);
	var offset = get_element_pos($("site-container"));

	function kill()
	{
		if ($(id).killFlag)
			$(id).style.display = "none";
	}

	$(id).style.top = (pos.y - offset.y) + "px";
	$(id).style.left = (pos.x - offset.x) + "px";
	$(id).style.display = "block";

	$(id).killFlag = false;
	$(id).onmouseover = function ()
	{
		this.killFlag = false;
	}
	$(id).onmouseout = function ()
	{
		this.killFlag = true;
		window.setTimeout(kill, 100);
	}
	rel.onmouseout = function ()
	{
		$(id).killFlag = true;
		window.setTimeout(kill, 100);
	}
}

function show_landing_overlay(href)
{
	function finish(request)
	{
		show_overlay_content(request.responseText, 662);
		make_overlay_dark();
	}

	function fail()
	{
		window.location.href = href;
	}

	http_get(href + "?overlay", finish, fail);
}

function show_invite_overlay()
{
	function finish(request)
	{
		show_overlay_content(request.responseText, 556);
		make_overlay_dark();
	}

	function fail()
	{
		alert("Unable to open the invite dialog.  Please try again.");
	}

	var head = document.getElementsByTagName("head")[0];
	var link = document.createElement("link");

	link.setAttribute("type", "text/css");
	link.setAttribute("rel", "stylesheet");
	link.setAttribute("href", static_url + "/css/message.css");
	head.appendChild(link);

	http_get(site_url + "/invite/overlay.html", finish, fail);
}

function show_video_overlay(video, title)
{
	if (video == '')
		return;

	show_overlay_content('\
<div style="background: url(' + static_url + '/images/layout/video-overlay-bg2.png) no-repeat; height: 439px; margin-top: 115px;">\
	<div style="padding-top: 10px; padding-right: 12px; padding-bottom: 9px; float: right;">\
		<a href="javascript://" onclick="hide_overlay_content();"><img src="' + static_url + '/images/elements/buttons/close-small-off.png" alt="Close" class="toggled" /></a>\
	</div>\
	<div style="color: #ffffff; font-size: 16px; font-weight: bold; height: 30px; padding-top: 12px; padding-left: 15px;">\
		' + html_escape(title) + '\
	</div>\
	<div style="margin: auto; padding-top: 24px; width: 425px;" id="video-content">\
		<div style="padding: 3ex;">To watch this video, please install the <a href="http://get.adobe.com/flashplayer/" target="_blank" rel="nofollow">latest version of Flash Player</a>.</div>\
	</div>\
</div>', 501);

	make_overlay_dark();
	window.overlayCloseWarning = "Stop watching this video?";
	show_video_object(video, title, "video-content", false, true);

	site_first_load();
}

function show_video_object(video, title, id, vars, play)
{
	if (video == '')
		return;

	if (!vars)
		vars = {};

	var fo = null;
	if (video.indexOf("youtube") != -1)
	{
		// Indirect page URL.
		if (video.indexOf("watch?v=") != -1)
		{
			var m = video.match(/watch\?v=([^&]+)/);
			if (m && m[1])
				video = "http://www.youtube-nocookie.com/embed/" + m[1] + "?hl=en_US&fs=1&rel=0";
		}
		else if (video.indexOf("youtube.com/v/") != -1)
		{
			var m = video.match(/youtube\.com\/v\/([^&?]+)/);
			if (m && m[1])
				video = "http://www.youtube-nocookie.com/embed/" + m[1] + "?hl=en_US&fs=1&rel=0";
		}

		var w = "width" in vars ? vars.width : "425";
		var h = "height" in vars ? vars.height : "344";

		$(id).innerHTML = '<iframe width="' + html_escape(w) + '" height="' + html_escape(h) + '" src="' + html_escape(video) + '" frameborder="0" allowfullscreen></iframe>';
	}
	else
	{
		fo = new FlashObject(static_url + "/video.swf?v1", "video-content-flash", "width" in vars ? vars.width : "425", "height" in vars ? vars.height : "344", "9.0.115", "#FFFFFF");
		fo.addParam("allowScriptAccess", "always");
		fo.addParam("wmode", "transparent");
		fo.addVariable("video", encodeURIComponent(video));
		fo.addVariable("title", encodeURIComponent(title));
		if (!play)
			fo.addVariable("startPaused", 1);

		for (var k in vars)
			fo.addVariable(k, escape(vars[k]));
	}

	if (fo != null)
		fo.write(id);

	_gaq.push(['_trackPageview', '/video/start/' + escape(title)]);
	track_videoFinished = true;
}

var track_videoFinished = false;
function videoFinished(title)
{
	if (track_videoFinished)
		_gaq.push(['_trackPageview', '/video/end/' + escape(title)]);
	track_videoFinished = false;
}

function calendar_date_clear_field(id)
{
	if ($(id).style.color == "")
		return;

	$(id).style.color = "";
	$(id).value = "";
}

function calendar_date_change_reverse(id)
{
	var day = $(id + "_day").value;
	var month = $(id + "_month").value;
	var year = $(id + "_year").value;

	if (month)
		$(id + "_month").options[0].text = "";

	if (day && day != "DD" && month && year && year != "YYYY")
		$(id).value = month + "/" + day + "/" + year;
}

function calendar_date_change(id)
{
	var str = $(id).value;
	var month = parseInt(str.substring(0, 2), 10);
	var day = str.substring(3, 5);
	var year = str.substring(6, 10);

	if (day && day != "DD")
		calendar_date_clear_field(id + "_day");
	if (month)
	{
		$(id + "_month").options[0].text = "";
		$(id + "_month").style.color = "";
	}
	if (year && year != "YYYY")
		calendar_date_clear_field(id + "_year");

	$(id + "_day").value = day ? day : "DD";
	if (month && $(id + "_month").options[month])
		$(id + "_month").options[month].selected = true;
	$(id + "_year").value = year ? year : "YYYY";
}

function show_message_error_overlay(message)
{
	show_overlay_content('\
<div style="border: 2px solid #f7941d; background: white; height: 187px; padding: 0 35px; margin-top: 100px;">\
	<div style="color: #353535; font-size: 16px; font-weight: bold; line-height: 53px; text-align: center;">Can\'t send message</div>\
	<div style="padding: 3ex;">' +  message + '</div>\
	<div style="padding-top: 12px; text-align: right;"><a href="javascript://" onclick="hide_overlay_content(); return false;"><img src="' + static_url + '/images/elements/buttons/close-off.png" class="toggled" /></a></div>\
</div>', 499);
}

function send_message(to)
{
	function finish()
	{
	}

	var description = $('message_description').value;
	var title = $('message_title').value;

	if (title && description)
	{
		var data = "description=" + escape(description) + "&title=" + escape(title);
		http_post(site_url + '/message/send/' + to + '.html', data, finish);

		alert('Message sent successfully.');
		hide_overlay_content();
	}
	else
		alert('Please enter a subject and message.');
}

function show_compose_message_overlay(message_sent_to, message_send_name)
{
	show_overlay_content('\
		<div class="main-box">\
			<h3>Compose Message</h3>\
			<form action="' + site_url + '/message/send/' + message_sent_to + '.html" method="post" class="content">\
				<div style="line-height: 24px; padding-bottom: 10px;">\
					<label style="float: left; width: 80px;">Sending to:</label>\
					<a href="' + site_url + '/profile/' + message_sent_to + '.html">' + html_escape(message_send_name) + '</a>\
				</div>\
				<div style="line-height: 24px; padding-bottom: 10px;">\
					<label style="float: left; width: 80px;" for="message_title">Subject:</label>\
					<input type="text" name="title" id="message_title" value="" class="field-textbox" style="width: 450px;" />\
				</div>\
				<div style="line-height: 24px; padding-bottom: 10px;">\
					<label style="float: left; width: 80px;" for="message_title">Message:</label>\
					<textarea name="description" id="message_description" cols="60" rows="5" class="field-textbox" style="height: 200px; width: 450px;"></textarea>\
				</div>\
				<div style="padding-left: 80px;">\
					<a href="javascript://" onclick="send_message(' + message_sent_to + '); return false;"><img src="' + static_url + '/images/elements/buttons/send-default.png" alt="Submit" class="toggled" /></a>\
					<a href="javascript://" onclick="hide_overlay_content(); return false;"><img src="' + static_url + '/images/elements/buttons/cancel-off.png" alt="Cancel" class="toggled" /></a>\
				</div>\
			</form>\
		</div>', 500);
}

function show_images_attached_popup(el, img, title)
{
	$("popup-images-attached").innerHTML = '<div><img src="' + html_escape(img) + '" alt="" /><span>' + html_escape(title) + '</span></div>';
	$("popup-images-attached").style.display = "block";

	var pos = get_element_pos(el);

	$("popup-images-attached").style.top = pos.y + "px";
	$("popup-images-attached").style.left = el.parentNode.offsetLeft + "px";

	document.body.onclick = null;
	function set_close()
	{
		document.body.onclick = function ()
		{
			$("popup-images-attached").style.display = "none";
			document.body.onclick = null;
		}
	}
	window.setTimeout(set_close, 0);
}

function form_detect_press(ev, field)
{
	if (ev.keyCode == 13 || ev.keyCode == 10)
	{
		field.form.submit();
		return false;
	}
}
