
/*
FILE CONCAT ADD FILE
PATH: /ft/resources/client/modules/internals/AddEditUser.js
*/

var AddEditUser = function() {
}


/* CONSTANTS*/
AddEditUser.prototype.BUFFER_CONTENT_TYPE = 'text/javascript';
AddEditUser.prototype.BUFFER_URL =          '/ft/internals/resources/buffer/AddEditUser.asp';

AddEditUser.prototype.ROLE_ADMIN =  'admin';
AddEditUser.prototype.ROLE_EDITOR = 'editor';


AddEditUser.prototype.init = function() {
	this.userAccountForm = Element.parseSelector('FORM.userAccountForm', 'wsod', 'first');

	this.firstNameContainer =    Element.parseSelector('.firstNameContainer', this.userAccountForm, 'first');
	this.lastNameContainer =     Element.parseSelector('.lastNameContainer', this.userAccountForm, 'first');
	this.userNameContainer =     Element.parseSelector('.userNameContainer', this.userAccountForm, 'first');
	this.userPasswordContainer = Element.parseSelector('.userPasswordContainer', this.userAccountForm, 'first');

	this.firstName =    Element.get('firstName', this.userAccountForm);
	this.lastName =     Element.get('lastName', this.userAccountForm);
	this.userName =     Element.get('userName', this.userAccountForm);
	this.userPassword = Element.get('userPassword', this.userAccountForm);

	var userRoleAndPermissionForm = Element.parseSelector('FORM.userRoleAndPermissionForm', 'wsod', 'first');

	this.roleContainers = Element.parseSelector('FIELDSET.roles', userRoleAndPermissionForm);

	this.roleType = Element.parseSelector('input[name="roleType"]', userRoleAndPermissionForm);

	this.toolPermissionsContainer = Element.parseSelector('DIV.toolPermissions', userRoleAndPermissionForm, 'first');

	this.permissionLexicon =      Element.get('permissionLexicon', this.toolPermissionsContainer);
	this.permissionChartBuilder = Element.get('permissionChartBuilder', this.toolPermissionsContainer);


	// Attach events
	Events.add(this.roleType, 'click', this.switchPermissionFormView, this);
	Events.add(Element.parseSelector('DIV.addEditUserButton', 'wsod', 'first'), 'click', this.submitDetails, this);
}


AddEditUser.prototype.switchPermissionFormView = function(ev, el) {
	Element.removeClass(this.roleContainers, 'selected');

	if (this.ROLE_ADMIN == el.value) {
		Element.addClass(this.permissionLexicon, 'hidden');
		Element.addClass(this.permissionChartBuilder, 'hidden');
	}
	else {
		Element.removeClass(this.permissionLexicon, 'hidden');
		Element.removeClass(this.permissionChartBuilder, 'hidden');
	}

	Element.addClass(Element.getParent(el, 'FIELDSET'), 'selected');
}


AddEditUser.prototype.validateForm = function(ev, el) {
	var errorDetails = [ 'Correct the following errors:\n\n' ];
	var formIsValid = true;

	this.firstName.value =    trim(this.firstName.value);
	this.lastName.value =     trim(this.lastName.value);
	this.userName.value =     trim(this.userName.value);
	this.userPassword.value = trim(this.userPassword.value);

	if (!this.firstName.value.length) {
		formIsValid = false;
		errorDetails.push(' - First Name is missing\n');

		Element.addClass(this.firstNameContainer, 'error');
	}
	else {
		Element.removeClass(this.firstNameContainer, 'error');
	}

	if (!this.lastName.value.length) {
		formIsValid = false;
		errorDetails.push(' - Last Name is missing\n');

		Element.addClass(this.lastNameContainer, 'error');
	}
	else {
		Element.removeClass(this.lastNameContainer, 'error');
	}

	if (!this.userName.value.length) {
		formIsValid = false;
		errorDetails.push(' - User Name is missing\n');

		Element.addClass(this.userNameContainer, 'error');
	}
	else {
		if (Common.validateEmail(this.userName.value)) {
			Element.removeClass(this.userNameContainer, 'error');
		}
		else {
			formIsValid = false;
			errorDetails.push(' - User Name must be an email address\n');

			Element.addClass(this.userNameContainer, 'error');
		}
	}

	if (!this.userPassword.value.length) {
		formIsValid = false;
		errorDetails.push(' - Password is missing\n');

		Element.addClass(this.userPasswordContainer, 'error');
	}
	else {
		Element.removeClass(this.userPasswordContainer, 'error');
	}

	if (!formIsValid) {
		alert(errorDetails.join(''));
	}

	return formIsValid;
}


AddEditUser.prototype.submitDetails = function(ev, el) {
	if (this.validateForm()) {
		var currentRole;
		var selectedRole;
		var permissionLexicon = 0;
		var permissionChartBuilder = 0;

		for (var i = 0; i < this.roleType.length; i++) {
			currentRole = this.roleType[i];

			if (currentRole.checked) {
				selectedRole = currentRole.value;

				break;
			}
		}

		if (this.ROLE_EDITOR == selectedRole) {
			permissionLexicon =      (this.permissionLexicon.checked) ? 1 : 0;
			permissionChartBuilder = (this.permissionChartBuilder.checked) ? 1 : 0;
		}

		var data = {
			 'firstName':              this.firstName.value
			,'lastName':               this.lastName.value
			,'userName':               this.userName.value
			,'userPassword':           this.userPassword.value
			,'role':                   selectedRole
			,'permissionLexicon':      permissionLexicon
			,'permissionChartBuilder': permissionChartBuilder
		};
		// console.log('data for .submitDetails()', data);

		var serializedData = Common.getSerializer().serialize(data);

		var contentBuffer = Common.getContentBuffer();
			contentBuffer.abortRequests();
			contentBuffer.load(
				{
					 contentType: this.BUFFER_CONTENT_TYPE
					,context:     this
					,data:        { serializedData:serializedData }
					,onload:      this.handleResults
					,onerror:     this.handleError
					,preventEval: true
					,url:         this.BUFFER_URL
				}
			);
	}
}


AddEditUser.prototype.handleResults = function(cb) {
	var deserializedResults = Common.getSerializer().deserialize(cb.getResult());
	// console.log(deserializedResults);

	var resultsContainer = Element.parseSelector('DIV.resultsContainer', 'wsod', 'first');
	var resultsMessage = '';

	if (deserializedResults.status && (1 == deserializedResults.status)) {		
		resultsMessage = 'User details have been updated.';
	}
	else {
		resultsMessage = 'This feature is not currently available.';
	}

	Element.setHTML(resultsContainer, resultsMessage);
}


AddEditUser.prototype.handleError = function(cb) {
	var deserializedResults = Common.getSerializer().deserialize(cb.getResult());
	// console.log(deserializedResults);
}

/*
FILE CONCAT ADD FILE
PATH: /ft/resources/client/modules/glossary/TermsList.js
*/

var TermsList_class = function(){
}

TermsList_class.prototype.HREF_LOCATION = 'admin_termsTable.asp';
TermsList_class.prototype.KEY_CODE_ENTER = 13;

TermsList_class.prototype.init = function() {
	this.searchForm = Element.parseSelector('DIV.searchForm', Element.get('adminContainer'), 'first');
	var searchFormSubmit = Element.parseSelector('DIV.searchFormSubmitButton', this.searchForm, 'first');
	var currentSearch = Element.parseSelector('INPUT.searchFormInputBox', this.searchForm, 'first');
	
	var pagingLinks = Element.parseSelector(".pagingNavigation a");
	var loc			= location.href;
	var term 		= loc.match(/(termStatus\=\w+)\&?/);
	var letter 		= loc.match(/(letter\=\w+)\&?/);

	if (loc) {
		var hasQuerystring = loc.match(/\?/);
		var delimiter = (hasQuerystring) ? '&' : '?';
		var ref;

		term = (term) ? term[1] : false;
		letter = (letter) ? letter[1] : false;

		for (i = 0; i < pagingLinks.length; i++) {
			ref  = pagingLinks[i].href;

			if (term) {
				ref += delimiter + term;
			}
			else if (letter){
				ref += delimiter +letter;
			}
			else if (currentSearch && currentSearch.value) {
				ref += delimiter + 'searchField=' + currentSearch.value;
			}

			pagingLinks[i].href = ref;
		}
	}

	var termsListTable = Element.get('termsListTable');

	var deleteLinks = Element.parseSelector("div.deleteLinks", termsListTable);
	var updateLinks = Element.parseSelector("div.updateLinks", termsListTable);

	if (searchFormSubmit) {
		Events.add(searchFormSubmit, "click", this.searchTerms, this);
	}

	Events.add(currentSearch, "keyup", this.searchTerms, this);
	Events.add(deleteLinks, "click", this.deleteTerm, this);
	Events.add(updateLinks, "click", this.updateTerm, this);
	
	var aTermSearchInputs = Element.parseSelector("input.searchField", "wsod"),
		ref = this;
		
	for (var i = 0, oTermSearch; i < aTermSearchInputs.length; i++) {
		oTermSearch = new TermSearch_class();
		oTermSearch.submitForm = function() {
			ref.searchTerms();
		};
		oTermSearch.init(aTermSearchInputs[i]);
	}
}


TermsList_class.prototype.searchTerms = function(e){
	if (e) { e.cancel(); }
	
	if (!e || !e.nativeEvent.keyCode || this.KEY_CODE_ENTER == e.nativeEvent.keyCode) {
		var isValidSearch = false;
		var queryString = '';
		var currentSearch = Element.parseSelector('INPUT.searchFormInputBox', this.searchForm, 'first');

		if (currentSearch && currentSearch.value) {
			isValidSearch = true;
			queryString = '?searchField=' + encodeURIComponent(currentSearch.value);
		}

		
		location.href = [ this.HREF_LOCATION, queryString ].join('');
	}
}


TermsList_class.prototype.deleteTerm = function(e, el){
	e.cancel();
	
	var deleteConfirm = confirm("Are you sure you want to delete this term?")
	if (deleteConfirm ){
		var cb = new ContentBuffer();
	
		var conn = cb.load({
			debug: true,
			url: "/ft/resources/buffer/glossaryDeleteTerm.asp",
			method: "post",
			contentType: "text/javascript",
			preventEval: false,
			data: {
				id: el.getAttribute("termID")
			},
			onload: function() {
				alert("Term has been deleted.");
				location.href = location.href;
			}
		});
	
	}else {
		alert("Term was not deleted.")
	}

		

}

TermsList_class.prototype.updateTerm = function(e, el){
	e.cancel();
	var term = el.getAttribute("termID")
	location.href = "/ft/internals/glossary/admin_addEditTerm.asp?termID="+term
}