var ServerURL = "./../../modul/request.php";
var queryString;
var ServerResponse = " ";
var FormName;
var SourceButton;
var TotalRows;
var ParentWindow;
var ImageLoader = "";

//############### RETRIEVING PARENT WINDOW ###############
function Up(Current)
{
    if(Current.parent.location.href == Current.location.href)
    {    
        return Current.document;
    }
    else
    {
        return Up(Current.parent);
    }
}
//############### CHECKING WHETHER AN OBJECT IS DEFINED OR NOT ###############
function NullOrMissing(obj)
{
	if (typeof obj == "undefined" || 
		obj == null || 
		obj == "")
		return true; 
	return false;
}
//############### CREATING LOADER NODE FOR FURTHER USE  ###############
function AppendLoader()
{
    var obj = ParentWindow;
    if(NullOrMissing(ImageLoader))
    {
        var elem = obj.createElement("img");
        elem.setAttribute("src", "../../modul/img/loader.gif");
        elem.setAttribute("height", "186");
        elem.setAttribute("width", "325");
        elem.setAttribute("id", "loader_image");
        elem.style.position = "absolute";
        elem.style.zIndex = "-1";
        elem.style.left = (obj.body.clientWidth - 325)/2;
        elem.style.top = (obj.body.clientHeight - 186)/2;
        obj.body.appendChild(elem);
        ImageLoader = obj.getElementById("loader_image");
    }
}
//############### SHOWIN' & HIDING LOADER NODE  ###############
function ShowLoader(show_me)
{
    if(show_me == 1)
    {
        ImageLoader.style.zIndex = "20";
    }
    else
    {
        ImageLoader.style.zIndex = "-1";
    }
}
//############### DISABLING BUTTONS, WHICH ARE EXPECTED TO BE INACTIVE AT THE MOMENT AS IF IN ACCESS APP ###############
function DisableButtons(current_row)
{
   if(NullOrMissing(document.getElementById("ActPrev")))
   {
		return false;
   }
	   if (current_row == 1) 
	   {
	       document.getElementById("ActPrev").disabled = true;
	       document.getElementById("ActNext").disabled = false;
	   }
	   else if (current_row == TotalRows)
	   {
	       document.getElementById("ActPrev").disabled = false;
	       document.getElementById("ActNext").disabled = true;
	   }
	   else
	   {
	       document.getElementById("ActPrev").disabled = false;
	       document.getElementById("ActNext").disabled = false;
	   }
}

//############### FORMING QUERY STRING SIMILAR TO THAT OF GET METHOD, TO SEND IT TO SERVER ###############
function setQueryString()
{
    var Forma = document.forms[FormName];
    var row = document.getElementById("RowNumb").value;

    queryString="";
    var numberElements =  Forma.elements.length;
    var numberImages = document.images.length;
    var i = 0;
    while(i < numberElements)
    {
        if(i < numberElements-1)
        {
            queryString += Forma.elements[i].name+"="+
            encodeURIComponent(Forma.elements[i].value)+"&";
            i++;
        }
        else
        {
            queryString += Forma.elements[i].name+"="+
            encodeURIComponent(Forma.elements[i].value);
            i++;
        }
    }
    if(numberImages > 0)
    {
        queryString += "&";
    }

    i = 0;
    while(i < numberImages)
    {
        if(document.images[i].id == "loader_image")
        {
            numberImages -= 1;
        }
        else
        {
            if(i < numberImages-1)
            {
            queryString += document.images[i].id+"="+
            "{@_ImAgE_@}" + "&";
            i++;
            }
                else
            {
                queryString += document.images[i].id+"="+
                "{@_ImAgE_@}";
                i++;
            }
        }
    }
    queryString += "&row=" + row + "&fname=" + encodeURIComponent(FormName) + "&srcbut=" + SourceButton;
}
//#################################### THE FUNCTION FOR CHANGING FIELD VALUES #################################
function AlterData()
{
/*************it's subfunctions**************/
    function SetImage()
    {
        document.images[names_arr[i]].src = values_arr[i];
    }
    function SetSelectValue()
    {
        for(var j = 0; j < object.length; j++)
        {
            if(object.options[j].text == values_arr[i])
            {
                var my_index = j;
                break;
            }
        }
        object.selectedIndex = my_index;
    }
    function SetCheckValue()
    {
        if(values_arr[i] == 1 || values_arr[i] == true)
        {
            object.checked = true;
        }
        else
        {
            object.checked = false;
        }
    }
    function SetGroupValue()
    {
        var x = 0;
        var Forma = document.forms[FormName];
		
		while(x < Forma.elements.length)
        {
			grobj = Forma.elements[x];
			if(grobj.name == names_arr[i] && grobj.value == values_arr[i])
			    grobj.checked = true;
            else if(grobj.name == names_arr[i] && grobj.value != values_arr[i])
			    grobj.checked = false;
            x++;
        }
    }
    function SetOtherValue()
    {
        if(object.type != "submit" && object.type != "button")
		object.value = values_arr[i];
    }
/**********************subfunctions ended**********************/

   var Forma = document.forms[FormName];
   if(NullOrMissing(ServerResponse)) return;
   var received_data_arr = ServerResponse.split(" {~@~} ");
   var names_arr = received_data_arr[0].split(" <~@~> ");
   var values_arr = received_data_arr[1].split(" <~@~> ");
   var rows_arr = received_data_arr[2].split(" <~@~> ");
   var new_row = rows_arr[0];
   TotalRows = rows_arr[1];
   var i = 0;
   while(i < names_arr.length)
   {
       if(NullOrMissing(names_arr[i]) ) { i++; continue; }
	   //alert(names_arr[i] + " = " + values_arr[i]);
	   //var object = document.getElementById(names_arr[i]);
       var object = document.forms[FormName].elements[names_arr[i]];

            if(document.images[names_arr[i]] && document.images[names_arr[i]].id != "loader_image")
            {
                SetImage();
            }
            else if(object.type == "select-one" || object.type == "select-multiple")
            {
                SetSelectValue();
            }
            else if(object.type == "checkbox" || object.type == "radio")
            {
                SetCheckValue();
            }
            else if(names_arr[i].indexOf("_#R~G") != -1)
            {
                //alert(values_arr[i]);
				SetGroupValue();
            }
            else
            {
                SetOtherValue();
            }
           i++;
   }

       document.getElementById("RowNumb").value = new_row;
       current_row = document.getElementById("RowNumb").value;
       DisableButtons(current_row);
}
//############### DATA SENDING PROCESS HANDLER ###############
function handleResponse()
{
    if(request.readyState == 4)
    {
        if(request.status == 200)
        {
        	ServerResponse = request.responseText;
//            alert(ServerResponse);
			ShowLoader(0);
            AlterData(FormName);
                
        } 
        else 
        {
                alert("==============================\nCould not establish server connection!"
                      + "\n             Please try again later...\n==============================");
                ShowLoader(0);
        }
    }
}
//############### MAIN FUNCTION STARTING THE PROCESS(USUALLY ON BUTTON CLICK) ###############
function FetchData(SButton, FName)
{
    //alert(SButton + " - " + FName);
	var FName = FName.replace("_menuline", "");
    FormName = FName;
    SourceButton = SButton;
    setQueryString(FormName);
	//alert(queryString);
    ShowLoader(1);
    httpRequest("POST",ServerURL,true,handleResponse,queryString);
}
//############### PAGE ON-LOAD FUNCTION THAT PREPARES ALL THE STUFF ###############
function AjaxLoad()
{
    DisableButtons(1);
    ParentWindow = Up(window);
    ImageLoader = ParentWindow.getElementById("loader_image");
    AppendLoader();
}

