
	
function removePattern(node){
	var del = node;
	var dad = node.parentNode;
	var l = $("#gp  div").length;
	
	if(l<2){}
	else {
		dad.removeChild(del);
		updateResults();
		}
	}




function addPattern(parent){
	var n = parent.childNodes;
	for (var x = 0;x<n.length;x++){
		//alert(n[x]);
		}
	//alert(n.length);
	//n.each(function(i){
		//alert(n[i]);
		//});
	
	
	
	//$("#gp div:last").clone().prependTo("#gp div:last");
	$("#gp div:last").clone().appendTo("#gp");
	String.prototype.startsWith = function(s) { return this.indexOf(s)==0; }
	if(!($("#gp div:last  > input[name='s']").val().startsWith("?"))){
		$("#gp div:last  > input[name='s']").val("?newSubject");
		};
	if(!($("#gp div:last  > input[name='p']").val().startsWith("?"))){
		$("#gp div:last  > input[name='p']").val("?newPredicate");
		};
	if(!($("#gp div:last  > input[name='o']").val().startsWith("?"))){
		$("#gp div:last  > input[name='o']").val("?newObject");
		$("#gp div:last  > input[name='o']").attr("otype","");
		$("#gp div:last  > input[name='o']").attr("lang","");
		$("#gp div:last  > input[name='o']").attr("datatype","");
		};
	
	updateResults();
	var url = "autocompletion.php";
	var autocompOptions = getAutocompleteOptions();
	
	$("#gp div:last >input").autocomplete(url, autocompOptions);
	
		
	initPatterns("#gp div:last >input");
	
	
	
	}



/*
function renewUpdateOnEnter(){
		
	}
*/

function getAutocompleteOptions(){
		var autocompOptions = {
		max: 500,
    	minChars: 0,
    	selectFirst: false,
    	scrollHeight: 360,
    	matchContains: true,
    	width:400,
    	delay:1000,
		/*should not be used as queries can be started
		from different input windows. Therefore a cache and subsets are
		contraproductive*/
		matchSubset: false,
		cacheLength: 0,
		extraParams: {
   			json: function() { return jsonPatterns($(this));}
   		}//end extraparam
		};
		return autocompOptions;
	
	}


	
	
	
function initPatterns(jqselect){
	
	
	$(jqselect).focus(function () {
        $(this).attr("id", "current" );
    });

	 $(jqselect).blur(function () {
        $(this).attr("id", "" );
     });
    
  	$(jqselect).keydown(function(){
     	  var json = jsonPatterns($(this));
       	  var limit = $("#limit").val();
       	   $('#autocompletionquery').attr('value', json);
       	  $.get("AjaxGetAutocompletionQuery.php", {func : "getAutocompletionQuery", json: json , limit: limit}, getAutocompletionQuery_cb);
       	  //x_getAutocompletionQuery(json,limit, getAutocompletionQuery_cb);
       	  displayQuery();
     });
    
     
     $(jqselect).result(function(event, data, formatted) {
     	if(data){
   			var value = data[1];
   			var type = 	data[2];
   			var lang = 	data[3];
   			var datatype = 	data[4];
   			$(this).val(value);
   			
			if( $(this).attr("name") == "o"){
				$(this).attr("otype",type);
				//alert($(this).attr("tmp"));
				$(this).attr("lang",lang);
				$(this).attr("datatype", datatype);
				}
			
			
   			}
   		
	});
	$(jqselect).keyup(function(event){
  			if(event.keyCode == 13){
  				  $("#updateresult").click();
 	 		}
	});
}
//TODO produces tipps what could be wrong
 function tipps(){
 	
 	}

 function getAutocompletionQuery_cb(z){
   	//alert(z);
   		//$('#autocompletionquery').attr('value', z );
	};
	
function alert_cb(z){
	alert(z);
	}
	
	function displayQuery(){
		var limit = $("#limit").val();
		var element = "none";
		var json = jsonPatterns(element);
		//x_getSPARQLQuery(json,limit, displayQuery_cb);
		$.get("AjaxGetSPARQLQuery.php", { json: json , limit: limit}, displayQuery_cb);
	};
	
	function displayQuery_cb(z){
		//$("#showquery").attr('title',z);
		$('#showquerytextarea').attr('value',z);
	}
	
	function updateResults(){
		var start = new Date().getMilliseconds();
	
		var limit = $("#limit").val();
		var element = "none";
		var json = jsonPatterns(element);
		$("#updating").attr("style", "display:all;");
		//x_getResults(json,limit, updateResults_cb);
		$.get("AjaxUpdateTable.php", {json: json , limit: limit}, updateResults_cb);
	};
	
	
	function updateResults_cb(z){
		$("#resulttable").empty()
		$("#resulttable").html(z);
		$("#resulttable").trigger("update"); 
		$("#resulttable").tablesorter({sortList:[[0,0]], widgets: ['zebra']});
		$("#updating").attr("style", "display:none;");
		
	}
	
	//element should only be set for autocompletion
	function jsonPatterns(element){
		var divs = $("#gp  div");
		var patterns = new Object();
		divs.each(function(i) {
			var current = $("#gp  div:eq("+i+")");
			patterns[i] = new Object();
			var s =  $("#gp  div:eq("+i+") > input[name='s']");
			var p =  $("#gp  div:eq("+i+") > input[name='p']");
			var o =  $("#gp  div:eq("+i+") > input[name='o']");
			patterns[i]["s"] =s.val();
			patterns[i]["p"] =p.val();
			patterns[i]["o"] = o.val();
			
			patterns[i]["otype"] = o.attr("otype");
			patterns[i]["lang"] = o.attr("lang");
			patterns[i]["datatype"] = o.attr("datatype") ;
			
			//var test =  s.attr("id");
			
			if( s.attr("id")=="current"){patterns[i]["current"]="s";}
			else if(p.attr("id")=="current"){patterns[i]["current"]="p";}
			else if(o.attr("id")=="current"){
					patterns[i]["current"]="o";
				}
			
			});
		
		return JSON.stringify(patterns);
		}
