
if (typeof Object.create !== 'function') {
    Object.create = function (o) {
        function F() {}
        F.prototype = o;
        return new F();
    };
}

$LI={}
$LI.REQ={
  radixtools:'/tools/',
  getRadixTools:function(){return radixtools;},
  getUrl: function(aApp){
    try{
      return this.radixtools+aApp+"/data/";
    }catch(e){alert("Paramétrage framwork non défini")}
  },
  callBack:null,
  working:false,
  get:  function(aApp,aParams,aCallBack){
      this.send(aApp,"get.php",this.buildParams(aParams),aCallBack) 
  },
  add:  function(aApp,aParams,aCallBack){
      this.send(aApp,"add.php",this.buildParams(aParams),aCallBack) 
  }, 
  update:  function(aApp,aParams,aCallBack){
      this.send(aApp,"update.php",this.buildParams(aParams),aCallBack) 
  },  
  remove:  function(aApp,aParams,aCallBack){
      this.send(aApp,"remove.php",this.buildParams(aParams),aCallBack) 
  },   
  buildParams:function(aParam){
    if(typeof(aParam.form)=="undefined") return aParam;
    return $(aParam.form).serialize();
  }, 
  send:  function(aApp,aPhp,aParams,aCallBack){
    if(this.working) return;
    this.callBack=aCallBack;
    this.working=true;
    var myAjax = new Ajax.Request(
      this.getUrl(aApp)+aPhp,
      {
        method: 'post',
        parameters: aParams,
        onComplete: this.receive
      });  
  },
  receive: function(xhr){
    if (xhr.status == 200){
        if(typeof($LI.REQ.callBack)=="undefined") return;
        if($LI.REQ.callBack==null) return;
        $LI.REQ.callBack(xhr.responseJSON);
        $LI.REQ.working=false;  
    }else{
        alert(xhr.status);
    }
  }
}

$LI.POPUP = {
  autoClose:null,
  show: function(aName,aContent,aTitle,aTop,aLeft,aHeight,aWidth,aModal,aEffect,aBtn,aAutoClose) {
          //document.body.style.overflow="hidden";
          this.build(aName,aContent,aTitle);
          jQuery("#"+aName).dialog({modal:aModal, hide:aEffect, show:aEffect , height: aHeight, width:aWidth, position:[aLeft,aTop],buttons:aBtn, close:function(event, ui) {$LI.POPUP.close(aName)}});
          jQuery("#"+aName).dialog("open");    
          if(aAutoClose!=0) this.autoClose=window.setTimeout("$LI.POPUP.close('"+aName+"')",aAutoClose*1000);
  },
  close : function (aId){
      try{
        this.destroy(aId);
         if(this.autoClose!=null) {
            window.clearTimeout(this.autoClose);
            this.autoClose=null;
          } 
      }catch(e){}
      //document.body.style.overflow="auto";
  },
  build : function(aName,aContent,aTitle) {
    var wDMain = new Element('div', {'id':aName, 'title':aTitle });
    wDMain.insert(aContent);
    Element.insert(document.body, wDMain);
  },
  destroy: function(aName) {
    try{
      var wa=$(aName).ancestors()[0];
      wa.remove();
    }catch(e){}
  }
}
$LI.window={
  centerY: function(){
            var wSize=document.viewport.getDimensions();
            var wScroll=document.viewport.getScrollOffsets();
            return (wSize.height/2)
  },
  height : function(){
            var wSize=document.viewport.getDimensions();
            var wScroll=document.viewport.getScrollOffsets();
            return (wSize.height)
            //return (typeof(document.body.offsetHeight)!='undefined') ? document.body.offsetHeight : window.innerHeight;
  },
  width : function(){
            var wSize=document.viewport.getDimensions();
            var wScroll=document.viewport.getScrollOffsets();
            return (wSize.width)
          //return (typeof(document.body.offsetWidth)!='undefined') ? document.body.offsetWidth : window.innerWidth;
  }
}
$LI.SELECTOR={
  show:function(aH,aW){
    try{
    $LI.POPUP.destroy(this.id)
    var wTop=($LI.window.height()/2) - (aH/2) - 100;
    var wLeft=($LI.window.width()/2) - (aW/2);
    var wO=this
    var wBtn={}
    wBtn[">>"]=function() { wO.next()};
    wBtn["<<"]=function() { wO.previous()};   
    $LI.POPUP.show(this.id,this.build(),this.title,wTop,wLeft,aH,aW,false,null,wBtn,0);
    this.setOnClick()
    }catch(e){alert(e.description)}   
  },
  setOnClick:function(){
    $(this.id+"_Content").onclick=associateObjWithEvent(this, "doClick")
  },
  doClick:function(ev,el){
    var wEvt=Event.extend(ev)
    if(!wEvt.element().hasClassName("selectable")) return
    if(this.closeOnSelect) $LI.POPUP.close(this.id);
    this.setSelect(wEvt.element())
  },
  setSelect:function(el){
  },
  next:function(){
    this.firstdisp=Math.min(this.firstdisp+this.nb,this.data.length-1);
    $(this.id+"_Content").update(this.buildContent())
  },
  previous:function(){
      this.firstdisp=Math.max(this.firstdisp-this.nb,0);
    $(this.id+"_Content").update(this.buildContent())
  }
}
$LI.PHOTOSELECTOR = Object.create($LI.SELECTOR);
$LI.PHOTOSELECTOR.initialize=function(init){
  for(var o in init){
     this[o] = init[o];    
  } 
}
$LI.PHOTOSELECTOR.show=function(aId,aTitle,aData,aApp,aCallBackSelect,aCloseOnSelect,aNb){
    this.initialize({id:aId,title:aTitle,data:aData,app:aApp,
                    closeOnSelect:aCloseOnSelect,callBack:aCallBackSelect,
                    firstdisp:0,nb:aNb});
    $LI.SELECTOR.show.call(this,340,360)   
};
$LI.PHOTOSELECTOR.build=function(){
    var wr=new Array();
    wr.push("<div class='photo-main'>");
    wr.push("<div class='photo-header'>");  
    wr.push("</div>");  
    wr.push("<div id='"+this.id+"_Content' class='photo-cadre'>");  
    wr.push(this.buildContent());
    wr.push("</div>");
    wr.push("<div class='photo-footer'>");  
    wr.push("</div>");
    wr.push("</div>");
  
    return wr.join("");
};
$LI.PHOTOSELECTOR.buildContent=function(){
    var wr=new Array()
    for (var i=this.firstdisp;i<Math.min(this.firstdisp+this.nb,this.data.length);i++){
    wr.push("<a href='javascript:'><div class='selectable photo-cadre-inner' id='IMG_"+i+"' style='background-image:url(/images/"+this.app+"/"+this.data[i]+")'>");
    wr.push("</div></a>");
    }
    return wr.join("");
};
$LI.PHOTOSELECTOR.setSelect=function(el){
    var wIdx=el.id.split("_")[1];
    this.callBack(this.data[wIdx]);
  }

$LI.LISTSELECTOR = Object.create($LI.SELECTOR);

$LI.LISTSELECTOR.titles=null;
$LI.LISTSELECTOR.initialize=function(init){
  for(var o in init){
     this[o] = init[o];    
  } 
} 
$LI.LISTSELECTOR.show=function(aId,aTitle,aData,aApp,aCallBackSelect,aCloseOnSelect,aTitles,aNb){
   
    this.initialize({id:aId,title:aTitle,data:aData,app:aApp,
                    closeOnSelect:aCloseOnSelect,callBack:aCallBackSelect,
                    firstdisp:0,titles:aTitles,nb:aNb});
    var wH=Math.max(((aNb+1) * 20) + 75 +19, 150);
    $LI.SELECTOR.show.call(this,wH,340);   
}
$LI.LISTSELECTOR.build=function(){
    var wr=new Array();
    wr.push("<div class='liste-main'>"); 
    wr.push("<div id='"+this.id+"_Content' class='liste-cadre'>");  
    wr.push(this.buildContent());
    wr.push("</div>");
    wr.push("</div>");
    return wr.join("");
};
$LI.LISTSELECTOR.buildHeader=function(){
    var wr=new Array()
    wr.push("<tr class='liste-table-header'>")
    for (var i=0;i<this.titles.length;i++){
      wr.push("<td class='liste-header-inner'>");
      wr.push(this.titles[i])
      wr.push("</td>");
    }
    wr.push("</tr>")
    return wr.join("");
};
$LI.LISTSELECTOR.buildContent=function(){
    var wr=new Array()
    wr.push("<table class='liste-table'>")
    wr.push(this.buildHeader())
    for (var i=this.firstdisp;i<Math.min(this.firstdisp+this.nb,this.data.length);i++){
      wr.push(this.buildLine(i,this.data[i]))
    };
    wr.push("</table>");
    return wr.join("");
};
$LI.LISTSELECTOR.buildLine=function(aI,aData){
    var wr=new Array()
    wr.push("<tr class='liste-line'>")
    var wKey;
    wi=0;
    for (wKey in aData){
        wr.push(this.buildColonne(aI,wKey,aData[wKey]))
        wi++    
    }
    wr.push("</td>")
    return wr.join("");
};
$LI.LISTSELECTOR.buildColonne=function(aLine,aName,aContent){
    var wr=new Array();
    wr.push("<td class='liste-colonne'>");
    wr.push("<a class='selectable' href='javascript:' id='"+aName+"_"+aLine+"'>");
    wr.push(aContent);
    wr.push("</a></td>");
    return wr.join("");  
};
$LI.LISTSELECTOR.setSelect=function(el){
    var wNl=el.id.split("_")[1]
    this.callBack(this.data[wNl])
};
$LI.CARDVIEWER={
  show:function(aId,aTitle,aData,aApp,aCallBackSelect,aCloseOnSelect){
    try{
      this.initialize({id:aId,title:aTitle,data:aData,app:aApp,
                    closeOnSelect:aCloseOnSelect,callBack:aCallBackSelect});
      $LI.POPUP.destroy(this.id)
      var wH=260;
      var wW=560;
      var wTop=($LI.window.height()/2) - (wH/2) - 100;
      var wLeft=($LI.window.width()/2) - (wW/2);
      var wO=this  
      $LI.POPUP.show(this.id,this.build(),this.title,wTop,wLeft,wH,wW,false,null,null,0);
      this.setOnClick()
    }catch(e){alert(e.description)}   
  },
  initialize:function(init){
    for(var o in init){
       this[o] = init[o];    
    } 
  },
  build:function(){
    var wr=new Array();
    wr.push("<div class='card-cadre' id='"+this.id+"_Content'>")
    wr.push("<div class='card-photo' style='background-image:url(/images/"+this.app+"/"+this.data.photo+")'> </div>");
    var wF="<b>"+this.data.firstname+" "+this.data.lastname+"</b>"
    if(this.data.email!=0){
      wF+="<a class='selectable' style='float:right;position:relative;top:0px;' href='javascript:'/>me contacter</a>"
    }
    wr.push(this.buildLine("",wF)); 
    wF=""
    if(this.data.age!=0){ 
      wF=this.data.age+" ans";
      if(this.data.family!="") wF+=", "
    }
    wF+=this.data.family;
    //if(wF!="") wF+=", "
    //wF+=this.data.mainjob;
    wr.push(this.buildLine("",wF)); 
    wr.push(this.buildLine("",this.data.mainjob));
    wr.push('<div class="card-line-cal"> </div>');
    wr.push(this.buildLine("",this.data.job));
    wr.push('<div class="card-line-cal"> </div>');
    wr.push(this.buildLine("",this.data.fonctionm));
    wr.push("</div>");
    wr.push('<div class="card-line-cal"> </div>');
    wr.push(this.formatComment(this.data.comment,true));
    wr.push("</div>");
    return wr.join("");
  },
  buildLine:function(aLib,aValue){
      var wr=new Array();
      if(typeof(aValue)!="undefined" && aValue!=""){
        wr.push('<div class="card-line">');
        if(aLib!="") wr.push('<div class="card-caption">'+aLib+'</div>');
        wr.push('<div class="card-info">'+((aLib!="") ? " : " : "")+aValue+'</div>');
        wr.push('</div>');
      };
      return wr.join("");
  },
  formatComment:function(aValue,acr){
    if(aValue=="" || aValue==" ") return '';
    var wl=aValue.split("\n");
    if(acr) var wr=wl.join("<br/>")
    else var wr=wl.join(" ")
    return "<p class='card-comment'><i>\""+wr+"\"</i></p>"
  },
  setOnClick:function(){
    $(this.id+"_Content").onclick=associateObjWithEvent(this, "doClick")
  },
  doClick:function(ev,el){
    var wEvt=Event.extend(ev)
    if(!wEvt.element().hasClassName("selectable")) return
    if(this.closeOnSelect) $LI.POPUP.close(this.id);
    this.setSelect(wEvt.element())
  },
  setSelect:function(el){
    $LI.MAILER.show("mailer","Contacter "+this.data.firstname+" "+this.data.lastname,{mail:'',title:'',mcontent:'',code:this.data.code},this.app,null,true)
  }
}
$LI.MAILER={
  show:function(aId,aTitle,aData,aApp,aCallBackSelect,aCloseOnSelect,aW,aH){
    try{
      this.initialize({id:aId,title:aTitle,data:aData,app:aApp,
                    closeOnSelect:aCloseOnSelect,callBack:aCallBackSelect});
      $LI.POPUP.destroy(this.id)
      var wH=360;
      if(aH!=undefined) wH=aH
      var wW=450;
      if(aW!=undefined) wW=aW
      var wTop=($LI.window.height()/2) - (wH/2) - 100;
      var wLeft=($LI.window.width()/2) - (wW/2);
      var wO=this
      var wBtn={}
      wBtn["Envoyer"]=function() { wO.send()};
      wBtn["Annuler"]=function() { wO.close()};     
      
      $LI.POPUP.show(this.id,this.build(),this.title,wTop,wLeft,wH,wW,false,null,wBtn,0);
      this.setOnClick()
    }catch(e){alert(e.description)}   
  },
  initialize:function(init){
    for(var o in init){
       this[o] = init[o];    
    } 
  },
  close:function(){
    $LI.POPUP.close(this.id);
  },
  build:function(){
    var wr=new Array();
    wr.push("<form id='frmmailer'>")
    wr.push("<input type='hidden' name='code' id='code' value='"+this.data.code+"'>")
    wr.push("<input type='hidden' name='id' id='id' value='"+this.id+"'>")
    wr.push("<div class='mailer-cadre' id='"+this.id+"_Content'>")
    wr.push("<div class='mailer-line'>")
    wr.push("<div class='mailer-caption'>De : </div>");
    wr.push("<input  class='mailer-input' type='text' name='mail' id='mail' size='30' value='"+this.data.mail+"'>")
    wr.push("</div>")
    wr.push("<div class='mailer-line'>")
    wr.push("<div class='mailer-caption'>Objet : </div>");
    wr.push("<input class='mailer-input' type='text' name='title' id='title' size='51' value='"+this.data.title+"'>")   
    wr.push("</div>")
    wr.push("<div class='mailer-line'>")
    wr.push("<textarea class='mailer-content' cols='58' type='text' name='mcontent' id='mcontent'>"+this.data.mcontent+"</textarea>")   
    wr.push("</div>")
    wr.push("</div></form>")
    return wr.join("");
  },
  setOnClick:function(){
    $(this.id+"_Content").onclick=associateObjWithEvent(this, "doClick")
  },
  doClick:function(ev,el){
    var wEvt=Event.extend(ev)
    if(!wEvt.element().hasClassName("selectable")) return
    if(this.closeOnSelect) $LI.POPUP.close(this.id);
    this.setSelect(wEvt.element())
  },
  setSelect:function(el){
  },
  send:function(){
    $LI.REQ.send(this.app,"sendfreemail.php",$LI.REQ.buildParams({form:'frmmailer'}),this.setReply)
  },
  setReply:function(aJSON){
     if(typeof(aJSON.messages)!="undefined"){
      $LI.popMess(aJSON.id+"mess",aJSON.title,aJSON.messages);
      if(aJSON.messages.type==0) $LI.POPUP.close(aJSON.data.id);
     }
  }
}
$LI.SENDFREND = Object.create($LI.MAILER);
$LI.SENDFREND={
  show:function(aId,aTitle,aData,aApp,aCallBackSelect,aCloseOnSelect){
    try{
      $LI.MAILER.show.call(this,aId,aTitle,aData,aApp,aCallBackSelect,aCloseOnSelect,600,380);
    }catch(e){alert(e.description)}  
  },
  initialize:function(init){
    for(var o in init){
       this[o] = init[o];    
    } 
  },
  build:function(){
    var wr=new Array();
    wr.push("<form id='frmmailer'>")
    wr.push("<input type='hidden' name='code' id='code' value='"+this.data.code+"'>")
    wr.push("<input type='hidden' name='id' id='id' value='"+this.id+"'>")
    wr.push("<div class='mailer-cadre' id='"+this.id+"_Content'>")
    wr.push("<div class='mailer-line'>")
    wr.push("<div class='mailer-caption'>De : </div>");
    wr.push("<input  class='mailer-input' type='text' name='mail' id='mail' size='30' value='"+this.data.mailFrom+"'> (Facultatif)")
    wr.push("</div>")
    wr.push("<div class='mailer-line'>")
    wr.push("<div class='mailer-caption'>A : </div>");
    wr.push("<input  class='mailer-input' type='text' name='mailto' id='mailto' size='30' value='"+this.data.mail+"'>")
    wr.push("</div></form>")
    wr.push("<div class='mailer-line'>")
    wr.push("<div class='mailer-caption'>Objet : </div>");
    wr.push("<input class='mailer-input' readonly=true type='text' name='title' id='title' size='70' value='"+this.data.title+"'>")   
    wr.push("</div>")
    wr.push("<div class='mailer-line'>")
    wr.push("<textarea class='mailer-content' readonly=true cols='78' type='text' name='mcontent' id='mcontent'>"+this.data.mcontent+"</textarea>")   
    wr.push("</div>")
    wr.push("</div>")
    return wr.join("");
  },
  setOnClick:function(){
     $LI.MAILER.setOnClick.call(this)
  },
  doClick:function(ev,el){
    $LI.MAILER.doClick.call(this,ev,el);
  },
  setSelect:function(el){
  },
  send:function(){
    $LI.REQ.send(this.app,"sendfreemail.php",$LI.REQ.buildParams({form:'frmmailer'}),this.setReply)
  },
  setReply:function(aJSON){
    $LI.MAILER.setReply.call(this,aJSON);
  },
  close:function(){
    $LI.POPUP.close(this.id);
  }
}

$LI.FREESENDFREND={
  get:function(aid){
    $LI.REQ.send("sendtofriend","getData.php","code="+aid,$LI.FREESENDFREND.callBack)
  },
  callBack:function(aJSON){
     if(typeof(aJSON.messages)!="undefined"){
          $LI.popMess(aJSON.id,aJSON.title,aJSON.messages);
     }else{
          $LI.SENDFREND.show(aJSON.id,aJSON.title,aJSON.data,"sendtofriend",null,false)
     }
  }
}

$LI.FREECARD={
  get:function(aid){
    $LI.REQ.send("identity","getfreecard.php","id="+aid,$LI.FREECARD.callBack)
  },
  callBack:function(aJSON){
     if(typeof(aJSON.messages)!="undefined"){
          $LI.popMess(aJSON.id,aJSON.title,aJSON.messages);
     }else{
          $LI.CARDVIEWER.show(aJSON.id,aJSON.title,aJSON.data,"identity",null,false)
     }
  }
}
$LI.popMess=function(aId,aTitle,aMessages){
  var wAutoClose=aMessages.list.length + 2
  $LI.POPUP.close(aId)
  var wH=Math.max((aMessages.list.length * 20) + 80, 150);
  wH=Math.min(wH, 550);
  var wW=aTitle.length;
  for (var i=0;i<aMessages.list.length;i++){
    wW=Math.max(aMessages.list[i].length,wW)
  }
  wW=(wW*7)+ 30;
  wW=Math.max(wW, 350);
  wW=Math.min(wW, 800);
  var wTop=($LI.window.height()/2) - (wH/2) - 100;
  var wLeft=($LI.window.width()/2) - (wW/2);
  var wCallBack=(typeof(callBackOk)!="undefined") ? callBackOk : null;
  if(aMessages.type==2){
    wCallBack=null;
  }
  var wMess=aMessages.list.join("</div><div class='mess'>");
  var wBtn={}
  if(aMessages.type==1){
      wBtn["Annuler"]=function() { jQuery("#"+aId).dialog("close")};
      wAutoClose=20;
   }
   wAutoClose=0
  wBtn["Ok"]=function() { jQuery("#"+aId).dialog("close");if(wCallBack!=null) wCallBack(aId)};
  $LI.POPUP.show(aId,"<div class='mess'>"+wMess+"</div>",aTitle,wTop,wLeft,wH,wW,false,null,wBtn,wAutoClose)
}
//--------------------------------------------------
function associateObjWithEvent(obj, methodName){
    return (function(e){
        e = e||window.event;
        return obj[methodName](e, this);
    });
}