var xmlHttp;

function GetXmlHttpObject()
{ 
   var objXMLHttp = null;
   if (window.XMLHttpRequest)
   {
       objXMLHttp = new XMLHttpRequest();
   }
   else if (window.ActiveXObject)
   {
      objXMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
   }

   return objXMLHttp;
}

var nr_validation_items = -1;
var validation_items = new Array();

var arr_forms = new Array();
var processedFormNr = 0;

// een non-object functie. Gaat een nieuw object aanmaken, in de array van forms steken en het element teruggeven.
function newFormValidation(name)
{
	var index = arr_forms.length;

	arr_forms[ index ] = new FormValidator(name);
	arr_forms[index].nr = index;

	return arr_forms[ index ];
}

function FormValidator(name)
{
	this.elements = new Array();
	this.name = name;
	this.nrValidated = 0;
	this.nr = 0;

	this.addElement = function(id,type)//,txtarea)
	{
		var index = this.elements.length;
		this.elements[index] = new Array();
		this.elements[index]['id'] = id;
		this.elements[index]['type'] = type;

		/*if( txtarea == true )
			this.elements[index]['txtarea'] = true;
		else
			this.elements[index]['txtarea'] = false;*/
	}

	this.validate = function()
	{
		processedFormNr = this.nr;

		alert("formNr = "+processedFormNr);

		var print = 'Formnr : '+this.nr+', aantal elementen : '+this.elements.length+'';
		alert(print);

		var output = '';
		for(var i = 0; i < this.elements.length; ++i )
		{
			output += 'element '+this.elements[i]['id']+' met type : '+this.elements[i]['type']+'\n';
		}

		this.validateElement();

		//alert( output );

		return false;
	}

	//document.getElementsByName(name).onsubmit = this.validate();//eval("this.validate()");

	/*this.validateElement = function(nr){
		alert("test "+nr);
	}*/

	this.handleValidationReturn = function()
	{
	}

	// validateElement(0) aanroepen en laten runnen. De onReadyStateChange moet validateElement aanroepen met het volgende element
	this.validateElement = function()
	{
		var nr = this.nrValidated;

		if( nr < this.elements.length )
		{
			xmlHttp = GetXmlHttpObject();

			if( xmlHttp != null )
			{
				var content = '';

				/*if( this.elements[nr]['txtarea'] )
					content = document.getElementById( this.elements[nr]['id'] ).innerHtml;
				else*/

				content = document.getElementById( this.elements[nr]['id'] ).value;

				var url = 'includes/ajax_validation.php';
				var params = 'nr='+nr+'&type='+this.elements[nr]['type']+'&content='+content;

				xmlHttp.onreadystatechange = handleValidationReturn;
				xmlHttp.open('POST',url,true);

				//Send the proper header information along with the request
				xmlHttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
				xmlHttp.setRequestHeader('Content-length', params.length);
				xmlHttp.setRequestHeader('Connection', 'close');

				xmlHttp.send(params);
			}
		}
	}
}

function handleValidationReturn()
{
	if (xmlHttp.readyState == 4)
	{
		alert( xmlHttp.responseText );

		arr_forms[processedFormNr].nrValidated++;
		arr_forms[processedFormNr].validateElement();

		/*if( this.nrValidated < this.elements.length )
		{
			this.nrValidated++;
			this.validateElement(this.nrValidated);
		}*/
	}
}

// deze functie gaat de validatie-elementen-array opbouwen
/*function initValidation()
{
	if (xmlHttp.readyState == 4)
    {
      //if(xmlHttp.status == 200)
      //{ 
		  /*if( xmlHttp.responseText == "ok" )
		  {
			  document.getElementById("your_rating_nr").innerHTML = rating_rating;

			  if( rating_rating > 0 )
				  document.getElementById("your_current_rating_alt").innerHTML = ratings_plus_txt[rating_rating];
			  else
			  {
				  rating_rating *= -1;
				  document.getElementById("your_current_rating_alt").innerHTML = ratings_min_txt[rating_rating];
		      }

			  display("your_rating");
			  display("rating_icons");
			  display("ratings_container");
		  }
		  else
			alert(" query kon niet worden uitgevoerd "+xmlHttp.responseText );

			alert( xmlHttp.responseText );
      /*} 
	  else
	  {
	  	alert("Probleem met het javascriptrequest!");
	  }
	}
}

/*function addValidationElement(id,type)
{
	nr_validation_items++;
	var i = nr_validation_items;

	validation_items[i] = new Array();
	validation_items[i]['id'] = id;
	validation_items[i]['type'] = type;
	//document.getElementById('id').onchange = 

	//alert(" Toegevoegd aan array : "+id+" met type : "+type);
}

/*function eValidation()
{
	output = '';
	for( i = 0; i < validation_items.length; ++i )
	{
		output += 'element '+validation_items[i]['id']+' met type : '+validation_items[i]['type']+'\n';
	}

	alert( output );

	return false;
}

// nr : nr in de validatie-elementen-array van het huidige element ( nodig om terug te geven )
// type : type validatie : bepaald via een switch in php om de juiste functie te bepalen en terug te geven
// content : te valideren inhoud
/*function eValidationElement(nr, type, content)
{
	xmlHttp = GetXmlHttpObject();

	if( xmlHttp != null )
	{
		var url = 'includes/ajax_validation.php';
		var params = 'nr='+nr+'&content='+content;

		xmlHttp.onreadystatechange = uValidation;
		xmlHttp.open('POST',url,true);

		//Send the proper header information along with the request
		xmlHttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
		xmlHttp.setRequestHeader('Content-length', params.length);
		xmlHttp.setRequestHeader('Connection', 'close');

		xmlHttp.send(params);
	}
}

// de onreadystatechange-handler
// gaat iets terugkrijgen in de vorm van  nr:message. Nr is de index van het te valideren element ( zie ook boven )
// als message == false is het false, anders true
function uValidation()
{
	if (xmlHttp.readyState == 4)
    {
      //if(xmlHttp.status == 200)
      //{ 
		  /*if( xmlHttp.responseText == "ok" )
		  {
			  document.getElementById("your_rating_nr").innerHTML = rating_rating;

			  if( rating_rating > 0 )
				  document.getElementById("your_current_rating_alt").innerHTML = ratings_plus_txt[rating_rating];
			  else
			  {
				  rating_rating *= -1;
				  document.getElementById("your_current_rating_alt").innerHTML = ratings_min_txt[rating_rating];
		      }

			  display("your_rating");
			  display("rating_icons");
			  display("ratings_container");
		  }
		  else
			alert(" query kon niet worden uitgevoerd "+xmlHttp.responseText );

			alert( xmlHttp.responseText );
      /*} 
	  else
	  {
	  	alert("Probleem met het javascriptrequest!");
	  }
	}
}

/*function rateTheProject( projectId, userId, rating )
{
	xmlHttp = GetXmlHttpObject();
	xmlHttp2 =  GetXmlHttpObject();

	if( xmlHttp == null || xmlHttp2 == null )
		alert("Uw browser ondersteunt geen javascript. Dit beperkt het aantal mogelijkheden op deze site drastisch.");

	rating_projectId = projectId;
	rating_userId = userId;
	rating_rating = rating;

	url = "includes/ratings.php?action=rate&project_id="+projectId+"&user_id="+userId+"&rating="+rating+"";

	xmlHttp.onreadystatechange = rateTheProject_yourRatingUpdater;
    xmlHttp.open("GET",url,true);
    xmlHttp.send(null);

	url = "includes/ratings.php?action=gRating&project_id="+projectId;

	xmlHttp2.onreadystatechange = rateTheProject_currentRatingUpdater;
    xmlHttp2.open("GET",url,true);
    xmlHttp2.send(null);
}

function rateTheProject_yourRatingUpdater()
{
   if (xmlHttp.readyState == 4)
   {
      //if(xmlHttp.status == 200)
      //{ 
		  if( xmlHttp.responseText == "ok" )
		  {
			  document.getElementById("your_rating_nr").innerHTML = rating_rating;

			  if( rating_rating > 0 )
				  document.getElementById("your_current_rating_alt").innerHTML = ratings_plus_txt[rating_rating];
			  else
			  {
				  rating_rating *= -1;
				  document.getElementById("your_current_rating_alt").innerHTML = ratings_min_txt[rating_rating];
		      }

			  display("your_rating");
			  display("rating_icons");
			  display("ratings_container");
		  }
		  else
			alert(" query kon niet worden uitgevoerd "+xmlHttp.responseText );
      /*} 
	  else
	  {
	  	alert("Probleem met het javascriptrequest!");
	  }
   }
}

function rateTheProject_currentRatingUpdater()
{
   if (xmlHttp2.readyState == 4 && xmlHttp.readyState == 4 )
   {
      //if(xmlHttp2.status == 200)
      //{

		  var results = xmlHttp2.responseText;
		  var data = results.split("@l@");

		  if( data.length == 3 )
		  {
			  document.getElementById("current_rating_nr").innerHTML = data[0];
			  document.getElementById("current_rating_alt").innerHTML = data[1];
			  document.getElementById("current_nr_of_voters").innerHTML = data[2];
			  
		  }
		  else
			  alert(" Geen rating en ratingAlt binnengekregen "+results);

      /*} 
	  else
	  {
	  	alert("Probleem met het javascriptrequest!");
	  }
   }	
}

function commandLineExec(url)
{
	xmlHttp = GetXmlHttpObject();

	if( xmlHttp == null )
		alert("Uw browser ondersteunt geen javascript. Dit beperkt het aantal mogelijkheden op deze site drastisch.");

	xmlHttp.onreadystatechange = commandLineExec_yourRatingUpdater;
    xmlHttp.open("GET",url,true);
    xmlHttp.send(null);
}

function commandLineExec_yourRatingUpdater()
{
   if (xmlHttp.readyState == 4 )
   {
      //if(xmlHttp2.status == 200)
      //{

		  var results = xmlHttp.responseText;

		  document.getElementById("commandline_output").innerHTML = results+"<br /><br />";

      /*} 
	  else
	  {
	  	alert("Probleem met het javascriptrequest!");
	  }
   }
}*/
