(function($) {
  var cache = [];
  // Arguments are image paths relative to the current page.
  $.preLoadImages = function() {
    var args_len = arguments.length;
    for (var i = args_len; i--;) {
      var cacheImage = document.createElement('img');
      cacheImage.src = arguments[i];
      cache.push(cacheImage);
    }
  }
})(jQuery)

jQuery.preLoadImages("/images/ajax-loader2.gif");


function addEvent(obj, evType, fn){ 
 if (obj.addEventListener){ 
   obj.addEventListener(evType, fn, false); 
   return true; 
 } else if (obj.attachEvent){ 
   var r = obj.attachEvent("on"+evType, fn); 
   return r; 
 } else { 
   return false; 
 } 
}

/*
    Written by Jonathan Snook, http://www.snook.ca/jonathan
    Add-ons by Robert Nyman, http://www.robertnyman.com
*/

function getElementsByClassName(oElm, strTagName, strClassName){
    var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    strClassName = strClassName.replace(/\-/g, "\\-");
    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
    var oElement;
    for(var i=0; i<arrElements.length; i++){
        oElement = arrElements[i];      
        if(oRegExp.test(oElement.className)){
            arrReturnElements.push(oElement);
        }   
    }
    return (arrReturnElements)
}

function hoverNav(){
	var el=document.getElementById("title-navigation");
	var els=document.getElementsByTagName("li");
	for(i=0;i<els.length;i++){
		els[i].onmouseover=function(){
			var menu=this.getElementsByTagName("ul");
			if(menu[0]){
				menu[0].className="over";
			}
		}
		
		els[i].onmouseout=function(){
			var menu=this.getElementsByTagName("ul");
			if(menu[0]){
				menu[0].className="";
			}
		}
	}
}

function showHideRaces(){
	var els=getElementsByClassName(document, "a", "my-links");
	var nextLink=document.getElementById("next");
	var prevLink=document.getElementById("previous");
	var myCounter=document.getElementById("counter");
	//var tables=getElementsByClassName(document, "table", "table-races");
	var tables=$('.table-races');
	for(i=0;i<els.length;i++){
		els[i].onclick=function(){
			var vars=this.id.split("-");
			var table=document.getElementById("table-"+vars[1]);
			myCounter.value=parseInt(vars[1])-1;
			
			for(p=0;p<tables.length;p++){
				tables[p].className="table-races hide";
				els[p].className="";
			}
			if(vars[1]==els.length){
				nextLink.className="hide";
			}else{
				nextLink.className="";
			}
			if(vars[1]==1){
				prevLink.className="hide";
			}else{
				prevLink.className="";
			}
			this.className="on";
			table.className="table-races";
		}
	}
	nextLink.onclick=function(){
		for(p=0;p<tables.length;p++){
			tables[p].className="table-races hide";
			els[p].className="";
		}
		var currentEl=(parseInt(myCounter.value)+1);
		
		myCounter.value=currentEl
		els[currentEl].className="on";
		tables[currentEl].className="table-races";
		if((parseInt(currentEl)+1)==els.length){
			nextLink.className="hide";
		}else{
			nextLink.className="";
		}
		if((parseInt(currentEl)+1)==1){
			prevLink.className="hide";
		}else{
			prevLink.className="";
		}
	}
	prevLink.onclick=function(){
		for(p=0;p<tables.length;p++){
			tables[p].className="table-races hide";
			els[p].className="";
		}
		var currentEl=(parseInt(myCounter.value)-1);
		myCounter.value=currentEl
		els[currentEl].className="on";
		tables[currentEl].className="table-races";
		if((parseInt(currentEl)+1)==els.length){
			nextLink.className="hide";
		}else{
			nextLink.className="";
		}
		if((parseInt(currentEl)+1)==1){
			prevLink.className="hide";
		}else{
			prevLink.className="";
		}
	}
}

var $table_data='';

function get_table_data(){
	//if we already have the data, don't get it again
	if($table_data==''){
		$.getJSON('/epolls/json/'+$('#poll_id').val()+'_polling_module.js', function(json){
			$table_data=json;
			append_table_data($table_data);
		});
	}else{
		append_table_data($table_data);
	}
}

function append_table_data(json){
		var $output='';
		var $sample_size=json.rcp_polls.moduleInfo.sample_size;
		var $margin_error=json.rcp_polls.moduleInfo.margin_error;
		var $confidence_interval=json.rcp_polls.moduleInfo.confidence_interval;
		var $undecided=json.rcp_polls.moduleInfo.undecided;
		var $row_class='';
		var $row_count = $('#polling-data-full .data tr:not(.omit)').length;
		var $counter=0;
		var $limit=$('#poll_data_table_increment').val();
		if($limit=='' || $limit==undefined){
			$limit=50;
		}
		var $increment=0;
		var $doc_length=json.rcp_polls.poll.length;
		$.each(json.rcp_polls.poll,function(i,object){
			if((object.type=='poll_rcp_avg' || object.type=='poll') && (i>$row_count)){
				$counter++;
				if(object.type=='poll_rcp_avg'){
					$row_class=' class="isInRcpAvg"';
				}else{
					$row_class='';
				}
				$output+='<tr'+$row_class+'>';
				$output+='<td class="noCenter"><a href="'+object.link+'">'+object.pollster+'</a></td>';
				$output+='<td>'+object.date+'</td>';
				if($confidence_interval==1){
					$output+='<td>'+object.confidenceInterval+'</td>';
				}
				if($sample_size==1){
					$output+='<td>'+object.sampleSize+'</td>';
				}
				if($margin_error==1){
					$output+='<td>'+object.marginError+'</td>';
				}
				$.each(object.candidate, function(property, value) {
					if(value.value!=''){
						$output+='<td>'+value.value+'</td>';
					}else{
							$output+='<td>--</td>';
					}
					
				});
				if($undecided==1){
					$output+='<td>'+object.undecided+'</td>';
				}
				$output+='<td class="spread">'+object.spread[0].html+'</td>';
				$output+='</tr>';
				
				if($counter>=$limit){
					return false;
				}		
			}
			$increment=i;
			//$increment++;
			
		});
		if(($increment+1)==$doc_length){
			$('#more_table_data_footer').hide();
		}
		$('#polling-data-full .data').append($output);
		clear_html($('#more_table_data_footer .spinner'));
		$('#more_table_data').show();
}

function add_spinner(object){
	$spinner='<img src="/images/ajax-loader2.gif" alt="Loading..." />';
	object.html($spinner);
	$('#more_table_data').hide();
	return false;
}

function clear_html(object){
	object.html('');
	return false;
}

$(document).ready(function() {

	$('.search_by_race').change(function(){
		window.location.href = $(this).val();  
	});
	
	$('#print_all').click(function(){
		$('#alpha div').removeClass('no_print');
		window.print();
	});
	
	$('#print_polls').click(function(){
		$('#alpha div').addClass('no_print');
		window.print();
	});
	/*********************************widgets*****************************************/	  
	$('.embed_link').click(function(){
		$('.embed_container').toggle();
		//$('.embed_container').animate({ height: "toggle", opacity: "toggle"}, "fast" );
	});
	
	$('#widget_close').click(function(){
		$('.embed_container').toggle();
		//$('.embed_container').animate({ height: "toggle", opacity: "toggle"}, "fast" )
	});
	
	$('#widget_preview').click(function(){
		jQuery.facebox({ div: '#embed_widget' })
		$('#embed_facebox').html('<div id="embed_widget">'+$('#embed_iframe').val()+'</div>');
		var content=$('#embed_facebox').html();
		jQuery.facebox(content);
	});
		
	$('.widget_size').click(function(){
		$('#widget_custom_width').val('');
		$('.widget_size').removeClass('on');
		$('.widget_custom').removeClass('on');
		$(this).addClass('on');
		var size=$(this).attr('name');
		var poll_id=$('#poll_id').val();
		var clean_poll_title=$('#clean_poll_title').val();
		$('#embed_code').val('<script type="text/javascript" src="http://charts.realclearpolitics.com/widget_embed.js?id='+poll_id+'&width='+size+'&height=338&key='+clean_poll_title+'"></script>');
		$('#embed_iframe').val('<iframe src="http://charts.realclearpolitics.com/widget_embed.html?id='+poll_id+'&width='+size+'" width="'+size+'" height="338" frameborder="0" scrolling="no" marginheight="0" marginwidth="0"></iframe>');
	});
		
	$('#widget_custom_width').click(function(){
		$('.widget_size').removeClass('on');
		$('.widget_custom').addClass('on');
	});
		
	$('#widget_custom_width').keyup(function(){
		var size=$(this).val();
		var poll_id=$('#poll_id').val();
		var clean_poll_title=$('#clean_poll_title').val();
		if(size!=parseInt(size)){
			size=450
		}else if(size<180){
			size=450
		}
		$('#embed_code').val('<script type="text/javascript" src="http://charts.realclearpolitics.com/widget_embed.js?id='+poll_id+'&width='+size+'&height=338&key='+clean_poll_title+'"></script>');
		$('#embed_iframe').val('<iframe src="http://charts.realclearpolitics.com/widget_embed.html?id='+poll_id+'&width='+size+'" width="'+size+'" height="338" frameborder="0" scrolling="no" marginheight="0" marginwidth="0"></iframe>');
	});
	
	$('#more_table_data').click(function(){
		add_spinner($('#more_table_data_footer .spinner'));
		get_table_data();
	});
	
	$('.chart_tabs a').click(function(){
		$('.chart_tabs a').removeClass('active');
		$(this).addClass('active');
		$('.charts').hide();
		$('.'+$(this).attr('rel')).show();
	});
	
	$('.years_ago').click(function(){
		$('.chart_tabs a').removeClass('active');
		$('.chart_tabs a.tab_1').addClass('active');
		$('.legacy_charts').show();
		$('.chart_tab_1').show();
		$('.chart_tab_2').hide();
	});
	$('.final_results').click(function(){
		$('.chart_tabs a').removeClass('active');
		$('.chart_tabs a.tab_2').addClass('active');
		$('.legacy_charts').show();
		$('.chart_tab_2').show();
		$('.chart_tab_1').hide();
	});

});
