// get the browser-supported XMLHttpRequest object
function get_http_object()
{
	var xhr = false;
	if (window.XMLHttpRequest)
	{
		xhr = new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
		try
		{
			xhr = new ActiveXObject('Msxml2.XMLHTTP');
		}
		catch(e)
		{
			try
			{
				xhr = new ActiveXObject('Microsoft.XMLHTTP');
			}
			catch(e)
			{
				xhr = false;
			}
		}
	}
	return xhr;
}

YAHOO.namespace('YAHOO.mrl');
YAHOO.mrl.NotLoggedInException = 'NotLoggedInException';
YAHOO.mrl.NotVerifiedException = 'NotVerifiedException';

function handle_json(request) {
	var jsonData = eval('(' + request.responseText + ')');
	if (jsonData.login_required || jsonData.signup_required || jsonData.verify_required) {
		var q = window.location.search;
		if (q && (q.charAt(0) == '?'))
			q = '&' + q.substr(1);
		if (jsonData.login_required)
		{
			YAHOO.login.dom.show_login();
		}
		else if (jsonData.verify_required)
		{
			YAHOO.verify.dom.show_verify();
		}
		else if (jsonData.signup_required)
		{
			YAHOO.login.dom.show_signup();
		}
		throw YAHOO.mrl.NotLoggedInException;
	}
	return jsonData;
}

function run_ajax(url, func, post_data)
{
	var request = get_http_object();
	if (!request)
		return false;
	request.onreadystatechange = function() {
		if (request.readyState == 4)
		{
			if (request.status == 200)
			{
				try {
					func(request.status, handle_json(request));
				} catch (error) {
					if (error == YAHOO.mrl.NotLoggedInException) {
					} else {
						throw error;
					}
				}
			}
			else
			{
				func(request.status, null);
			}
		}
	}
	if (post_data)
	{
		request.open('POST', url, true);
		request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		request.setRequestHeader("Content-Length", post_data.length);
		request.setRequestHeader("Connection", "close");
		request.send(post_data);
	}
	else
	{
		request.open('GET', url, true);
		request.send(null);
	}
	return true;
}

function url_encode(plaintext)
{
	// The Javascript escape and unescape functions do not correspond
	// with what browsers actually do...
	var SAFECHARS = "0123456789" +					// Numeric
					"ABCDEFGHIJKLMNOPQRSTUVWXYZ" +	// Alphabetic
					"abcdefghijklmnopqrstuvwxyz" +
					"-_.!~*'()";					// RFC2396 Mark characters
	var HEX = "0123456789ABCDEF";

	var encoded = "";
	for (var i = 0; i < plaintext.length; i++)
	{
		var ch = plaintext.charAt(i);
		if (ch == " ")
		{
			encoded += "+";				// x-www-urlencoded, rather than %20
		}
		else if (SAFECHARS.indexOf(ch) != -1)
		{
			encoded += ch;
		}
		else
		{
			var charCode = ch.charCodeAt(0);
			if (charCode > 255)
			{
				encoded += "+";  // unicode not really supported
			}
			else
			{
				encoded += "%";
				encoded += HEX.charAt((charCode >> 4) & 0xF);
				encoded += HEX.charAt(charCode & 0xF);
			}
		}
	}

	return encoded;
}

function dyn_message(msg_box, msg_text, msg_type)
{
	// Display dynamic message text 
	// msg_text: text string
	// msg_type: 'error' or 'confirmation'

	var msgbox = document.getElementById(msg_box);
	if (msgbox)
	{
		YAHOO.util.Dom.removeClass(msgbox, 'error');
		YAHOO.util.Dom.removeClass(msgbox, 'confirmation');
		YAHOO.util.Dom.removeClass(msgbox, 'checkmark');
		if (msg_type == 'error')
		{
			YAHOO.util.Dom.addClass(msgbox, 'error');
		}
		else
		{
			YAHOO.util.Dom.addClass(msgbox, 'confirmation');
			YAHOO.util.Dom.addClass(msgbox, 'checkmark');
		}
		msgbox.innerHTML = msg_text;

		// remove 'hidden' LAST so we don't see the box change styles
		YAHOO.util.Dom.removeClass(msgbox, 'hidden');
	}
}

function json_error_box(dialog_id, json_error)
{
	var html = '<p>' + json_error.msg + '</p>';
	if (json_error.details)
	{
		html += '<ul>';
		for (var i = 0; i < json_error.msg_list.length; i++)
		{
			html += '<li>' + json_error.msg_list[i][1] + '</li>';
		}
		html += '</ul>';
	}

	var boxes = YAHOO.util.Dom.getElementsByClassName('msgBox', 'div', dialog_id);
	if (boxes.length > 0)
		dyn_message(boxes[0].id, html, 'error');

	var labels = document.getElementById(dialog_id).getElementsByTagName('label');
	for (var i = 0; i < labels.length; i++)
	{
		var for_id = labels[i].getAttribute('for');
		if (!for_id)
			for_id = labels[i].getAttribute('htmlFor'); // IE uses 'htmlFor' rather than the real attribute name 'for'
		if (json_error.msg_dict[for_id])
			YAHOO.util.Dom.addClass(labels[i], 'error');
		else
			YAHOO.util.Dom.removeClass(labels[i], 'error');
	}
}

function json_remove_errors(dialog_id)
{
	var boxes = YAHOO.util.Dom.getElementsByClassName('msgBox', 'div', dialog_id);
	YAHOO.util.Dom.addClass(boxes, 'hidden');

	var labels = document.getElementById(dialog_id).getElementsByTagName('label');
	for (var i = 0; i < labels.length; i++)
	{
		var for_id = labels[i].getAttribute('for');
		if (!for_id)
			for_id = labels[i].getAttribute('htmlFor'); // IE uses 'htmlFor' rather than the real attribute name 'for'
		YAHOO.util.Dom.removeClass(labels[i], 'error');
	}
}

function message_box(msg_text)
{
	dyn_message('dyn_msg', msg_text, 'confirmation')
}

function error_box(msg_text)
{
	dyn_message('dyn_msg', msg_text, 'error')
}

function hide_error_box()
{
	msgbox = document.getElementById('dyn_msg');
	YAHOO.util.Dom.addClass(msgbox, 'hidden');
}

function chart_xml(dataset)
{
	dataXML = "<graph showNames='1' decimalPrecision='0'>";
	for (data in dataset)
	{
		xml = "<set name='";
		xml += dataset[data].name;
		xml += "' value='";
		xml += dataset[data].value;
		xml += "' color='";
		xml += dataset[data].color;
		xml += "' />";
		dataXML += xml;
	}
	dataXML += "</graph>";
	return dataXML;
}

function update_chart(domId, dataset)
{
	dataXML = chart_xml(dataset);
	updateChartXML(domId, dataXML);
}

function replace_chart(chart, domId, dataset)
{
	dataXML = chart_xml(dataset);
	chart = new FusionCharts(chart_type, domId, "200", "100", "0", "1")
	chart.setDataXML(dataXML);
	chart.render(domId + "_div");
}

function convertForm(obj) 
{
	var paramstr = "";
	for (i = 0; i < obj.elements.length; i++)
	{
		if (obj.elements[i].tagName == "INPUT")
		{
			if (obj.elements[i].type == "hidden")
				paramstr += url_encode(obj.elements[i].name) + "=" + url_encode(obj.elements[i].value) + "&";
			if (obj.elements[i].type == "text")
				paramstr += url_encode(obj.elements[i].name) + "=" + url_encode(obj.elements[i].value) + "&";
			if ((obj.elements[i].type == "checkbox") && obj.elements[i].checked)
				paramstr += url_encode(obj.elements[i].name) + "=" + url_encode(obj.elements[i].value) + "&";
			if ((obj.elements[i].type == "radio") && obj.elements[i].checked)
				paramstr += url_encode(obj.elements[i].name) + "=" + url_encode(obj.elements[i].value) + "&";
		}   
		if (obj.elements[i].tagName == "SELECT")
		{
			var sel = obj.elements[i];
			paramstr += url_encode(sel.name) + "=" + url_encode(sel.options[sel.selectedIndex].value) + "&";
		}
		if (obj.elements[i].tagName == "TEXTAREA")
		{
			paramstr += url_encode(obj.elements[i].name) + "=" + url_encode(obj.elements[i].value) + "&";
		}
	}
	return paramstr;
}

YAHOO.namespace("global.dom");

var timer_search_company = null;

YAHOO.global.dom.init = function() {
	var valuationTooltip = new YAHOO.widget.Tooltip("valuationTooltip", { context:"valuation" } ); 
	var lastPriceTooltip = new YAHOO.widget.Tooltip("lastPriceTooltip", { context:"last_price" } );
	var lastPrice2Tooltip = new YAHOO.widget.Tooltip("lastPrice2Tooltip", { context:"last_price2" } ); 
	var priceChangeTooltip = new YAHOO.widget.Tooltip("priceChangeTooltip", { context:"price_change" } ); 
	var priceChange2Tooltip = new YAHOO.widget.Tooltip("priceChange2Tooltip", { context:"price_change2" } ); 
	var netWorthTooltip = new YAHOO.widget.Tooltip("netWorthTooltip", { context:"net_worth" } );  

	YAHOO.util.Event.addListener('search_text', 'keyup', search_assist);
	YAHOO.util.Event.addListener('search_text', 'keydown', follow_search);
	YAHOO.util.Event.addListener('search_text', 'blur', hide_search_companies);
	YAHOO.util.Event.addListener('search_selection', 'mouseover', allow_show_search);
	YAHOO.util.Event.addListener('search_selection', 'mouseout', allow_hide_search);
	
	var search_select_overlay = new YAHOO.widget.Overlay("search_selection", 
											{ context: ['search_submit', 'tr','br'],
											  visible:false, 
											  width:"400px" } );
	search_select_overlay.render();
	
	
	var all_companies = null;
	var companies_requested = false;
	var company_search_str = "";
	var search_companies = null;
	var num_company_display = 10;
	var hide_search = true;
	var current_selection = null;
	var search_timer = null;
	
	function handle_search_company(status, companies)
	{
		if (status == 200) {
			current_selection = null;
			search_companies = companies;
			display_select_companies(search_companies, num_company_display);
		} else {
			hide_search_companies();
		}
	}

	function do_search_company()
	{
		search_timer = null;
		if (company_search_str) {
			run_ajax('/search/list?q=' + company_search_str, handle_search_company);
		} else {
			hide_search_companies();
		}
	}
	
	timer_search_company = do_search_company;

	function new_search_company(search_str)
	{
		if (search_timer) {
			clearTimeout(search_timer);
			seach_timer = null;
		}
		company_search_str = search_str.toLowerCase();
		if (company_search_str) {
			search_timer = setTimeout('timer_search_company()', 200);
		} else {
			hide_search_companies();
		}
	}

	function search_assist(e)
	{
		if (company_search_str != this.value.toLowerCase())
		{
			new_search_company(this.value);
		}
		else if (e.keyCode == 38)
		{
			/* up arrow key released */
			select_company(-1);
		}
		else if (e.keyCode == 40)
		{
			/* down arrow key released */
			select_company(1);
		}
		else if (e.keyCode == 27)
		{
			if (search_timer) {
				clearTimeout(search_timer);
				seach_timer = null;
			}
			hide_search_companies();
		}
	}

	function follow_search(e)
	{
		if (e.keyCode == 13)
		{
			/* enter key released */
			if (current_selection != null)
			{
				YAHOO.util.Event.preventDefault(e);
				follow_company_link();
			}
		}
	}

	function search_company(search_str)
	{
		current_selection = null;
		if ((search_companies == null) || 
			(company_search_str == "") || 
			(search_str.indexOf(company_search_str) != 0))
		{
			search_companies = all_companies;
		}
		company_search_str = search_str.toLowerCase();
		search_companies = match_companies(search_companies, company_search_str);
		display_select_companies(search_companies, num_company_display);
	}
	
	function match_companies(companies_list, search_str)
	{
		companies_subset = new Array();
		for (company_idx in companies_list)
		{
			var company_name = companies_list[company_idx].company_name.toLowerCase();
			if (company_name.search(search_str,"i") != -1)
				companies_subset.push(companies_list[company_idx])
		}
		return companies_subset
	}
	
	function display_select_companies(companies_list, num_display)
	{
		search_select_element = document.getElementById('search_select');
		if (companies_list.length > 0)
		{
			company_html = "<table>";
			for (company_idx in companies_list)
			{
				if (company_idx < num_display)
				{
					var company = companies_list[company_idx];

					company_html += '<tr id="companysearch_' + company.company_id + '">';

					if (company.company_logo)
					{
						company_html += '<td><div class="company_logo"><a href="' + company.company_url + '?search=select">';
						company_html += '<img src="' + company.company_logo + '">';
						company_html += '</a></div></td>';
					}
					else
					{
						company_html += '<td><div class="company_logo"></div></td>'; 
					}
					
					company_html += '<td><a href="' + company.company_url + '?search=select">';
					company_html += company.company_name;
					company_html += '</a></td>';

					company_html += '</tr>';
				}
				else
				{
					break;
				}
			}
			company_html += "</table>";
			search_select_element.innerHTML = company_html;
			search_select_overlay.show();
		}
		else
		{
			search_select_element.innerHTML = '<p>No company name matches.</p> <p>Press Enter or Click Search to perform a full site search.</p>';
			search_select_overlay.show();
		}
	}
	
	function hide_search_companies(e)
	{
		if (hide_search)
		{
			current_selection = null;		
			search_select_overlay.hide();
		}
	}
	
	function allow_show_search(e)
	{
		hide_search = false;
	}
	
	function allow_hide_search(e)
	{
		hide_search = true;
	}

	function follow_company_link()
	{
		if ((search_companies != null) && (current_selection != null) && (current_selection >= 0) && (current_selection < search_companies.length))
		{
			window.location = search_companies[current_selection].company_url + '?search=select';
		}
	}
	
	function select_company(direction)
	{
		if ((search_companies != null) && (search_companies.length > 0))
		{
			var num_dispay = num_company_display;
			if (num_dispay > search_companies.length)
				num_dispay = search_companies.length;
				
			if (current_selection == null)
			{
				if (direction < 0)
					current_selection = num_dispay - 1;
				else
					current_selection = 0;
			}
			else
			{
				var current_element = document.getElementById('companysearch_' + search_companies[current_selection].company_id);
				if (current_element)
					 YAHOO.util.Dom.removeClass(current_element, 'search_selected');
				if (direction < 0)
					current_selection -= 1;
				else
					current_selection += 1;
				
			}
			/* loop */
			if (current_selection >= num_dispay)
				current_selection = 0;
			else if (current_selection < 0)
				current_selection = num_dispay - 1;
				
			var new_element = document.getElementById('companysearch_' + search_companies[current_selection].company_id);
			if (new_element)
				 YAHOO.util.Dom.addClass(new_element, 'search_selected');
		} 
	}
	
	var user_feedback_form = new YAHOO.widget.Overlay("user_feedback_submit", { fixedcenter:true, visible:false, width: "400px" } );
	user_feedback_form.render();
	
	YAHOO.util.Event.addListener("user_feedback_link", "click", show_feedback_page);
	YAHOO.util.Event.addListener("user_feedback_close", "click", user_feedback_form.hide, user_feedback_form, true);
	YAHOO.util.Event.addListener("submit_user_feedback", "click", submit_user_feedback);
	function show_feedback_page(e)
	{
		YAHOO.util.Event.preventDefault(e);
		YAHOO.util.Dom.removeClass(user_feedback_form.element, 'hidden');
		user_feedback_form.show();
		document.getElementById('user_feedback_subject').focus();
	}
	function submit_user_feedback(e)
	{
		YAHOO.util.Event.preventDefault(e);
		form = document.getElementById('user_feedback_form');
		paramstr = convertForm(form);
		paramstr = paramstr + 'url=' + location.href + '&';
		url = form.action;
		if (form.method == "get")
		{
			url += "?" + paramstr;
			run_ajax(url, feedback_submit_done);
		}
		else
		{
			run_ajax(url, feedback_submit_done, paramstr);
		}
	}
	function feedback_submit_done(status, jsonData)
	{
		if (status==200)
		{
			message_box("Thank you for your submission.");
			form = document.getElementById('user_feedback_form');
			form.reset();
		}
		else
		{
			error_box("We were unable to process your request, please try again later.");
		}
		user_feedback_form.hide()
	}
}

YAHOO.util.Event.addListener(window, "load", YAHOO.global.dom.init);

YAHOO.namespace("login.dom");

YAHOO.login.dom.init = function() {
	// Define various event handlers for Panel
	
	YAHOO.login.dom.loginPanel = null;
	YAHOO.login.dom.show_login = function(redirect_url) {
		if (!YAHOO.login.dom.loginPanel) {
			// Instantiate the Panel
			YAHOO.login.dom.loginPanel = new YAHOO.widget.Panel("loginPanel", 
									{ visible : false, 
									  modal : true, 
									  hideaftersubmit : false, 
									  constraintoviewport : true,
									  postmethod : "form",
									  close : false
									});

			// Validate the entries in the form to require that both username and password are entered
			YAHOO.login.dom.loginPanel.validate = function() {
				var data = this.getData();
				if (data.username == "") {
					alert("Please enter your username.");
					return false;
				} else if (data.password == "") {
					alert("Please enter your password.");
					return false;
				} else {
					return true;
				}
			};
		}
	
		var login_url = YAHOO.login.dom.login_iframe_url;
		if (redirect_url)
			login_url += '?redirect_url=' + redirect_url;
		var contentHTML = '';
		contentHTML = '<span id="loginClose" class="close">close [x]</span><h2>Login to Continue</h2>';
		YAHOO.login.dom.loginPanel.setHeader(contentHTML);
		contentHTML = '<iframe id="login_iframe" name="login_iframe" src="' + login_url +'" frameborder="0"></iframe>';
		YAHOO.login.dom.loginPanel.setBody(contentHTML);
		YAHOO.login.dom.loginPanel.render(document.body);

		YAHOO.util.Dom.addClass(YAHOO.login.dom.loginPanel.element, 'dialog');
		YAHOO.util.Event.addListener("loginClose", "click", YAHOO.login.dom.loginPanel.hide, YAHOO.login.dom.loginPanel, true);
		YAHOO.login.dom.loginPanel.center();
		YAHOO.login.dom.loginPanel.show();
	}
	
	YAHOO.login.dom.login_redirect = function(e) {
		YAHOO.util.Event.preventDefault(e);
		YAHOO.login.dom.show_login(this.href);
	}

	YAHOO.login.dom.switch_signup = function() {
		YAHOO.login.dom.loginPanel.hide();
		YAHOO.login.dom.show_signup();
	}
	
	YAHOO.login.dom.signupPanel = null;
	YAHOO.login.dom.show_signup = function(e, pageTitle, urlargs) {
		if (e) {
			YAHOO.util.Event.preventDefault(e);
		}
		if (!YAHOO.login.dom.signupPanel) {
			// Instantiate the Panel
			YAHOO.login.dom.signupPanel = new YAHOO.widget.Panel("signupPanel", 
									{ visible : false, 
									  modal : true, 
									  hideaftersubmit : false, 
									  constraintoviewport : true,
									  postmethod : "form",
									  close : false,
									  width: '650px',
									  height: '400px'
									});

			// Validate the entries in the form to require that both first and last name are entered
			YAHOO.login.dom.signupPanel.validate = function() {
				var data = this.getData();
				if (data.username == "") {
					alert("Please enter your username.");
					return false;
				} else if (data.email == "") {
					alert("Please enter your email address.");
					return false;
				} else if (data.passwd == "") {
					alert("Please enter your password.");
					return false;
				} else if (data.passwd != data.confirm_passwd) {
					alert("Please check your password.  Your passwords do not match.");
					return false;
				} else {
					return true;
				}
			};
		}

		var contentHTML = '';
		if (!pageTitle)
			pageTitle = 'Signup for VentureBeat Profiles';
		contentHTML = '<span id="signupClose" class="close">close [x]</span><h2>' + pageTitle + '</h2>';
		YAHOO.login.dom.signupPanel.setHeader(contentHTML);
		var url = YAHOO.login.dom.signup_iframe_url;
		var firstArg = true;
		for (key in urlargs)
		{
			if (firstArg)
			{
				url += '?';
				firstArg = false;
			}
			else
			{
				url += '&';
			}
			url += url_encode(key) + '=' + url_encode(urlargs[key]);
		}
		contentHTML = '<iframe id="signup_iframe" name="signup_iframe" src="' + url +'"></iframe>';
		YAHOO.login.dom.signupPanel.setBody(contentHTML);
		YAHOO.login.dom.signupPanel.render(document.body);

		YAHOO.util.Dom.addClass(YAHOO.login.dom.signupPanel.element, 'dialog');
		YAHOO.util.Event.addListener("signupClose", "click", YAHOO.login.dom.signupPanel.hide, YAHOO.login.dom.signupPanel, true);
		YAHOO.login.dom.signupPanel.center();
		YAHOO.login.dom.signupPanel.show();
	}

	YAHOO.login.dom.switch_login = function() {
		YAHOO.login.dom.signupPanel.hide();
		YAHOO.login.dom.show_login();
	}

	
	YAHOO.util.Event.addListener(YAHOO.util.Dom.getElementsByClassName('login_link'), 'click', YAHOO.login.dom.login_redirect);
	YAHOO.util.Event.addListener(YAHOO.util.Dom.getElementsByClassName('signup_link'), 'click', YAHOO.login.dom.show_signup);
	YAHOO.util.Event.addListener('upsell_signup_form', "submit", YAHOO.login.dom.show_signup);
}

YAHOO.util.Event.onDOMReady(YAHOO.login.dom.init);


YAHOO.namespace("verify.dom");

YAHOO.verify.dom.init = function() {
	YAHOO.verify.dom.verifyPanel = null;
	YAHOO.verify.dom.show_verify = function(e) {
		if (e) {
			YAHOO.util.Event.preventDefault(e);
		}
		if (!YAHOO.verify.dom.verifyPanel) {
			// Instantiate the Panel
			YAHOO.verify.dom.verifyPanel = new YAHOO.widget.Panel("need_verification", 
									{ visible : false, 
									  modal : true, 
									  constraintoviewport : true,
									  postmethod : "form",
									  close : false,
									  draggable : false
									});

			var contentHTML = '';
			contentHTML += '<span id="verifyClose" class="close">close [x]</span>';
			contentHTML += '<h2>Verify Your Email</h2>';
			YAHOO.verify.dom.verifyPanel.setHeader(contentHTML);

			contentHTML = '';
			contentHTML += '<div id="verificationResponse" class="msgBox hidden"></div>';
			contentHTML += '<p>Your email address must be verified to perform this action.  To complete your registration:</p>';
			contentHTML += '<ul><li>Look for an email from VentureBeat Profiles</b></li><li>Click the confirmation link in the email</li><li>Enter your Username and Password</li></ul>';
			contentHTML += '<p>If the email does not appear, we can <a class="resendVerification action" href="/account/signup_profile/send_verification">resend</a> you the confirmation email.  If it still does not appear, please check your spam filter and junk folder.</p>';
			contentHTML += '<span id="verifyResend"><a class="resendVerification action" href="/account/signup_profile/send_verification">Resend Verification Email</a></span>';
			contentHTML += '<button id="closeVerification" type="button">Continue</button>';
			YAHOO.verify.dom.verifyPanel.setBody(contentHTML);

			// Render the Panel
			YAHOO.verify.dom.verifyPanel.render(document.body);

			YAHOO.util.Dom.addClass(YAHOO.verify.dom.verifyPanel.element, 'dialog');
			YAHOO.util.Event.addListener("closeVerification", "click", YAHOO.verify.dom.verifyPanel.hide, YAHOO.verify.dom.verifyPanel, true);
			YAHOO.util.Event.addListener("verifyClose", "click", YAHOO.verify.dom.verifyPanel.hide, YAHOO.verify.dom.verifyPanel, true);
			YAHOO.util.Event.addListener(YAHOO.util.Dom.getElementsByClassName('resendVerification','a'), "click", resend_verification_email, YAHOO.verify.dom.verifyPanel, true);
		}
		YAHOO.verify.dom.verifyPanel.center();
		YAHOO.verify.dom.verifyPanel.show();
	}

	var handleSuccess = function(status, response) {
		if (response.status == 0)
		{
			dyn_message('verificationResponse', response.message, 'confirmation')
		}
		else
		{
			dyn_message('verificationResponse', response.error, 'confirmation')
		}
	};

	var resend_verification_email = function(e) {
		YAHOO.util.Event.preventDefault(e);
		run_ajax('/account/signup_profile/send_verification_ajax', handleSuccess, null)
	};

	YAHOO.util.Event.addListener(YAHOO.util.Dom.getElementsByClassName('verify_link','a'), "click", YAHOO.verify.dom.show_verify);
}

YAHOO.util.Event.onDOMReady(YAHOO.verify.dom.init);


YAHOO.namespace('mrl.text_counter');
YAHOO.mrl.text_counter.init_counter = function(id_info, limit) {
	if (YAHOO.util.Event._isValidCollection(id_info)) {
		var text_input = YAHOO.util.Dom.get(id_info[0]);
		var char_left_span = YAHOO.util.Dom.get(id_info[1]);
	}else if (typeof id_info == 'string') {
		var text_input = YAHOO.util.Dom.get(id_info + '_input');
		var char_left_span = YAHOO.util.Dom.get(id_info + '_char_left');
	} else {
		return;
	}

	function trim_input() {
		if (text_input.value.length > limit) {
			text_input.value = text_input.value.substring(0, limit);
		}
	}

	function update_char_left() {
		trim_input();
		var chars_left = limit - text_input.value.length;
		char_left_span.innerHTML = chars_left.toString();
	}

	YAHOO.util.Event.addListener(text_input, 'keyup', update_char_left);
	
	update_char_left();
};

YAHOO.mrl.text_counter.init_counter_on_load = function(id_info, limit) {
	YAHOO.util.Event.addListener(window, 'load', 
								 function() {YAHOO.mrl.text_counter.init_counter(id_info, limit);});
};

YAHOO.namespace("mrl.checkbox")

YAHOO.mrl.checkbox.init_select = function(checkbox_class) {

	YAHOO.util.Event.addListener(checkbox_class + '_select_all', 'click', checkbox_select_all);
	YAHOO.util.Event.addListener(checkbox_class + '_unselect_all', 'click', checkbox_unselect_all);
	
	function checkbox_select_all(e)
	{
		YAHOO.util.Event.preventDefault(e);
		var checkboxes = YAHOO.util.Dom.getElementsByClassName(checkbox_class, 'input');
		for (i in checkboxes)
		{
			checkboxes[i].checked = true;
		}
	}
	
	function checkbox_unselect_all(e)
	{
		YAHOO.util.Event.preventDefault(e);
		var checkboxes = YAHOO.util.Dom.getElementsByClassName(checkbox_class, 'input');
		for (i in checkboxes)
		{
			checkboxes[i].checked = false;
		}
	}
}	

YAHOO.mrl.checkbox.init_select_on_load = function(checkbox_class) {
	YAHOO.util.Event.addListener(window, 'load', 
								 function() {YAHOO.mrl.checkbox.init_select(checkbox_class);});
};

YAHOO.namespace('mrl.tracking');

YAHOO.mrl.tracking.init_tracking = function() {
	/* rewrite the url of tracked urls based on the tracking classes */
	tracked_links = YAHOO.util.Dom.getElementsByClassName('tracking', 'a');
	for (var i = 0; i < tracked_links.length; i++) {
		var tracked_link = tracked_links[i];
		var tracked_href = tracked_link.href;
		var querystart = tracked_href.indexOf('?') > -1;
		var tracked_classes = tracked_link.className.split(' ');
		for (var icls = 0; icls < tracked_classes.length; icls++) {
			var track_parts = tracked_classes[icls].split('_');
			if (track_parts && track_parts.length==3 && track_parts[0] == 'trk') {
				if (querystart) {
					tracked_href += '&';
				} else {
					tracked_href += '?';
					querystart = true;
				}
				tracked_href += track_parts[1] + '=' + track_parts[2];
			}
		}
		tracked_link.href = tracked_href;
	}
};

YAHOO.util.Event.onDOMReady(YAHOO.mrl.tracking.init_tracking);


