// JavaScript Document

var done=0, numOfRequests=0, cats="", dems="", terms=0, maxTerms=12, lastUsed=new Array();
$(document).ready(function(){
    $("#kwdTable tbody").empty();
	$("#kwdReset").click(function() {
		$("#kwdTable tbody").empty();
		$("#kwdDiv").unblock();
		$("#kwd").val("");
		done = 0;
		numOfRequests = 0;
		terms = 0;
	});
			
	$("#kwdTable").tablesorter();
	$("#kwdTable").bind("sortEnd",function() {
		while (terms > maxTerms) {
			removedKwd = lastUsed.pop();
			$("#kwdTable tbody tr:contains("+removedKwd+")").remove();
			terms--;
			done--;
		}											   
		$("#kwdTable tbody tr:even").removeClass().addClass("even");
		$("#kwdTable tbody tr:odd").removeClass().addClass("odd");
		$("#kwdTable tr th:first-child").attr("style","text-align:left;width:240px;");
		$("#kwdTable tr td:first-child").attr("style","text-align:left;width:240px;");
	});								   
});

//Main Function to get statistics
function getKeywordInfo() {
	kwd = "";
	flag = false;
	//get keywords and format them to submit to KSP
	// also check for 12 terms -- if there are more, take the first 12
	if ($("#kwd").val().indexOf("\n") || $("#kwd").val().indexOf(',')) {
		keywords = $("#kwd").val().split(/\n|\,/g);
		tempArray = keywords;
		k = 0;
		while (k < keywords.length) {
			flag = false;
			for (var j in lastUsed) {
				if (lastUsed[j] == keywords[k]) {
					flag = true;
				}
			}
			if (flag) {
				//word is already in array
				keywords.splice(k,1);
				k--;
			} else {			
				if (keywords[k] == '') {
					keywords.splice(k,1);
					k--;
				}
			}
			k++;
		}
		for (var k in keywords) {
			lastUsed.unshift(keywords[k]);
			terms++;
		}
		kwd = keywords.join('|');
	}
	else {
		kwd = jQuery.trim($("#kwd").val());
		terms++;
		for (var j in lastUsed) {
			if (kwd == lastUsed[j]) {
				flag = true;
			}
		}
		if (!flag) {
			lastUsed.unshift(kwd);
		}
	}
	
	if (kwd == "") {
		errorMsg = "";
		if (lastUsed.length == 0) {
			errorMsg = "Please enter at least 1 keyword.";
		} else {
			errorMsg = "You've already entered these search terms. Please enter new keywords and try again.";
		}
		$('#kwdDiv').unblock().block({
			css: {
				border: '0px solid #e6e6e6',
				padding: '5px',
				backgroundColor: '#ffffff',
				opacity: '1',
				filter: 'alpha(opacity = 90)',
				zoom: '1',
				color: '#000000',
				width: '400px',
				textAlign: 'left'
			},			   
			message: '<div class="kwdTitle">'+errorMsg+' <input type="button" id="kwdTimeOut" value="OK" /></div>'
		});
		$("#kwdTimeOut").click(function() {
			$("#kwdDiv").unblock();
			//$("#kwdButton").unblock();
			return false;
		});			
		return;
	}
	
	function getKSP(kwd) {
		return 'http://ksp.smartz.com/KSP.asmx/GetKeywordStatistics?kwd='+kwd+'&filter=activity|cpc|ctr|categories|demographics&specific=true';
	}
	var proxy = "http://www.bruceclay.it/cgi-bin/proxy.pl?url=";
	var keyword="", activity="", ctr="", cpc="", categories="", googleActivity="", yahooActivity="", liveActivity="", demographics="", firstRun=true;
		
	var ajaxManager1 = $.manageAjax({manageType: 'sync', maxReq: 0, blockSameRequest: true});

	//Show the table if this is the first run
	if (firstRun == true) {
		firstRun = false;
		$("#kwdTable").show("slow");
	}
	//Block the table from being accessed while the data is gathered. This is to prevent sorting on unobtained data
	$("#kwdDiv").block({
						css: {
							border: '0px solid #e6e6e6',
							padding: '5px',
							backgroundColor: '#ffffff',
							opacity: '.9',
							filter: 'alpha(opacity = 90)',
							zoom: '1',
							color: '#000000',
							width: '400px',
							textAlign: 'left'
						},
						overlayCSS: {
							border: '0px solid #e6e6e6',
							backgroundColor: '#000000',
							opacity: '.5',
							filter: 'alpha(opacity = 50)',
							zoom: '1'
						},							
						message: '<div style="line-height:50px;" class="kwdTitle"><img src="ajax-loader.gif" style="float:left; padding-right:10px;" />Gathering Keyword Statistics...</div>'
					});
	//$("#kwdButton").block();

	//submit the AJAX request to get the data
	$(this).ajaxStart(function() { 
	});
	ajaxManager1.add({
		url: proxy+escape(getKSP(kwd)),
		datatype: 'xml',
		beforeSend: function(XMLHttpRequest) { numOfRequests++; },
		success: function(xml) {
			
			//test for a timeout
			$("ProxyError",xml).each( function() {
				$('#kwdDiv').unblock().block({
					css: {
						border: '0px solid #e6e6e6',
						padding: '5px',
						backgroundColor: '#ffffff',
						opacity: '1',
						filter: 'alpha(opacity = 90)',
						zoom: '1',
						color: '#000000',
						width: '400px',
						textAlign: 'left'
					},			   
					message: '<div class="kwdTitle">The Keyword Server has timed out. Please try again later. <input type="button" id="kwdTimeOut" value="OK" /></div>'
				});
                removeKwds = $("#kwd").val().split(/\n|\,/g);
                //remove these keywords from the tracked list if an error occurred
                for(kwd in removeKwds) {
                    removedKwd = lastUsed.pop();
                    terms--;
                    done--;
                }
				$("#kwdTimeOut").click(function() {
					$("#kwdDiv").unblock();
					//$("#kwdButton").unblock();
					return false;
				});
			});

			kwds = 0;
			done++;
			$("#kwdTable tbody").append("<tr></tr>");
			$("keywordStats",xml).each(function() {
				//alert("Keyword: " + json.Keyword);
				kwds++;
				keyword = $(this).find("Keyword").text();
				activity = $(this).find("Activity").text();
				googleActivity = $(this).find("GoogleActivity").text();
				yahooActivity = $(this).find("YahooActivity").text();
				liveActivity = $(this).find("LiveActivity").text();
				ctr = $(this).find("CTR").text();
				cpc = $(this).find("CPC").text();
				categories = new Array();
				$("Categories",$(this)).find("string").each(function() {
					categories.push($(this).text());
				});										 
				demographics = new Array();
				$("Demographics",$(this)).children().each(function() {
					demographics[this.tagName.replace(/_/,'-').replace(/Age/,'')] = $(this).text();
				});
				if (kwds > 1) {
					$("#kwdTable tbody").append("<tr><td colspan=\"6\"></td></tr>");
					done++;
				}
				updatePage();
				
			});
		}
	});
	
	//This function formats the data to be written to the page
	function insertKSPBlock(kwd,activity,google,yahoo,live,ctr,cpc,categories,demographics) {
		cats = "<span style=\"color:#993333;font-weight:bold;\">Categories for \""+kwd+"\"</span>";
		count = 0;
		for (var cat in categories) {
			cats += "<br />&raquo;"+categories[cat].replace(/_/g," ");
			count++;
		}
		
		dems = "<span style=\"color:#993333;font-weight:bold;\">Demographics:</span><br />";
		dems += "Male: " + demographics["Male"] + "&nbsp;&nbsp;Female: " + demographics["Female"] + "<br />";
		dems += "Error: +/- " + demographics["GenderUnknown"] + "<br /><br />";
		dems += "Ages:<br />";
		dems += "&nbsp;&nbsp;0-13: " + demographics["0-13"] + "<br />";
		dems += "&nbsp;&nbsp;13-18: " + demographics["13-18"] + "<br />";
		dems += "&nbsp;&nbsp;18-25: " + demographics["18-25"] + "<br />";
		dems += "&nbsp;&nbsp;25-35: " + demographics["25-35"] + "<br />";
		dems += "&nbsp;&nbsp;35-50: " + demographics["35-50"] + "<br />";
		dems += "&nbsp;&nbsp;50-65: " + demographics["50-65"] + "<br />";
		dems += "&nbsp;&nbsp;65+: " + demographics["65"] + "<br />";
		dems += "&nbsp;&nbsp;Age Error: +/- " + demographics["Unknown"];
				
		
		toReturn = "";
		toReturn += "<tr>";
		toReturn += "<td><div style=\"color:blue\" class=\"kwdCell\">"+kwd+"</div></td>";
		toReturn += "<td>"+google+"</td>";
		toReturn += "<td>"+yahoo+"</td>";
		toReturn += "<td>"+live+"</td>";
		toReturn += "<td style=\"font-weight:bold\">"+activity+"</td>";
		toReturn += "<td>"+ctr+"</td>";
		toReturn += "<td>"+cpc+"</td>";
		toReturn += "<td><div style=\"color:blue\" class=\"catCell\">"+count+" Categories</div></td>";
		toReturn += "</tr>";
		return toReturn;
	}
	//this function writes the data to the page, adds the callouts and unblocks the table.
	function updatePage() {
		replacement = "#kwdTable tbody tr:eq(" + (done -1) + ")";
		$(replacement).replaceWith(insertKSPBlock(keyword,activity,googleActivity,yahooActivity,liveActivity,ctr,cpc,categories,demographics));

		$(".catCell:last").attr('title',cats);
		$(".kwdCell:last").attr('title',dems);
		
		$(".kwdCell:last,.catCell:last").bt({
			//trigger: 'click',
			positions: 'top',
			fill: 'rgba(255,251,240,1)',
			cssStyles: {color: 'black', width: 'auto'},
			width:350,
			padding: 10,
			cornerRadius: 10,
			//animate: true,
			spikeLength: 15,
			spikeGirth: 10
		});
		sorting = [[4,1]];
		if (done >= terms) {
			$("#kwdDiv").unblock();
			$("#kwdTable").trigger("update");
			$("#kwdTable").trigger("sorton", [sorting]);
			//$("#kwdButton").unblock();
		}
	}
}