/*

	Class: VIEWZI.datapull

	The Viewzi datapull class is for querying search information from the
	Viewzi data servers for client side presentation.


*/
	VIEWZI.datapull.GATEWAYSERVER	= VIEWZI.AMFSERVER !== "undefined" ? VIEWZI.AMFSERVER.split(",") : ["http://dev.viewzi.com/", "http://dev0.viewzi.com/", "http://dev1.viewzi.com/"];
	VIEWZI.datapull.GATEWAYPATH		= VIEWZI.AMFPATH !== "undefined"? VIEWZI.AMFPATH : "preview/";
	VIEWZI.datapull.GATEWAYLOC		= "/lib/";
	VIEWZI.datapull.SERVICENAME		= "ViewziDQO.php";
	VIEWZI.datapull.adPulls			= [];

/*

	init the datapull setup stuff and get it going

*/

	VIEWZI.datapull.init = function()
	{
		VIEWZI.datapull.totalPulls		= 0;
		VIEWZI.datapull.pendingPulls	= 0;
		VIEWZI.datapull.netTime			= [];
		VIEWZI.datapull.initTime		= (typeof VIEWZI.util.getTimer == "undefined") ? 0 : VIEWZI.util.getTimer();
		VIEWZI.datapull.isFirstPull		= true;
		if (typeof VIEWZI.datastore.init !== "undefined") {VIEWZI.datastore.init();}
	};

/*
	Function: VIEWZI.datapull.getData

		Query data from the backend server.

		This is the main route of getting data out of the Viewzi backend and into the
		views for visual display.

	Parameters:

		query 		- the search term you are querying on
		datasource	- comma delimited list of datasource keys you wish to query against
		procsource	- comma delimited list of the dataprocessors you wish to apply to the query
		startIndex	- start index result of the call
		endIndex	- ending index result of the call
		callid		- the unique identifier given to this particular call

	Returns:

		Null
*/

	VIEWZI.datapull.getData = function(query, datasource, procsource, startIndex, endIndex, callid)
	{
		VIEWZI.datapull.totalPulls++;
		VIEWZI.datapull.pendingPulls++;

		VIEWZI.datapull.netTime[callid] = VIEWZI.util.getTimer();
		if (!VIEWZI.view.hasTracked) VIEWZI.datapull.trackView(query);

		var DSID	= VIEWZI.datapull.totalPulls%VIEWZI.datapull.GATEWAYSERVER.length;
		var id		= !VIEWZI.view.viewid ? "0-0" : VIEWZI.view.viewid;

		var dUrl	= VIEWZI.datapull.GATEWAYSERVER[DSID]+VIEWZI.datapull.GATEWAYPATH+VIEWZI.datapull.GATEWAYLOC+VIEWZI.datapull.SERVICENAME;
		var jsurl	= dUrl + "?format=JSON&datak="+VIEWZI.datak;
		jsurl		= jsurl + "&viewid="+id;
		var term = query;
		var q = query
		if (query instanceof Array) {
			term = query[0];
			q = YAHOO.lang.JSON.stringify(query);
			//console.log(q);
			jsurl		= jsurl + "&q="+ q;
		} else {
			jsurl		= jsurl + "&q="+ query;
		}
		if(term == VIEWZI.searchterm){
			VIEWZI.datapull.adPulls.push({q:q, s: datasource});
		}
		jsurl		= jsurl + "&ds="+datasource+"&ps="+procsource+"&start="+startIndex+"&end="+endIndex;
		jsurl 		= jsurl + "&id="+callid+"&callback=VIEWZI.datapull.onData";
		//console.log(jsurl);

		VIEWZI.util.loadScript(jsurl);
	};

/*
	Function: VIEWZI.datapull.onData

		Data query catch method for the getData call.

	Parameters:

		evtData		- the data result from the server.
		callid		- the unique identifier of that origin call

	Returns:

		Null
*/

	VIEWZI.datapull.onData = function(evtData, callid)
	{
		VIEWZI.datapull.pendingPulls--;

		var id			= evtData.id;
		var tripTime	= (VIEWZI.util.getTimer()-VIEWZI.datapull.netTime[id])/1000;
		var phpTime		= (evtData.stats.endtime - evtData.stats.starttime);
		var netTime		= (tripTime-phpTime);
		delete VIEWZI.datapull.netTime[id];

		VIEWZI.trace.fire({module:"DATAPULL",msg:"Got DataPull Return : '" + evtData.id+"' stats("+phpTime+"s php, "+netTime+"s net, "+tripTime+"s total)"});

		/* track data if its the first pull					*/
		if (VIEWZI.datapull.isFirstPull) {
			VIEWZI.datapull.isFirstPull	= false;
			VIEWZI.trace.fire({module:"DATAPULL",msg:"total inital wait to data = "+(VIEWZI.util.getTimer()-VIEWZI.datapull.initTime)/1000+"s"});
		}

		/* fire the event data as function and custom event	*/
		if (typeof VIEWZI.view == "object") {
			if (typeof VIEWZI.view.onData == "function") VIEWZI.view.onData(evtData.dataresult, callid);
		}
		VIEWZI.dataresult.fire({id:evtData.id, data:evtData.dataresult});

		/* throw message if it exists on the backend packet	*/
		if (evtData.message) {
			VIEWZI.messaging.createAutomsg(evt.message.text);
		}

		/* throw a debug for php trace messages				*/
		if (evtData.trace) {
			VIEWZI.trace.fire({module:"DATAPULL",msg:"PHP TRACE : '" + evtData.trace});
		}

		/* throw a data status message if > 0				*/
		if (evtData.status) {
			if (parseInt(evtData.status.code, 10) > 0) {
				VIEWZI.datastatus.fire(evtData.status);
			}
		}
	};

/*
	Function: VIEWZI.datapull.trackView

		Track the view into the backend for stats.

	Parameters:

		query		- the query term the view is loaded with.

	Returns:

		Null
*/

	VIEWZI.datapull.trackView = function(query)
	{
		var DSID	= VIEWZI.datapull.totalPulls%VIEWZI.datapull.GATEWAYSERVER.length;
		var id		= !VIEWZI.view.viewid ? "0-0" : VIEWZI.view.viewid;

		var dUrl	= VIEWZI.datapull.GATEWAYSERVER[DSID]+VIEWZI.datapull.GATEWAYPATH+VIEWZI.datapull.GATEWAYLOC+VIEWZI.datapull.SERVICENAME;
		var jsurl	= dUrl + "?format=JSON&op=trackview&datak="+VIEWZI.datak;
		jsurl		= jsurl + "&q="+query+"&timer="+VIEWZI.util.getTimer()+"&viewid="+id+"&url="+escape(document.location);

		VIEWZI.util.loadScript(jsurl);

		VIEWZI.view.hasTracked	= true;
		VIEWZI.trace.fire({module:"DATAPULL",msg:"Tracked View : '" + id +"'"});
	};

/*
	Function: VIEWZI.datapull.trackStats

		Track the user agent and user info stats into the backend.

	Parameters:

		uaStats		- object of information about the user agent.

	Returns:

		Null
*/

	VIEWZI.datapull.trackStats = function(uaStats)
	{
		var DSID	= VIEWZI.datapull.totalPulls%VIEWZI.datapull.GATEWAYSERVER.length;
		var id		= !VIEWZI.view.viewid ? "0-0" : VIEWZI.view.viewid;

		var dUrl	= VIEWZI.datapull.GATEWAYSERVER[DSID]+VIEWZI.datapull.GATEWAYPATH+VIEWZI.datapull.GATEWAYLOC+VIEWZI.datapull.SERVICENAME;
		var jsurl	= dUrl + "?format=JSON&op=trackstats&datak="+VIEWZI.datak;
		jsurl		= jsurl + "&bs="+YAHOO.lang.JSON.stringify(VIEWZI.util.uaStats());

		VIEWZI.util.loadScript(jsurl);
	};

/*
	Function: VIEWZI.datapull.getViewmix

		Query the JS viewmix from the backend for the given query term.

	Parameters:

		query		- the query term the user has selected.

	Events:
		sup 		- with these

	Returns:

		Null
*/

	VIEWZI.datapull.getViewmix = function(query)
	{
		var DSID	= 0;
		var dUrl	= VIEWZI.datapull.GATEWAYSERVER[DSID]+VIEWZI.datapull.GATEWAYPATH+VIEWZI.datapull.GATEWAYLOC+"ViewziViewMix.php";

		var jsurl	= dUrl + "?format=JSON&datak="+VIEWZI.datak;
		jsurl		= jsurl + "&q="+escape(query);
		jsurl 		= jsurl + "&id=JSONVIEWMIX&callback=VIEWZI.datapull.onViewmix&mixtype=mini&";
		VIEWZI.util.loadScript(jsurl);
		VIEWZI.trace.fire({module:"DATAPULL",msg:"pulling viewmix " + jsurl});
	};

/*
	Function: VIEWZI.datapull.getViewmix

		Data query catch method for the getViewmix call.

	Parameters:

		evt		- the viewmix data object returned from the server.

	Returns:

		Null
*/

	VIEWZI.datapull.onViewmix = function (evt)
	{
		if (VIEWZI.shell.stage	== "view") {
			VIEWZI.shell.viewmixobj	= evt;
			VIEWZI.shell.createMiniMix(evt);
		}
		if (evt.message) VIEWZI.messaging.createAutomsg(evt.message.text);
	};

	VIEWZI.datapull.init();