// JavaScript Document
YAHOO.namespace('polls.dom');

YAHOO.polls.dom.init = function()
{
	YAHOO.polls.dom.add_point_bull = new YAHOO.widget.Dialog(
		"add_point_bull", { fixedcenter: true, visible:false, width:"520px", modal: true, close: false, postmethod: 'form' });
	YAHOO.util.Dom.removeClass(YAHOO.polls.dom.add_point_bull.innerElement, 'hidden');
	YAHOO.polls.dom.add_point_bull.render(document.body);
	YAHOO.util.Event.addListener("poll_add_bull", "click", show_add_bull);
	YAHOO.util.Event.addListener("add_point_bull_close", "click", YAHOO.polls.dom.add_point_bull.hide, YAHOO.polls.dom.add_point_bull, true);
	
	YAHOO.polls.dom.add_point_bear = new YAHOO.widget.Dialog(
		"add_point_bear",  { fixedcenter: true, visible: false, width:"520px", modal: true, close: false, postmethod: 'form' });
	YAHOO.util.Dom.removeClass(YAHOO.polls.dom.add_point_bear.innerElement, 'hidden');
	YAHOO.polls.dom.add_point_bear.render(document.body);
	YAHOO.util.Event.addListener("poll_add_bear", "click", show_add_bear);
	YAHOO.util.Event.addListener("add_point_bear_close", "click", YAHOO.polls.dom.add_point_bear.hide, YAHOO.polls.dom.add_point_bear, true);

	YAHOO.polls.dom.add_poll_comment = new YAHOO.widget.Dialog(
		"add_poll_comment", { fixedcenter: true, visible: false, width: "520px", modal: true, close: false, hideaftersubmit: false });
	YAHOO.polls.dom.add_poll_comment.callback.success = add_comment_success;
	YAHOO.polls.dom.add_poll_comment.callback.failure = add_comment_failure;
	YAHOO.polls.dom.add_poll_comment.showEvent.subscribe(function () { this.focus(); }, document.getElementById('poll_comment'), true);
	YAHOO.util.Dom.removeClass(YAHOO.polls.dom.add_poll_comment.innerElement, 'hidden');
	YAHOO.polls.dom.add_poll_comment.render(document.body);
	YAHOO.util.Event.addListener(YAHOO.util.Dom.getElementsByClassName('poll_add_cmt','span'), 'click', add_comment_show);
	YAHOO.util.Event.addListener(YAHOO.util.Dom.getElementsByClassName('close',null,'add_poll_comment'), 'click', YAHOO.polls.dom.add_poll_comment.cancel, YAHOO.polls.dom.add_poll_comment, true);

	YAHOO.util.Event.addListener(YAHOO.util.Dom.getElementsByClassName('vote','img'), 'click', vote_poll);
	YAHOO.util.Event.addListener(YAHOO.util.Dom.getElementsByClassName('pollshowresults','a'), 'click', show_results);
	YAHOO.util.Event.addListener(YAHOO.util.Dom.getElementsByClassName('pollshowpresults','span'), 'click', show_presults);
	YAHOO.util.Event.addListener(YAHOO.util.Dom.getElementsByClassName('remove_opinion','a'), 'click', confirm_remove);

	YAHOO.util.Event.addListener(YAHOO.util.Dom.getElementsByClassName('poll_expand','span'), 'click', show_all_comments);
	YAHOO.util.Event.addListener(YAHOO.util.Dom.getElementsByClassName('poll_ncomments','span'), 'click', show_poll_comments);

	function show_add_bull(e)
	{
		YAHOO.util.Event.preventDefault(e);
		YAHOO.polls.dom.add_point_bear.hide();
		YAHOO.polls.dom.add_point_bull.show();
		document.getElementById('bull_statement').focus();
	}

	function show_add_bear(e)
	{
		YAHOO.util.Event.preventDefault(e);
		YAHOO.polls.dom.add_point_bull.hide();
		YAHOO.polls.dom.add_point_bear.show();
		document.getElementById('bear_statement').focus();
	}

	function add_comment_show(e)
	{
		YAHOO.util.Event.preventDefault(e);
		YAHOO.polls.dom.add_point_bear.hide();
		YAHOO.polls.dom.add_point_bull.hide();

		var s = this.id;
		var pos = s.lastIndexOf('_');
		var poll_id = s.substr(pos + 1);

		document.getElementById('poll_id').value = poll_id;

		var txt = document.getElementById('poll_statement_' + poll_id).innerHTML;
		document.getElementById('poll_comment_statement').innerHTML = txt;

		var btns = document.getElementById('add_poll_comment').getElementsByTagName('input');
		for (var i = 0; i < btns.length; i++)
		{
			if (btns[i].name == 'poll_comment_type')
				btns[i].checked = false;
		}
		var vagree = document.getElementById('vagree_' + poll_id);
		var vdisagree = document.getElementById('vdisagree_' + poll_id);
		if (vagree && YAHOO.util.Dom.hasClass(vagree, 'voted'))
			document.getElementById('poll_comment_agree').checked = true;
		else if (vdisagree  && YAHOO.util.Dom.hasClass(vdisagree, 'voted'))
			document.getElementById('poll_comment_disagree').checked = true;

		YAHOO.polls.dom.add_poll_comment.show();
	}
	function add_comment_success(o)
	{
		try {
			var data = handle_json(o);
			if (data.error)
			{
				json_error_box('add_poll_comment', data.error);
			}
			else
			{
				window.location = data.url;
			}
		} catch (error) {
			if (error != YAHOO.mrl.NotLoggedInException) {
				throw error;
			}
		}
	}
	function add_comment_failure(o)
	{
		alert('An error occurred while posting your comment. Please try again later.');
	}

	function show_results(e)
	{
		YAHOO.util.Event.preventDefault(e);
		YAHOO.util.Dom.removeClass(YAHOO.util.Dom.getElementsByClassName('company_bb_text','div'), 'invisible');
		YAHOO.util.Dom.addClass(YAHOO.util.Dom.getElementsByClassName('pollquestion', 'div'), 'invisible');
	}

	function show_presults(e)
	{
		YAHOO.util.Event.preventDefault(e);
		YAHOO.util.Dom.removeClass(YAHOO.util.Dom.getElementsByClassName('poll_results','div'), 'invisible');
	}

	function vote_poll_done(status, jsonData)
	{
		var voteMsg = 'Your vote has been registered';
		var alreadyVotedMsg = 'You have already voted';
		var failMsg = 'Failed to register vote';
		var loginMsg = 'You must be logged in to vote';
		
		if (status == 200)
		{
			var code = jsonData.code;
			var vote_type = jsonData.vote_type;
			var id = jsonData.id;

			if (code == 1)
			{
				// get some document element names
				var agree, disagree;
				var update_bb_chart;
				if (vote_type == 'bullbear')
				{
					agree = 'bullish';
					disagree = 'bearish';
					update_bb_chart = true;
				}
				else if (vote_type == 'thumb')
				{
					agree = 'agree';
					disagree = 'disagree';
					update_bb_chart = false;
				}
				var vote_agree = 'v' + agree + '_' + id;
				var vote_disagree = 'v' + disagree + '_' + id;
				var question_agree = 'q' + agree + '_' + id;
				var question_disagree = 'q' + disagree + '_' + id;
				var count_agree = 'c' + agree + '_' + id;
				var count_disagree = 'c' + disagree + '_' + id;
				var count_total = 'ctotal_' + id;
				var percentage_agree = 'p' + agree + '_' + id;
				var percentage_disagree = 'p' + disagree + '_' + id;

				// updated vote totals
				var cagree = document.getElementById(count_agree);
				var cdisagree = document.getElementById(count_disagree);
				var ctotal = document.getElementById(count_total);
				if (cagree) {
					cagree.innerHTML = jsonData.total_agree;
				}
				if (cdisagree) {
					cdisagree.innerHTML = jsonData.total_disagree;
				}
				if (ctotal)
					ctotal.innerHTML = jsonData.total_votes;
					
				// updated vote percentage
				var pagree = document.getElementById(percentage_agree);
				var pdisagree = document.getElementById(percentage_disagree);
				if (pagree) {
					pagree.innerHTML = jsonData.percentage_agree;
				}
				if (pdisagree) {
					pdisagree.innerHTML = jsonData.percentage_disagree;
				}
				
				// mark/unmark as voted
				var vagree = document.getElementById(vote_agree);
				var vdisagree = document.getElementById(vote_disagree);
				var qagree = document.getElementById(question_agree);
				var qdisagree = document.getElementById(question_disagree);
				var results = document.getElementById('poll_results_' + id);
				var ext_opinion_module = document.getElementById('extended_bearbull_module');
				if (jsonData.user_vote > 0)
				{
					YAHOO.util.Dom.addClass(vagree, 'voted');
					YAHOO.util.Dom.removeClass(qagree, 'hidden');
					if (results)
						YAHOO.util.Dom.removeClass(results, 'invisible');
				}
				else
				{
					YAHOO.util.Dom.removeClass(vagree, 'voted');
					YAHOO.util.Dom.addClass(qagree, 'hidden');
				}
				if (jsonData.user_vote < 0)
				{
					YAHOO.util.Dom.addClass(vdisagree, 'voted');
					YAHOO.util.Dom.removeClass(qdisagree, 'hidden');
					if (results)
						YAHOO.util.Dom.removeClass(results, 'invisible');
				}
				else
				{
					YAHOO.util.Dom.removeClass(vdisagree, 'voted');
					YAHOO.util.Dom.addClass(qdisagree, 'hidden');
				}

				// update voting image
				if (vote_type == 'bullbear')
				{
					if (jsonData.user_vote > 0)
					{
						if (typeof bullish_selected == "string")
							img_src = bullish_selected;
						else
							img_src = '/images/bullish_selected.gif';
						vagree.src = img_src;
					}
					else
					{
						if (typeof bullish_button == "string")
							img_src = bullish_button;
						else
							img_src = '/images/bullish.gif';
						vagree.src = img_src;
					}
					if (vdisagree)
						if (jsonData.user_vote < 0)
							vdisagree.src = '/images/bearish_selected.gif';
						else
							vdisagree.src = '/images/bearish.gif';
				}
				else
				{
					if (jsonData.user_vote > 0)
						vagree.src = '/images/thumb_up_selected.gif';
					else
						vagree.src = '/images/thumb_up_not_selected.gif';
					if (jsonData.user_vote < 0)
						vdisagree.src = '/images/thumb_down_selected.gif';
					else
						vdisagree.src = '/images/thumb_down_not_selected.gif';
				}
					
				if (update_bb_chart)
				{
					YAHOO.util.Dom.removeClass(YAHOO.util.Dom.getElementsByClassName('company_bb_text','div'), 'invisible');
					if (jsonData.user_vote != 0)
					{
						YAHOO.util.Dom.addClass(YAHOO.util.Dom.getElementsByClassName('pollshowresults','div'), 'hidden');
						YAHOO.util.Dom.removeClass(YAHOO.util.Dom.getElementsByClassName('pollviewdetailsquestion','div'), 'hidden');
						YAHOO.util.Dom.removeClass(YAHOO.util.Dom.getElementsByClassName('pollquestion', 'div'), 'invisible');
					}
					else
					{
						YAHOO.util.Dom.removeClass(YAHOO.util.Dom.getElementsByClassName('pollshowresults','div'), 'hidden');
						YAHOO.util.Dom.addClass(YAHOO.util.Dom.getElementsByClassName('pollviewdetailsquestion','div'), 'hidden');
						YAHOO.util.Dom.addClass(YAHOO.util.Dom.getElementsByClassName('pollquestion', 'div'), 'invisible');
						if (ext_opinion_module)
							YAHOO.util.Dom.addClass(ext_opinion_module, 'hidden');
					}
					update_bullbear_chart(jsonData);
				}
				// display extended module if returned
				if (ext_opinion_module && ('extended_opinion_module' in jsonData))
				{
					ext_opinion_module.innerHTML = jsonData['extended_opinion_module'];
					YAHOO.util.Dom.removeClass(ext_opinion_module, 'hidden');
					YAHOO.util.Dom.addClass(YAHOO.util.Dom.getElementsByClassName('pollviewdetails', 'div'), 'hidden');
					YAHOO.util.Event.addListener(YAHOO.util.Dom.getElementsByClassName('vote','img', ext_opinion_module), 'click', vote_poll);
					YAHOO.util.Event.addListener(YAHOO.util.Dom.getElementsByClassName('hide_extended_opinion','a', ext_opinion_module), 'click', hide_extended);
					var num_opinions = Number(YAHOO.util.Dom.getElementsByClassName('opinion_count', 'input', ext_opinion_module)[0].value);
					if (num_opinions)
					{
						YAHOO.util.Dom.addClass(YAHOO.util.Dom.getElementsByClassName('pollviewdetailsquestion','div'), 'hidden');
						YAHOO.util.Dom.removeClass(YAHOO.util.Dom.getElementsByClassName('pollagreeopinionsquestion','div'), 'hidden');
					}
						
				}
				// notify user of success
				// message_box(voteMsg);
			}
			else if (code == -1)
			{
				error_box(alreadyVotedMsg);
			}
			else
			{
				error_box(failMsg);
			}
		}
	}
	function hide_extended(e)
	{
		YAHOO.util.Event.preventDefault(e);
				
		var ext_opinion_module = document.getElementById('extended_bearbull_module');
		YAHOO.util.Dom.addClass(ext_opinion_module, 'hidden');
		YAHOO.util.Dom.removeClass(YAHOO.util.Dom.getElementsByClassName('pollviewdetails','div'), 'hidden');
		YAHOO.util.Dom.removeClass(YAHOO.util.Dom.getElementsByClassName('pollviewdetailsquestion','div'), 'hidden');
		YAHOO.util.Dom.removeClass(YAHOO.util.Dom.getElementsByClassName('pollquestion', 'div'), 'hidden');
		YAHOO.util.Dom.addClass(YAHOO.util.Dom.getElementsByClassName('pollagreeopinionsquestion','div'), 'hidden');

	}

	function vote_poll(e)
	{
		YAHOO.util.Event.preventDefault(e);

		hide_error_box();
		var void_vote = false;
		if (YAHOO.util.Dom.hasClass(this, 'voted'))
			void_vote = true;

		var action = null;
		if (YAHOO.util.Dom.hasClass(this, 'bearish'))
		{
			if (void_vote)
				action = 'void_bear_bull_vote';
			else
				action = 'vote_bearish';
		}
		else if (YAHOO.util.Dom.hasClass(this, 'bullish'))
		{
			if (void_vote)
				action = 'void_bear_bull_vote';
			else
				action = 'vote_bullish';
		}
		else if (YAHOO.util.Dom.hasClass(this, 'bb_agree'))
		{
			if (void_vote)
				action = 'void_bb_vote';
			else
				action = 'vote_bb_agree';
		}
		else if (YAHOO.util.Dom.hasClass(this, 'bb_disagree'))
		{
			if (void_vote)
				action = 'void_bb_vote';
			else
				action = 'vote_bb_disagree';
		}
		else
			return;

		var s = this.getAttribute('id');
		var pos = s.indexOf('_');
		if (pos > 0)
		{
			var id = s.substr(pos + 1);
			var url = '/company/opinion/' + action + '/' + id;
			if (in_discovery)
				url += "?discovery=" + discovery_index
			run_ajax(url, vote_poll_done);
		}
	}
	
	function update_bullbear_chart(jsonData)
	{
		var bb_chart = document.getElementById('bullbear_chart_div');
		if (bb_chart)
		{
			var dataset = new Array();
			var bulldata = new Object();
			bulldata.name = "Bulls";
			bulldata.value = jsonData.total_agree;
			bulldata.color = "008000";
			var beardata = new Object();
			beardata.name = "Bears";
			beardata.value = jsonData.total_disagree;
			beardata.color = "FF0000";
			dataset[0] = beardata;
			dataset[1] = bulldata;
			update_chart('bullbear_chart', dataset)
		}
	}
	
	function confirm_remove(e)
	{
		var r = confirm("Remove this point permanently?");
		if (r == false)
		{
			YAHOO.util.Event.preventDefault(e);
		}
	}

	function show_all_comments(e)
	{
		YAHOO.util.Event.preventDefault(e);
		toggle_comments(YAHOO.util.Dom.getElementsByClassName('poll_comment', 'li'));
	}

	function show_poll_comments(e)
	{
		YAHOO.util.Event.preventDefault(e);
		var s = this.id;
		var pos = s.lastIndexOf('_');
		var id = s.substr(pos + 1);
		var cname = 'poll_comment_' + id;
		toggle_comments(YAHOO.util.Dom.getElementsByClassName(cname, 'li'));
	}

	function toggle_comments(elems)
	{
		if (elems && (elems.length > 0))
		{
			var invis = YAHOO.util.Dom.hasClass(elems[0], 'hidden');
			if (invis)
				YAHOO.util.Dom.removeClass(elems, 'hidden');
			else
				YAHOO.util.Dom.addClass(elems, 'hidden');
		}
	}
}

// run this when the window is loaded
YAHOO.util.Event.addListener(window, 'load', YAHOO.polls.dom.init);

