Lisi.UserUtils = function(options) {
	var instance = this;
	instance.companyId = options.companyId;
	
	this.init = function() {				

	},
	this.inArray = function(val, array) {
		for (var i = 0; i < array.length; i++) {
			if (val.toLowerCase() == array[i].toLowerCase()) {
				return true;
			}
		}
		return false;
	},
	this.userRegistrationForm = function(options) {
		if (typeof instance.AUI == "undefined") {
			AUI().use(
				'node',
				'aui-io',
				'event-custom',
				function(A) {
					instance.AUI = A;
					instance.userRegistrationFormIntern(options);
				}
			)
		} else {
			instance.userRegistrationFormIntern(options);
		}
	},	
	this.userRegistrationFormIntern = function(options) {		
		instance.namespace = options.namespace;
		instance.userFormFunction = this;
		instance.userForm = instance.AUI.one("#" + options.form);
		instance.messageContainer = instance.AUI.one("#" + options.messageContainer);
		instance.tabsContainer = instance.AUI.one("#" + options.tabsContainer);
		instance.nextButton = instance.AUI.one("#" + options.nextButton);
		instance.backButton = instance.AUI.one("#" + options.backButton);
		instance.submitButton = instance.AUI.one("#" + options.submitButton);
		instance.tagsInput = instance.AUI.one("#" + options.tagsInput);
		instance.tagsContainer = instance.AUI.one("#" + options.tagsContainer);
		instance.tagsHidden = instance.AUI.one("#" + options.tagsHidden);
		instance.tabsContainer.all("li a").each(function(node, index) {
			node.set('rel', 'page' + (index + 1));
			node.get('parentNode').addClass('lisi-tab');
			node.get('parentNode').addClass('page' + (index + 1));
			node.on("click", function() {
				var page = instance.AUI.one(this).get('rel');
				if (page == "page2" && !instance.AUI.one(this).get('parentNode').hasClass("active")) {
					instance.userFormFunction.checkPage("page1");
				} else {
					instance.userFormFunction.changePage(page);
				}
			});
		});
		instance.userForm.all(".lisi-form-page").each(function(node, index) {
			node.addClass("page" + (index + 1));
		});
		instance.nextButton.on("click", function() {
			if (instance.userFormFunction.checkPage('page1')) {
				instance.userFormFunction.changePage("page2");
			}
		});		
		instance.backButton.on("click", function() {
			instance.userFormFunction.changePage("page1");
		});		
		instance.submitButton.on("click", function() {
			if (instance.userFormFunction.checkPage('page2')) {
				instance.userFormFunction.changePage("page1");
			}
		});
		instance.tagsInput.on("keyup", function() {
			var tags = instance.tagsInput.get('value').split(',');
			instance.tagsContainer.set("innerHTML", "");
			instance.AUI.Array.each(tags, function(value, index, array) {
				var tag = instance.AUI.Lang.trim(value).replace(/\s+/g,'');
				if (tag != '') {
					var tagSpan = instance.tagsContainer.create("<span class='lisi-tag'>" + tag + "</span>");
					instance.tagsContainer.appendChild(tagSpan);			
				}
			});
		});
		instance.userFormFunction.checkPage = function(page) {
			instance.fieldsValid = true;
			if (page == "page1") {				
				var obj = instance.AUI.one("#" + instance.namespace + "userCategorieSwitcher");
				if (obj.get('value') == "null") {
					instance.messageContainer.set("innerHTML", "<div class='lisi style statusmessage error'>W&auml;hlen Sie bitte Ihre Beitrittsform aus!</div>");
					obj.addClass("mandatory");
					return false;
				} else {
					obj.removeClass('mandatory');
				}				
				if (obj.get('value') == "user1") {
					instance.checkEmptyInput(new Array("company", "contact"));
				}
				if (obj.get('value') == "user2") {
					instance.checkEmptyInput(new Array("lastname", "firstname"));					
				}
				if (obj.get('value') == "user3") {
					instance.checkEmptyInput(new Array("institution", "contact"));					
				}				
				instance.checkEmptyInput(new Array("street", "number", "zip", "city"));
				
				if (!instance.fieldsValid) {
					instance.messageContainer.set("innerHTML", "<div class='lisi style statusmessage error'>F&uuml;llen Sie bitte die gekennzeichneten Felder korrekt aus!</div>");
					return false;
				}
				
				var mailRegEx = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
				obj = instance.AUI.one("input[name=" + instance.namespace + "email]");
				if (!mailRegEx.test(obj.get('value'))) {
					instance.messageContainer.set("innerHTML", "<div class='lisi style statusmessage error'>Tragen Sie bitte eine korrekte E-Mail Adresse ein!</div>"); 
					obj.addClass("mandatory");
					return false;
				} else {
					obj.removeClass("mandatory");
				}

				instance.checkEmail(obj.get('value'));
				instance.AUI.on('userMailCheck', function(exist) {
					instance.AUI.detach('userMailCheck');
					if (exist) {
						instance.messageContainer.set("innerHTML", "<div class='lisi style statusmessage error'>Diese E-Mail Adresse wird bereits verwendet!</div>"); 
						obj.addClass("mandatory");
						return false;						
					} else {
						obj.removeClass("mandatory");
						instance.messageContainer.set("innerHTML", "");
						instance.userFormFunction.changePage("page2");
					}					
				});				
			} else {
				var obj = instance.AUI.one("select[name='" + instance.namespace + "userIndustry']");
				if (obj.get('value') == "null") {
					instance.messageContainer.set("innerHTML", "<div class='lisi style statusmessage error'>W&auml;hlen Sie bitte Ihre Branche aus!</div>");
					obj.addClass("mandatory");
					return false;
				} else {
					obj.removeClass('mandatory');
				}
				var tags = instance.tagsInput.get('value').split(',');
				var addedTags = new Array();
				instance.AUI.Array.each(tags, function(value, index, array) {
					var tag = instance.AUI.Lang.trim(value).replace(/\s+/g,'');
					if (tag != '') {
						if (!instance.inArray(tag, addedTags)) {
							addedTags.push(tag);
						}
					}
				});
				instance.tagsHidden.set('value', addedTags);
				instance.messageContainer.set("innerHTML", "");
				instance.userForm.submit();
			}
			return false;
		}
	
		instance.userFormFunction.changePage = function(page) {
			instance.tabsContainer.all("li").removeClass("active");
			instance.tabsContainer.one('.lisi-tab.' + page).addClass("active");
			instance.userForm.all(".lisi-form-page").addClass("lisi-hide");
			instance.userForm.all(".lisi-form-page." + page).removeClass("lisi-hide");
		}
	},
	this.userAdminForm = function(options) {
		if (typeof instance.AUI == "undefined") {
			AUI().use(
				'node',
				'aui-io',
				'event-custom',
				function(A) {
					instance.AUI = A;
					instance.userAdminFormIntern(options);
				}
			)
		} else {
			instance.userAdminFormIntern(options);
		}
	},	
	this.userAdminFormIntern = function(options) {
		instance.dashboard = typeof options.dashboard == "undefined" ? false : options.dashboard;
		instance.namespace = options.namespace;
		instance.userEditFormFunction = this;
		instance.userForm = instance.AUI.one("#" + options.form);
		instance.initEmail = options.initEmail;
		instance.messageContainer = instance.AUI.one("#" + options.messageContainer);
		instance.submitButton = instance.AUI.one("#" + options.submitButton);
		instance.tagsInput = instance.AUI.one("#" + options.tagsInput);
		instance.tagsHidden = instance.AUI.one("#" + options.tagsHidden);
		instance.submitButton.on("click", function() {
			instance.userEditFormFunction.checkPage();
		});
		instance.userEditFormFunction.checkPage = function() {
			instance.fieldsValid = true;
			if (!instance.dashboard) {
				var obj = instance.AUI.one("#" + instance.namespace + "userCategorieSwitcher");
				if (obj.get('value') == "null") {
					instance.messageContainer.set("innerHTML", "<div class='lisi style statusmessage error'>W&auml;hlen Sie bitte die Beitrittsform aus!</div>");
					obj.addClass("mandatory");
					return false;
				} else {
					obj.removeClass('mandatory');
				}				
			} else {
				var obj = instance.AUI.one("#" + instance.namespace + "userCategorieHidden");
			}
			if (obj.get('value') == "user1") {
				instance.checkEmptyInput(new Array("company", "contact"));
			}
			if (obj.get('value') == "user2") {
				instance.checkEmptyInput(new Array("lastname", "firstname"));					
			}
			if (obj.get('value') == "user3") {
				instance.checkEmptyInput(new Array("institution", "contact"));					
			}				
			instance.checkEmptyInput(new Array("street", "number", "zip", "city"));
			
			if (!instance.fieldsValid) {
				instance.messageContainer.set("innerHTML", "<div class='lisi style statusmessage error'>F&uuml;llen Sie bitte die gekennzeichneten Felder korrekt aus!</div>");
				return false;
			}
			if (!instance.dashboard) {
				var mailRegEx = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
				obj = instance.AUI.one("input[name=" + instance.namespace + "email]");
				if (!mailRegEx.test(obj.get('value'))) {
					instance.messageContainer.set("innerHTML", "<div class='lisi style statusmessage error'>Tragen Sie bitte eine korrekte E-Mail Adresse ein!</div>"); 
					obj.addClass("mandatory");
					return false;
				} else {
					obj.removeClass("mandatory");
				}
			}
			
			instance.AUI.on('userMailCheck', function(exist) {
				instance.AUI.detach('userMailCheck');
				var obj = instance.AUI.one("input[name=" + instance.namespace + "email]");
				if (exist) {
					instance.messageContainer.set("innerHTML", "<div class='lisi style statusmessage error'>Diese E-Mail Adresse wird bereits verwendet!</div>"); 
					obj.addClass("mandatory");
					return false;						
				} else {
					obj.removeClass("mandatory");
					var obj = instance.AUI.one("select[name='" + instance.namespace + "userIndustry']");
					if (obj.get('value') == "null") {
						instance.messageContainer.set("innerHTML", "<div class='lisi style statusmessage error'>W&auml;hlen Sie bitte eine Branche aus!</div>");
						obj.addClass("mandatory");
						return false;
					} else {
						obj.removeClass('mandatory');
					}
					
					var tagsString = instance.tagsHidden.get("value");
					tagsString = tagsString == "" ? instance.tagsInput.get('value') : tagsString + "," + instance.tagsInput.get('value');
					var tags = tagsString.split(',');
					var addedTags = new Array();
					instance.AUI.Array.each(tags, function(value, index, array) {
						var tag = instance.AUI.Lang.trim(value).replace(/\s+/g,'');
						if (tag != '') {
							if (!instance.inArray(tag, addedTags)) {
								addedTags.push(tag);
							}
						}
					});
					instance.tagsHidden.set('value', addedTags);
					instance.messageContainer.set("innerHTML", "");
					
					instance.userForm.submit();					
				}					
			});				
			if (obj.get('value') != instance.initEmail) {
				instance.checkEmail(obj.get('value'));
			} else {
				instance.AUI.fire('userMailCheck', false);
				
			}			
		}
	}		
	this.userPasswordForm = function(options) {
		if (typeof instance.AUI == "undefined") {
			AUI().use(
				'node',
				'aui-io',
				'event-custom',
				function(A) {
					instance.AUI = A;
					instance.userPasswordFormIntern(options);
				}
			)
		} else {
			instance.userPasswordFormIntern(options);
		}
	},	
	this.userPasswordFormIntern = function(options) {
		instance.namespace = options.namespace;
		instance.userPasswordFormFunction = this;
		instance.userForm = instance.AUI.one("#" + options.form);
		instance.messageContainer = instance.AUI.one("#" + options.messageContainer);
		instance.submitButton = instance.AUI.one("#" + options.submitButton);
		instance.submitButton.on("click", function() {
			instance.userPasswordFormFunction.checkPage();
		});
		instance.userPasswordFormFunction.checkPage = function() {

			var pass1 = instance.AUI.one("#" + instance.namespace + "password");
			var pass2 = instance.AUI.one("#" + instance.namespace + "password2");
			
			if (pass1.get("value").length < 6) {
				pass1.addClass("mandatory");
				instance.messageContainer.set("innerHTML", "<div class='lisi style statusmessage error'>Das Passwort muss aus mindestens 6 Zeichen bestehen!</div>");
				return false;
			} else {
				pass1.removeClass("mandatory");
			}			
			
			if (pass1.get("value") != pass2.get("value")) {
				pass1.addClass("mandatory");
				pass2.addClass("mandatory");
				instance.messageContainer.set("innerHTML", "<div class='lisi style statusmessage error'>Die beiden Passw�rter stimmen nicht �berein!</div>");
				return false;
			} else {
				pass1.removeClass("mandatory");
				pass2.removeClass("mandatory");
			}
			
			instance.messageContainer.set("innerHTML", "");
				
			instance.userForm.submit();					
		}
	}	
	/* 
	* Tagging 
	*/
	this.tagging = function(options) {
		if (typeof instance.AUI == "undefined") {
			AUI().use(
				'node',
				'aui-io',
				'event-custom',
				function(A) {
					instance.AUI = A;
					instance.taggingIntern(options);
				}
			)
		} else {
			instance.taggingIntern(options);
		}
	},	
	this.taggingIntern = function(options) {
		instance.tagging = this;
		instance.tagsInput = instance.AUI.one("#" + options.tagsInput);
		instance.tagsNewContainer = instance.AUI.one("#" + options.tagsNewContainer);
		instance.tagsHidden = instance.AUI.one("#" + options.tagsHidden);
		instance.tagsInput.on("keyup", function() {
			var tags = instance.tagsInput.get('value').split(',');
			instance.tagsNewContainer.set("innerHTML", "");
			instance.AUI.Array.each(tags, function(value, index, array) {
				var tag = instance.AUI.Lang.trim(value).replace(/\s+/g,'');
				if (tag != '') {
					var tagSpan = instance.tagsNewContainer.create("<span class='lisi-tag'>" + tag + "</span>");
					instance.tagsNewContainer.appendChild(tagSpan);			
				}
			});
		});		
		if (typeof options.tagsCurrentContainer != "undefined") {
			instance.tagsCurrentContainer = instance.AUI.one("#" + options.tagsCurrentContainer);
			instance.tagsCurrentContainer.all(".lisi-tag-delete").each(function(node, index) {
				node.on("click", function() {
					instance.tagging.deleteTag(this);
				});
			});
		}		
		instance.tagging.updateTags = function() {				
			instance.tagsSummary.set("innerHTML", "");
			instance.AUI.Array.each(instance.addedTags, function(value, index, array) {
				var tagSpan = instance.tagsSummary.create("<span class='lisi-tag'>" + value + "</span>");
				var tagAnchor = tagSpan.create("<a class='lisi-tag-delete' href='javascript: void(0);'></a>");
				var tagClose = tagAnchor.create("<span class='close'></span>");
				tagAnchor.appendChild(tagClose);
				tagSpan.appendChild(tagAnchor);			
				tagAnchor.on('click',
					function() {
						instance.deleteTag(index);	
					}
				);				
				instance.tagsSummary.appendChild(tagSpan);

			});
			instance.tagsEntries.set('value', instance.addedTags);
			instance.tagsInput.set('value', '');
		}
		instance.tagging.deleteTag = function(obj) {
			var lisiTag = instance.AUI.one(obj).get("parentNode");
			instance.tagsHidden.set("value", instance.tagsHidden.get("value").split(lisiTag.get("text")).join(""));
			instance.tagsHidden.set("value", instance.tagsHidden.get("value").split(",,").join(","));
			instance.tagsCurrentContainer.removeChild(lisiTag);
		}
	},
	this.checkEmail = function(email) {
		var request = instance.AUI.io.request("/delegate/lnt_servlet", 
		{
			method: "post",
			dataType: "xml",
			data: {
				action: "checkUserEmail",
				email: email,
				companyId: instance.companyId
			},
			on: {
				success: function(event, id, xhr) {
				
					var root = xhr.responseXML.documentElement;
					var successCode = root.firstChild.nodeValue;						
					if (successCode == "false") {
						instance.AUI.fire('userMailCheck', false);
					} else {
						instance.AUI.fire('userMailCheck', true);
					}
				},
				error: function() {
					
				}
			}
		});
	}
	this.checkEmptyInput = function(fields) {
		for (var a = 0; a < fields.length; a++) {
			obj = instance.AUI.one("input[name=" + instance.namespace + fields[a] + "]");
			if (obj.get('value').match(/^\s*$/)) {
				instance.fieldsValid = false;
				obj.addClass("mandatory");
			} else {
				obj.removeClass("mandatory");
			}
		}
	}
	
	/* 
	* Initialization itself
	*/	
	instance.init();
}
