var TMemberLoginForm = Class.create();
var memberLoginForm;

TMemberLoginForm.prototype = {
	initialize: function(opt) {
		for (i in opt) {
			this[i] = opt[i];
		}
		this.idTimer = null;
		this.formType = 'login';
		this.fieldLogin = $('#'+this.idForm+' input[name="'+this.loginFieldName+'"]');
		this.fieldPassword = $('#'+this.idForm+' input[name="'+this.passwordFieldName+'"]');
		this.fieldAutologin = $('#'+this.idForm+' input[name="'+this.autologinFieldName+'"]');
		this.fieldRegPassword = $('#'+this.idForm+' input[name=reg_password]');
		this.fieldRegConfirmPassword = $('#'+this.idForm+' input[name=reg_confirm_password]');
		this.fieldAction = $('#'+this.idForm+' input[name=action]');
		this.fieldSubmit = $('#'+this.idForm+' input[type=submit]');
		
		this.msgContainerLogin = $('#'+this.idForm+' tr.login td:eq(2)');
		this.msgContainerPassword = $('#'+this.idForm+' tr.password td:eq(2)');
		this.msgContainerRegPassword = $('#'+this.idForm+' tr.reg_password td:eq(2)');
		
		var obj = this;
		this.show();
        setTimeout('memberLoginForm.loginOnBlur()', 500);
		this.fieldLogin.keyup(function(){
			obj.loginOnKeyUp();
		});
		this.fieldLogin.get(0).focus();
		setTimeout('memberLoginForm.fieldLogin.focus()', 2000);
	},
	show:function () {
		if (this.fieldLogin.val() == '') {
			this.showMessage(this.msgContainerLogin, 'Enter your email address to continue');
			this.showMessage(this.msgContainerPassword, 'enter your email address to activate this field', 'gray');
			this.disableElement(this.fieldPassword, this.fieldSubmit);
		}
	},
	showMessage: function(el, text, color, icon){
		el.html(((icon)?'<img src="img/'+icon+'.gif">':'')+'<span style="color:'+((color)?color:'green')+';">'+text+'</span>');
	},
	showError: function(el, text, color, icon, insertMethod){
		var html = ((icon)?'<img src="img/'+icon+'.gif">':'')+'<span style="color:'+((color)?color:'#DE8507')+';">'+text+'</span>';
		if (insertMethod == 'append') {
			el.append('<br />'+html);
		} else {
			el.html(html);
		}
	},
	disableElement: function(){
		for (var i = 0; i < arguments.length; i++) {
			var el = arguments[i];
			switch(el.attr('type')){
			case 'password': 
			case 'text':    el.attr('disabled', 'disabled').addClass('inp_gray'); break;
			case 'submit': 	el.attr('disabled', 'disabled').addClass('btn_gray'); break;
			}
		}
	},
	enableElement: function(){
		for (var i = 0; i < arguments.length; i++) {
			var el = arguments[i];
			switch(el.attr('type')){
			case 'password': 
			case 'text':    el.removeAttr('disabled').removeClass('inp_gray'); break;
			case 'submit': 	el.removeAttr('disabled').removeClass('btn_gray'); break;
			}
		}
	},
	chageFormType: function(type){
		var obj = this;
		if (type == 'activate') {
			$('#'+this.idForm+' tr.password').hide();
			$('#'+this.idForm+' tr.auto_login').hide();
			$('#'+this.idForm+' tr.forgot').hide();
			$('#'+this.idForm+' tr.reg_password').hide();
			this.fieldAction.val('login');
			this.fieldSubmit.val('Activate Now');
			$('#'+this.idForm).get(0).onsubmit = function(){
				document.location = obj.activateUrl+'?action=insert&email='+urlencode(obj.fieldLogin.val());
				return false;
			}
			this.fieldSubmit.css('width', '90px');
		} else if (type == 'event_registration'){
			$('#'+this.idForm+' tr.password').hide();
			$('#'+this.idForm+' tr.auto_login').hide();
			$('#'+this.idForm+' tr.forgot').hide();
			$('#'+this.idForm+' tr.reg_password').show();
			this.fieldAction.val('event_registration');
			this.fieldSubmit.val('Create an Account');
			this.fieldSubmit.css('width', '120px');
			/*
			$('#'+this.idForm).get(0).onsubmit = function(){
				if (this.reg_password.value == '' || this.reg_confirm_password.value == '') {
					obj.showError(obj.msgContainerRegPassword, 'Password is required', null, 'msg-warning');
					return false;
				}
				if (this.reg_password.value != this.reg_confirm_password.value) {
					obj.showError(obj.msgContainerRegPassword, 'Passwords don\'t match', null, 'msg-warning');
					return false;
				}
				return true;
			}
			this.fieldRegPassword.keypress(function(){ obj.showMessage(obj.msgContainerRegPassword, ''); });
			this.fieldRegConfirmPassword.keypress(function(){ obj.showMessage(obj.msgContainerRegPassword, ''); });
			*/
		} else {
			$('#'+this.idForm+' tr.reg_password').hide();
			$('#'+this.idForm+' tr.password').show();
			$('#'+this.idForm+' tr.auto_login').show();
			$('#'+this.idForm+' tr.forgot').show();
			this.fieldAction.val('login');
			this.fieldSubmit.val('Login');
			this.fieldSubmit.css('width', '50px');
			$('#'+this.idForm).get(0).onsubmit = function(){
				if (this.member_password.value == '') {
					obj.showError(obj.msgContainerPassword, 'Password is required', null, 'msg-warning');
					return false;
				}
				return true;
			}
		}
		this.formType = type;
	},
	loginOnBlur: function(){
		if (this.idTimer) {
			clearTimeout(this.idTimer);
		}
		var regex = /^((\"[^\"\f\n\r\t\v\b]+\")|([\w\!\#\$\%\&'\*\+\-\~\/\^\`\|\{\}]+(\.[\w\!\#\$\%\&'\*\+\-\~\/\^\`\|\{\}]+)*))@((\[(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))\])|(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((([A-Za-z0-9\-])+\.)+[A-Za-z\-]+))$/;
		var value = this.fieldLogin.val();
		if (value != '') { 
			if (!regex.test(value)) {
				this.showError(this.msgContainerLogin, 'The format of your email address is not valid.', null, 'msg-gold');
				this.disableElement(this.fieldSubmit);
			} else {
				var obj = this;
				$.ajax({
					'url':this.loginUrl,
					data: {
						'action': 'validLogin',
						'login' : value
					},
					beforeSend: function() { },
					dataType: 'json',
					type: 'POST',
					error: function (request, textStatus, errorThrown) {
						alert(textStatus +' ' + errorThrown);
					},
					success: function(data) { 
						var insertMethod = null;
						var allowWritePasswordMessage = true;
						if (typeof data.msg == 'string') {
							obj.showMessage(obj.msgContainerLogin, data.msg, null, 'msg-ok');
							insertMethod = 'append';
						}
						if (typeof obj.errors.member_password == 'string') {
							obj.showError(obj.msgContainerPassword, obj.errors.member_password, 'red', 'msg-error');
							obj.fieldPassword.keyup(function(){obj.showMessage(obj.msgContainerPassword, ''); this.onkeyup=function(){}});
							obj.errors.member_password = null;
							allowWritePasswordMessage = false;
						}
						if (typeof data.warning == 'string') {
							obj.showError(obj.msgContainerLogin, data.warning, null, 'msg-warning', insertMethod);
							if (allowWritePasswordMessage) {
								obj.showMessage(obj.msgContainerPassword, 'enter your email address to activate this field', 'gray');
							}
							obj.disableElement(obj.fieldPassword, obj.fieldSubmit);
						} else if (typeof data.error == 'string') {
							obj.showError(obj.msgContainerLogin, data.error, 'red', 'msg-error', insertMethod);
							if (allowWritePasswordMessage) {
								obj.showMessage(obj.msgContainerPassword, 'enter your email address to activate this field', 'gray');
							}
							obj.disableElement(obj.fieldPassword, obj.fieldSubmit);
						} else {
							if (allowWritePasswordMessage) {
								obj.showMessage(obj.msgContainerPassword, '');
							}
							obj.enableElement(obj.fieldPassword, obj.fieldSubmit);
							//obj.fieldPassword.focus();
						}
						if (typeof data.action == 'string') {
							switch(data.action) {
								case 'show_activate_form' :
									obj.chageFormType('activate');
									obj.enableElement(obj.fieldSubmit);
									break;
								case 'show_event_form':
									obj.chageFormType('event_registration');
									obj.enableElement(obj.fieldSubmit);
									break;
								default:
									obj.chageFormType('login');
							}
						} else {
							obj.chageFormType('login');
						}
					},
					complete: function(request, textStatus) { }
				});
			}
		}
	},
	loginOnKeyUp: function() {
		if (this.idTimer) {
			clearTimeout(this.idTimer);
		}
		this.idTimer = setTimeout('memberLoginForm.loginOnBlur();', 1000);
	}
}


function initMemberLoginForm(id_form, activateAlias, errors)
{
	var options = {
		'idForm': id_form,
		'loginUrl':BASE_URL+'/'+CURR_PAGE,
		'activateUrl':BASE_URL+'/'+activateAlias,
		'loginFieldName':'member_login',
		'passwordFieldName':'member_password',
		'autologinFieldName':'auto_login',
		'errors': errors
	};
	memberLoginForm = new TMemberLoginForm(options);
}