md={};

md.is=function(a,b)
{
  if(a.constructor.toString().indexOf(b)==-1){return false;}
  else{return true;}
}

md.frmAjax=new Class(
{
  Implements: [Options,Events],
  options: {
		classFrm          : 'toajax',
		classError        : 'error',
		classErrorInput   : 'inputcheckerror',
		onError           : $empty,
    onSuccess         : $empty
	},
  initialize: function(options)
  {
    this.setOptions(options);
    var obj = this;
    $$('.'+this.options.classFrm).each(function(o,i)
    {
      o.addEvent('submit',function(e)
      {
        e.stop();
        obj.clearError();
        this.set('send',
        {
          onComplete: function(xml)
          {
            var oJson = xml2json.parser(xml);
            oJson     = oJson.xml;

            if(oJson.success == 1)
            {
              obj.fireEvent("onSuccess");
            }
            else
            {
              var aErr=oJson.errors.error;
              if(md.is(aErr,'Array'))
              {
                for(var i=0;i<aErr.length;i++)
                {
                  obj.traiteError(aErr[i],o.id);
                }
              }
              else
              {
                obj.traiteError(aErr,o.id);
              }
              obj.fireEvent("onError");
            }
          }
        });
        this.send();
      });
    });
  },
  clearError:function()
  {
    var clsError = this.options.classError;
    $$('input.'+clsError).removeClass(clsError);
    $$('textarea.'+clsError).removeClass(clsError);
    $$('select.'+clsError).removeClass(clsError);
    $$('.'+clsError).setStyle('display','none');
  },
  traiteError:function(c,id)
  {
    var aTmp=String(c).split('_');
    var clsError = this.options.classErrorInput;
    var strInpId=aTmp[0].toLowerCase();
    if($(strInpId))
    {
      if($(strInpId).get('tag')=="div")
      {
        $$('#'+strInpId+' select').addClass(clsError);
      }
      else
      {
        $(strInpId).addClass(clsError);
      }
    }

    var c = 'ERROR_'+String(c).toLowerCase();
    if($(c)){$(c).setStyle('display','block');}
    else
    {
      var c = 'ERROR_'+String(aTmp[0]).toLowerCase()+'_'+String(aTmp[1]).toLowerCase();
      if($(c)){$(c).setStyle('display','block');}
      else
      {
        var c = 'ERROR_'+String(aTmp[0]).toLowerCase();
        if($(c)){$(c).setStyle('display','block');}
        else if($('ERROR')){$('ERROR').setStyle('display','block');}
      }
    }
  }
});

