
// COnfigure this
// Array of 
// 1.) ID of row
// 2.) CLASS of cell
// 3.) URL of service
var arr_calls = [
    ["resulttable0", "position", "/jason/semantix.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 ret = "";
                for(i=0;i<data.add.length;i++)
                {
                	ret = "";
                    ret+= (data.add[i].keyword + " ");
                    ret+= (data.add[i].details);

                    try
                    {
                    	var ele = document.getElementById("keyword" + i);
                    	var percent = document.getElementById("percent" + i);
                    	var details = document.getElementById("details" + i);//getElementsByTagAndClassName("td", cls, "resulttable"+i);
                    	if(ele)
                    	{
                    		ele.innerHTML = data.add[i].keyword;
                    		percent.innerHTML = data.add[i].grade;
                    		details.innerHTML = data.add[i].details;
                    		swapElementClass(ele, "loading", "finished");
                    	}
                    }
                    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, ret);
			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) {
                //alert(data.value);
		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;
	}
	
	//alert('OK');
	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);
