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;}};

String.prototype.md_protect   = function(){var c=this;c=String(c).md_replace("'", '__MDQUOTE__');c=String(c).md_replace('"', '__MDDQUOTE__');c=String(c).md_replace(" ", '__MDSPACE__');return c;};
String.prototype.md_unprotect = function(){var c=this;c=String(c).md_replace('__MDQUOTE__', "'");c=String(c).md_replace('__MDDQUOTE__', '"');c=String(c).md_replace('__MDSPACE__', " ");return c;};

String.prototype.trim         = function(){var c = this.replace(/^\s+/, '');return c.replace(/\s+$/g,'');};
String.prototype.md_replace   = function(b,c){var a = this.split(b); return a.join(c)};

document.mdgskin = '###gskin###';
document.mdskin = '###skin###';
document.mdalias = '###alias###';
document.mdcgi = '###cgi###';

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.mdsubmit=function(){obj.sendAjax(this);};
      o.addEvent('submit',function(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)
        {
          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');}
  },
  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');}
      }
    }
  }
});
*/

