if (typeof OV == "undefined" || !OV) {
    var OV = {};
}

OV.poll = {};

OV.poll.barGraphs = [];

OV.poll.popups = [];

OV.poll.EmailAFriendDialog = null;

OV.poll.DemographicsDialog = [];

OV.poll.initialLoad = function(pollId) {
	var cObj = YAHOO.util.Connect.asyncRequest('GET', '/polls/' + pollId + '/load_polling_graph', OV.poll.initalLoadCallback);
};

OV.poll.initalLoadCallback = {
	success: function(o) {
		var json = YAHOO.lang.JSON.parse(o.responseText);
		if (json.graph) {
			OV.poll.doShowGraph(json);
		} else {
			OV.poll.doShowForm(json.partial);
		}
	},
	failure: function(o) {
	}
};

OV.poll.castVote = function(e) {
	YAHOO.util.Event.preventDefault(e);
	var side = Functional.select('.checked == true', YAHOO.util.Selector.query('input[type^=radio]', 'sideForm'))[0];
	if (side) {
		var sideId = side.value;
	    var pollId = YAHOO.util.Selector.query('input[name=poll_id]', 'sideForm', true).value;
	    var joinPath = '/polls/' + pollId + '/poll_sides/' + sideId + '/join.html';
		YAHOO.util.Connect.setForm(YAHOO.util.Dom.get("sideForm"));
	    var cObj = YAHOO.util.Connect.asyncRequest('POST', joinPath, OV.poll.castVoteCallback);
		OV.loading.showSpinner("pollSpinner", "pollContent");
	} else {
		alert("Please choose a side.")
	}
};

OV.poll.toggleToGraph = function(e) {
	YAHOO.util.Event.preventDefault(e);
	var pollId = YAHOO.util.Selector.query('input[name=poll_id]', 'sideForm', true).value;
    var cObj = YAHOO.util.Connect.asyncRequest('GET', '/polls/' + pollId + '/show_polling_graph', OV.poll.castVoteCallback);
	OV.loading.showSpinner("pollSpinner", "pollContent");
};

OV.poll.toggleToForm = function(e) {
	YAHOO.util.Event.preventDefault(e);
	var pollId = YAHOO.util.Selector.query('input[name=poll_id]', 'sideForm', true).value;
    var cObj = YAHOO.util.Connect.asyncRequest('GET', '/polls/' + pollId + '/show_polling_form', OV.poll.showFormCallback);
	OV.loading.showSpinner("pollSpinner", "pollContent");
};

OV.poll.castVoteCallback  = {
  success: function(o) {
    var rs = YAHOO.lang.JSON.parse(o.responseText);
	OV.poll.doShowGraph(rs);
  },
  failure: function(o) {
  	OV.loading.hideSpinner("pollSpinner", "pollContent");
  }
};

OV.poll.doShowGraph = function(json) {
	YAHOO.util.Dom.get("pollContent").innerHTML = json.partial;
	OV.loading.hideSpinner("pollSpinner", "pollContent");
	for(var i=0;i<json.side_count;i++) {
		var divId = "barGraph" + (i+1);
		var newWidth = eval("json.graph_widths.barGraph" + (i+1));
		var barGraph = new YAHOO.util.Anim(divId, { 
								width: { to: newWidth }  
							}, 1, YAHOO.util.Easing.easeOut); 
		barGraph.animate();
	}
	YAHOO.util.Event.addListener("seeForm", "click", OV.poll.toggleToForm);
};

OV.poll.showFormCallback = {
	success: function(o) {
		OV.poll.doShowForm(o.responseText);
	},
	failure: function(o) {
		OV.loading.hideSpinner("pollSpinner", "pollContent");
	}
};

OV.poll.doShowForm = function(html) {
	YAHOO.util.Dom.get("pollContent").innerHTML = html;
	OV.loading.hideSpinner("pollSpinner", "pollContent");
	var voteButton = YAHOO.util.Dom.get("vote");
	if (voteButton.href.indexOf("#") > 0) YAHOO.util.Event.addListener("vote", "click", OV.poll.castVote);
	if (YAHOO.util.Dom.get("seeResults")) {
		YAHOO.util.Event.removeListener("seeResults", "click");
		YAHOO.util.Event.addListener("seeResults", "click", OV.poll.toggleToGraph);
	}
};

OV.poll.initAnimation = function(graphs) {
	for (var i=0;i<graphs.length;i++) {
		graphs[i].animate();
	}
};

OV.poll.showVote = function(e) {
	YAHOO.util.Event.preventDefault(e);
	YAHOO.util.Dom.addClass("showVoteContainer", "cur");
	YAHOO.util.Dom.removeClass("showResultsContainer", "cur");
	YAHOO.util.Dom.removeClass("showDemographicsContainer", "cur");
	YAHOO.util.Dom.removeClass("voteFormContainer", "hide");
	YAHOO.util.Dom.addClass("voteResultsContainer", "hide");
	OV.poll.hideDemographicGraphs();
	for (var i=0; i<OV.poll.popups.length; i++) {
		OV.poll.DemographicsDialog[OV.poll.popups[i]].hide();
	}
	YAHOO.util.Dom.addClass("demographicFilterContainer", "hide");
};

OV.poll.showResults = function(e) {
	YAHOO.util.Event.preventDefault(e);
	YAHOO.util.Dom.removeClass("showVoteContainer", "cur");
	YAHOO.util.Dom.addClass("showResultsContainer", "cur");
	YAHOO.util.Dom.removeClass("showDemographicsContainer", "cur");
	YAHOO.util.Dom.addClass("voteFormContainer", "hide");
	YAHOO.util.Dom.removeClass("voteResultsContainer", "hide");
	OV.poll.hideDemographicGraphs();
	for (var i=0; i<OV.poll.popups.length; i++) {
		OV.poll.DemographicsDialog[OV.poll.popups[i]].hide();
	}
	YAHOO.util.Dom.addClass("demographicFilterContainer", "hide");
};

OV.poll.showDemographics = function(e) {
	if (e) YAHOO.util.Event.preventDefault(e);
	var demographicCategory = YAHOO.util.Dom.get("demographic_filter").options[YAHOO.util.Dom.get("demographic_filter").selectedIndex].value;
	var selectedPopup = "popup" + demographicCategory;
	YAHOO.util.Dom.removeClass("showVoteContainer", "cur");
	YAHOO.util.Dom.removeClass("showResultsContainer", "cur");
	YAHOO.util.Dom.addClass("showDemographicsContainer", "cur");
	YAHOO.util.Dom.addClass("voteFormContainer", "hide");
	YAHOO.util.Dom.addClass("voteResultsContainer", "hide");
	YAHOO.util.Dom.removeClass("demographicFilterContainer", "hide");
	OV.poll.hideDemographicGraphs();
	var hasGivenDemographicInfo = true;
	for (var i=0; i<OV.poll.popups.length; i++) {
		if (OV.poll.popups[i] == selectedPopup) {
			OV.poll.DemographicsDialog[OV.poll.popups[i]].show();
			hasGivenDemographicInfo = false;
		} else {
			OV.poll.DemographicsDialog[OV.poll.popups[i]].hide();
		}
	}
	if (hasGivenDemographicInfo) YAHOO.util.Dom.removeClass("by"+demographicCategory, "hide");
};

OV.poll.hidePopup = function(e, parent) {
	YAHOO.util.Event.preventDefault(e);
	OV.poll.DemographicsDialog[parent].hide();
};

OV.poll.hideDemographicGraphs = function() {
	var graphs = YAHOO.util.Selector.query('div.filtered');
	for (var i=0; i<graphs.length; i++) {
		YAHOO.util.Dom.addClass(graphs[i], "hide");
	}
};

OV.poll.joinDemographic = function(e, category_id) {
	YAHOO.util.Event.preventDefault(e);
	var joinPath = '/demographic_categories/' + category_id + '/demographic_options/join.json'
	YAHOO.util.Connect.setForm(YAHOO.util.Dom.get("demographicOptionsForm" + category_id));
    var cObj = YAHOO.util.Connect.asyncRequest('POST', joinPath, OV.poll.joinDemographicCallback);
	OV.loading.showSpinner("spinner"+category_id, "popupContent"+category_id);
};

OV.poll.joinDemographicCallback = {
	success: function(o) {
		var json = YAHOO.lang.JSON.parse(o.responseText);
		YAHOO.util.Dom.get("by"+json.category_id).innerHTML = json.partial;
		OV.loading.hideSpinner("spinner"+json.category_id, "popupContent"+json.category_id);
		OV.poll.DemographicsDialog["popup"+json.category_id].hide();
		YAHOO.util.Dom.removeClass("by"+json.category_id, "hide");
		//Now remove the popup from the list in case they view this again
		OV.poll.popups.splice(OV.poll.popups.indexOf("popup"+json.category_id), 1);
	},
	failure: function(o) {
		alert('Sorry, something went wrong...');
	}
};

OV.poll.showEmailAFriend = function(e) {
	YAHOO.util.Event.preventDefault(e);
	OV.poll.EmailAFriendDialog.show();
	
};

OV.poll.hideEmailAFriend = function(e) {
	YAHOO.util.Event.preventDefault(e);
	OV.poll.EmailAFriendDialog.hide();
};

OV.poll.sendToFriend = function(e, args) {
	YAHOO.util.Event.preventDefault(e);
	var pollId = args[0];
	var emailPath = '/polls/' + pollId + '/email_poll.json'
	YAHOO.util.Connect.setForm(YAHOO.util.Dom.get("emailAFriendForm"));
    var cObj = YAHOO.util.Connect.asyncRequest('POST', emailPath, OV.poll.sendToFriendCallback);
	
	OV.loading.showSpinner("emailSpinner");
	YAHOO.util.Dom.addClass("emailAFriendFormContainer", "hide");
	YAHOO.util.Dom.removeClass("emailAFriendFormContainer", "content");
};

OV.poll.sendToFriendCallback = {
	success: function(o) {
		var json = YAHOO.lang.JSON.parse(o.responseText);
		OV.loading.hideSpinner("emailSpinner");
		YAHOO.util.Dom.removeClass("emailAFriendFormContainer", "hide");
		YAHOO.util.Dom.addClass("emailAFriendFormContainer", "content");
		if (json.message == "Thanks, your email has been sent") {
			OV.poll.EmailAFriendDialog.hide();
			//Reset fields
			YAHOO.util.Dom.get("used_plaxo").value = "";
			YAHOO.util.Dom.get("to").value = "";
			YAHOO.util.Dom.get("name").value = "";
			YAHOO.util.Dom.get("from").value = "";
			YAHOO.util.Dom.get("message").value = "";
		}
		alert(json.message);
	},
	failure: function(o) {
		OV.loading.hideSpinner("emailSpinner");
		YAHOO.util.Dom.removeClass("emailAFriendFormContainer", "hide");
		YAHOO.util.Dom.addClass("emailAFriendFormContainer", "content");
		alert('Sorry, something went wrong...');
	}
};

OV.poll.initializeEmailAFriendDialog = function(domId) {
	OV.poll.EmailAFriendDialog = new YAHOO.widget.SimpleDialog("emailAFriend", { 
	fixedcenter:true,
	close: false,
	zindex:1000,
	modal:true,
    visible:false,
	draggable:false });
	OV.poll.EmailAFriendDialog.render(domId);
};

OV.poll.initializeDemographicDialog = function(domId) {
	OV.poll.DemographicsDialog[domId] = new YAHOO.widget.SimpleDialog(domId, { 
	fixedcenter:true,
	close: false,
	zindex:1000,
	modal:true,
    visible:false,
	draggable:false });
	OV.poll.DemographicsDialog[domId].render("ov");
};
