//setup the ajax object
function setAjax(vars){
	var defaults={
		type: "GET",
		url: "/talkPod/gateway.php",
		dataType: "json",
		processData: true
	};
	for(var i in vars){
		defaults[i]=vars[i];
	}
	return defaults;
	//Checking whether I am in right file
}
//message class to read and parse strings.xml
//as well as displaying the messages
function messenger(){
	this.messages={};
	this.default_message='Please Wait';
	this.has_error=false;
	var self=this;
	$.ajax(setAjax({
		url:"/talkPod/strings.xml",
		dataType: "xml",
		success: function(x){self.process_string_xml(x);}
	}));
}
messenger.prototype.process_string_xml = function(xml){
	var i=0;
	var self=this;
	$('string',xml).each(function(){
		var name=$(this).attr('name');
		var value=$(this).text();
		if($(this).attr('default')==='true' || i===0){
			self.default_message=value;
		}
		self.messages[name]=value;
		i++;
	});
	
}
messenger.prototype.get_message_string = function(){
	var code=arguments[0];
	var msg=this.messages[code];
	if(!msg){
		msg=this.default_message;
	}
	//this replaces anthing with $$NUM with the arguments after the code
	if(arguments.length>1 && msg.match(/\$\$/)){
		for(var i=1;i<arguments.length;i++){
			var re = new RegExp('\\$\\$'+i);
			msg=msg.replace(re,arguments[i]);
		}
	}
	return msg;
	
}
//d is the output from the gateway php
//message_box is the div to put the results in (it will just stick the text in there), if blank, use a lightbox
//output function is called to display any output
//use_internal_lightbox is set to the selector you want to place the internal alertbox
messenger.prototype.process_output = function(){
	//d,message_box,output_function, use_internal_lightbox
	var d=arguments[0];
	var message_box=arguments[1]?arguments[1]:'';
	var output_function=arguments[2]?arguments[2]:null;
	var internal_lightbox=arguments[3]!==undefined?arguments[3]:false;
	this.has_error=false;
	var called_hooks=false;
	if(d.hooks){
		for(var i=0;i<d.hooks.length; i++){
			var h=d.hooks[i]+'_tP_hook';
			if(typeof window[h]=='function'){
				called_hooks=true;
				var func=window[h];
				func();
			}
		}
	}
	if(called_hooks){return;}
	if(d['errors']){
		this.has_error=true;
		this.display_errors(d['errors']);
		return;
	}
	if(output_function && typeof(output_function)=='function'){
		output_function(d['output']);
	}
	if(d['messages']){
		this.display_messages(d['messages'],message_box,internal_lightbox);
	}
}
//pops up an alertbox inside a selector
messenger.prototype.internal_alertbox = function(message,selector){
	var can_remove=arguments[2]!==undefined?arguments[2]:true; //if this is false, the user can't remove the box
	var add_class=arguments[3]!==undefined?' '+arguments[3]:'';
	if($.browser.msie && $.browser.version<7){ //do not add the second class to ie6, as you can't match properly to both classes
		add_class='';
	}
	var self=this;
	var sel_w=$(selector).outerWidth();
	var sel_h=$(selector).outerHeight();
	var old_pos=$(selector).css('position');
	$(selector).css('position','relative');
	$(selector).append('<div class="tP_internal_alertbox'+add_class+'"></div><div class="tP_internal_alertbox_message'+add_class+'">'+message+'</div>');
	$('.tP_internal_alertbox',selector).css({width:sel_w,height:sel_h,position:'absolute',opacity:'0.5',top:0,left:0});
	var msg_w=$('.tP_internal_alertbox_message',selector).outerWidth();
	var msg_h=$('.tP_internal_alertbox_message',selector).outerHeight();
	var msg_left=Math.floor((sel_w-msg_w)/2);
	var msg_top=Math.floor((sel_h-msg_h)/2);
	$('.tP_internal_alertbox_message',selector).css({position:'absolute',top:msg_top,left:msg_left});
	if(can_remove){
		$('.tP_internal_alertbox',selector).bind('click',function(){self.remove_internal_alertbox(selector);});
		$('.tP_internal_alertbox_message',selector).bind('click',function(){self.remove_internal_alertbox(selector);});
	}
}

messenger.prototype.remove_internal_alertbox = function(selector){
	$('.tP_internal_alertbox',selector).remove();
	$('.tP_internal_alertbox_message',selector).remove();
}

messenger.prototype.wait_on = function(selector){
	this.internal_alertbox(this.get_message_string('PLEASE_WAIT'),selector,false,'tP_internal_wait');
}
messenger.prototype.wait_off = function(selector){
	this.remove_internal_alertbox(selector);
}

messenger.prototype.alertbox = function(text){
	var self=this;
	var ww=$(window).width();
	var wh=$(window).height();
	var dw=$(document).width();
	var dh=$(document).height();
	var yo=0;
	var xo=0;
	if( typeof( window.pageYOffset ) == 'number' ) {
	  //Netscape compliant
	  yo = window.pageYOffset;
	  xo = window.pageXOffset;
	} else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
	  //DOM compliant
	  yo = document.body.scrollTop;
	  xo = document.body.scrollLeft;
	} else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
	  //IE6 standards compliant mode
	  yo = document.documentElement.scrollTop;
	  xo = document.documentElement.scrollLeft;
	}
	$('body').append('<div id="lightbox"></div>');
	$('#lightbox').css('opacity','0.2');
	$('#lightbox').css({'width':dw+xo,'height':dh+yo});
	$('body').append('<div id="gateway_message_alertbox">'+text+'</div>');
	$('#gateway_message_alertbox').bind('click',function(){self.remove_alertbox()});
	var mw=$('#gateway_message_alertbox').width();
	var mh=$('#gateway_message_alertbox').height();
	$('#gateway_message_alertbox').css({'left':(Math.floor((ww-mw)/2)+xo),'top':(Math.floor((wh-mh)/2)+yo)});
	
	$('#lightbox').bind('click',function(){self.remove_alertbox()});
}
messenger.prototype.remove_alertbox = function(){
	$('#lightbox').remove();
	$('#gateway_message_alertbox').remove();
}
messenger.prototype.display_messages = function(m,box,internal_lightbox){
	var o='';
	for(var i=0;i<m.length;i++){
		o=m[i]+"<br/>";
	}
	if(box!==''){
		$(box).html(o);
	}
	else if(internal_lightbox){
		this.internal_alertbox(o,internal_lightbox);
	}
	else{
		this.alertbox(o);
	}
}
messenger.prototype.display_errors = function(e){
	var internal_alert=arguments[1]!==undefined?arguments[1]:false; //pass a selector to put the alert inside
	if(!e){
		return;
	}
	if(typeof(e)=='string'){
		e=[this.get_message_string(e)];
	}
	var m='';
	for(var i=0;i<e.length;i++){
		m+=e[i]+"</br>";
	}
	if(!internal_alert){
		this.alertbox(m);
	}
	else{
		this.internal_alertbox(m,internal_alert);
	}
	
}

//object to flag content
function flagger(msg){
	this.messenger=msg;
}
flagger.prototype.flag_by_contentID = function(id){
	var self=this;
	if(id){
		$.ajax(setAjax({
			data: {'action':'flagContentByID','contentID':id},
			success: function(d){
				self.messenger.process_output(d)
				}
		}));
	}
}
var GATEWAY_MESSENGER=new messenger();
var GATEWAY_FLAGGER=new flagger(GATEWAY_MESSENGER);
(function($){
	var settings;
	var last=0;
	var content_data=[];
	var templates=[];
	var atPages=[];
	var numComments=[];
	$.fn.talkPodCommenting = function(options){
		settings = $.extend({}, $.fn.talkPodCommenting.defaults, options);
		if(!(settings.action_function && typeof settings.action_function==='function')){
			settings.action_function=function(){};
		}
		if(settings.messenger===undefined){
			if(typeof(GATEWAY_MESSENGER) === 'object'){
				settings.messenger=GATEWAY_MESSENGER;
			}
			else{
				return;
			}
		}
		if(settings.flagger===undefined){
			if(typeof(GATEWAY_FLAGGER) === 'object'){
				settings.flagger=GATEWAY_FLAGGER;
			}
			else{
				return;
			}
		}
		var self=this;
		$(this).each(function(){
			$.fn.talkPodCommenting._bind_and_load(this,last++);
		});
	}
	$.fn.talkPodCommenting._bind_and_load = function(curr,curr_id){
		templates[curr_id]={};
		atPages[curr_id]=1;
		numComments[curr_id]=0;
		if($('.comment_template .single_comment script',curr).length){
			templates[curr_id].comment_template=$('.comment_template .single_comment script',curr).html();
		}
		else{
			templates[curr_id].comment_template=settings.comment_template;
		}
		if($('.comment_template .flag_comment script',curr).length){
			templates[curr_id].flag_comment_template=$('.comment_template .flag_comment script',curr).html();
		}
		else{
			templates[curr_id].flag_comment_template=settings.flag_comment_template;
		}
		if($('.num_comment_template script',curr).length){
			templates[curr_id].num_comment_template=$('.num_comment_template script',curr).html();
		}
		else{
			templates[curr_id].num_comment_template=settings.num_comment_template;
		}
		
		//if the selector does not have the proper items, replace it with the default
		if(!($('.messages',curr).length && $('.comments',curr).length && $('.commentText',curr).length)){
			$(curr).html(settings.entry_template);
		}
		$.fn.talkPodCommenting.bindEvents(curr,curr_id);
		if($('button[type=cancel]',curr).length){
			$('button[type=cancel]',curr).bind('click',function(e){e.preventDefault();$('textarea',self).val('');});
		}
		$(curr).attr('talkPodCommenting_id',curr_id);
		$(curr).addClass('tP_commenting');
		content_data[curr_id]=set_content_data(settings,curr);
		$.fn.talkPodCommenting.get_comments(curr,curr_id);
	}
	$.fn.talkPodCommenting.load_new = function(sel,guid){
		$('form',sel).slideDown(); //todo this could select extra items if there for some reason there is another form within the comments area
		$('.commentText',sel).removeAttr('disabled');
		tP_reloader(sel,guid,last++,'talkPodCommenting_id',$.fn.talkPodCommenting._bind_and_load)
	}
	$.fn.talkPodCommenting.bindEvents = function(curr,curr_id){
		$('form',curr).submit(function(e){$.fn.talkPodCommenting.submit_comment(e,curr,curr_id);});
	}
	$.fn.talkPodCommenting.unbindEvents = function(curr){
		$('form',curr).unbind('submit');
		$('form',curr).submit(function(e){e.preventDefault()});
	}
	$.fn.talkPodCommenting.get_comments = function(self,curr_id){
		settings.messenger.wait_on(self);
		var ajaxData=content_data[curr_id];
		ajaxData.action='getComments';
		ajaxData.page=atPages[curr_id];
		$.ajax(setAjax({
			data: ajaxData,
			success: function(d){
				settings.messenger.wait_off(self);
				settings.messenger.process_output(d,$('.messages',self),function(d){$.fn.talkPodCommenting.display_comments(d,self,curr_id)});
				
			}
		}));

	}
	$.fn.talkPodCommenting.display_comments = function(d,curr,curr_id){
		var num=0;
		if($('.tP_pagination',curr).length){
			var pagination=create_pagination(d.totalPages,d.perPage,d.atPage,d.paginationRange);
			if(pagination!=''){
				$('.tP_pagination',curr).html(pagination);
				$('.tP_pagination',curr).css('display','block');
				$('.tP_pagination li a',curr).bind('click',function(e){$.fn.talkPodCommenting.go_page(e,d,curr,curr_id);});
				$.fn.talkPodCommenting.select_at_page(curr,curr_id);				
			}

		}
		$(curr).css('display','block');
		$('.comments',curr).html('');
		if(d!==undefined){
			var c=d.comments;
			if(c && c.length!==undefined){
				for(var i=0;i<c.length;i++){
					$.fn.talkPodCommenting.display_comment(c[i],curr,false,curr_id);
				}	
				num=d.totalComments;
			}
		}
		numComments[curr_id]=num;
		$.fn.talkPodCommenting.set_comments_number(curr,curr_id,numComments[curr_id],templates[curr_id].num_comment_template);


	}
	$.fn.talkPodCommenting.set_comments_number = function(curr,curr_id,num_comments){
		if($('.num_comments',curr).length){
			if(num_comments>0){
				var t={
					NUM_COMMENTS:num_comments
				}
				if(num_comments===1){
					t.PLURAL='';
				}
				else{
					t.PLURAL='s';
				}
				$('.num_comments',curr).html(template_replace(templates[curr_id].num_comment_template,t));
			}
		}
	}
	$.fn.talkPodCommenting.select_at_page = function(curr,curr_id){
		$('.tP_pagination li',curr).removeClass('selected');
		$('.tP_pagination li.tP_page_'+atPages[curr_id],curr).addClass('selected');
	}
	$.fn.talkPodCommenting.go_page = function(e,d,curr,curr_id){
		var item=e.target;
		var found=false;
		for(i=0;i<5;i++){
			if($(item).hasClass('tP_pager_item')){
				found=true;
				break;
			}
			item=$(item).parent();
		}
		var classes=$(item).attr('class').split(/ /);
		var go_page=1;
		for(var i=0;i<classes.length;i++){
			if(classes[i].match(/^tP_page_/)){
				go_page=parseInt(classes[i].replace(/^tP_page_/,''));
				if(isNaN(go_page)){
					go_page=1;
				}
				break;
			}
		}
		atPages[curr_id]=go_page;
		$.fn.talkPodCommenting.select_at_page(curr,curr_id);

		
		$.fn.talkPodCommenting.get_comments(curr,curr_id);
	}
	$.fn.talkPodCommenting.display_comment = function(c,curr,at_top,curr_id){
		var id=c.id;

		var flag='';
		if(id!==0){
			flag=template_replace(templates[curr_id].flag_comment_template,{
				COMMENT_ID:id,
				FLAG_COMMENT_LINK_TEXT:settings.messenger.get_message_string('FLAG_COMMENT_LINK_TEXT')
			});
		}
		var out=template_replace(templates[curr_id].comment_template,{
			CREATED_DATE:c.created,
			COMMENT_ID:id,
			COMMENT_TEXT:c.comment,
			COMMENT_TITLE:c.title,
			FLAG_COMMENT:flag
		});
		if(!at_top){
			$('.comments',curr).append(out);
		}
		else{
			$('.comments',curr).prepend(out);
		}
		if(id!==0){
			var curr=this;
			$('#flag_'+id).bind('click',function(){settings.flagger.flag_by_contentID(id)});
		}
	}
	$.fn.talkPodCommenting.submit_comment = function(e,curr,curr_id){
		e.preventDefault();
		$.fn.talkPodCommenting.unbindEvents(curr);
		var self=this;
		var val=$('.commentText',curr).attr('value');
		var title='';
		if($('input.commentTitle',curr).length >0){
			title=$('input.commentTitle',curr).attr('value');
		}
		if(!val){
			settings.messenger.display_errors('NO_COMMENT_ENTERED',curr);
			$.fn.talkPodCommenting.bindEvents(curr,curr_id);
		}
		else{
			settings.messenger.wait_on(curr);
			var ajaxData=content_data[curr_id];
			ajaxData.action='createComment';
			ajaxData.commentText=val;
			ajaxData.commentTitle=title;
			$.ajax(setAjax({
				data: ajaxData,
				success: function(d){
					settings.messenger.wait_off(curr);
					$.fn.talkPodCommenting.bindEvents(curr,curr_id);
					settings.messenger.process_output(d,'',function(){$.fn.talkPodCommenting.append_added_comment(ajaxData,curr,curr_id)}); //add ,curr to make it an internal alertbox for the added comment message
					settings.action_function();
				}
			}));
		}
	}
	$.fn.talkPodCommenting.append_added_comment = function(data,curr,curr_id){
		if(!settings.messenger.has_error){
			var d=new Date();
			var comment=data.commentText;
			var title=data.commentTitle;
			var co={
				'avatar':'',
				'comment':comment,
				'ctime': 0,
				'created': '',
				'id':0,
				'personUUID':'',
				'title':title,
				'userName':''
			}
			$('.messages',curr).html('')
			this.display_comment(co,curr,true,curr_id)
			$('.commentText',curr).attr('disabled','true');
			// $.fn.talkPodCommenting.unbindEvents(curr);
			$('form',curr).slideUp();
			numComments[curr_id]++;
			$.fn.talkPodCommenting.set_comments_number(curr,curr_id,numComments[curr_id],templates[curr_id].num_comment_template);
		}
	}
	
	
	
	$.fn.talkPodCommenting.defaults = {
		comment_template: '<li id="comment_[$$COMMENT_ID]"><span class="created_date">[$$CREATED_DATE]</span>[$$FLAG_COMMENT]<div class="comment">[$$COMMENT_TEXT]</div></li>',
		flag_comment_template: '<a id="flag_[$$COMMENT_ID]" class="flag_comment" href="javascript:;">[$$FLAG_COMMENT_LINK_TEXT]</a>',
		entry_template: '<div class="messages"></div><ul class="comments"></ul><form class="comment_input"><label for="commentText">Enter Comment:</label><textarea name="commentText" class="commentText"></textarea><button type="submit">Submit Comment</button></form>',
		num_comments_template: '[$$NUM_COMMENTS] comment[$$PLURAL]'
	}
})(jQuery);

//gets the number of comments for more than one item, and makes only one SNAS api call, only works if using the same content identifier format
//if it doesnt work, use talkPodGetNumComments instead.
// (function($){
// 	var settings;
// 	var last=0;
// 	$.fn.talkPodGetNumCommentsGrouped = function(options){
// 		settings = $.extend({}, $.fn.talkPodGetNumCommentsGrouped.defaults, options);
// 		var items={};
// 		var count=0;
// 		$(this).each(function(){
// 			var curr_item=set_content_data(settings,this);
// 			for(var i in curr_item){
// 				var arr=i+'[]';
// 				if(items[arr]===undefined){
// 					items[arr]=[];
// 				}
// 				items[arr].push(curr_item[i]);
// 			}
// 			$(this).attr('talkPodGetNumCommentsGrouped_id',count);
// 			count++;
// 		});
// 		var self=this;
// 		if(items){
// 			items.action='getNumCommentsString';
// 			$.ajax(setAjax({
// 				data: items,
// 				success: function(d){
// 					$(self).each(function(){
// 						if($(this).attr('talkPodGetNumCommentsGrouped_id')!==undefined && d[$(this).attr('talkPodGetNumCommentsGrouped_id')]!==undefined){
// 							$(this).html(d[$(this).attr('talkPodGetNumCommentsGrouped_id')].data);
// 						}
// 					})
// 				}
// 			}));
// 		}
// 
// 	}
// 	$.fn.talkPodGetNumCommentsGrouped.defaults = {
// 	}
// })(jQuery);

(function($){
	var settings;
	var last=0;

	$.fn.talkPodGetNumComments = function(options){
		settings = $.extend({}, $.fn.talkPodRate.defaults, options);
		$(this).each(function(){
			var self=this;
			var ajaxData=set_content_data(settings,this);
				ajaxData.action='getNumCommentsString';
				$.ajax(setAjax({
					data: ajaxData,
					dataType: 'text',
					success: function(d){
						$(self).html(d);
					}
				}));
			});

	}
	$.fn.talkPodGetNumComments.defaults = {
	}
})(jQuery);


(function($){
	var settings;
	var last=0;
	var content_data=[];
	$.fn.talkPodRate = function(options){
		settings = $.extend({}, $.fn.talkPodRate.defaults, options);
		$.fn.talkPodRate.content_data={}; //content data contains either the contentURL or the contentGUID 
		if(!(settings.action_function && typeof settings.action_function==='function')){
			settings.action_function=function(){};
		}
		if(settings.messenger===undefined){
			if(typeof(GATEWAY_MESSENGER) === 'object'){
				settings.messenger=GATEWAY_MESSENGER;
			}
			else{
				return;
			}

		}
		var self=this;
		$(this).each(function(){
			$.fn.talkPodRate._bind_and_load(this,last++);
		});
	};
	$.fn.talkPodRate._bind_and_load = function(curr,curr_id){
		$(curr).attr('talkPodRate_id',curr_id);
		content_data[curr_id]=set_content_data(settings,curr);
		$.fn.talkPodRate.bind_ratings(curr,curr_id);
		$.fn.talkPodRate.load_ratings(curr,curr_id);
	}
	$.fn.talkPodRate.load_new = function(sel,guid){
		tP_reloader(sel,guid,last++,'talkPodRate_id',$.fn.talkPodRate._bind_and_load)
	}
	//adds the list of stars and binds the functions to them
	$.fn.talkPodRate.bind_ratings = function(curr,curr_id){
		var ratings='';
		for(var i=1;i<=settings.ratingMax;i++){
			ratings+='<li class="tP_rate_'+i+' tP_rating_empty">'+i+'</li>';
		}
		ratings+="<li class='tP_rate_stats tP_rating_number'></li><li class='tP_rate_stats tP_num_ratings'></li>";
		if(!$(curr).is('ul')){
			ratings="<ul>"+ratings+"</ul>";
			
		}
		$(curr).html(ratings);
		$('ul',curr).addClass('tP_star_rating');
		var ss=this;
		for(i=1;i<=settings.ratingMax;i++){
			$('li.tP_rate_'+i,curr).bind('click',(function(ii){return function(e){$.fn.talkPodRate.rate(curr,ii,e,curr_id);return false};})(i));
			$('li.tP_rate_'+i,curr).bind('mouseenter',(function(ii){return function(e){$.fn.talkPodRate.rate_hover(e,ii,'enter'); return false;}})(i));
			$('li.tP_rate_'+i,curr).bind('mouseleave',(function(ii){return function(e){$.fn.talkPodRate.rate_hover(e,ii,'leave'); return false;}})(i));
		}
	}
	//loads the rating from snas
	$.fn.talkPodRate.load_ratings = function(curr,curr_id){
		var ajaxData=content_data[curr_id];
		ajaxData.action='getRating';
		$.ajax(setAjax({
			data: ajaxData,
			success: function(d){
				settings.messenger.process_output(d,'',function(){$.fn.talkPodRate.set_rating(d,curr)});
			}
		}));
	}
	//lights up the proper amount of stars
	$.fn.talkPodRate.set_rating = function(data,curr){
		var current_rated_value=arguments[2]!==undefined?arguments[2]:false;
		var children=$(curr).children();
		var value=0;
		if(data.output && data.output.averageRating){
			value=data.output.averageRating;
		}
		if(value===0 && current_rated_value!==false){
			value=current_rated_value;
		}
		$('li',curr).removeClass('tP_rated_value');
		$('li',curr).removeClass('tP_rated_half_value');
		var i=0;
		var last_half=Math.round(value-Math.floor(value));
		var floor=Math.floor(value)
		var cls='';
		for(i=0;i<=floor;i++){
			cls='.tP_rate_'+i;
			$(cls,curr).addClass('tP_rated_value');
			$(cls,curr).removeClass('tP_rating_empty');
			
		}

		cls='.tP_rate_'+i;
		if(last_half && i<=settings.ratingMax){
			$(cls,curr).removeClass('tP_rated_value');
			$(cls,curr).addClass('tP_rated_half_value');
		}
		if($('.tP_num_ratings',curr).length){
			if(data.output.numRatings==1){
				$('.tP_num_ratings',curr).html(settings.messenger.get_message_string('RATING_NUMBER',data.output.numRatings));
			}
			else{
				$('.tP_num_ratings',curr).html(settings.messenger.get_message_string('RATING_NUMBER_PLURAL',data.output.numRatings));
			}
		}
		if($('.tP_rating_number',curr).length){
			$('.tP_rating_number',curr).html(data.output.averageRating);
		}
		$('li',curr).removeClass('tP_rating_hover');
	}
	//sends the rating to snas
	$.fn.talkPodRate.rate = function(curr,value,event,curr_id){
		var self=this;
		var ajaxData=content_data[curr_id];
		ajaxData.action='rateContent';
		ajaxData.rateValue=value;
		$.ajax(setAjax({
			data: ajaxData,
			success: function(d){
				settings.messenger.process_output(d,'',function(){self.set_rating(d,curr,value);$('li',curr).unbind();});
				settings.action_function();
			}
		}));
	}
	//makes the stars hover properly
	$.fn.talkPodRate.rate_hover = function(event,value,type){
		var parent=$(event.target).parent();
		var stars=$(event.target).parent().children();
		if(type==='enter'){
			for(var i=1;i<=value;i++){
				$('.tP_rate_'+i,parent).addClass('tP_rating_hover');
			}		
		}
		else{
			$('li',parent).removeClass('tP_rating_hover');
		}

	}
	$.fn.talkPodRate.defaults = {
		ratingMax: 5
	}
})(jQuery);





//integrates with gateway functions to retrieve and vote on snas polls
(function($){
	var settings;
	var question_data=[];
	var templates=[];
	$.fn.talkPodPoll = function(options){
		settings = $.extend({}, $.fn.talkPodPoll.defaults, options);
		if(!(settings.action_function && typeof settings.action_function==='function')){
			settings.action_function=function(){};
		}
		if(settings.messenger===undefined){
			if(typeof(GATEWAY_MESSENGER) === 'object'){
				settings.messenger=GATEWAY_MESSENGER;
			}
			else{
				return;
			}
		}
		var self=this;
		if(!$(this).length){
			return;
		}

		$(this).each(function(){
			var poll_id=settings.poll_id
			if($(this).attr('snas_poll_id')){
				poll_id=$(this).attr('snas_poll_id');
			}
			templates[poll_id]={};
			//retrieve templates from html if there are any
			if($('.poll_template .question script',this).length){
				templates[poll_id].question_template=$('.poll_template .question script',this).html();
			}
			else{
				templates[poll_id].question_template=settings.question_template;
			}
			if($('.poll_template .choice script',this).length){
				templates[poll_id].question_choice_template=$('.poll_template .choice',this).html();
			}
			else{
				templates[poll_id].question_choice_template=settings.question_choice_template;
			}
			if($('.poll_template .submit  script',this).length){
				templates[poll_id].question_submit_template=$('.poll_template .submit',this).html();
			}
			else{
				templates[poll_id].question_submit_template=settings.question_submit_template;
			}
			if($('.poll_results_template .question  script',this).length){
				templates[poll_id].result_question_template=$('.poll_results_template .question',this).html();
			}
			else{
				templates[poll_id].result_question_template=settings.result_question_template;
			}
			if($('.poll_results_template .choice  script',this).length){
				templates[poll_id].result_choice_template=$('.poll_results_template .choice',this).html();
			}
			else{
				templates[poll_id].result_choice_template=settings.result_choice_template;
			}
			if(poll_id){
				$.fn.talkPodPoll.loadPoll(poll_id,this);
			}

		});
	}
	$.fn.talkPodPoll.loadPoll = function(poll_id,self){
		settings.messenger.wait_on(self);
		$.ajax(setAjax({
			data:{'action':'getPollByID','pollID':poll_id},
			dataType: "json",
			processData: true,
			success: function(d){
				settings.messenger.process_output(d,self,function(){$.fn.talkPodPoll.displayPoll(d,self)});
				}
		}));
	}
	$.fn.talkPodPoll.displayPoll = function(data,self){
		settings.messenger.wait_off(self);
		var o=data.output;
		var h='';
		for(var pollID in o){
			question_data[pollID]={};
			//this blob displays the poll in the element
			h+='<form><input type="hidden" name="pollID" value="'+pollID+'"><ul>';
			for(var i=0;i<o[pollID].questions.length;i++){
				var question=o[pollID].questions[i].question;
				var questionID=o[pollID].questions[i].questionID;
				var cc='';
				question_data[pollID][questionID]={};
				question_data[pollID][questionID].question=question;
				question_data[pollID][questionID].totalVotes=0;
				question_data[pollID][questionID].choices={};
				
				for(var j=0;j<o[pollID].questions[i].choices.length;j++){
					
					var choice=o[pollID].questions[i].choices[j].choice;
					var choiceID=o[pollID].questions[i].choices[j].choiceID;
					var num_votes=o[pollID].questions[i].choices[j].votes;
					question_data[pollID][questionID].choices[choiceID]={};
					question_data[pollID][questionID].choices[choiceID].choice=choice;
					question_data[pollID][questionID].choices[choiceID].numVotes=num_votes;
					question_data[pollID][questionID].totalVotes+=num_votes;
					cc+=template_replace(templates[pollID].question_choice_template,{
							'CHOICE_ID':choiceID,
							'CHOICE':choice,
							'QUESTION_ID':questionID
						});
				}
				h+=template_replace(templates[pollID].question_template,{
						'CHOICES':cc,
						'QUESTION':question,
						'QUESTION_ID':questionID
					});
				
			}
			h+='</ul>'+templates[pollID].question_submit_template+'</form>';
		}
		$(self).html(h);
		$.fn.talkPodPoll.bindEvents(self);
	}
	$.fn.talkPodPoll.bindEvents = function(curr){
		$('form',curr).submit(function(e){return $.fn.talkPodPoll.votePoll(e,curr);});
	}
	$.fn.talkPodPoll.unbindEvents = function(curr){
		$('form',curr).submit(function(e){e.preventDefault();});
	}
	$.fn.talkPodPoll.votePoll = function(e,self){
		e.preventDefault();
		var numQuestions=$('dt',e.target).length;
		var pollID=$('input[name=pollID]',e.target).attr('value');
		//did not answer all the poll questions
		if($('input:radio:checked',e.target).length !== numQuestions){
			//find all the questions they missed
			var message='<ul>';
			var missed=0;
			for(var qid in question_data[pollID]){
				if($('input:radio:checked[name=question_'+qid+']',e.target).attr('value')===undefined){
					message+='<li>'+question_data[pollID][qid].question+"</li>";
					missed++;
				}
			}
			message+='</ul>'
			var msg='';
			if(missed==1){
				msg=settings.messenger.get_message_string('SELECT_ALL_ANSWERS',message);
			}
			else{
				msg=settings.messenger.get_message_string('SELECT_ALL_ANSWERS_PLURAL',message);
			}
			settings.messenger.internal_alertbox(msg,self);
		}
		else{
			var data={};
			$('input:radio:checked',e.target).each(function(){
				var q=$(this).attr('name');
				var value=$(this).attr('value');
				data[q]=value;
			})
			data['action']='votePollByID';
			data['pollID']=pollID;
			settings.messenger.wait_on(self);
			$.fn.talkPodPoll.unbindEvents(self);
			$.ajax(setAjax({
				data:data,
				dataType: "json",
				processData: true,
				success: function(d){//d,message_box,output_function, use_internal_lightbox
					$.fn.talkPodPoll.bindEvents(self);
					settings.messenger.wait_off(self);
					settings.messenger.process_output(d,'',function(){$.fn.talkPodPoll.displayResults(pollID,self)},self);
					settings.action_function();
					}
			}));
			refreshAds();
		}
		return false;
	}
	$.fn.talkPodPoll._sortChoicesByVotes = function(choices){
		var c=[];
		for(var choice in choices){
			c.push([choice,choices[choice].numVotes]);
		}
		c.sort(function() {
			return arguments[0][1] < arguments[1][1]
		});

		var out = [];
		for (var i=0;i<c.length;i++){
			out[c[i][0]] = c[i][1];
		}
		return out;
	}
	$.fn.talkPodPoll.displayResults = function(pollID,self){
		var qd=question_data[pollID];
		var out='<ul>';
		for(var qid in qd){
			var t=qd[qid].totalVotes;
			var q=qd[qid].question;
			var cc='';
			var order=[];
			var sortchoice=$.fn.talkPodPoll._sortChoicesByVotes(qd[qid].choices);
			for(var cid in sortchoice){
				var num=qd[qid].choices[cid].numVotes;
				var choice=qd[qid].choices[cid].choice;
				var v=0;
				if(t!==0){
					v=Math.round(((num/t)*10000))/100;
				}
				cc+=template_replace(templates[pollID].result_choice_template,{
					'CHOICE_PERCENT':v,
					'CHOICE':choice,
					'NUM_VOTES':num
				});
			}
			out+=template_replace(templates[pollID].result_question_template,{
				'QUESTION':q,
				'TOTAL_VOTES':t,
				'CHOICES':cc
				
			})
		}
		out+='</ul>';
		$(self).html(out);
	}
	$.fn.talkPodPoll.defaults = {
		question_template: '<li><dl><dt>[$$QUESTION]</dt>[$$CHOICES]</dl></li>',
		question_choice_template: '<dd><input type="radio" id="choice_[$$CHOICE_ID]" value="[$$CHOICE_ID]" name="question_[$$QUESTION_ID]" /><label for="choice_[$$CHOICE_ID]">[$$CHOICE]</label></dd>',
		question_submit_template: '<button type="submit">Submit Vote</button>',
		result_question_template: '<li><dl><dt>[$$QUESTION]<span class="votes">([$$TOTAL_VOTES])</span></dt>[$$CHOICES]</dl></li>',
		result_choice_template: '<dd><span class="vote_percent">([$$CHOICE_PERCENT]%)</span>[$$CHOICE]</dd>'
	}
})(jQuery);
//miscellaneous functions
function create_pagination(totalPages,perPage,atPage,maxPages){
	atPage=parseInt(atPage);
	if(totalPages>1){
		var href=' href="javascript:;"';
		// if($.browser.msie){
		// 	href=' href="javascript:;"';
		// }
		var start=false;
		var end=false;
		var page_list='';
		var size=Math.ceil((maxPages-1)/2);
		var rem=maxPages;
		for(var i=atPage-size;i<=totalPages;i++){
			if(i>=1){
				rem-=1;
				if(start===false){
					start=i;
				}
			}
			if(rem===0){
				end=i;
				break;
			}
		}
		if(end===false){
			end=totalPages;
			if((start-rem)>0){
				start-=rem;
			}
			else{
				start=1;
			}
		}
		
		var page_left_num=false;
		var page_right_num=false;
		if(start-1>0){
			page_left_num=start-1;
		}
		if(end+1<=totalPages){
			page_right_num=end+1;
		}
		for(var i=start;i<=end;i++){
			if(i!==atPage){
				page_list+='<li class="tP_pager_item tP_page_'+i+'"><span><a'+href+'>'+i+'</a></span></li>';
			}
			else{
				page_list+='<li class="tP_pager_item tP_page_'+i+' selected"><span><a'+href+'>'+i+'</a></span></li>';
			}
			
		}

		if((atPage-1)!=0){
			page_list='<li class="tP_pager_item tP_page_'+(atPage-1)+' tP_go_left"><span><a'+href+'>&larr;</a></span></li>'+page_list;
		}
		if(page_left_num){
			page_list='<li class="tP_pager_item tP_page_'+page_left_num+' tP_page_left"><span><a'+href+'>&laquo;</a></span></li>'+page_list;
		}
		if((atPage+1)<=totalPages){
			page_list+='<li class="tP_pager_item tP_page_'+(atPage+1)+' tP_go_right"><span><a'+href+'>&rarr;</a></span></li>';
		}
		if(page_right_num){
			page_list+='<li class="tP_pager_item tP_page_'+page_right_num+' tP_page_right"><span><a'+href+'>&raquo;</a></span></li>';
		}
		return page_list;
	}
	return '';
}
function set_content_data(settings,curr){ //sets the contenURL contentID etc
	var ret={};
	if($(curr).attr('item_contentType')){
		ret.contentType=$(curr).attr('item_contentType');
	}
	if(settings.item_contentID){
		ret.contentID=settings.contentID;
	}
	else if(settings.contentGUID){
		ret.contentGUID=settings.contentGUID;
	}
	else if($(curr).attr('item_contentID')){
		ret.contentID=$(curr).attr('item_contentID');
	}
	else if($(curr).attr('item_guid')){
		ret.contentGUID=$(curr).attr('item_guid');
	}
	else{
		ret.contentURL=window.location.toString();
		
	}
	return ret;
}

function template_replace(template,replacements){
	if(template){
		for(var r in replacements){
			var reg= new RegExp('\\[\\$\\$'+r+'\\]','g');
			template=template.replace(reg,replacements[r])
		}		
	}
	return template;

}
function tP_reloader(sel,guid,curr_index,attr_name,func){
	var guid_array=[];
	if(arguments[1]!==undefined){
		if(!(arguments[1] instanceof Array)){
			guid_array[0]=arguments[1];
		}
		else{
			guid_array=arguments[1];
		}
	}
	var i=0;
	$(sel).each(function(){
		if(guid_array[i]!==undefined){
			$(this).attr('item_guid',guid_array[i]);
		}
		$(this).removeAttr(attr_name);
		func(this,curr_index);
	});
}

