var MD = (MD) ? MD : {};

MD.aSpecChar        = new Array(64,35,38,33,93,91,40,41); //$ AUTORISER : @ # & ! ] [ ( )
MD.aRefuChar        = new Array(48,79,111); //$ REFUSER : 0 o O
MD.generatePassword = function(iLength){var iLength = (iLength) ? iLength : 0;var bNumCharOnly = (bNumCharOnly) ? bNumCharOnly : false;var strPassword = "";if (iLength == 0){iLength = Math.random();iLength = parseInt(iLength * 100);iLength = (iLength % 7) + 6;};for (var iIndex = 0; iIndex < iLength; iIndex++){var iNum = this.getPasswordNum();while(this.checkPassword(iNum)){iNum = this.getPasswordNum();};strPassword = strPassword + String.fromCharCode(iNum);}var bHasSpecChar = false;for(var iIndex = 0; iIndex < String(strPassword).length; iIndex++){if(this.checkSpecChar(String(strPassword).charCodeAt(iIndex))){bHasSpecChar=true;}}if(bHasSpecChar == false){strPassword = strPassword.substr(0,(iLength-1));strPassword+= this.getSpecChar();}return strPassword;};
MD.getPasswordNum   = function (){var iRndNum = Math.random();iRndNum = parseInt(iRndNum * 1000);iRndNum = (iRndNum % 94) + 33;return iRndNum;};
MD.getSpecChar      = function(){var iIndSpCh = Math.floor(Math.random() * this.aSpecChar.length);var strSpeCh = String.fromCharCode(this.aSpecChar[iIndSpCh]);return strSpeCh;};
MD.checkSpecChar    = function (iNum){for(var iSpC = 0; iSpC < this.aSpecChar.length; iSpC++){if(iNum == this.aSpecChar[iSpC]){return true;};}return false;};
MD.checkRefuChar    = function (iNum){for(var iRfC = 0; iRfC < this.aSpecChar.length; iRfC++){if(iNum == this.aRefuChar[iRfC]){return true;};}return false;};
MD.checkPassword    = function(iNum){if(this.checkRefuChar(iNum)){return true;};if(this.checkSpecChar(iNum)){return false;};if((iNum >=33) && (iNum <=47)){return true;};if((iNum >=58) && (iNum <=64)){return true;};if((iNum >=91) && (iNum <=96)){return true;};if((iNum >=123) && (iNum <=126)){return true;};return false;};
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.removeEvents('submit');
      o.addEvent('submit',function(e)
      {
		//alert(e);
        e.stop();
        obj.clearError(this);
        obj.sendAjax(this);
      });
    });
  },
  sendAjax: function(el)
  {
	obj     = this;
	el.set('send',
	{
	  onComplete: function(xml)
	  {
		var oJson = xml2json.parser(xml);
		oJson     = oJson.xml;

		if(oJson.success == 1)
		{
		  //console.debug(this);
		  var c = 'ERRORS-'+el.get('id');
      if($(c)){$(c).setStyle('display','none');}
		  var c = 'SUCCESS-'+el.get('id');
      if($(c)){$(c).setStyle('display','block');}
		  obj.fireEvent("onSuccess",[el,oJson]);
		}
		else
		{
		  var aErr=oJson.errors.error;
		  if(MD.is(aErr,'Array'))
		  {
			for(var i=0;i<aErr.length;i++)
			{
			 obj.traiteError(aErr[i],el.id, el);
			}
		  }
		  else
		  {
			obj.traiteError(aErr,el.id,el);
		  }
		  var c = 'SUCCESS-'+el.get('id');
      if($(c)){$(c).setStyle('display','none');}
		  var c = 'ERRORS-'+el.get('id');
      if($(c)){$(c).setStyle('display','block');}
		  obj.fireEvent("onError",[el,oJson]);
		}
	  }
	});
	el.send();
  },
  clearError:function(win)
  {
    var clsError = this.options.classError;
    $$('input.'+clsError).removeClass(clsError);
    $$('textarea.'+clsError).removeClass(clsError);
    $$('select.'+clsError).removeClass(clsError);
    $$('.'+clsError).setStyle('display','none');
    var c = 'ERRORS-'+win.get('id');
    if($(c)){$(c).setStyle('display','none');}
	  var c = 'SUCCESS-'+win.get('id');
    if($(c)){$(c).setStyle('display','none');}
//    console.debug(win);
  },
  traiteError:function(c,id,win)
  {
    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-'+win.get('id')+'_'+String(c).toLowerCase();
    if($(c)){$(c).setStyle('display','block');}
    else
    {
      var c = 'ERROR-'+win.get('id')+'_'+String(aTmp[0]).toLowerCase()+'_'+String(aTmp[1]).toLowerCase();
      if($(c)){$(c).setStyle('display','block');}
      else
      {
        var c = 'ERROR-'+win.get('id')+'_'+String(aTmp[0]).toLowerCase();
        if($(c)){$(c).setStyle('display','block');}
        else if($('ERROR-'+win.get('id'))){$('ERROR-'+win.get('id')).setStyle('display','block');}
      }
    }
  }
});

/*
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();
        var frmId = this.id;
        this.set('send',
        {
          onComplete: function(xml)
          {
            var oJson = xml2json.parser(xml);
            oJson     = oJson.xml;

            if(oJson.success == 1)
            {
              obj.fireEvent("onSuccess", frmId);
            }
            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", frmId);
            }
          }
        });
        this.send();
      });
    });
  },
  clearError:function()
  {
    var clsError = this.options.classErrorInput;
    $$('input.'+clsError).removeClass(clsError);
    $$('textarea.'+clsError).removeClass(clsError);
    $$('select.'+clsError).removeClass(clsError);
    $$('[class^=ERROR_]').each(function(o,i)
    {
     o.removeClass(clsError);
    });
    $$('.'+this.options.classError).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);
      }
    }
    $$('.ERROR_'+strInpId).each(function(o,i)
    {
     o.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');}
      }
    }
  }
});
*/

