new function() {
    $.fn.validate = {
        init: function(o, ajaxValidate) {
          if(o.name == 'name' || o.name == 'nameLogin')
        	  this.name(o, ajaxValidate);
          if(o.name == 'password' || o.name == 'passwordLogin') 
        	  this.password(o);
          if(o.name == 'confirmpass') 
        	  this.confirmpassword(o);
          if(o.name == 'email')
        	  this.email(o);
          if(o.name == 'dob')
        	  this.dob(o);
        },
        name: function(o,validate) {
        	var value = o.value;
        	if (value.length > 0){
        		var chars = /[(\*\(\)\[\]\+\.\,\/\?\:\;\'\"\`\~\\#\$\%\^\&\<\>)+]/;
	           	if (value.length < 3)
	           		doError(o.id,getText('inf3'));
            	else if (value.match(chars))
            		doError(o.id,getText('special'));
            	else if (validate != undefined){
        			if (validate)
        				ajaxValidate(o);
            	}
            	else 
            		doSuccess(o.id, "");
        	}
        },
        password: function(o) {
        	var value = o.value;
        	if (value.length > 0){
        		var chars = /[(\*\(\)\[\]\+\.\,\/\?\:\;\'\"\`\~\\#\$\%\^\&\<\>)+]/;
	           	if (value.length < 3)
	           		doError(o.id,getText('inf3'));
            	else if (value.match(chars))
            		doError(o.id,getText('special'));
            	else
            		doSuccess(o.id, "");
        	}
        },
        confirmpassword: function(o) {
        	var value = o.value;
        	var password = $('#password').val();
        	if (value.length > 0){
	           	if (value != password)
	           		doError(o.id,getText('diff'));
            	else
            		doSuccess(o.id, "");
        	}
        },
        email: function(o) {
          var email  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
           if (o.value.match(email)) {
        	   doSuccess(o.id, "");
            } else {
              doError(o.id,getText('email'));
            };
        },
        dob: function(o) {
          var dob  = /(0[1-9]|1[012])+\/(0[1-9]|[12][0-9]|3[01])+\/(19|20)\d\d/;
            if (o.value.match(dob)) {
              doSuccess(o.id, "");
            } else {
              doError(o.id,getText('date'));
            };
        }
     };

	 function doSuccess(id, m) {
		  $('#' + id + '_img').html('<img src="images/accept.gif" border="0" style="float:left;" />');
	      $('#' + id + '_li').removeClass("error").removeClass("warning");
	      $('#' + id + '_msg').html(m);
	      $('#' + id + '_li').addClass("success");
	 }
     function doError(id,m) {
          $('#' + id + '_img').html('<img src="images/exclamation.gif" border="0" style="float:left;" />');
          $('#' + id + '_li').addClass("error");
          $('#' + id + '_msg').html(m);
          $('#' + id + '_li').removeClass("success").removeClass("warning");
     }
     function doKO(id,m) {
         $('#' + id + '_img').html('<img src="images/exclamation.gif" border="0" style="float:left;" />');
         $('#' + id + '_li').addClass("error");
         $('#' + id + '_msg').html(m);
         $('#' + id + '_li').removeClass("success").removeClass("warning");
    }
     function ajaxValidate(o) {
    	$('#' + o.id + '_img').html('<img src="images/loading.gif" border="0" style="float:left;" />');
    	$.ajax({
			   type: 'POST',
			   url: '/Photonization/verifUserJson' + extension,
			   data: 'name=' + o.value,
			   dataType: 'json',
			   success: function(json){
				  if (json.code == 0){
					  doSuccess(o.id, '');
				  }
				  else {
					  doError(o.id,json.message);
				  }
			   },
			   error : function(msg){
				   doKo(o.id,'KO');
			   }
		});
    };
};

function doRequired(id,m) {
    $('#' + id + '_img').html('<img src="images/cancel.png" border="0" style="float:left;" />');
    $('#' + id + '_li').addClass("warning");
    $('#' + id + '_msg').html(m);
    $('#' + id + '_li').removeClass("success");
}

//registration form
function registerValidator(formId){
	  $(formId + ' #name').keyup(function(){
		  $(this,formId).validate.init(this,true);
	  });
	  $(formId + ' #confirmpass').keyup(function(){
		  $(this,formId).validate.init(this);
	  });
	  $(formId + ' .validated input').keyup(function() {
	      $(this,formId).validate.init(this);
	  });
	  $(formId + ' #optionalFieldsButton').click(function() {
		  $(formId + ' #opFields').hide();
		  $(formId + ' #optionalFields').toggle();
	  });
	  $('#resetRegister').click(function (){
		  $(formId + ' .form > li').removeClass('selected');
		  $(formId + ' .form > li').removeClass('success');
		  $(formId + ' .form > li').removeClass('error');
		  $(formId + ' .form > li').removeClass('warning');
		  $(formId + ' .form div').html('');
		  $(formId + ' .form > li input').val('');
	  });
	  $('#cancelRegister').click( function (){
		  $('#registerContainer').close();
		  return false;
	  });
	  $(formId + ' .form > li').mouseover(function() {
	      $(this).addClass('selected');
	  });
	  $(formId + ' .form > li').mouseout(function() {
	      $(this).removeClass('selected');
	  });
	  $('#submitRegister').click(function (){
		  var error = false;
		  $(formId + ' .form > li').each(function(){
			 if ($(this).hasClass('error'))
				 error = true;
		  });
		  $(formId + ' .form > li.required').each(function(){
			 if (!(($(this).hasClass('error')) || ($(this).hasClass('success')))){
				 var id = this.id;
				 doRequired(id.substring(0,id.length-3),getText('required'));
				 error = true;	
			 }
		  });
		  if (!error)
			  connectAjax('#registerJson', '#registerContainer', '#mbcontainercontentRegister', formId);
		  return !error;
	  });
};

//login form
function loginValidator(formId){
	  $(formId + ' #nameLogin').keyup(function(){
		  $(this).validate.init(this);
	  });
	  $(formId + ' .validated input').keyup(function() {
	      $(this).validate.init(this);
	  });
	  $('#resetLogin').click(function (){
		  $(formId + ' .form > li').removeClass('selected');
		  $(formId + ' .form > li').removeClass('success');
		  $(formId + ' .form > li').removeClass('error');
		  $(formId + ' .form > li').removeClass('warning');
		  $(formId + ' .form div').html('');
		  $(formId + ' .form > li input').val('');
	  });
	  $('#cancelLogin').click( function (){
		  $('#loginContainer').mb_iconize();
		  return false;
	  });
	  $(formId + ' .form > li').mouseover(function() {
	      $(this).addClass('selected');
	  });
	  $(formId + ' .form > li').mouseout(function() {
	      $(this).removeClass('selected');
	  });
	  
	  $('#submitLogin').click(function (){
		  var error = false;
		  $(formId + ' .form > li').each(function(){
			 if ($(this).hasClass('error'))
				 error = true;
		  });
		  $(formId + ' .form > li.required').each(function(){
			 if (!(($(this).hasClass('error')) || ($(this).hasClass('success')))){
				 var id = this.id;
				 doRequired(id.substring(0,id.length-3),getText('required'));
				 error = true;	
			 }
		  });
		  if (!error)
			  connectAjax('#loginJson', '#loginContainer', '#loginAjax_autoConnect', '#mbcontainercontentLogin', formId);
		  return !error;
	  });
};

// do after submit form
function connectAjax(submitId, containerId, autoconnectId, mbcontainerId, formId){
	$(submitId).ajaxSubmit({
		dataType: 'json',
		data: {config: $.toJSON(config)},
		success: function(json) {
			if (json.code == 0){
				if (formId + ' ' + $(autoconnectId + ':checked')){
					$.ajax({
					   type: "POST",
					   url: 'headerAjax' + extension,
					   success: function(headerHtml){
						  $(containerId).close();
						  $('#outer-header').empty();
						  $('#outer-header').html(headerHtml);
						  initUser();
						  initMenu();
						  showGlow(json.message);
					   },
					   error : function(res){
						   showGlow(res, true);
						   $(containerId).close();
					   }
					 });
				} else 
					$(containerId).close();
			} else {
				showGlow(json.message, 'error', 5000);
				$('#firstConnection').css('text-decoration', 'blink').css('font-weight', 'bold');
			}
		},
		error: function(json) {
		    $(containerId).close();
		    $.jGrowl('',{
				theme: 	'error',
				header: getText('Error'),
				life:	5000,
				sticky: false
			});
		},
	    beforeSend: function(json){
		    $('#loadingUser').show();
	    },
	    complete: function(json){
		    $('#loadingUser').hide();
	    }
	});
}
