//Global variables
var loggedIn = false;
var awaitingPoll = false;
var intervalID = 0;
var realTime = true;


//Function for handling the response from the server
var oAjaxObject = 
{
	name : "Property Finder AjaxObject:",
	//function called on success
	handleSuccess : function (oResponse) 
	{
		 if(oResponse.responseText !== undefined)
		 {
			 //TODO parse json returned and fill table
			 try 
			{ 
				//clear the animated gif
				document.getElementById("debug").innerHTML = oResponse.responseText;						
				var recordsData =  YAHOO.lang.JSON.parse(oResponse.responseText); 
				if(recordsData != null)
				{					
					YAHOO.log("Num items"+recordsData.count);			
					for(i = 0; i<recordsData.count; i++)
					{
						//print out the data
						YAHOO.log(recordsData.results[i].image);
						YAHOO.log(recordsData.results[i].link);
						YAHOO.log(recordsData.results[i].address);
						YAHOO.log(recordsData.results[i].description);
						YAHOO.log(recordsData.results[i].details);
						YAHOO.log(recordsData.results[i].offers);						
					}
					
					//check if records found and redirect to results page
					if(recordsData.count > 0)
					{
						document.getElementById("progress").innerHTML = "Redirecting...";
						//redirect to results page			
						window.location = "house_search.php";
					}
					else
					{
						//nothing find. Update user
						document.getElementById("progress").innerHTML = "No properties found in location. Please try again";
					}
				}
				else
				{
					 YAHOO.log("Invalid json" + oResponse.responseText);					 
				}				
			}
			catch (e) { 
				YAHOO.log("Exception caught: Invalid json item data: "+ e ); 			
			} 								 
		}//end if response
		else 
		{
			YAHOO.log("Undefined response  " + oResponse);
			document.getElementById("tab2").innerHTML = "Error occured. Please try again";
		}
	},
	//function called on failure
	handleFailure : function (oResponse) 
	{
		YAHOO.log(this.name + " An error occurred. Please try again." + 
			  oResponse.statusText + ": " +  oResponse.responseText);
		document.getElementById("tab2").innerHTML = "Error occured. Please try again";
	}
};

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


//Main function called when user clicks the submit button
function findProperties()
{	
	//set url to php handler
	var url="scripts/php/IHousePrices.php";
	YAHOO.log('Send property query');
	//set the waiting image
	document.getElementById("progress").innerHTML =	"<br>Searching for properties....<br><img src=\"images/jobs_loading.gif\" alt=\"Please wait..\" />";			
	//get the contents of the form to be posted
	var oForm = document.getElementById("frmFinder");
    //sets the form data
	YAHOO.util.Connect.setForm(oForm);
	//call the async request of the connection manager
	YAHOO.util.Connect.asyncRequest('POST', url, oCallback, ""); 
};

function userLogin()
{
	//get the form
	var url="scripts/php/user.php";
	
	//callback for connection manager
	oLogInCallback = 
	{
		success: function(oResponse)
		{
			if(oResponse.responseText == 'true')
			{
				loggedIn = true;
				YAHOO.log('logged in  = ' + loggedIn);
				//redirct to ebay page
				window.location = "http://www.two76.com/ebay/index.php";
			}
			else
			{
				alert("login failed");
			}
		},
		failure: function(oResponse)
		{
			YAHOO.log(oResponse.responseText);
		},
		timeout: 2000
	};
	//set the form for submission
	//get the contents of the form to be posted
	var oForm = document.getElementById("fmLogin");
    //sets the form data
	YAHOO.util.Connect.setForm(oForm);
	//log out candidate
	YAHOO.util.Connect.asyncRequest('POST', url, oLogInCallback);			
}

/************************************************************************************************
Datatable access methods
*************************************************************************************************/
//dynamic table generation
function dynamicData()
{	
	//make the table invisible
	//document.getElementById("resultsTable").style.visibility = "collapse";
	//document.getElementById("watchListTable").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:true},
	        {key:"bidCount", label:"Bids", sortable:true},
	        {key:"currentBid", label:"Current", sortable:true},
			{key:"time",label:"Time",sortable:true},
			{key:"title", label:"Item",sortable:true}										
	    ];

    	// 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("scripts/php/json/json_proxy.php?");
	    myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
	    myDataSource.responseSchema = 
		{
	        resultsList: "records", //data set containing results
	        fields: [
				{key:"id",parser:'number'},	 
	            {key:"ItemID"},
	            {key:"EndTime"},
				{key:"url"},
				{key:"bidCount"},
				{key:"currentBid"},
	            {key:"shipping"},
				{key:"time"},
				{key:"title"},
				{key:"picture"}
	        ],
	        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:true //delays loading of data
	    };						
		
    	// 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('summary'),
					//record.getData('detail'),record.getData('link'),target);
				//alert(record.getData('title') + ':' + record.getData('ItemID') );
				ShowItemDetails(record.getData('ItemID'));								
		});
		
	    // 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


//this will load the right hand side window with the detail of the item currently selected
function ShowItemDetails(itemID)
{
	//clear any intervals running
	clearInterval(intervalID);	
	//get the form
	var url="sandbox.php";
	
	document.getElementById("itemPicture").innerHTML = "<img src=\"images/jobs_loading.gif\" alt=\"Please wait..\" />";
	document.getElementById("itemDetail").innerHTML = "Please wait...";
	
	//callback for connection manager
	oItemIDCallback = 
	{
		success: function(oResponse)
		{
			YAHOO.log(oResponse.responseText);
			//try parse json reporse
			try 
			{ 
				var itemData = YAHOO.lang.JSON.parse(oResponse.responseText); 
				//get the left item div
				document.getElementById("itemPicture").innerHTML = "<img src="+itemData.GalleryURL+"/>";
				document.getElementById("itemDetail").innerHTML = "Bids:" + itemData.BidCount + "<br>" + 
							"Price:" + itemData.Price;						
				//save the time left data
				CurrentItem.time = itemData.TimeLeft;
				//parse this time
				CurrentItem.ParseTime();
				document.getElementById("timeLeft").innerHTML = CurrentItem.getTime();	
				//set polling
				intervalID = setInterval("PollItemData()",1000);				
				
			}
			catch (e) { 
				YAHOO.log("Invalid json item data:"+ e ); 
				document.getElementById("itemPicture").innerHTML = '';
			} 									
		},
		failure: function(oResponse)
		{
			YAHOO.log(oResponse.responseText);
			document.getElementById("itemPicture").innerHTML = '';
		},
		timeout: 2000
	};
	//get details for the item
	YAHOO.util.Connect.asyncRequest('POST', url, oItemIDCallback, 'api=GetSingleItemRequest&itemID=' + itemID);
}

/*
	Function for polling the item data
*/
 function PollItemData() {	 
	oStatusCallback = 
	{
		success : function(oResponse)
		{
			YAHOO.log("poll" + oResponse.responseText);
			var itemData = YAHOO.lang.JSON.parse(oResponse.responseText); 
			//get the left item div			
			document.getElementById("itemDetail").innerHTML = "Bids:" + itemData.BidCount + "<br>" + 
							"Price:<font color=\"#FF0000\">" + itemData.Price + "</font><br>Highest:"+ 
							itemData.Highest+"</em><br>Status:" + itemData.ListingStatus;	
			//save the time left data
			CurrentItem.time = itemData.TimeLeft;
			//parse this time
			CurrentItem.ParseTime();
			document.getElementById("timeLeft").innerHTML = CurrentItem.getTime();	
			awaitingPoll = false;
			//check if complete and clear timer
			if(itemData.ListingStatus.toLowerCase() == "completed")
			{
				clearInterval(intervalID);
				document.getElementById("timeLeft").innerHTML = itemData.ListingStatus;
				realTime = false;
			}
		},
		failure : function(oResponse)
		{
			YAHOO.log("data failure");
			awaitingPoll = false;
		}
	};		
	if(!awaitingPoll && realTime)
	{
		awaitingPoll = true;
		last10Minutes = CurrentItem.days == 0 && CurrentItem.hours == 0 && CurrentItem.minutes < 10;
		lastMinute = CurrentItem.days == 0 && CurrentItem.hours == 0 && CurrentItem.minutes == 0;
		//Poll ebay if this is the last 10 minutes and second = 1, or there is less than 20 seconds left
		if( (last10Minutes && CurrentItem.seconds == 59) || (lastMinute && CurrentItem.seconds < 20)  )
		{
			//get details for the item
			YAHOO.util.Connect.asyncRequest('POST', "scripts/php/json/itemPoll.php", oStatusCallback);
		}
		else
		{
			//do a manual time deduction
			CurrentItem.Tick();
			document.getElementById("timeLeft").innerHTML = CurrentItem.getTime();  
			//YAHOO.log("Manual time:" + CurrentItem.getTime() +" \n\r days" +	CurrentItem.days);
			awaitingPoll = false;					
		}						
	}
};

//Function for toggleing track
function ToggleLock()
{
	realTime = !realTime;
	//cancel lock
	//clearInterval(intervalID);	
	if(!realTime) document.getElementById("status").innerHTML = "<font color=\"#FF0000\">Paused!</font>";
	else document.getElementById("status").innerHTML = "";
};

