// 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(',')) {
	var keywords_string = $("#kwd").val();
	var keywords = keywords_string.split(/\n|\,/g);
	for (var k in keywords) {
	    keywords[k] = jQuery.trim(keywords[k]);
	}
	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 = "/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="/images/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();
	}
    }
}
