UPICKDAILY.namespace("tags");

UPICKDAILY.tags.IMG_CLOSE = "/upickdaily/images/btn-close-blue.png";
UPICKDAILY.tags.IMG_CLOSE_HEIGHT = 14;
UPICKDAILY.tags.IMG_CLOSE_WIDTH = 14;
UPICKDAILY.tags.currentTags = [];
UPICKDAILY.tags.ERROR_SERVER_LOGIN_KEY = "membername";
UPICKDAILY.tags.ERROR_SERVER_LOGIN = "You must be logged in to enter.";


UPICKDAILY.tags.addTag = function(tagList, tag) {
	doLog("add tag")
	$("#tagsInput").attr("value","")
	if(UPICKDAILY.tags.currentTags == null) {
		UPICKDAILY.tags.currentTags = new Array();
	}

	for(var i = 0; i < UPICKDAILY.tags.currentTags.length; i++) {
		if(UPICKDAILY.tags.currentTags[i] == tag) {
			return;
		}
	}
	UPICKDAILY.tags.currentTags.push(tag);
	UPICKDAILY.tags.addTagUi(tagList, tag);
}

UPICKDAILY.tags.addTagUi = function(tagList, tag) {
	if(isEmptyString(tag)) return;

	if($("#tag_none").length) {
		$("#tag_none").remove();
	}

	if($("#tag_"+tag).length) {
		doLog("addTag: exists");
		$("#tag_"+tag).show();
		return;
	}

	var list = $("#"+tagList);
	if(!list) return;
	var item = document.createElement("li");
	var span = document.createElement("span");
	item.name = tag;
	item.id = "tag_"+tag;

	var close = document.createElement("img");
	close.src = UPICKDAILY.tags.IMG_CLOSE;
	close.height = UPICKDAILY.tags.IMG_CLOSE_HEIGHT;
	close.width = UPICKDAILY.tags.IMG_CLOSE_WIDTH;

	span.appendChild(document.createTextNode(tag));

	item.appendChild(span);
	item.appendChild(close);
	$("#"+tagList).append(item)

	$("#tag_"+tag).click( function() {
		UPICKDAILY.tags.removeTag(this.id, this.name);
	} );
}

UPICKDAILY.tags.removeTag = function(id, tag) {
	$("#"+id).hide();

	for(var i = 0; i < UPICKDAILY.tags.currentTags.length; i++) {
		if(UPICKDAILY.tags.currentTags[i] == tag) {
			UPICKDAILY.tags.currentTags.splice(i, 1);
		}
	}
}

UPICKDAILY.tags.resetTags = function() {
	doLog("resetTags: "+UPICKDAILY.tags.currentTags);
	if(UPICKDAILY.tags.currentTags == null) return;

	for(var i = 0; i < UPICKDAILY.tags.currentTags.length; i++) {
		$("#tag_"+UPICKDAILY.tags.currentTags[i]).hide();
	}

	UPICKDAILY.tags.currentTags = [];
	doLog("resetTags: "+UPICKDAILY.tags.currentTags);
}

UPICKDAILY.tags.URL_SUBMIT = SITE_URL + "/xml/gdc_json.jhtml?jsonCallback=?"; //"json_res.html";
UPICKDAILY.tags.ERROR_INVALID = "Please check your tags before submission";
UPICKDAILY.tags.ERROR_SERVER = "There was an error submitting your tags. Please try again.";
UPICKDAILY.tags.ERROR_SUBMISSION = "There were errors in your tag submission.";
UPICKDAILY.tags.MSG_SUBMISSION_SUCCESS = "Thank you, your tags has been submitted.";
UPICKDAILY.tags.ERROR_SERVER_LOGIN = "You must be logged in to submit.";
UPICKDAILY.tags.MSG_ERROR = "Error";
UPICKDAILY.tags.MSG_SUCCESS = "Success";

UPICKDAILY.tags.doSubmit = function(form) {
	doLog("tags.doSubmit: "+$("#tagsSubmit #tags").attr("value")+" | "+$("#tagsSubmit #itemId").attr("value"));
	UPICKDAILY.utils.loader.show();

	var data = UPICKDAILY.tags.getTags();
	if(!UPICKDAILY.tags.isValid(data)) {
		UPICKDAILY.utils.loader.hide();
		UPICKDAILY.utils.message.show(UPICKDAILY.tags.MSG_ERROR, UPICKDAILY.tags.ERROR_INVALID);
		return false;
	}

	data = {cid:data.cid, xml:getGdcXml(data.cid, data)};
	try { // Catch browser security exceptions.
		$.ajax({
			type:"POST",
			url:UPICKDAILY.tags.URL_SUBMIT,
			data:data,
			dataType:"jsonp",
			success:UPICKDAILY.tags.handleSubmit,
			error:UPICKDAILY.tags.handleSubmitDataErrors
		});
	} catch(error) {
		UPICKDAILY.tags.handleSubmitErrors(error);
	}

	return false;
}

UPICKDAILY.tags.isValid = function(tags) {
	if(tags == null) return false;
	if(isEmptyString(tags.tags) || isEmptyString(tags.itemid) || isEmptyString(tags.title)) return false;

	return true;
}

UPICKDAILY.tags.getTags = function() {
	doLog("getTags: "+UPICKDAILY.tags.currentTags.join("~"));
	return {
		cid:$("#tagsSubmit #cid").attr("value"),
		itemid:$("#tagsSubmit #itemId").attr("value"),
		title:$("#tagsSubmit #title").attr("value"),
		//tags:$("#tagsSubmit #tags").attr("value"),
		tags:UPICKDAILY.tags.currentTags.join("~"),
		type:$("#tagsSubmit #type").attr("value"),
		workflow_stages:$("#tagsSubmit #workflow_stages").attr("value"),
		workflow_name:$("#tagsSubmit #workflow_name").attr("value"),
		status_url:$("#tagsSubmit #status_url").attr("value"),
		suspend_url:$("#tagsSubmit #suspend_url").attr("value"),
		resume_url:$("#tagsSubmit #resume_url").attr("value"),
		publish_url:$("#tagsSubmit #publish_url").attr("value"),
		membername:$("#tagsSubmit #membername").attr("value")
	}
}

UPICKDAILY.tags.resetForm = function() {
	$("#tagsSubmit #tags").attr("value", "");
	UPICKDAILY.tags.resetTags();
}

UPICKDAILY.tags.handleSubmit = function(json) {
	if(json == null) {
		UPICKDAILY.tags.handleSubmitErrors(UPICKDAILY.tags.ERROR_SUBMISSION);
	} else if(json.code == "ok") {
		UPICKDAILY.utils.loader.hide();
		UPICKDAILY.utils.message.show(UPICKDAILY.tags.MSG_SUCCESS, UPICKDAILY.tags.MSG_SUBMISSION_SUCCESS);
		UPICKDAILY.tags.resetForm();
	} else if(json.code == "error") {
		UPICKDAILY.utils.loader.hide();
		var errors = "";
		var isLoggedOut = false;

		for(var key in json.errors) {
			//doLog"handleSubmitStory: error: "+key+": "+json.errors[key]);
			errors += json.errors[key]+"\n";

			if(isLoggedOut) continue;
			isLoggedOut = key == UPICKDAILY.tags.ERROR_SERVER_LOGIN_KEY || UPICKDAILY.tags.ERROR_SERVER_LOGIN == json.errors[key];
		}

		if(isLoggedOut) {
			doLog(errors);
			UPICKDAILY.login.doLoginPrompt();
		} else {
			UPICKDAILY.utils.message.show(UPICKDAILY.tags.MSG_ERROR, errors);
		}
	}

	toggleButton('submit', true);
}

UPICKDAILY.tags.handleSubmitDataErrors = function(request, error, exception) {
	doLog("handleSubmitDataErrors: "+error);
}

UPICKDAILY.tags.handleSubmitErrors = function(error){
	UPICKDAILY.utils.loader.hide();
	UPICKDAILY.utils.message.show(UPICKDAILY.tags.MSG_ERROR, UPICKDAILY.tags.ERROR_SUBMISSION);
	doLog("handleSubmitErrors: "+error)
}