// adapted from http://download.dojotoolkit.org/release-1.0.2/dojo-release-1.0.2/dojox/io/proxy/xip.js

/*
	Using this a reference: http://www.w3.org/TR/XMLHttpRequest/

	Does not implement the onreadystate callback since dojo.xhr* does
	not use it.
*/

xhrExternal = function(args){
	//summary: XMLHttpRequest facade object used by dojox.io.proxy.xip.
	
	//description: Do not use this object directly. See the Dojo Book page
	//on XMLHttpRequest IFrame Proxying:
	//http://dojotoolkit.org/book/dojo-book-0-4/part-5-connecting-pieces/i-o/cross-domain-xmlhttprequest-using-iframe-proxy
	this._requestHeaders = {};
	this._allResponseHeaders = null;
	this._responseHeaders = {};
	this._method = null;
	this._uri = null;
	this._bodyData = null;
	this.responseText = null;
	this.responseXML = null;
	this.status = null;
	this.statusText = null;
	this.readyState = 0;
	
	this._ifpServerUrl = args.url;
	this._stateId = null;
}

var xhrQueries = {}; // list of queries for External xhr calls in progress--in the form {callbackId: (query object)}
var idCounter = -1;

function xhrExternalCallback(callbackId, content, httpHeaders){
	var currentQuery = xhrQueries[callbackId]; // get this from a saved global var
//alert(decodeURIComponent(httpHeaders));
	httpHeaders = dojo.queryToObject(decodeURIComponent(httpHeaders));
//	currentQuery.responseText = "{items: [{groups: \"AGUILERA, ANASTASIO\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 948, ModPOP: 0, Free: 0, POP: 0, Loan: 948, Total: 948, Listed: 948, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 79, Tickets: 3, Listable: 948}, {groups: \"AGUILERA, JOSE\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 1092, ModPOP: 0, Free: 0, POP: 0, Loan: 854, Total: 1092, Listed: 1092, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 91, Tickets: 8, Listable: 854}, {groups: \"AGUILERA, JUAN\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 2228, ModPOP: 0, Free: 0, POP: 0, Loan: 1504, Total: 2228, Listed: 2228, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 208, Tickets: 10, Listable: 1504}, {groups: \"AGUILERA, SAMUEL\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 47, ModPOP: 0, Free: 0, POP: 0, Loan: 0, Total: 47, Listed: 47, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 4, Tickets: 2, Listable: 47}, {groups: \"BENNETT BROS\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 652, ModPOP: 0, Free: 0, POP: 0, Loan: 652, Total: 652, Listed: 652, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 58, Tickets: 8, Listable: 652}, {groups: \"BIGGS, RICKY\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 875, ModPOP: 0, Free: 0, POP: 0, Loan: 549, Total: 875, Listed: 875, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 95, Tickets: 6, Listable: 549}, {groups: \"CARTHEL, LANNY\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 735, ModPOP: 0, Free: 0, POP: 0, Loan: 735, Total: 735, Listed: 735, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 78, Tickets: 6, Listable: 735}, {groups: \"CARTHEL, ROYCE\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 830, ModPOP: 0, Free: 0, POP: 0, Loan: 830, Total: 830, Listed: 830, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 87, Tickets: 5, Listable: 830}, {groups: \"CRK FARMS (L.A.ROYAL)\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 274, ModPOP: 0, Free: 0, POP: 0, Loan: 274, Total: 274, Listed: 274, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 26, Tickets: 4, Listable: 274}, {groups: \"DAN & REEDA FARMING PTNRS\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 3586, ModPOP: 0, Free: 0, POP: 0, Loan: 3586, Total: 3586, Listed: 3586, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 294, Tickets: 23, Listable: 3586}, {groups: \"DAVIS FARMS, W & G\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 1279, ModPOP: 0, Free: 0, POP: 0, Loan: 0, Total: 1279, Listed: 1279, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 128, Tickets: 9, Listable: 1279}, {groups: \"DOLLAR, BILL\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 332, ModPOP: 0, Free: 0, POP: 0, Loan: 0, Total: 332, Listed: 332, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 34, Tickets: 7, Listable: 332}, {groups: \"DUSTY ACRES\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 333, ModPOP: 0, Free: 0, POP: 0, Loan: 333, Total: 333, Listed: 333, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 31, Tickets: 1, Listable: 333}, {groups: \"FOSTER, STEVE\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 1304, ModPOP: 0, Free: 0, POP: 0, Loan: 1304, Total: 1304, Listed: 1304, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 113, Tickets: 5, Listable: 1304}, {groups: \"GEORGE, JEFF\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 1310, ModPOP: 0, Free: 0, POP: 0, Loan: 1310, Total: 1310, Listed: 1310, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 118, Tickets: 5, Listable: 1310}, {groups: \"GRIFFIN, FLINT\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 946, ModPOP: 0, Free: 0, POP: 0, Loan: 0, Total: 946, Listed: 946, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 69, Tickets: 9, Listable: 946}, {groups: \"GUERRERO, RAUL\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 722, ModPOP: 0, Free: 0, POP: 0, Loan: 0, Total: 722, Listed: 722, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 74, Tickets: 5, Listable: 722}, {groups: \"HARDBERGER-VAUGHN INV.\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 2254, ModPOP: 0, Free: 0, POP: 0, Loan: 0, Total: 2254, Listed: 2254, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 176, Tickets: 20, Listable: 2254}, {groups: \"HART, SARAH\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 288, ModPOP: 0, Free: 0, POP: 0, Loan: 145, Total: 288, Listed: 288, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 29, Tickets: 2, Listable: 145}, {groups: \"HUGHES, JASON\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 292, ModPOP: 0, Free: 0, POP: 0, Loan: 292, Total: 292, Listed: 292, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 27, Tickets: 3, Listable: 292}, {groups: \"JAMES, RICKY & SUE\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 2067, ModPOP: 0, Free: 0, POP: 0, Loan: 1167, Total: 2067, Listed: 2067, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 198, Tickets: 15, Listable: 1167}, {groups: \"KELM, JERRY\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 1130, ModPOP: 0, Free: 0, POP: 0, Loan: 1130, Total: 1130, Listed: 1130, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 103, Tickets: 9, Listable: 1130}, {groups: \"MARSHALL, BOBBY & SANDY\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 389, ModPOP: 0, Free: 0, POP: 0, Loan: 389, Total: 389, Listed: 389, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 34, Tickets: 2, Listable: 389}, {groups: \"MARTIN, BRAD OR KARA\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 290, ModPOP: 0, Free: 0, POP: 0, Loan: 173, Total: 290, Listed: 290, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 28, Tickets: 3, Listable: 173}, {groups: \"MELTON, WELDON\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 1144, ModPOP: 0, Free: 0, POP: 0, Loan: 772, Total: 1144, Listed: 1144, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 116, Tickets: 7, Listable: 772}, {groups: \"MORPHIS FARMS\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 1790, ModPOP: 0, Free: 0, POP: 0, Loan: 1790, Total: 1790, Listed: 1790, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 146, Tickets: 8, Listable: 1790}, {groups: \"MORPHIS, RAY\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 804, ModPOP: 0, Free: 0, POP: 0, Loan: 804, Total: 804, Listed: 804, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 69, Tickets: 4, Listable: 804}, {groups: \"MULL, MARSHALL\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 99, ModPOP: 0, Free: 0, POP: 0, Loan: 99, Total: 99, Listed: 99, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 12, Tickets: 1, Listable: 99}, {groups: \"MYRICK\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 2593, ModPOP: 0, Free: 0, POP: 0, Loan: 1717, Total: 2593, Listed: 2593, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 224, Tickets: 9, Listable: 1717}, {groups: \"NAVARRO, JOSE LUIS\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 663, ModPOP: 0, Free: 0, POP: 0, Loan: 663, Total: 663, Listed: 663, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 57, Tickets: 2, Listable: 663}, {groups: \"NELSON FARMS, LARRY\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 1446, ModPOP: 0, Free: 0, POP: 0, Loan: 1446, Total: 1446, Listed: 1446, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 115, Tickets: 5, Listable: 1446}, {groups: \"NOEL\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 2453, ModPOP: 0, Free: 0, POP: 0, Loan: 869, Total: 2453, Listed: 2453, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 244, Tickets: 14, Listable: 869}, {groups: \"OLSON, STEVEN & CINDY\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 639, ModPOP: 0, Free: 0, POP: 0, Loan: 0, Total: 639, Listed: 639, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 71, Tickets: 3, Listable: 639}, {groups: \"PAINTER, ALTON\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 434, ModPOP: 0, Free: 0, POP: 0, Loan: 0, Total: 434, Listed: 434, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 42, Tickets: 5, Listable: 434}, {groups: \"PENDERGRASS, GLEN\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 321, ModPOP: 0, Free: 0, POP: 0, Loan: 321, Total: 321, Listed: 321, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 34, Tickets: 1, Listable: 321}, {groups: \"SUTTERFIELD, DON\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 464, ModPOP: 0, Free: 0, POP: 0, Loan: 232, Total: 464, Listed: 464, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 40, Tickets: 3, Listable: 232}, {groups: \"T A E S\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 921, ModPOP: 0, Free: 0, POP: 0, Loan: 684, Total: 921, Listed: 921, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 106, Tickets: 19, Listable: 684}, {groups: \"WALKER, JOHN or TARA\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 813, ModPOP: 0, Free: 0, POP: 0, Loan: 0, Total: 813, Listed: 813, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 82, Tickets: 8, Listable: 813}, {groups: \"WALTER FARMS\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 596, ModPOP: 0, Free: 0, POP: 0, Loan: 0, Total: 596, Listed: 596, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 62, Tickets: 2, Listable: 596}, {groups: \"WALTER, BLAKE\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 941, ModPOP: 0, Free: 0, POP: 0, Loan: 0, Total: 941, Listed: 941, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 91, Tickets: 4, Listable: 941}, {groups: \"WATSON, DAVID\", showingDetail: false, NoGrd: 0, NoWhs: 0, None: 0, RdySale: 0, Sold: 2555, ModPOP: 0, Free: 0, POP: 0, Loan: 810, Total: 2555, Listed: 2555, NeedsUpdate: false, Field: 0, Yard: 0, Ginned: 222, Tickets: 22, Listable: 810}]}"
	currentQuery.responseText = URLDecode(content);
//alert(currentQuery.responseText);
	currentQuery.readyState = 4;
//	currentQuery.status = 200; // 200 = OK

// get these working
//		this.status = httpHeaders.status;
currentQuery.status = URLDecode(httpHeaders.status);
//		this.statusText = httpHeaders.statusText;
currentQuery.statusText = URLDecode(httpHeaders.statusText);
//		this._responseHeaders.Content-Type = httpHeaders.Content-Type;
//		this._responseHeaders[Content-Range] = items=0-24/66;//httpHeaders.Content-Range;
//		this._responseHeaders = dojo.queryToObject(httpHeaders);		


	xhrQueries[callbackId] = ''; //remove this object from the external queries list
}


dojo.extend(xhrExternal, {
	//The open method does not properly reset since Dojo does not reuse XHR objects.
	open: function(/*String*/method, /*String*/uri){
		this._method = method;
		this._uri = uri;//encodeURIComponent(uri);

		this.readyState = 1;
	},
	
	setRequestHeader: function(/*String*/header, /*String*/value){
		this._requestHeaders[header] = value;
	},
	
	send: function(/*String*/stringData){
		
		idCounter++;
		xhrQueries[idCounter] = this;

		this._bodyData = stringData;
		if (!stringData) {stringData = ''};
		
		var httpHeaders = dojo.objectToQuery(this._requestHeaders);

//alert('Method: '+ this._method +' uri: '+ this._uri +' StringData: '+ stringData +' httpHeaders: '+ httpHeaders +' idCounter: '+ idCounter)
		window.external.xhr(this._method, this._uri, stringData, httpHeaders, idCounter);
// enable above line to actually work; use the line below instead for pure javascript debugging, outside of a win32 app
//var dummy = "{identifier: 'part_num',label: 'part_num', items: [{part_num: '4001',min_temp: -946,max_temp: 931,	max_pres: 647,type: 1,thick: 0.25,inner: 0.9375,outer: 13.4375}]}";

//		this.responseText = dummy;
		this.readyState = 1;
	},
	abort: function(){
//		dojox.io.proxy.xip.destroyState(this._stateId);
	},
	
	getAllResponseHeaders: function(){
		return this._allResponseHeaders; //String
	},
	
	getResponseHeader: function(/*String*/header){
		return this._responseHeaders[header]; //String
	},
	
	_setResponseHeaders: function(/*String*/allHeaders){
		if(allHeaders){
			this._allResponseHeaders = allHeaders;
			
			//Make sure ther are now CR characters in the headers.
			allHeaders = allHeaders.replace(/\r/g, "");
			var nvPairs = allHeaders.split("\n");
			for(var i = 0; i < nvPairs.length; i++){
				if(nvPairs[i]){
					var nameValue = nvPairs[i].split(": ");
					this._responseHeaders[nameValue[0]] = nameValue[1];
				}
			}
		}
	}
});

	createXhrExternal = function(args) {
		var urlTest = document.createElement('a');
		urlTest.href = args.url;
		var tempStr = urlTest.href;
		delete(urlTest);

//		if (urlTest.href.search(/http:\/\/localhost\/structures\/basicstatuswithrecapcolumn/i) >= 0) {alert('Yup!')};
		if (tempStr.search(/cgi-bin\/ginpronet.dll/i) >= 0) {
//			alert('going local: ' + tempStr);
			return new xhrExternal(args)
		}
		else {
//			alert('real_xhr: ' + tempStr);
			return new real_xhrObj
		};
	}
//Replace the normal XHR factory with the proxy one.
//dojox.io.proxy.xip._xhrObjOld = dojo._xhrObj;
//dojo._xhrObj = dojox.io.proxy.xip.createFacade;

//if (location.protocol == "file:")
var queryObj = dojo.queryToObject(location.search.substring(1));
if (queryObj.platform == "hosted")
 {
//	alert('yup, file.');
	real_xhrObj = dojo._xhrObj;
	dojo._xhrObj = createXhrExternal;
};  //else location.protocol == "http:"

function URLDecode(psEncodeString) {  //used to replace '+' with ' '
	// Create a regular expression to search all +s in the string
	var lsRegExp = /\+/g;
	// Return the decoded string
	return decodeURIComponent(String(psEncodeString).replace(lsRegExp, " "));
};

