var ERROR_PICK_INVALID = "Unable to pick at the moment. Please try again.";
var ERROR_PICK_SERVER = "Unable to pick at the moment. Please try again.";
var ERROR_PICK_SUBMISSION = "Unable to pick at the moment. Please try again.";
var MSG_PICK_SUBMISSION_SUCCESS = "Your pick has been sent!";

var ERROR_SERVER_LOGIN = "notLoggedIn";
var ERROR_ALREADY_PICKED = "alreadyPicked";
var IMX_PICK_URL = "/upickdaily/data/upick.jhtml?jsonCallback=?";

function doPick(id, pickerId) {
	//alert(id+"   "+ pickerId)
	var data = getPick(id, pickerId);
	if(!isValidPick(data)) {
		doLog(ERROR_PICK_INVALID);
		return false;
	}
	try { // Catch browser security exceptions.
		$.ajax({
			type: "GET",
			url: IMX_PICK_URL,
			data: data,
			dataType:"jsonp",
			success:handlePick,
			error:handlePickDataError
		});
	} catch(error) {
		doLog("doPick: 3: error: "+error);
		handlePickErrors(error);
	}
	return false;
}

function isValidPick(data) {
	return !isEmptyString(data.itemId);
}

function getPick(itemId, pickerId) {
	pickerId = pickerId == null ? "" : pickerId;

	return {
		itemId:itemId,
		pickerId:pickerId,
		tagParams:"tag_action=viewed",
		itemUrl:"mgid:cms:item:nick.com:"+itemId,
		rand: Math.random()
	};
}

function handlePick(json) {
	if(json == null) {
		handlePickErrors(ERROR_PICK_SUBMISSION);
	} else if(json.code == "ok") {
		doPickUpdate(true, json.itemId, json.picks, json.pickerId, true);
		//alert(MSG_PICK_SUBMISSION_SUCCESS);
	} else if(json.code == "error") {
		var errors = "";
		var isLoggedOut = false;
		var alreadyPicked = false;

		for(var key in json.errors) {
			//doLog"handleSubmitStory: error: "+key+": "+json.errors[key]);
			isLoggedOut = ERROR_SERVER_LOGIN == key;
			alreadyPicked = ERROR_ALREADY_PICKED == key;
			errors += json.errors[key]+"\n";
		}

		if(isLoggedOut) {
			doPickUpdate(false, json.itemId, json.picks, json.pickerId, false);
			UPICKDAILY.login.doLoginPrompt();
		} else if(alreadyPicked) {
			doPickUpdate(true, json.itemId, json.picks, json.pickerId, true);
			UPICKDAILY.utils.message.show("Oops", errors);
		} else {
			doPickUpdate(false, json.itemId, json.picks, json.pickerId, false);
			UPICKDAILY.utils.message.show("Oops", errors);
		}
	}
}

function doPickUpdate(success, itemId, picks, pickerId, isPicked) {
	//doLog("doPickUpdate: pickerId: "+pickerId);
	pickerId = isEmptyString(pickerId) ? "upicker_"+itemId : pickerId;

	var pick = $("#"+pickerId);
	var pickerClass = $("#"+pickerId).attr("class");

	//doLog("doPickUpdate: "+success+" | "+itemId+" | "+picks+" | "+isPicked+" | "+pickerId+" | "+pick+" | "+pickerClass);
	if(!pick) return;

	try {
		if(pickerClass == "upickwidget" || pickerClass == "upickwidgetWide") {
			updateHtmlWidget(pickerId, picks, isPicked, success);			
		} else {
			updateGridWidget(pick, picks, isPicked, success);
		}
	} catch (error) {
		doLog("doPickUpdate: Exception: "+error);
	} finally {
		//doLog("doPickUpdate: finally: "+pick);
	}
}

function updateGridWidget(element, picks, isPicked, success) {
	doLog("updateGridWidget: grid module found: "+picks+" | "+isPicked);
	//element.response(success, picks, isPicked);
	thisMovie("updTileExplorer").response(success, picks, isPicked);
}

function thisMovie(movieName) {
	if(navigator.appName.indexOf("Microsoft") != -1) {
		return window[movieName];
	} else {
		if(document[movieName].length != undefined) {
			return document[movieName][1];
		}
		return document[movieName];
	}
}

function updateHtmlWidget(pickerId, picks, isPicked, success) {
	//doLog("updateHtmlWidget: html module found: "+picks+" | "+isPicked+" | "+success);
	if(!success) return;

	if(isPicked) {
		$("#"+pickerId+" >div.unpicked").hide()
		$("#"+pickerId +" >div.picked").show()
		$("#"+pickerId+">div.picked>label>span").html(picks);
	} else {
		$("#"+pickerId +" >div.picked").hide()
		$("#"+pickerId+" >div.unpicked").show()
		$("#"+pickerId+">div.unpicked>div>label>span").html(picks);
	}

	//doLog("updateHtmlWidget: widget 1: "+pickerId+" | "+$("#"+pickerId+">div.unpicked>div>label>span").html()+" | "+picks);
	//doLog("updateHtmlWidget: widget 1: "+pickerId+" | "+$("#"+pickerId+">div.picked>label>span").html()+" | "+picks);
	//doLog("updateHtmlWidget: widget 2: "+pickerId+" | "+$("#"+pickerId+">div.unpicked>div>label>span").html()+" | "+picks);
	//doLog("updateHtmlWidget: widget 2: "+pickerId+" | "+$("#"+pickerId+">div.picked>label>span").html()+" | "+picks);
}

function onRolloverWidget(pickerId){
	$("#"+pickerId+" .pickBtn img").attr("src", "/upickdaily/images/btn-upick-over.png");
}

function onRolloutWidget(pickerId){
	$("#"+pickerId+" .pickBtn img").attr("src", "/upickdaily/images/btn-upick-off.png");
}

function handlePickDataError(request, error, exception) {
	doLog("handlePickDataError: "+error);
}

function handlePickErrors(error){
	doLog("handlePickErrors: "+error)
}



