var ajaxURLBase="modules/Blocker/ajax/";
var userName = "";

dojo.addOnLoad(loadLoginPage);

function logOut() {
	var deferred = xhrCall("userLogout.php", "", "", null);
	deferred.addCallback(function() { loadLoginPage(null); } );
}

function loadLoginPage (errorMsg) {
	var deferred = loadTemplate("blocker_login", "blockerDiv");
	if (errorMsg == null) { errorMsg = ""; }
	deferred.addCallback(function() { 
		var node = dojo.byId("blockerLoginButton");
		dojo.connect(node, "onclick", loginUser);
		dojo.byId("blockerLoginErrorDiv").innerHTML = errorMsg;
		var node = dojo.byId("blockerPassword");
		dojo.connect(node, "onchange", loginUser);
	});
}

// This function loads an HTML template into a DIV
function loadTemplate(template, div) {
	var data= "templateName="+template;
	var loadFunction = function(data) { dojo.byId(div).innerHTML = data; }
	return(xhrCall("loadTemplate.php", data, "", loadFunction));
}

function xhrCall(script, data, retDataType, loadFunction) {
	var xhrArgs = {
		url: ajaxURLBase+script,
		postData: data,
		handleAs: retDataType,
		load: loadFunction
	}
	return(dojo.xhrPost(xhrArgs));
}

function loginUser() {
	userName = dojo.byId("blockerUsername").value;	
	var loadFunction = function(data) {
		if (data.authResult == "TRUE") {
			var deferred = loadTemplate("blocker_prefs","blockerDiv");
			deferred.addCallback(function() {
				var bdata = "json="+dojo.toJson({userName:userName});
				var deferred = xhrCall(
					"getBlockerData.php",
					bdata,
					"json",
					populateBlockerUI
				);
			});
		} else {
			loadLoginPage(data.authResult);
		}
	}
	var data = "json="+dojo.formToJson("blockerLoginForm");
	var deferred = xhrCall("userLogin.php", data, "json", loadFunction);
	dojo.byId("blockerLoginErrorDiv").innerHTML = "Logging In...";
}

// This function populates the Blocker UI with existing Blocker data for the customer
// or with defaults.  The data is in JSON format.
function populateBlockerUI(blockerPrefs) {
	console.log(dojo.byId);
	// First, default a few things.
	dojo.byId("userName").innerHTML = "<B>"+userName+"</B>";
	dojo.byId("blockerEnableCB").checked = false;
	dojo.byId("requiredScore").value = 5;
	dojo.byId("rewriteSubject").checked = false;
	dojo.byId("subjectTag").value = "*** JUNK ***";
	dojo.byId("whitelist_from").value = "";
	dojo.byId("blacklist_from").value = "";
	var btn = document.getElementsByName("destinationFolder");
	for (var i=0; i < btn.length; i++) {
		if (btn[i].value == "all Folder Inbox") { btn[i].checked = true; }
	}
	btn = document.getElementsByName("reportSafe");
	for (var i=0; i < btn.length; i++) {
		if (btn[i].value == "1") { btn[i].checked = true; }
	}

	// Now populate the form with data from the DB
	for (index in blockerPrefs) {
		switch(index) {
			case "add_header":
				dojo.byId("blockerEnableCB").checked = true;
				btn = document.getElementsByName("destinationFolder");
				for (var i=0; i < btn.length; i++) {
					if (btn[i].value == blockerPrefs[index]) { btn[i].checked = true; }
				}
				break;
			case "rewrite_header Subject":
				dojo.byId("rewriteSubject").checked = true;
				dojo.byId("subjectTag").value = blockerPrefs[index]; 
				break;
			case "required_score":
				dojo.byId("requiredScore").value = blockerPrefs[index];
				break;
			case "report_safe":
				btn = document.getElementsByName("reportSafe");
				for (var i=0; i < btn.length; i++) {
					if (btn[i].value == blockerPrefs[index]) { btn[i].checked = true; }
				}
				break;
			case "blacklist_from":
				dojo.byId("blacklist_from").value = blockerPrefs[index].toString();
				break;
			case "whitelist_from":
				dojo.byId("whitelist_from").value = blockerPrefs[index].toString();
				break;
			default:
				alert("Unknown index: "+index);
				break;
		}
	}

	// Attach a few events to elements in the UI.
	dojo.connect(dojo.byId("blockerEnableCB"), "onclick", saveBlockerBase);
	dojo.connect(dojo.byId("requiredScore"), "onchange", saveBlockerBase);
	dojo.connect(dojo.byId("rewriteSubject"), "onclick", changeSubject);
	dojo.connect(dojo.byId("subjectTag"), "onchange", changeSubject);
	dojo.connect(dojo.byId("createWhiteList"), "onclick", getAbsEntries);
}

// This function reads the blocker enable checkbox and stores
// the value in the database.
function saveBlockerBase () {
	var node = dojo.byId("blockerEnableCB");
	var state = "enabled";
	if (node.checked == false) {
		state = "disabled";
	}
	var spamFolder = "all Folder INBOX"
	var btn = document.getElementsByName("destinationFolder");
	for (var i=0; i < btn.length; i++) {
		if (btn[i].checked == true) { spamFolder = btn[i].value; }
	}
	var requiredScore = dojo.byId("requiredScore").value;
	var reportSafe = 1;
	btn = document.getElementsByName("reportSafe");
	for (i=0; i < btn.length; i++) {
		if (btn[i].checked == true) { reportSafe = btn[i].value; }
	}
	var data = "json="+dojo.toJson({
		state:state,
		userName:userName,
		spamFolder:spamFolder,
		requiredScore:requiredScore,
		reportSafe:reportSafe,
		rewriteSubject:dojo.byId("rewriteSubject").checked,
		subjectTag:dojo.byId("subjectTag").value
	});
	var deferred = xhrCall("setBlockerState.php", data, "json", null);
}

function changeSpamFolder(radioObj) {
	saveBlockerBase();
}

function changeSubject () {
	saveBlockerBase();
}

function changeReportSafe(radioObj) {
	saveBlockerBase();
}

function getAbsEntries() {
	var wlObj = dojo.byId("whitelist_from");
	var data = "json="+dojo.toJson({
		userName:userName
	});
	var loadFunction = function(data) {
		wlObj.value += ","+data.toString();
		updateXList(dojo.byId("whitelist_from"));
	}
	var deferred = xhrCall("getAbsEntries.php", data, "json", loadFunction);
	deferred.addCallback(function() { refreshXList(wlObj); } );
}

function refreshXList(listObj) {
	var data= "json="+dojo.toJson({
		userName:userName,
		xListName:listObj.id
	});
	var loadFunction = function(data) {
		listObj.value = data.toString();
	}
	xhrCall("getXList.php", data, "json", loadFunction);
}

// This function updates the black/white lists.
function updateXList(listObj) {
	var data = "json="+dojo.toJson({
		userName:userName,
		xListName:listObj.id,
		listEntries:listObj.value.split(",")
	});
	var loadFunction = function(data) { }
	var deferred = xhrCall("saveXList.php", data, "json", xlistError);
}

function xlistError(data) {
	if (data != "false") {
		var errStr = "The following addresses in the "+data['xListName']+" contain errors: ";
		for (var i=0; i < data['erroredEmailAddrs'].length; i++) {
			errStr += data['erroredEmailAddrs'][i]+" ";
		}
		errStr += "\nPlease correct the addresses or your blacklist may not work.";
		alert(errStr);
	}
}


