/***********************
* Main function call to ajax function.
*
* Version 0.35
*
* Jacco Swart 2006
************************/

var objRequest;
var objResponse;
var objXMLTag_message;
var strwait_message;
var requestType = "GET";

strWait_Message = '<img src=http://www.ya-calendar.com/images/wait.gif border=0>';
strNotice_image = '<img src=http://www.ya-calendar.com/images/info.gif border=0>';
  
function callAJAX(url, resultPageElement, actionPageElement) {
	XMLTag_message = "";

	document.getElementById(resultPageElement).innerHTML = strWait_Message;
    document.getElementById(actionPageElement).disabled  = 'true';

    try {
    	objRequest = new XMLHttpRequest(); /* e.g. Firefox */
    } catch(e) {
    	try {
        	objRequest = new ActiveXObject("Msxml2.XMLHTTP");  /* some versions IE */
       	} catch (e) {
        	try {
         		objRequest = new ActiveXObject("Microsoft.XMLHTTP");  /* some versions IE */
         	} catch (E) {
          		objRequest = false;
         	} 
       	} 
    }

    timer = Math.round(Math.random()*100000);

    objRequest.onreadystatechange = function() {responseAJAX(resultPageElement, actionPageElement);};
    if(requestType == "GET"){
    	objRequest.open("GET",url+"&"+timer,true);
    	objRequest.send(null);
	}else if(requestType == "POST"){
	    objRequest.open('POST', url, true);
		objRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		objRequest.setRequestHeader("Content-length", url);
		objRequest.setRequestHeader("Connection", "close");
		objRequest.send(url);
    }else{
	    alert (" Unknown Requesttype: "+ requestType);
    }
}

function responseAJAX(resultPageElement, actionPageElement) {
   	var objResponse = '';
   	
	if(objRequest.readyState == 4) {
   		if(objRequest.status == 200) {
	   		//alert(objRequest.responseText);
			//Save the response
        	objResponse = objRequest.responseXML.documentElement;
        	
        	//retreive the method
        	XMLTAG_method = objResponse.getElementsByTagName('method')[0].firstChild.data
        	//retrieve the resulttext
        	XMLTAG_resulttext = objResponse.getElementsByTagName('resulttext')[0].firstChild.data
        	//retrieve the resultcode
        	XMLTAG_resultcode = objResponse.getElementsByTagName('resultcode')[0].firstChild.data
        	//Do stuff based on the method
        	
        	
         	if(XMLTAG_method == "save_edit_user"){
         		document.getElementById(resultPageElement).innerHTML = XMLTAG_resulttext;
         		document.getElementById(actionPageElement).disabled = '';  
     		}else if(XMLTAG_method == "save_edit_user_set"){
         		document.getElementById(resultPageElement).innerHTML = XMLTAG_resulttext;
         		document.getElementById(actionPageElement).disabled = '';  
     		}else if(XMLTAG_method == "save_edit_style"){
         		document.getElementById(resultPageElement).innerHTML = XMLTAG_resulttext;
         		document.getElementById(actionPageElement).disabled = '';  
     		}else if(XMLTAG_method == "retrieve_lost_pass"){
	     		if(XMLTAG_resultcode == 200){
         			document.getElementById('TBL_lostpass').innerHTML = XMLTAG_resulttext;
     			}else{
	     			document.getElementById(resultPageElement).innerHTML = XMLTAG_resulttext;
	     			fade(resultPageElement);
	     			document.getElementById(actionPageElement).disabled = '';  
     			}
     		}else if(XMLTAG_method == "save_draft_board"){
	     		document.getElementById(resultPageElement).innerHTML = XMLTAG_resulttext;
   				fade(resultPageElement);
	   			document.getElementById(actionPageElement).disabled = '';  
       		}else if(XMLTAG_method == "Error"){
	     		document.getElementById(resultPageElement).innerHTML = XMLTAG_resulttext;
	   			document.getElementById(actionPageElement).disabled = '';  
       		}else if(XMLTAG_method == "test"){
	       		var x = objResponse.getElementsByTagName('resulttext');
	       		var tbl = document.getElementById(actionPageElement);
  				var lastRow = tbl.rows.length;
  				var iteration = lastRow;
	       		
	       	    for (i=0;i<tbl.rows.length;i++){
	       		    if (lastRow > 2){
		       			tbl.deleteRow(tbl.rows.length - 1);
	       		    }
       			}
       		
	       		for (i=0;i<x[0].childNodes.length;i++){
		       	
  					var row = tbl.insertRow(tbl.rows.length);
					var cell_name = row.insertCell(0);
					cell_name.innerHTML = objResponse.getElementsByTagName('name')[i].firstChild.data;
					var cell_read_rights = row.insertCell(1);
					cell_read_rights.innerHTML = create_image_checkbox(objResponse.getElementsByTagName('read_rights')[i].firstChild.data);
					var cell_add_rights = row.insertCell(2);
					cell_add_rights.innerHTML = create_image_checkbox(objResponse.getElementsByTagName('add_rights')[i].firstChild.data);
					var cell_modify_rights = row.insertCell(3);
					cell_modify_rights.innerHTML = create_image_checkbox(objResponse.getElementsByTagName('modify_rights')[i].firstChild.data);
					var cell_delete_rights = row.insertCell(4);
					cell_delete_rights.innerHTML = '<a href="'+ objResponse.getElementsByTagName('id')[i].firstChild.data+'">' + create_image_checkbox(objResponse.getElementsByTagName('delete_rights')[i].firstChild.data) + '</a>';
		       		//alert(objResponse.getElementsByTagName('user')[i].firstChild.data);
		       		//if (x[0].childNodes[i].nodeType != 1){
			       	//	continue;
		       		//}
    		
	       		}
	     		document.getElementById(resultPageElement).innerHTML = 'test';
   				fade(resultPageElement);
	   			document.getElementById(actionPageElement).disabled = '';         		
   			}
       		else{
	     		alert("The resonse method of the server was unknown and therfore not handled. ( "+ XMLTAG_method +" )");	
	         	document.getElementById(resultPageElement).innerHTML = 'Error';
	         	document.getElementById(actionPageElement).disabled = '';  
     		}
     		       	
         } else {
	         
	        alert("Sorry something went wrong: HTTP-code:"+ objRequest.status);
          	document.getElementById(resultPageElement).innerHTML = 'Error';
         	document.getElementById(actionPageElement).disabled='';
         }
	}
}

/*
Help function for the use of AJAX
*/

function set_RequestType(Request_Type){
	requestType = Request_Type;
}

function replace_special_char(strText){
	return strText.replace(/&/g, "%26");
}


function create_image_checkbox(intInput){
	if(intInput == 1){
		return '<img src=http://www.ya-calendar.com/images/valid.gif border=0>'; 
	}else{
		return '<img src=http://www.ya-calendar.com/images/invalid.gif border=0>';
	}	
}


function update_pageElement(pageElement, text) {
	document.getElementById(pageElement).innerHTML = text;
}


var FADE_RED   = 255;
var FADE_GREEN = 253;
var FADE_BLUE  = 55;
var FADE_HOLD  = 500;
var FADE_SPEED = 100;
var FADE_STEP  = 25;

var fade_r = FADE_RED
var fade_g = FADE_GREEN
var fade_b = FADE_BLUE

function fade(container)
{
	if (fade_r == 0) fade_r == FADE_RED;
	if (fade_g == 0) fade_g == FADE_GREEN;
	if (fade_b == 0) fade_b == FADE_BLUE;
	
	if (fade_r + fade_g + fade_b != (255 * 3))
	{	
		document.getElementById(container).style.background = "rgb(" + fade_r + "," + fade_g + "," + fade_b + ")";
		if ((fade_r == FADE_RED) && (fade_g == FADE_GREEN) && (fade_b == FADE_BLUE))
		{
			setTimeout('fade("' + container + '")', FADE_HOLD)
		}
		else
		{	
			setTimeout('fade("' + container + '")', FADE_SPEED)
		}
		
		if ((fade_r >= 255) || (fade_r + FADE_STEP > 255)) fade_r = 255; else fade_r = fade_r + FADE_STEP;
		if ((fade_g >= 255) || (fade_g + FADE_STEP > 255)) fade_g = 255; else fade_g = fade_g + FADE_STEP;
		if ((fade_b >= 255) || (fade_b + FADE_STEP > 255)) fade_b  = 255; else fade_b = fade_b + FADE_STEP;
	}
	else
	{	
		document.getElementById(container).style.background = "rgb(" + fade_r + "," + fade_g + "," + fade_b + ")";
		fade_r = FADE_RED;
		fade_g = FADE_GREEN;
		fade_b = FADE_BLUE;
		document.getElementById(container).style.background = "";
	}
}
