// lets start defining functions rather than this super gigantic ondocready


//some global variables
var just_loaded = true;
var _loadedTabs = new Array();

//chrome is cookie-annoying
var _lastTab = undefined; 

/**
 * Do all the styling and anchor work when a user selects a new tab
 * @param hashTab the name of the selected tab
 * @return false
 */
function focusSiteInfoTab(tabName) {

	//get the selected tab
	var hashTab = '#' + tabName;
	var currentTab = $.cookie("ax_gr_last_tab");
	//first check if it is not already selected
	if(undefined != currentTab && currentTab == tabName) {
		return;
	}
	
	//now see if this is a cookie unfriendly browser
	if(undefined != _lastTab && currentTab != _lastTab) {
		currentTab = _lastTab;
	}
	
	//hide the previous section. We should know what it is from the cookie 
	if(undefined == currentTab) {

		//we'll have to do this the hard way
		$('#siteinfotabs > div').hide();
		$('#navigationTabs li').removeClass('selected');

	} else {
		//sweet. documented tabs ftw
		$(currentTab +'_div').hide();			  
		$(currentTab + '_li').removeClass('selected');
	}

	//style the new tab, show content and save the new state
	$(hashTab + '_li').addClass('selected');
	loadTabContent(hashTab);
	$.cookie("ax_gr_last_tab", hashTab, { expires: 1, path: '/siteinfo/'});
	_lastTab = hashTab;
	
	return false;
} //end focusSiteInfoTab



/**
 * Used by snippets
 * @param newTab
 * @return
 */
function selectTab(newTab) {
	$(newTab + '_a').click();
}


/**
 * Load the contents of a selected tab
 * @param tabId the tab to load (e.g #keywords)
 * @return false
 */
function loadTabContent(tabId) {
	
	//lets do this while we clean up things
	var showKeywords = true;
	var showSem = true;
	var loaded = (undefined != _loadedTabs[tabId] && _loadedTabs[tabId]);
	var topKwFromTraffic = $('#top-keywords-from-search-traffic');
	var semPromo = $('#sem_promo');
	
	switch(tabId) {
	
		case '#trafficstats':
			if(!loaded) {
				var last_widget_stat = (null == $.cookie('ax_gr_last_stat')) ? "#rank" : $.cookie('ax_gr_last_stat');
				$('#tw-tabmodule ul.tw-tabnav a').filter("[href=\'"+ last_widget_stat +"\']").click();
				if(trafficstatsSnippet) {
					$('#crescendo').load(trafficstatsSnippet);
				}
			}
			showKeywords = false;
			break;
			
		case '#keywords':
			if(keywordsSnippet && !loaded) {
				$.get(keywordsSnippet, function(data) {
					loadISpionageData(data);
				});
			}
			showKeywords = false;
			showSem = false;
			break;
			
		case '#demographics':
			if(!loaded) {
				if(demographicsSnippet) {
					//$("#demographics-content").load(demographicsSnippet);
				}
			}
			break;
			
		case '#contactinfo':
			break;
			
		case '#reviews':
			break;
			
		case '#relatedlinks':
			if(!loaded) {
				$('img.favicon').each(function(){
					var site = $(this).attr('site');
					$(this).attr('src', 'http://www.alexa.com/cgi-bin/favicon.php?url='+site);
				});
			}
			break;
			
		case '#clickstream':
			if(!loaded && clickstreamSnippet) {
				$("#clickstream_div").load(clickstreamSnippet);
			}
			break;
	}
	
	_loadedTabs[tabId] = true;
	$(tabId + '_div').show();

	showSem ? semPromo.show() : semPromo.hide();
	showKeywords ? topKwFromTraffic.show() : topKwFromTraffic.hide();
	
	return false;
} //end loadTabContent



/**
 * ISpionage 
 */

function loadISpionageData(data) {
	var openTag = "<td class='stat'>";
	var closeTag = "</td>";

	if(undefined == data.Summary || "Error" == data.Status) {
		noISpionageData();
	} else {
	
		var lowerBudget = (undefined == data.Summary.LowerAdBudget) ? 'N/A' : stripDecimal(data.Summary.LowerAdBudget);
		var upperBudget = (undefined == data.Summary.UpperAdBudget) ? 'N/A' : stripDecimal(data.Summary.UpperAdBudget);
		var budget = (lowerBudget == upperBudget) ? lowerBudget : lowerBudget + ' - ' + upperBudget;
		$('#ppcBudget').append(openTag + budget + closeTag);

		var lowerClicks = (undefined == data.Summary.LowerClicks) ? 'N/A' : stripDecimal(data.Summary.LowerClicks);
		var upperClicks = (undefined == data.Summary.UpperClicks) ? 'N/A' : stripDecimal(data.Summary.UpperClicks);
		var clicks = (lowerClicks == upperClicks) ? lowerClicks : lowerClicks + ' - ' + upperClicks;
		$('#lastClicks').append(openTag + clicks + closeTag);
		
		var adPosition = (undefined == data.Summary.AvgAdPosition) ? 'N/A' : data.Summary.AvgAdPosition;
		$('#avgAdPosition').append(openTag + adPosition + closeTag);
		
		var googleKw = (undefined == data.Summary.GoogleKeywords) ? 'N/A' : formatNumber(data.Summary.GoogleKeywords);
		$('#googleKeywords').append(openTag + googleKw + closeTag);
		
		var yahooKw = (undefined == data.Summary.YahooKeywords) ? 'N/A' : formatNumber(data.Summary.YahooKeywords);
		$('#yahooKeywords').append(openTag + yahooKw + closeTag);
	}
	var returnUrl = (undefined == data.ReturnUrl) ? '#' : data.ReturnUrl;
	$('#ispionage_img_a').attr("href", returnUrl);
} //end loadISpionageData

 /**
  * ISpionage returns formatted numbers with 2 decimals. Since they 
  * are formatted they are strings and we can't use the Math library to
  * get rid of any .00 we may not want.
  * @param formattedNumber
  * @return
  */
function stripDecimal(formattedNumber) {
	if(undefined != formattedNumber) {
		return formattedNumber.substring(0, formattedNumber.indexOf("."));
	}
} 

//add commas to an unformatted number
function formatNumber(toFormat) {
	
	var parts = (toFormat + "").split('.'); //in case it has a decimal point
	var decimal = (parts.length > 1) ? '.' + parts[1] : '';
	var rgx = /(\d+)(\d{3})/;
	var integerPart = parts[0];
	while (rgx.test(integerPart)) {
		integerPart = integerPart.replace(rgx, '$1' + ',' + '$2');
	}
	return integerPart + decimal;
}//end format number

/**
 * If there was an error on the call to ispionage, populate
 * the table with n/a
 */
function noISpionageData() {
	var openTag = "<td class='stat'>";
	var closeTag = "</td>";
	var nodata = openTag + "N/A" + closeTag;
	
	$('#ppcBudget').append(nodata);
	$('#avgAdPosition').append(nodata);
	$('#googleKeywords').append(nodata);
	$('#yahooKeywords').append(nodata);
	$('#lastClicks').append(nodata);
} //end 

/**** Functions for Demographics Widget ****/
function focusDCWidgetTab(tab) {
	
	//select the tab title
	$('#dc-tabList li').removeClass('selected');
	$('#' + tab + '_li').addClass('selected');
	
	//hide the previous information
	var previousTab = $("#dc-tabContainers .statselected");
	previousTab.addClass('tw-table');
	previousTab.removeClass('statselected');
	
	//show the new information
	var selected = $('#dc-tabContainers .compare-' + tab);
	selected.addClass('statselected');
	selected.removeClass('tw-table');
} //end focusDemographincsWidgetTab


function callOnEnter(event, funct) {
	
	var keyCode = event.charCode ? event.charCode : event.keyCode;
	if(13 == keyCode) {
		funct();
	}
}


/**
 * Make an ajax request to populate the Compare demographics widget
 * @param target the selected tab
 */
function loadDCWidgetContent() {
	
	var compareSites = "";
	var glue = "";
	$('.cd-sites').each(function() {
		var compareTo = (undefined == this.value) ? "" : $.trim(this.value);
		if(compareTo.length > 0) {
			var spaces = compareTo.indexOf(" ");
			if(-1 < spaces) { 
				compareTo = compareTo.substring(0, spaces);
			}
			compareSites += glue + compareTo;
			glue = ",";
		}
	});
	var selected = $("#dc-tabList .selected").attr('id');
	var target = (undefined == selected) ? 'age' : selected.substr(0, selected.length - 3);

	if(demowidgetSnippet) {
		var html_snippet = demowidgetSnippet;
		html_snippet += "?compareSites="+compareSites+"&target="+target;
		$('#demographics-compare').load(html_snippet);
	}
	
} //end loadDemographicsWidgetContent




$(document).ready(
	function () {
		
		//last selected tab
		if (($.cookie('ax_gr_last_stat') == null) || ($.cookie('ax_gr_last_stat') == '')) {
			$.cookie('ax_gr_last_stat', '#reach', { expires: 1});	  
		}


		var tabTwContainers = $('div.tw-table');

		//change widget tabs
		$('#tw-tabList a').click(function () {
			tabTwContainers.removeClass('statselected').hide();
			tabTwContainers.filter(this.hash).addClass('statselected').show();

			$('#tw-tabList li.selected').removeClass('selected');
			$(this).parent().addClass('selected');
			$.cookie("ax_gr_last_stat", this.hash, { expires: 1});

			var visible_table = $('div.statselected');
			var y = visible_table.attr("y");		 	 
			var c = visible_table.attr("c");
			$('#tw-graphImg').each( function(i) {
				var new_traffic_graph_url = this.src; 
				new_traffic_graph_url = new_traffic_graph_url.replace(/\&y=\w\&/,'&y='+y+'&');
				new_traffic_graph_url = new_traffic_graph_url.replace(/\&c=.{0,1},\&/,'&c='+c+'&');
				this.src = new_traffic_graph_url;
			}
			);
			trackCustomEvent && trackCustomEvent.call && trackCustomEvent('widget/'+$(this).text());

			return false;
		});

		
		/** main tabs selection and state **/	
		if (location.hash != '' && location.hash != '#') {
			
			//only set the cookie if the hash is a valid one
			$(location.hash + '_a').length == 0 ? '' : $.cookie('ax_gr_last_tab', location.hash, { expires: 1, path: '/siteinfo/'});
			location.hash = '#';
		}
		
		//default to trafficstats when it was invalid or didn't have one
		if (($.cookie('ax_gr_last_tab') == null) || ($.cookie('ax_gr_last_tab') == '')) {
			$.cookie('ax_gr_last_tab', '#trafficstats', { expires: 1, path: '/siteinfo/'});	  
		}

		//hook up the click events on the tabs
		$('.infoTab').click(function() {
			if (!just_loaded && flip_ads) {
				var ord = Math.floor(Math.random()*1E16);
				$('iframe.adframe').each( function() {
					var ad_url = this.src; 
					ad_url = ad_url.replace(/\&ord=\d+\&/,'&ord='+ord+'&');
					this.src = ad_url;
				});
			}
			trackCustomEvent && trackCustomEvent.call && trackCustomEvent('tab/'+$(this).text());
			var tabId = this.id.replace("_a", "");
			focusSiteInfoTab(tabId);
			just_loaded = false;
			return false;
		});

		//'click' the current tab on page load
		var initTab = (null == $.cookie('ax_gr_last_tab')) ? "#trafficstats" : $.cookie('ax_gr_last_tab');
		$(initTab + '_a').click();

		
		/** hook up date range change **/
		$('#date-range').change(function() {
			var selected = $(this).children("option:selected");       
			if ($.inArray(selected.val(), new Array('7d', '1m', '3m', '6m', '1y','2y','5y')) >= 0) {
				$('#tw-graphImg').each( function(i) {
					var new_traffic_graph_url = this.src;
					new_traffic_graph_url = new_traffic_graph_url.replace(/\&r=\d\w\&/,'&r='+selected.val()+'&');
					this.src = new_traffic_graph_url;
					$("option[value='" +selected.val()+ "']").attr('selected','selected');
				}
				);
				$.cookie("ax_gr_range", selected.val(), { expires: 365});
			}
		});



		/** Comparison graphs **/		  
		$('#tw-compare').click(function() {
			var graph_url = $('#tw-graphImg').attr('src');
			var pattern = new RegExp(/&u=(.*?)&/);
			var mymatch = pattern.exec(graph_url);

			// Compose a string of all the urls
			var url_string = mymatch.length > 0 ? mymatch[0] : "";
			$('#tw-compareto input').each( function(i) {
				if (this.value !== '') {
					url_string = url_string + "&u=" + this.value;
				}
			}
			);
			url_string = url_string + "&";

			$('#tw-graphImg').each( function(i) {
				var new_traffic_graph_url = this.src;
				new_traffic_graph_url = new_traffic_graph_url.replace(/&u=.*\&/,url_string);
				this.src =new_traffic_graph_url;
			});
		});	  



		/** show more/less countries **/
		var moreCountry = $('#moreCountry');
		$('#toggleMoreCountry').click(function() {
			moreCountry.toggleClass('textOff');
			if ($(this).text() == 'More') {
				$(this).text('Less');
			} else {
				$(this).text('More');	  	
			}
		});


		/** show more/less traffic **/
		var moreTraffic = $('#moreTraffic');
		$('#toggleMoreTraffic').click(function() {
			moreTraffic.toggleClass('textOff');	  
			if ($(this).text() == 'More') {
				$(this).text('Less');
			} else {
				$(this).text('More');	  	
			}
		});

		$('.searchLink').click(function() {
			var text=encodeURIComponent($(this).text());
			var pos = (undefined == $(this).attr('p')) ? '' : "&p=" + $(this).attr('p');
			var ref= (undefined == $(this).attr('r')) ? '' : "&r=" + $(this).attr('r');
			var page= (undefined == $(this).attr('s')) ? '' : "&s=" + $(this).attr('s');

			window.location = '/search?q='+text.toLowerCase() + pos + ref +page;
		});

		$('#moreRelated').click(function() {
			if(relatedSnippet) {
				$('#relatedlinks-content').load(relatedSnippet);
			}
		});


		//bookmark page
		var bookmarkAnchor = $("#ax_bookmarkAnchor");

		// add a "rel" attrib if Opera 7+
		if(window.opera) {

			if (bookmarkAnchor.attr("rel") != ""){ // don't overwrite the rel attrib if already set
				bookmarkAnchor.attr("rel","sidebar");
			}
		}

		bookmarkAnchor.click(function(event){
			event.preventDefault(); // prevent the anchor tag from sending the user off to the link
			var url = this.href,
                title = this.title,
                compares = $('#tw-compareto .tw-sites'),
                sites_arr = [],
                tmp,
                site = $('#tw-compareto .compare-text strong').text();
            $.each(compares, function(k,v) {
                tmp = $(v).val();
                if(tmp !== '') {
                    sites_arr.push(tmp);
                }
            });
            if(sites_arr.length > 0) {
                url = url.match(/(http:\/\/.*\/.*\/)/)[0] + site + '+' + sites_arr.join('+') + '#trafficstats';
            }
            if (window.sidebar) { // Mozilla Firefox Bookmark
                window.sidebar.addPanel(title, url,"");
            } else if( window.external ) { // IE Favorite
                window.external.AddFavorite( url, title);
            } else if(window.opera) { // Opera 7+
                return false; // do nothing - the rel="sidebar" should do the trick
            } else { // for Safari, Konq etc - browsers who do not support bookmarking scripts (that i could find anyway)
                alert('Unfortunately, this browser does not support the requested action,'
                        + ' please bookmark this page manually.');
            }
		});
	}
);

(function($){
	$(document).ready(function(){
		// Emma: Limit Site info summary blurb text to 200 chars and add "Show More" link to expand full text
		var toggleSummaryBlurb = function(){
			var newBlurb = "",
				maxLength = 200,
				$blurb = $("#site-summary-blurb"),
				$blurbShort = $("#site-summary-short"),
				$toggleLink = $("a.toggle-show-link"),
				blurb = $.trim($blurb.text());
			
			if (blurb.length > maxLength){
				newBlurb = blurb.substring(0, maxLength-1);
				newBlurb = newBlurb.substring(0, newBlurb.lastIndexOf(" ")) + "...";
				$blurb.hide();
				$blurbShort.text(newBlurb).show();
				$toggleLink.text("Show More").show();	
			}else{
				$blurb.show();
				$blurbShort.hide();
				$toggleLink.hide();
			}
			
			$toggleLink.click()
				.toggle(function(){
					$blurb.show();
					$blurbShort.hide();
					$(this).text("Show Less");					
				}, function(){
					$blurb.hide();
					$blurbShort.show();
					$(this).text("Show More");
				});
		};
		
		var openCertifyNowDialog = function(){
			$("a.certify-dialog").click(function(){
				var newOpts,
					$wrapper = $("#certify-now-dialog"),
					customOpts = {
						width: 630,
						dialogClass: 'dialog-alexa dialog-certify-now',
						open: function(){
							//ALEXA.axDialog.fixCloseBtn("Close");
						}
					};

				newOpts = $.extend(true, {}, ALEXA.axDialog.dfOptions, customOpts);
				$wrapper.dialog(newOpts).dialog("open");
				return false;
			});	
		};
		
		// Set up siteinfo page badge dropdown menu. Menu shows and hides onclick
		var openBadgeMenu = function(){
			$elem = $("#badge-menu");
			$("body").click(function(){
				$elem.hide();
			});
			$("#site-actions-dropdown").click(function(e){
				e.stopPropagation();
				if($elem.is(":hidden")){
					$elem.show();
				}else{
					$elem.hide();
				}				
				return false;
			});
			$("#badge-menu").click(function(e){
				e.stopPropagation();
			});
		};
		
		toggleSummaryBlurb();
		openCertifyNowDialog();
		openBadgeMenu();
		
	});
})(jQuery);


