var filters = [];
var tableButtons = [];
var moveButton;
var assignPolicyButton;
var sortColumn = "";

// Initialize the page.
Evt.onDOMReady(

        function() {
			YAHOO.util.Event.addListener( "dataHead", "click", headerClick );
			YAHOO.util.Event.addListener( "dataBody", "click", tableClick );
			
			// Initialize the "filter" drop-down buttons.
			var filterNames = ["group", "policy", "status", "time"];
			for(var i = 0; i < filterNames.length; i++)
			{
				var f = filterNames[i];
				
				filters[f] = new YAHOO.widget.Button(f + "Filter", { 
				                                        type: "menu", 
				                                        menu: f + "FilterSelect" });

				filters[f].getMenu().subscribe("click", onFilterClick, {filter : f} );
			}
			
			// initialize the "move to" button
			moveButton = new YAHOO.widget.Button("moveButton", { 
			                                        type: "menu", 
			                                        menu: "moveButtonSelect", lazyLoad:false });
			moveButton.replaceClass("yui-skin-sam", "buttonBar");
			moveButton.getMenu().subscribe("click", moveComputers, {} );
			
			moveButton.getMenu().showEvent.subscribe(
				function(evt, src, args) 
				{ 
					var items = moveButton.getMenu().getItems();
					Dom.addClass( items[items.length - 1].element, "create_group" );
				}
			);
			
			// initialize the "move to" button
			assignPolicyButton = new YAHOO.widget.Button("assignPolicyButton", { 
			                                        type: "menu", 
			                                        menu: "assignPolicyButtonSelect" });
			assignPolicyButton.replaceClass("yui-skin-sam", "buttonBar");
			assignPolicyButton.getMenu().subscribe("click", setComputerPolicy, {} );
			
			
			// initialize the rest of the table buttons.
			var buttonNames = ["email", "delete", "block"];
			for(var i = 0; i < buttonNames.length; i++)
			{
				var f = buttonNames[i];
				tableButtons[f] = new YAHOO.widget.Button(f + "Button", { type: "button", onclick : { fn : onTableButtonClick, obj : buttonNames[i] } } );
			}
		}
);

// generic handler for filter drop-down buttons.
function onFilterClick( type, args, item ) 
{ 
	filters[item.filter].set("label", filters[item.filter].getMenu().activeItem.srcElement.text );
	refreshTable();
}

// Generic click handler for table row actions
function onTableButtonClick( type, args, item ) 
{
	doRowAction( args );
}

// Refreshes the current view, applies any selected filters and sorting
function refreshTable()
{
	var q = [];
	for(itm in filters)
	{
		if(filters[itm].getMenu().activeItem)
		{
			q.push(itm + "=" + filters[itm].getMenu().activeItem.value);
		}
	}
	var filterQuery = q.join("&");
	
	YAHOO.util.Connect.asyncRequest("GET", "get_computer_table.php?sort=" + sortColumn + "&" + filterQuery, tableRefreshHandler );
}


// ajax request handler for table refresh requests.
var tableRefreshHandler = {
	success: function(o) {  
			Dom.get("comtpuerTableContainer").innerHTML = o.responseText;

			YAHOO.util.Event.addListener( "dataHead", "click", headerClick );
			YAHOO.util.Event.addListener( "dataBody", "click", tableClick );
		} 
}


// Event handler for "onclick" event of the table header.
function headerClick( evt )
{
	var target = Evt.getTarget(evt);
	var th = (target.tagName.toLowerCase() == "th") ? target : Dom.getAncestorByTagName(target, "TH");
	
	// set the sort column
	if(th.getAttribute("property") != null)
	{
		sortColumn = th.getAttribute("property");
		refreshTable();
	}	
}

// Event handler for "onclick" event of the table body.
function tableClick( evt )
{
	var target = Evt.getTarget(evt);
	if( (target.tagName.toLowerCase() == "input") && (target.getAttribute("value") != null) )
    {
		// if we want to do any client-side stuff when checkboxes are toggled, do it here.;
    }
}

// called when the popup menu of groups is clicked.
function moveComputers( type, args, item ) 
{ 
	var group = moveButton.getMenu().activeItem.srcElement.value;
	if(group == "_new")
	{
		group = prompt("Please specify a group name:");
	}
	doRowAction("move", "group=" + group);
}


// called when the popup menu of groups is clicked.
function setComputerPolicy( type, args, item ) 
{ 
	var policy = assignPolicyButton.getMenu().activeItem.srcElement.value;
	doRowAction("assign", "policy=" + policy);
}

// Performs an action on all selected rows.
function doRowAction( actionName, params )
{
	var chk = Dom.get("dataBody").getElementsByTagName("input");
	var uid_list = [];
	
	for(var i = 0; i < chk.length; i++)
	{
		if((chk[i].value != "") && (chk[i].checked))
		{
			uid_list.push(chk[i].value);
		}
	}
	var uids = "uids=" + uid_list.join(",");
	var action = "action=" + actionName;
	
	var post = uids + "&" + action;
	if(params != null)
	{
		post += "&" + params;
	}
	
	YAHOO.util.Connect.asyncRequest("POST", "update_computers.php", { success : refreshTable }, post );
}