
// COnfigure this
// Array of 
// 1.) ID of row
// 2.) CLASS of cell
// 3.) URL of service
var arr_calls = [
    ["google", "position", "/jason/google_new.php"],
//    ["caffeine","position","/jason/caffaine.php"],
    ["google", "popularity", "/jason/google_lp.php"],
//	["google", "pagerank-d", "/jason/google_dr_pr.php"],
//	["google", "pagerank-t", "/jason/google_pr.php"],
    ["yahoo", "position", "/jason/yahoo_web.php"],
    ["yahoo", "popularity", "/jason/yahoo_lp.php"],
    ["msn", "position", "/jason/msn.php"],
	["msn", "popularity", "/jason/msn_lp.php"],
    ["ask", "position", "/jason/ask.php"],
    ["semager", "position", "/jason/semager.php"],
	["lycos", "position", "/jason/lycos.php"],
	["fastbot", "position", "/jason/fastbot.php"],
//	["seekport", "position", "/jason/seekport.php"],
//	["exalead", "position", "/jason/exalead.php"],
];


// Init on document.load
var init = function() 
{
	// Create input boxes
	var form = DIV({'id': 'services-form'},
		P(null, "Bitte geben Sie Ihre Daten ein:"),
		DIV(null,
			LABEL({'for': 'services-domain'}, "Ihre Domain:  "),
			INPUT({'type': 'text', 'id': 'services-domain', 'name': 'services-domain'}),
			SPAN(null, "   (Beispiel: cybele.de)")
		),
		DIV(null, 
			LABEL({'for': 'services-keyword'}, "Suchwort(e):  "),
			INPUT({'type': 'text', 'id': 'services-keyword', 'name': 'services-keyword'}),
			SPAN(null, "   (Beispiel: label musik)")
		),
		INPUT({'type': 'submit', 'id': 'services-submit'})
		);
	swapDOM("placeholder", form);
	addToCallStack(getElement("services-submit"), "onclick", filltable);
}

// Class for doing the call 
function TheCall (elementID, cls, url) {
	this.URL = url;
	this.ELEMENT = elementID;
	this.CLASS = cls;
	
	// DO what should be done
	this.getData = function () {
		var elements = getElementsByTagAndClassName("td", this.CLASS, this.ELEMENT);
		if (elements.length > 0) {
			replaceChildNodes(elements[0], "Wird geladen");
			removeElementClass(elements[0], "finished");
			removeElementClass(elements[0], "error");
			toggleElementClass("loading", elements[0]);
		}

		var d = loadJSONDoc(this.URL);
		d.addCallback(this.finished, this.ELEMENT, this.CLASS)
		d.addErrback(this.error, this.ELEMENT, this.CLASS);
	}

	// Call when data is ready
	this.finished = function (elementid, cls, data) {
		var value = (data.value) ? data.value : data;

		try
		{
			if(data.Message.results)
			{
				value = "";
				var xArray = data.Message.results[0].mr;
				try
				{
					if(xArray.length==0)value="Keine Treffer gefunden. Suchtiefe 300 Treffer";	
					for(var i = 0; i< xArray.length; i++)
					{
						value += xArray[i].position + ", ";
					}
					if(value.indexOf(",")!=-1)value = value.substring(0,value.length-2);
				}catch(f){value="Keine Treffer gefunden. Suchtiefe 300 Treffer";}
			}else
			{
			//	alert("no");
			}
		}
		catch(e){};
		//var value = (data.value) ? data.value : data;

		var elements = getElementsByTagAndClassName("td", cls, elementid);
		if (elements.length > 0) {
			var el = elements[0];
			replaceChildNodes(el, value);
			swapElementClass(el, "loading", "finished");
		}
  }

	// Call when error occurs
	this.error = function (elementid, cls, data) {
		var elements = getElementsByTagAndClassName("td", cls, elementid);
		if (elements.length > 0) {
			var el = elements[0];
			replaceChildNodes(el, "Fehler");
			swapElementClass(el, "loading", "error");
		}
	}	
}

function serviceURL(base, key, domain) {
	var names = ["suche", "url", "callerid"];
	var values = [key, domain, callerid];
  return base + "?" + queryString(names, values);
}

// A call;
doCall = function(arr) {
	var url = serviceURL(arr[2], this.KEY, this.DOMAIN);
	var call = new TheCall(arr[0], arr[1], url);
	call.getData();
}


// Callback for first call (returns counts)
var initialCallback = function (domain, key, data) {
	this.KEY = key;
	this.DOMAIN = domain;
	
	// Set number of calls
	var elements = getElementsByTagAndClassName("span", null, "services-calls");
	if (elements.length > 0) {
		replaceChildNodes(elements[0], data.value);
	}

	// Now do a call for each element in the array
	forEach(arr_calls, doCall, this);
}	
	
// Error Handler for First call
var initialError = function(data) {
	var el = getElement("services-error");
	if (el) {
		replaceChildNodes(el, (data.length > 0) ? data : null);
	}	
}

// Called when clicking button
function filltable() {
	initialError(""); // clears Error
	var error = "";
	var el = getElement("services-domain");
	var domain = "";
	if (el) {
		domain = el.value;
		var regExp = new RegExp("http://", "gi");
		domain = domain.replace(regExp, "");
		var regExp2 = new RegExp("www.", "gi");
		domain = domain.replace(regExp2, "");
		el.value = domain;
	}
	
	if (domain.length == 0) {
		error += "Bitte geben Sie eine Domain an. ";
	}
	
	el = getElement("services-keyword");	
	var key = (el) ? el.value : "";
	
	if (key.length == 0) {
		error += "Bitte geben Sie einen Suchbegriff ein. ";
	}
	
	if (error.length > 0) {
		initialError(error);
		return;
	}
	
	var authURL = serviceURL("/jason/authorize.php", key, domain);
	var d = loadJSONDoc(authURL);
	d.addCallback(initialCallback, domain, key);
	d.addErrback(initialError);
	
	// LOg this query
	var logURL = "/jason/log.php";
	doSimpleXMLHttpRequest(logURL, {'suche': key, 'url': domain});
	
	return false; // Cancel event IE Style
}

addLoadEvent(init);
