UPICKDAILY.namespace("picks.loader");

UPICKDAILY.picks.loader.ERROR_PICK_SERVER = "Unable to load picks at the moment.";
UPICKDAILY.picks.loader.ERROR_PICKS_INVALID = "Invalid picks request";
UPICKDAILY.picks.loader.IMX_PICK_URL = "/upickdaily/data/picks.jhtml?jsonCallback=?";
UPICKDAILY.picks.loader.PickData = {};

UPICKDAILY.picks.loader.queuePicks = function(itemIds) {
	if(UPICKDAILY.utils.isEmptyString(itemIds)) return;

	var queued = itemIds.split(",");
	for(var i = 0; i < queued.length; i++) {
		UPICKDAILY.picks.loader.addPickData(
			{
				itemId:queued[i],
				picks:-1,
				isPicked:false,
				complete:-1
			} );	
	}
	UPICKDAILY.utils.doLog("queuePicks: "+itemIds);
}

UPICKDAILY.picks.loader.addPickData = function(item) {
	if(!item) return;

	if(UPICKDAILY.picks.loader.PickData == null) {
		UPICKDAILY.picks.loader.PickData = {};
	}

	UPICKDAILY.picks.loader.PickData[item.itemId] = item;
	//UPICKDAILY.utils.doLog("addPickData: "+UPICKDAILY.picks.loader.PickData[item.itemId].itemId);
}

UPICKDAILY.picks.loader.loadPicks = function(itemIds, pickerId) {
	UPICKDAILY.utils.doLog("loadPicks: "+ itemIds);
	var data = UPICKDAILY.picks.loader.getPicksObj(itemIds, pickerId);

	if(!UPICKDAILY.picks.loader.isValidRequest(data)) {
		alert(UPICKDAILY.picks.loader.ERROR_PICKS_INVALID);
		return false;
	}

	try { // Catch browser security exceptions.
		$.ajax({
			type: "GET",
			url: UPICKDAILY.picks.loader.IMX_PICK_URL,
			data: data,
			dataType:"jsonp",
			success:UPICKDAILY.picks.loader.doLoaded,
			error:UPICKDAILY.picks.loader.doLoadedDataError
		});
	} catch(error) {
		UPICKDAILY.picks.loader.doLoadError(error);
	}
	return false;
}

UPICKDAILY.picks.loader.reLoadPicks = function() {
	//doLog("reloadPicks: "+UPICKDAILY.picks.loader.PickData);
	if(!UPICKDAILY.picks.loader.PickData) return;

	var picks = new Array();
	for(var pick in UPICKDAILY.picks.loader.PickData) {
		picks.push(UPICKDAILY.picks.loader.PickData[pick].itemId);
	}

	if(picks.length <= 0) return;

	doLog("reloadPicks: "+picks.toString());
	UPICKDAILY.picks.loader.loadPicks(picks.toString());
}

UPICKDAILY.picks.loader.doLoadedDataError = function(request, error, exception) {
	UPICKDAILY.utils.doLog("doLoadedDataError: "+error);
}

UPICKDAILY.picks.loader.doLoadError = function(error){
	UPICKDAILY.utils.doLog("doLoadError: "+error)
}

UPICKDAILY.picks.loader.isValidRequest = function(data) {
	if(data == null || UPICKDAILY.utils.isEmptyString(data.itemIds)) return false;

	return true;
}

UPICKDAILY.picks.loader.getPicksObj = function(pickIds, pickerId) {
	if(!pickIds) return null;

	if(pickerId) {
		return { itemIds:pickIds, pickerId:pickerId };
	} else {
		return { itemIds:pickIds };
	}
}

UPICKDAILY.picks.loader.doLoaded = function(json) {
	if(json == null) {
		handlePickErrors(UPICKDAILY.picks.loader.ERROR_PICK_SERVER);
	} else if(json.code == "ok") {
		UPICKDAILY.picks.loader.doUpdatePage(json.picks);
	} else if(json.code == "error") {
		var errors = "";
		for(var key in json.errors) {
			errors += json.errors[key]+"\n";
		}

		UPICKDAILY.utils.doLog("doLoaded: errors: "+errors);
	}
}

UPICKDAILY.picks.loader.doUpdatePage = function(picksData) {
	if(!picksData) {
		UPICKDAILY.utils.doLog("doUpdatePage: no data");
		return;
	}

	for(var i = 0; i < picksData.length; i++) {
		//UPICKDAILY.utils.doLog("doUpdatePage: complete: "+picksData[i].itemId);
		picksData[i].complete = 1;
		UPICKDAILY.picks.loader.addPickData(picksData[i]);
		doPickUpdate(true, picksData[i].itemId, picksData[i].picks, picksData[i].pickerId, picksData[i].isPicked);
	}
}

UPICKDAILY.picks.loader.getPickData = function(itemId, pickerId) {
	//UPICKDAILY.utils.doLog("getPickData: item: "+itemId);

	if(UPICKDAILY.utils.isEmptyString(itemId)) return null;

	if(UPICKDAILY.picks.loader.PickData == null) {
		//UPICKDAILY.utils.doLog("getPickData: create data: "+itemId);
		UPICKDAILY.picks.loader.PickData = {};
	}

	if(UPICKDAILY.picks.loader.PickData[itemId] == null) {
		//UPICKDAILY.utils.doLog("getPickData: create item: "+itemId);
		UPICKDAILY.picks.loader.PickData[itemId] = {complete:-1};
		UPICKDAILY.picks.loader.loadPicks(itemId, pickerId);
		return null;
	} else if(UPICKDAILY.picks.loader.PickData[itemId].complete == -1) {
		UPICKDAILY.utils.doLog("getPickData: still loading: "+itemId+" | "+UPICKDAILY.picks.loader.PickData[itemId].complete);
		return null;
	} else if(UPICKDAILY.picks.loader.PickData[itemId].complete == 1 && !UPICKDAILY.picks.loader.PickData[itemId].isPicked) {
		UPICKDAILY.utils.doLog("getPickData: not picked: "+itemId+" | "+UPICKDAILY.picks.loader.PickData[itemId].complete);
		UPICKDAILY.picks.loader.PickData[itemId].complete = -1;
		UPICKDAILY.picks.loader.loadPicks(itemId, pickerId);
		return null;
	}

	UPICKDAILY.utils.doLog("getPickData: "+
		  UPICKDAILY.picks.loader.PickData[itemId].itemId+" | "+
		  UPICKDAILY.picks.loader.PickData[itemId].picks+" | "+
		  UPICKDAILY.picks.loader.PickData[itemId].rank+" | "+
		  UPICKDAILY.picks.loader.PickData[itemId].isPicked);

	return UPICKDAILY.picks.loader.PickData[itemId];
}

//$(document).ready(UPICKDAILY.picks.loader.initPicks);
