handlerForm = function(selector,selectorMessage,selectorData,isMini) {
   this.selector = selector;   
   this.selectorMessage = selectorMessage || '';
   this.selectorData = selectorData || '';
   this.isMini = isMini || false;      
}
handlerForm.init = function(selector,selectorMessage,selectorData,isMini){
    var obj = new handlerForm(selector,selectorMessage,selectorData,isMini);
    return obj;
}
handlerForm.prototype = {        
    $ : function(selector) { 
        if (typeof selector != 'undefined')
            return jQuery(selector);
        return jQuery; 
        
    },
    serialize : function ()
    {
        return this.$(this.selector).serialize();
    },
    confirm: function (dlog) {
        var self = this;
        self.$(dlog).dialog({
            resizable: false,
            height:140,
            modal: true,
            buttons: {                
                "Отмена": function() {
                    jQuery( this ).dialog( "close" );
                },
                "Выполнить": function() {
                    jQuery( this ).dialog( "close" );
                    self.ajax();                    
                }
            }
        });
    },
    ajax : function(onSuccess, onError) {         
        var self = this;
        self.setPreload()                              
        this.$(this.selector).find('*').removeClass("ui-state-error");
        if (!self.formValidate()) {
            self.setMsg(self.getErrorMsg('Не заполнены обязательные поля'));
            return false;   
        }
		
        
        this.$().ajax({url: this.$(this.selector).attr('action'),
                  cache: false,
				  type: "POST",
                  data: self.serialize(),
                  async: false,
                  success: function(data,status,xhr)
                  {
                      self.onSuccessReq(self,data,status,xhr);
                      if(self.isReqSuccess)
                      if (typeof onSuccess == 'function') {
                          onSuccess();
                      }
                      else
                      if (typeof onError == 'function') {
                          onSuccess();
                      }
                  }
              });
    },
    getInfoMsg : function(message) {
            var msg = '';
            msg += '<div style="padding: 5px; margin-top:5px;" class="ui-state-highlight ui-corner-all">';
            msg += message + '</div>';
            return msg;
    },
    getErrorMsg : function(message) {
            var msg = '';
            msg += '<div style="padding: 5px; margin-top:5px; color:red;" class="ui-state-error ui-corner-all">';
            msg += message + '</div>';
            return msg;
    },
    setMsg : function(message) {
         this.$(this.selectorMessage).html(message).fadeOut(3000);         
    },
    setData : function(data) {
        this.$(this.selectorData).html(data);         
    },
    setValidationResult : function(elem,is_valid,message)
    {
        if(is_valid) {
            jQuery(elem).removeClass("ui-state-error");
            jQuery(elem).attr("title","");
        } else {
            jQuery(elem).addClass("ui-state-error");
            jQuery(elem).attr("title",message);
        }    
        return is_valid;    
    },
    onSuccessReq : function (self,data,status,xhr) {
         
         var exception = typeof xhr.getResponseHeader('exception') == "string" ? eval(xhr.getResponseHeader('exception')) : '';
         var message = typeof xhr.getResponseHeader('message') == "string" ? eval (xhr.getResponseHeader('message')) : '';
         var validation =  '';
         if (typeof xhr.getResponseHeader('validation') == "string") {
             eval('validation = ' + xhr.getResponseHeader('validation'));
         }         
         var redirect = typeof xhr.getResponseHeader('redirect') == "string" ? eval(xhr.getResponseHeader('redirect')) : '';
         if(validation != '') {
            for(var i in validation) {
                this.setValidationResult('#'+i, false, validation[i]);                             
            }
         }
         
         var msg = '';
         if (message != '' && typeof message != 'undefined') {
            this.isReqSuccess = true; 
            msg += this.getInfoMsg(message);
         }
         if (exception != '' && typeof exception != 'undefined') {
            this.isReqSuccess = false;
            msg += this.getErrorMsg(exception);
         }
         if (redirect != '' && typeof redirect != 'undefined') {
             window.location.href = redirect;
         }
         this.setMsg(msg);
         this.setData(data);         
    },
    setPreload : function(){ 
        
        var gif = this.isMini ? '/img/miniload.gif' : '/img/mwait2.gif';
        this.$(this.selectorMessage).html('<div class="wait" style="z-index:10001;position:fixed; top:0; left:0;"><div></div></div>').show(); 
    },
    formValidate: function()
    {
        var self = this;
        var valid = true;
        var message = "Поле не заполнено или некорректно введены данные";
        self.$(self.selector).find(".notEmpty").removeAttr("title");
        self.$(self.selector).find(".notEmpty").removeClass("ui-state-error");
        self.$(self.selector).find(".notEmpty").each(function(){
            if(self.$(this).is('input'))
                if(self.$(this).val() <= 0)
                {
                    self.$(this).addClass("ui-state-error");                    
                    self.$(this).attr("title",message );
                    valid = false;
                }            
            if(self.$(this).is('textarea'))
                if(self.$(this).val() <= 0)
                {
                    self.$(this).addClass("ui-state-error");
                    self.$(this).attr("title", message);
                    valid = false;
                }
				
            if(self.$(this).is('select'))
                if(self.$(this).val() <= 0)
                {
                    self.$(this).addClass("ui-state-error");
                    self.$(this).attr("title", message);
                    valid = false;
                }

				
            if(self.$(this).hasClass('isEmail'))            
            {
                var email = self.$(this).val();
				alert(email);
                var re = new RegExp('[a-z0-9\.\-_]+@[a-z0-9\.\-_]+\.[a-z0-9]{2,4}');
                if(!re.exec(email))
                {
                    self.$(this).addClass("ui-state-error");                    
                    self.$(this).attr("title", message);
                    valid = false;
                }                
            }
			
            if(self.$(this).hasClass('isInn'))            
            {
                var inn = self.$(this).val();
                var re = new RegExp('[0-9]');
                if(inn && !re.exec(inn))
                {
                    self.$(this).addClass("ui-state-error");                    
                    self.$(this).attr("title", "Поле должно быть целочисленным");
                    valid = false;
                }                
            }
        });
        return valid;
    }
    
}

getItem = function(id,title)
{
    var d = jQuery('<div id="item-ui-gialog"></div>');
	jQuery('#wait-cont').show();
    jQuery.post('/category/getitem', {id:id}, function(r){
        d.html(r);
        d.dialog({
           modal: true,
           title: title,
           width: 800,
           minHeight : 600,
           resizable: false, 
		   close: function(ev, ui) {  $(this).remove(); }
        });		
		jQuery('#wait-cont').hide();
    });
} 

Login = function()
{
    var self = this;    
}
Login.prototype = 
{
    doLogin: function()
    {
         handlerForm.init("#loginForm", ".result-login-form").ajax();
    },
    doReg : function ()
    {
        handlerForm.init("#regForm", ".result-reg-form").ajax();
    },
    save : function ()
    {
        handlerForm.init("#editForm", ".result-edit-form").ajax();
    }
}
_login = new Login();

$(function(){
	$('label.notEmpty').append('<span style="color:red">*</span>');
	});


	

