/*
 * Table.js
 * (c)2009 Bell Systems LLC
 * 
 * License: http://bellspace.net/licenses/non-commercial.html (Non-Commercial) 
 * Licensing: http://bellspace.net/licensing/index.html 
 * 
 * Ajax Table Functions
 *
 */

function tableHighlight(obj)
{	
    var trs = obj.getElementsByTagName("TR");
    for(var i=0; i<trs.length; i++)
    {
		if(trs[i].parentNode.parentNode.parentNode.className != "search_container")
		{
			continue;
		}
		
        trs[i].onmouseover = function()
        {
            if(this.className == "" ||
               this.className == "alternate_bgcolor")
            {
                this.original_className = this.className;               
            }

            if(this.className == "first")
            {
                this.className = "highlight_bgcolor_first";
            }
            else
            {
                if(this.className == "" || this.className == "alternate_bgcolor")
                {
                    this.className = "highlight_bgcolor";
                }
            }
        }
        trs[i].onmouseout = function()
        {
            if(this.className == "highlight_bgcolor" || 
               this.className == "highlight_bgcolor_first")
            {
                this.className = this.original_className;   
            }
        }
		trs[i].style.cursor = "pointer";
    }
}

function makeTableEdit(obj)
{
    makeTableGeneric(obj, "edit");
    var editButton = document.getElementById("edit_selected");
    var deleteButton = document.getElementById("delete_selected");	
	
    if(editButton)
    {
        editButton.style.display = "inline";
    }
    if(deleteButton)
    {
        deleteButton.style.display = "none";
    }   	
}

function makeTableDelete(obj)
{
    makeTableGeneric(obj, "delete");
    var editButton = document.getElementById("edit_selected");
    var deleteButton = document.getElementById("delete_selected");

    if(deleteButton)
    {
        deleteButton.style.display = "inline";
    }
    if(editButton)
    {
        editButton.style.display = "none";
    }                               
}

function deleteSelected(obj)
{
	var table = getTableFromObj(obj);
	var checkedInputs = new Array();
	if(table)
	{
		var inputs = table.getElementsByTagName("INPUT");
		for(var i=0; i<inputs.length; i++)
		{
			if(inputs[i].checked)
			{
				checkedInputs[checkedInputs.length] = inputs[i];
			}
		}
		
		if(checkedInputs.length == 0)
		{
			alert("You must check at least one box to delete.")
		}
		else
		{
			var sure = confirm("Are you sure you want to delete the highlighted rows?");
			if(!sure)
			{
				return;
			}
			
            var successFunction = function(response)
            {	
                if(response == "SUCCESS")
				{
					updateTable('', 'delete');
				}
				else
				{
					var errorRows = eval(response);
					alert("Error! Could Not Delete");
				}
				
			};
			
			var deletes = "";
			for(var i=0; i<checkedInputs.length; i++)
			{
				deletes += "&deletes[]=" + checkedInputs[i].value;
			}
			
		    var param = "http://" + myHost + "/new_slang/lib/php/ajax/My_Navs_ajax.php?delete_selected=true" + deletes;
			ajaxCall(param, successFunction);					
		}
	}
}

function editSelected(obj)
{
    var table = getTableFromObj(obj);
    var checkedInputs = new Array();
    if(table)
    {
        var inputs = table.getElementsByTagName("INPUT");
        for(var i=0; i<inputs.length; i++)
        {
            if(inputs[i].checked)
            {
				//radio button only needs one checked
                checkedInputs[checkedInputs.length] = inputs[i];
				break;
            }
        }
        
        if(checkedInputs.length == 0)
        {
            alert("You must select a radio button to edit.")
        }
        else
        {
            var sure = confirm("Are you sure you want to edit the highlighted row?");
            if(!sure)
            {
                return;
            }
            
            var successFunction = function(response)
            {   
                if(response == "SUCCESS")
                {
                    updateTable('', 'edit');			
                }
                else
                {
                    var errorRows = eval(response);
                    alert("Error! Could Not Edit");
                }
                
            };
            
            var edit = "";
			edit = "&edit=" + checkedInputs[0].value + getInputUrlString();
            
            var param = "http://" + myHost + "/new_slang/lib/php/ajax/My_Navs_ajax.php?edit_selected=true" + edit;
            ajaxCall(param, successFunction);                   
        }
    }
}

function getInputUrlString()
{
	var string = "";
	var inputs = getElementsByClassName("row_input");
	for(var i=0; i<inputs.length; i++)
	{
		string += "&" + inputs[i].name + "=" + inputs[i].value;
	}
	return string;
}

function addTableExtensions(table)
{
    //get input elements and add onclick/onmouseover/onmouseout handlers for them   
    var inputs = table.getElementsByTagName("INPUT");
    for(var i=0; i<inputs.length; i++)
    {
        inputs[i].onclick = function()
        {
            selectRow(this);
        }
        
        inputs[i].onmouseover = function()
        {
            globalInterrupt = true;
        }
        
        inputs[i].onmouseout = function()
        {
            globalInterrupt = false;
        }
    }
}

function selectRow(obj)
{
    if(obj.nodeName == "INPUT")
    {
       var tr = obj.parentNode.parentNode;
    }
    
    if(obj.type == "checkbox")
    {
        if(obj.checked)
        {
            tr.className = "light_red_row";
        }
        else
        {
            tr.className = tr.original_className;
        }
    }
    else if(obj.type == "radio")
    {   
        if(obj.checked)
        {
            var trs = tr.parentNode.getElementsByTagName("TR");
            for(var i=0; i<trs.length; i++)
            {
                if(trs[i].className == "light_blue_row")
                {
                    trs[i].className = trs[i].original_className;
                }
            }
            tr.className = "light_blue_row";
            
            makeCellsEdit(tr)
        }       
    }
}

function makeCellsEdit(tableRow)
{
    var editableSpans = getElementsByClassName("edit", tableRow, "span");
    var inputNode = document.createElement("INPUT");
    inputNode.className = "row_input";
    inputNode.style.width = tableRow.getElementsByTagName("td")[1].offsetWidth -10 + "px";  
    
    for(var i=0; i<editableSpans.length; i++)
    {
        var tInputNode = inputNode.cloneNode(true);
        tInputNode.onmouseover = function()
        {
            globalInterrupt = true;
        }
        tInputNode.onmouseout = function()
        {
            globalInterrupt = false;
        }
		
		tInputNode.onkeypress = function(e)
		{
            var eventObject;
            if(window.event != undefined)
            {
                eventObject = window.event;
            }
            else if(e)
            {
                eventObject = e;
            }
            
            if(eventObject.keyCode == 13)
            {
				globalInterrupt = false;
                editSelected(tableRow)
            }
		}
        
        tInputNode.value = editableSpans[i].innerHTML;
		tInputNode.name = editableSpans[i].getAttribute("name");
        editableSpans[i].parentNode.replaceChild(tInputNode, editableSpans[i]); 
        
        tInputNode.focus();     
    }
    
    //reset any previous spans that were made inputs
    var table = tableRow.parentNode;
    var trs = table.getElementsByTagName("TR");
    for(var i=0; i<trs.length; i++)
    {
        if(trs[i] != tableRow)
        {
            editableInputs = getElementsByClassName("row_input", trs[i], "input");
            var spanNode = document.createElement("SPAN");
            spanNode.className = "edit";
            for(var j=0; j<editableInputs.length; j++)
            {
                var tSpanNode = spanNode.cloneNode(true);
                tSpanNode.innerHTML = editableInputs[j].value;
                editableInputs[j].parentNode.replaceChild(tSpanNode, editableInputs[j]);
            }
        }
    }
}

function getTableFromObj(obj)
{
    //preliminary checks to see what we are dealing with
    if(typeof(obj) == "string")
    {
        var table = document.getElementById(obj);
        //we are dealing with some kind of container
        if(table.nodeName != "TABLE")
        {           
            table = table.getElementsByTagName("TABLE");
            if(table[0])
            {
                table = table[0];
            }
        }
    }
    else if(typeof(obj) == "object")
    {
        var table = obj;
        if(obj.nodeName != "TABLE")
        {
			if(obj.nodeName == "TR")
			{
				obj = obj.parentNode.parentNode.parentNode;
			}
			else if(obj.nodeName == "TD")
			{
				obj = obj.parentNode.parentNode.parentNode.parentNode;
			}
			else if(obj.nodeName == "SPAN" || obj.nodeName == "INPUT")
			{
                obj = obj.parentNode.parentNode.parentNode.parentNode.parentNode;				
			}
			
            table = obj.getElementsByTagName("TABLE");
            if(table[0])
            {
                table = table[0];
            }
        }
    }
	
    //return the table
    if(table)
    {
        return table;
    }
    else
    {
        return false;
    }
}

function makeTableGeneric(obj, type)
{
    var table = getTableFromObj(obj)
    
    //add edit/delete functionality to table;
    updateTable("", type);
}

function tablePage(tableName, sortCol, extendedType, page)
{
	/*alert(tableName);
	alert(sortCol);
	alert(extendedType);
	alert(page);*/
	//alert(extendedType);
	updateTable(tableName, sortCol, extendedType, "&paging_number=" + page);
}
