// JavaScript Document
//global variables

// DataSource instance
var myDataSource = null;
//datatable instance
var myDataTable = null;
//flag for checking if input criteriq cliecked
var criteriaClicked = false;

//Function for handling the response from the server
var oAjaxObject = 
{
	name : "Job search:",
	//function called on success
	handleSuccess : function (oResponse) 
	{
		 if(oResponse.responseText !== undefined)
		 {
			//hide the first table div
			//populate the form with the data returned
			//document.getElementById("divContent").innerHTML =  oResponse.responseText;
			//log position
			//YAHOO.log("Returned from server: " + oResponse.responseText);
			var oDTCallback = 
			{
				success : function( sRequest , oParsedResponse , oPayload)
				{						
					//YAHOO.log("Success table update: "+oParsedResponse.results);
					document.getElementById("divContent").innerHTML = '';
					//make the table visible
					document.getElementById("resultsTable").style.display = "inline";
					document.getElementById("resultsTable").style.visibility = "visible";
					myDataTable.initializeTable();
					myDataTable.getRecordSet().reset();
					//alert("initial");
					myDataTable.getRecordSet().setRecords(oParsedResponse.results);
					myDataTable.refreshView();
					//alert("refresh");
					//refresh paginator to display the first table, since data has changed
					myDataTable.get("paginator").setStartIndex(0, false);//setPage(0);	
					myDataTable.get("paginator").set("totalRecords", 
							oParsedResponse.meta.totalRecords);
					myDataTable.render();
					//myDataTable.showTableMessage(YAHOO.widget.DataTable.MSG_LOADING);
				},// */this.onDataReturnInitializeTable,
    			failure : function(oRequest,oResponse,oPayload)
				{
					alert("Results failed: Please try searching again" /*+ oResponse.results */);
					document.getElementById("divContent").innerHTML = '';
				},
    			scope : myDataTable //The object to serve as the scope for the success and 
										//failure handlers.
			};
			//myDataTable.initializeTable();			
			myDataSource.sendRequest("sort=id&dir=asc&startIndex=0&results=15"+
												"&sid="+Math.random(),oDTCallback);
		
			 //setupResultsTable();
		}//end if response
	},
	//function called on failure
	handleFailure : function (oResponse) 
	{
		alert(this.name + " An error occurred. Please try again." + oResponse.statusText + "_" +
			  oResponse.responseText);
	}
};

//callback for connection manager
var oCallback = 
{
	success: oAjaxObject.handleSuccess,
	failure: oAjaxObject.handleFailure,
	timeout: 15000,
	scope: oAjaxObject
};


//Main function called when user clicks the submit button
function sendQuery()
{	
	//make the table invisible
	//document.getElementById("resultsTable").style.visibility = "collapse";
	
	document.getElementById("resultsTable").style.display = "none"; /*.visibility = "hidden";*/
	//set url to php handler
	var url="jobs/scripts/php/jobrequest.php";
	//set the waiting image
	document.getElementById("divContent").innerHTML = 
				"<br>Searching for jobs....<br><img src=\"jobs/images/jobs_loading.gif\" alt=\"Please wait..\" />";		
	//get the contents of the form to be posted
	var oForm = document.getElementById("formKeywords");
	//set the form data
	YAHOO.util.Connect.setForm(oForm);	
	//call the async request of the connection manager
	var objAsync = YAHOO.util.Connect.asyncRequest('POST', url, oCallback ); 
};

//dynamic table generation
function dynamicData()
{	
	//make the table invisible
	//document.getElementById("resultsTable").style.visibility = "collapse";
	document.getElementById("resultsTable").style.display = 'none';  //.visibility = "hidden";
	YAHOO.example.DynamicData = function() 
	{
		// Define a custom format function
		var myFormatDate = function(elCell, oRecord, oColumn, oData) 
		{
	    	var oDate = oData;	
			//YAHOO.log(oDate.getFullYear());
    		elCell.innerHTML = oDate.getDate() + "/" + (oDate.getMonth() + 1) + "/" + 
				oDate.getFullYear();
		};
		
		// Define a custom format function
		var myTimeStampDate = function(elCell, oRecord, oColumn, oData) 
		{
	    	var oDate = new Date(oData * 1000);	
			//YAHOO.log(oDate.getFullYear());
    		elCell.innerHTML = oDate.getDate() + "/" + (oDate.getMonth() + 1) + "/" + 
				oDate.getFullYear();
		};
		
	    // Column definitions
	    var myColumnDefs = [ // sortable:true enables sorting
	        {key:"id", label:"ID", sortable:false},
	        {key:"summary", label:"Job", sortable:true},
			{key:"location",label:"Location",sortable:true},
			{key:"salary", label:"Salary",sortable:true},
			{key:"jobType", label:"Type",sortable:true} /*,			
			{key:"timestamp",label:"Date",sortable:true,
			    formatter:myTimeStampDate}*/								
	    ];

    	// Custom parser
	    var stringToDate = function(sData) {
	        var array = sData.split("/");
	        return new Date(array[1] + ", " + array[0] + ", " + array[2]);
	    };			
    
	    // DataSource instance
	    myDataSource = new YAHOO.util.DataSource("jobs/scripts/php/json_proxy.php?");
	    myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
	    myDataSource.responseSchema = 
		{
	        resultsList: "records", //data set containing results
	        fields: [
	            {key:"id", parser:"number"},
	            {key:"summary"},
				{key:"location"},
				{key:"salary"},
				{key:"jobType"},
	            /*{key:"date", parser:stringToDate},*/
				{key:"detail"},
				{key:"link"},
				/*{key:"job_date", parser:stringToDate},*/
				{key:"timestamp"}
	        ],
	        metaFields: 
			{
	            totalRecords: "totalRecords" // Access to value in the server response
	        }
	    };
		myDataSource.maxCacheEntries = 1; 
    
	    // DataTable configuration
	    var myConfigs = {
	        initialRequest: "sort=id&dir=asc&startIndex=0&results=15"+
				"&sid="+Math.random(), // Initial request for first page of data
    	    dynamicData: true, // Enables dynamic server-driven data
	        sortedBy : {key:"id", dir:YAHOO.widget.DataTable.CLASS_ASC}, 
			// Sets UI initial sort arrow
	        paginator: new YAHOO.widget.Paginator({ rowsPerPage:15}), // Enables pagination 
			initialLoad:false //delays loading of data
	    };
				
		//create panel for displaying job details in pop up dialog
		var panel = new YAHOO.widget.Panel(
							"PanelDetail",
							{
									visible:false, 
									draggable:true, 			 							
									close:true, 
									width:'400px', 
									constraintoviewport: true,
									modal:true ,underlay:'shadow',
									zIndex:15000
							} 
						);   
			panel.setHeader('');   
			panel.setBody('testing text');
			panel.cfg.setProperty("underlay","matte");
			//panel.render(YAHOO.util.Dom.get('resultsTable'));			
			panel.render(document.body);			
    
		var baseRecordId;
		//function for showing the panel with the job detail
		var show = function (recordId,caption,detail,jobLink,cell) { 
				baseRecordId = recordId;
				panel.setHeader(caption);
				panel.setBody(detail + "<br><p align=\"right\">"+ jobLink +"</p>");
				//panel.setFooter();
				//align window to top left
				panel.cfg.setProperty("context", [cell, "tl", "bl"]);
				panel.cfg.setProperty("visible", true);				
			};
		
    	// DataTable instance
	    myDataTable = new YAHOO.widget.DataTable("dynamicdata", myColumnDefs, myDataSource, 			 													myConfigs);
		myDataTable.set("selectionMode","single");
	 	myDataTable.subscribe("rowClickEvent",myDataTable.onEventSelectRow); 
		myDataTable.subscribe('cellDblclickEvent',function (oArgs) {
				var target = oArgs.target;
				var record = this.getRecord(target);
				show(record.getData('id'),record.getData('summary'),
					record.getData('detail'),record.getData('link'),target);
			});
		
	    // Update totalRecords on the fly with value from server
	    myDataTable.handleDataReturnPayload = function(oRequest, oResponse, oPayload) 
		{
	        oPayload.totalRecords = oResponse.meta.totalRecords;
	        return oPayload;
	    }
		
		// Sends a request to the DataSource for more data    
	    return {
	        ds: myDataSource,
	        dt: myDataTable
	    };	        
	}();//end function
}//end dynamicData


function DataFix()
{
	YAHOO.util.DataTable.prototype.requery =
	function(newRequest) 
	{
		this.getDataSource().sendRequest(
			(newRequest === undefined?this.get('initialRequest'):newRequest),
				this.onDataReturnInitializeTable,this);
	};	
}//end datafix

// Button Event: "Set User" button clicked. Adds the username to the cookie.
function CriteriaInit()
{
	if(criteriaClicked == false)
	{
	    var criteriaInput = document.getElementById("criteria");
		criteriaInput.value = "";
		criteriaInput.style.color = "#666";
		criteriaClicked = true;
	}	
}

//Function for searching for the popular terms on the main page
function CommonSearches(terms)
{
	//set the search term on the form and perform search
	document.getElementById("criteria").value = terms;
	//call the send query function
	sendQuery();
}
