// JavaScript Document
// Affichage de photo 
function SlideShow(element,folder){
  this.element=element;
  this.fileList=new Array();
  this.fileWidth=new Array();
  this.fileHeight=new Array();
  this.toLoad=true;
  this.currentFile=0;
  this.timer;
  this.loaded;
  this.listUrl="/list_photo2.xml?folder="+folder; //XML source of images
  this.interval=5; //interval en second
  this.img=new Array();
  this.currentImg=0;
  this.W=document.getElementById(element).clientWidth;
  this.H=document.getElementById(element).clientHeight;
  this.stopped=true;
  
  this._change=function(){
    var mthis=this;
    this.img[this.currentImg].src=this.fileList[this.currentFile];
    this.img[this.currentImg].style.top=((this.H-this.fileHeight[this.currentFile]))/2+"px";
    this.img[this.currentImg].style.left=((this.W-this.fileWidth[this.currentFile]))/2+"px";
    
    var tmp=new Effect.Appear(this.img[this.currentImg],{duration:2});
    this.currentImg=(this.currentImg===0?1:0);
    
    var tmp=new Effect.Fade(this.img[this.currentImg],{duration:2,afterFinish: function(){mthis._setNewInterval()}});  
  };
  
  
  this._setNewInterval=function(){
    var mthis=this;
    if(this.stopped){return false;}
    if(this.toLoad) this.loadNextFile();
    this.timer = setTimeout(function(){mthis._change()},this.interval*1000);
    this.currentFile++;
    if(this.currentFile==this.fileList.length){
      this.currentFile=0;
      this.toLoad=false;
    }
    
  };
  
  this.loadNextFile=function(){
    var tmpidx=this.currentFile+1;
    tmpidx=(tmpidx==this.fileList.length?0:tmpidx);
    xhr=init_XMLhttpRequest();
    var url=this.fileList[tmpidx];
    xhr.open('GET',url,true);
    var mthis=this;
    xhr.onreadystatechange = function(){
    	if(xhr.readyState == 4 && xhr.status==200) {
    		mthis.loaded=true;
    	}
    };
    xhr.send(null); 
  };
  
  this.startSlideShow=function(){
    if(this.stopped){
    this.loadList(this.listUrl);
    this.stopped=false;
    }
  };
  
  this.loadList=function(){
    xhr=init_XMLhttpRequest();
      var url=this.listUrl;
      xhr.open('GET',url,true);
    var mthis=this;
    xhr.onreadystatechange = function(){
    	if(xhr.readyState == 4 && xhr.status==200) {
    		mthis.dom=xhr.responseXML;
    		var els=mthis.dom.getElementsByTagName('element');
    		for(var i=0;i<els.length;i++){
          mthis.fileList[mthis.fileList.length]=els[i].getAttribute('filename');
          mthis.fileWidth[mthis.fileWidth.length]=els[i].getAttribute('width');
          mthis.fileHeight[mthis.fileHeight.length]=els[i].getAttribute('height');
        }
        mthis.loadNextFile();
        mthis._change();
    	}
    };
    xhr.send(null); 
    
  }
  
  this.stopSlideShow=function(){
    this.stopped=true;
    clearTimeout(this.timer);
    var mthis=this;
    this.img[0].style.display='none';
    this.img[1].style.display='none';
    
    //document.getElementById(this.element).onclick=function(){mthis.startSlideShow()};
  };
  this.build=function(){
    var mthis=this;
    //document.getElementById(this.element).onclick=function(){mthis.stopSlideShow()};
    this.img[0]=document.createElement('img');this.img[1]=document.createElement('img');
    this.img[0].style.display='none';this.img[1].style.display='none';
    
    document.getElementById(this.element).appendChild(this.img[0]);
    document.getElementById(this.element).appendChild(this.img[1]);
  }
  this.build();
  this.startSlideShow();
}

//initiate XMLrequest
function init_XMLhttpRequest(){
  if (window.XMLHttpRequest){
    //Firefox ou IE >= 7.0
    tmp_xhr = new XMLHttpRequest();
    return tmp_xhr;
  }else if (window.ActiveXObject){
    try { // essaie de charger l'objet pour IE
      tmp_xhr = new ActiveXObject("Msxml2.XMLHTTP");
      return tmp_xhr;
    }catch (e){
       try { // essaie de charger l'objet pour une autre version IE
          tmp_xhr = new ActiveXObject("Microsoft.XMLHTTP");
          return tmp_xhr;
       }catch (e){
          window.alert("Votre navigateur ne prend pas en charge l'objet XMLHTTPRequest.");
          return false;
       }
    } 
  }
}

// effet graphique menu
function toggleMenu(element){
  this.reverse=true;
  this.processing=false;
  this.id_timer;
  
  this._startEffect=function(event){
    var mthis=this;
    if(this.reverse && event=='over' && !this.processing){
      this.reverse=false;this.processing=true;
      new Effect.SlideDown(element,{duration:0.25,afterFinish:function(){mthis.processing=false;}});
    }else if(!this.reverse && event=='out' && !this.processing){
      this.reverse=true;this.processing=true;
      new Effect.SlideUp(element,{duration:0.25,afterFinish:function(){mthis.processing=false;}});
    }
  };
  
  this.toggle=function(event){
    var mthis=this;
    clearTimeout(this.id_timer);
    this.id_timer = setTimeout(function(){mthis._startEffect(event)},100);
  }
    
}




function loadTown(elid,cp){
  this.listUrl = '/towns.xml'
  this.el=document.getElementById(elid);
  xhrt=init_XMLhttpRequest();
      var url=this.listUrl+"?CP="+cp;
      xhrt.open('GET',url,true);
    var mthis=this;
    xhrt.onreadystatechange = function(){
    	if(xhrt.readyState == 4 && xhrt.status==200) {
    	toogleDisplay('reservationVilleLoading','hide');
    		mthis.dom=xhrt.responseXML;
    		var els=mthis.dom.getElementsByTagName('element');
    		
        for(var i=0;i<els.length;i++){
          ville=els[i].getAttribute('ville');
          cp=els[i].getAttribute('CP');
    		newEl = new Option(ville,cp,false,true);
        mthis.el.options[mthis.el.length] = newEl;
        }
        mthis.el.selectedIndex = -1;
    	}
    };
    for(var i=(this.el.length-1);i>=0;i--){
      this.el.options[i]=null;
    }
    toogleDisplay('reservationVilleLoading','show');
    xhrt.send(null);
}

function setCP(elid,el,el2){
  document.getElementById(elid).value=el.value;
 
}

function reservationCheck(mForm){
  var str="";
  var error = new Array();
  var datas = new Array();
  
  for(var i=0; i<mForm.elements.length;i++){
   switch(mForm.elements[i].name){
    case 'eventType':
      if(mForm.elements[i].value==""){
        error[error.length]="  - Selectionner un type d'évènement.";
        break;
      }
      datas[datas.length]="eventType="+encodeURI(mForm.elements[i].value);
      break;
    case 'reservationVille':
      if(mForm.elements[i].selectedIndex<0){
        error[error.length]="  - Selectionner une ville.";
        break;
      }
      var latA=xhrt.responseXML.getElementsByTagName('element')[mForm.elements[i].selectedIndex].getAttribute('lat');
      var lngA=xhrt.responseXML.getElementsByTagName('element')[mForm.elements[i].selectedIndex].getAttribute('long');
      datas[datas.length]="lieu="+encodeURI(mForm.elements[i].value+";"+mForm.elements[i].options[mForm.elements[i].selectedIndex].text+";"+lngA+","+latA);
      break;
    case 'reservationStart':
    case 'reservationEnd':
      var t;
      if(!(t=checkDate(mForm.elements[i].value))){
        error[error.length]="  - "+mForm.elements[i].value+" = Date invalide.";
        break; 
      }
      datas[datas.length]=mForm.elements[i].name+"="+t;
      break;
    case 'reservationEmail':
      if(!checkEmail(mForm.elements[i].value)){
        error[error.length]="  - Email invalide.";
        break;
      }
      datas[datas.length]="email="+encodeURI(mForm.elements[i].value);
      break;
    case 'reservationTel':
      if(!checkTel(mForm.elements[i].value)){
        error[error.length]="  - Telephone invalide.";
        break;
      }
      datas[datas.length]="tel="+encodeURI(mForm.elements[i].value.replace(/[^0-9]/g,''));
      break;
    case 'reservationBudget':
      if(mForm.elements[i].textLength==0){
        error[error.length]="  - Budget non renseigné.";
        break;
      }
      datas[datas.length]="budget="+encodeURI(mForm.elements[i].value);
      break;
    case 'reservationMessage':
      if(mForm.elements[i].textLength>500){
        error[error.length]="  - Le message est trop long.";
        break;
      }
      datas[datas.length]="message="+encodeURI(mForm.elements[i].value);
      break;
    case 'reservationCaptcha':
      if(!checkCaptcha(mForm.elements[i].value)){
        error[error.length]="  - Recopier les symboles";
        break;
      }
      datas[datas.length]="captcha="+encodeURI(mForm.elements[i].value);
      break;
    case 'emailCopy':
      if(mForm.elements[i].checked){
        datas[datas.length]="copy=true";
      }
      break;
    default:
      str+=mForm.elements[i].name+"="+mForm.elements[i].value+'\n';
      break;
   }
    
  }
  if(error.length>0){
    alert("Les erreurs suivantes ont été détectées, le formulaire ne peut etre envoyé. \n\n"+ error.join('\n'));
  }else{
    ressend=init_XMLhttpRequest();
    var url='send_reservation.php';
    ressend.open('POST',url,true);
    ressend.onreadystatechange = function(){
      if(ressend.readyState==4 && ressend.status==200){
        var dom=ressend.responseXML;
        toogleDisplay('reservationLoading','hide');
        if(dom){
        var els=dom.getElementsByTagName('element');
        var err=new Array();
        var error; var success;
        for(var i=0;i<els.length;i++){
          if(error=els[i].getAttribute('error')){
            err[err.length]=error;
          }else if(success=els[i].getAttribute('success')){
            
            document.getElementById('reservation_form').reset();
            alert('Votre demande a été envoyée avec succès !\n\nPascal prendra bientôt contact avec vous.\n\nMerci.');
          }
        }
        if(err.length>0){
          document.getElementById('reservationCaptchaImg').src="img/captcha.jpg?"+Math.random();
          alert("Les erreurs suivantes ont été détectées, le formulaire ne peut être envoyé. \n\n"+ err.join('\n'));
        }
        }else{alert("Une erreur s'est produite, veuillez recommencer");}
      }
    }
    ressend.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    ressend.send(datas.join('&'));
    toogleDisplay('reservationLoading','show');
  }
  
  return false;
}

function checkEmail(email){
var str=email;
var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
if (filter.test(str))
testresults=true
else{
testresults=false
}
return (testresults)
}
function checkCaptcha(captcha){
  var filter=/^[a-z0-9]{3,6}$/
 return filter.test(captcha);
 
}
function checkDate(mdate){
  var filter=/^([0-9]{2})\.([0-9]{2})\.([0-9]{4})$/;
  var a;
 var result=mdate.match(filter);
 if(result){
  if(a=new Date(parseInt(result[3],10),parseInt(result[2],10)-1,parseInt(result[1],10))){
    return a.getTime()/1000;
  }
 }
 return false;
}
function checkTel(tel){
  var tmp=tel.replace(/[^0-9]/g,'');
  var filter=/^[0-9]{10,}$/
 return filter.test(tmp);
 
}


Number.prototype.radian = function(){
  return this*Math.PI/180;
}

Number.prototype.arrondi = function(){
  l=this.toString().length
  switch(l){
    case 1:
      return 5+this-(this%5==0?this:this%5);
      break;
    case 2:
      return 10+this-(this%10);
      break;
    default:
      return 50+ this- (this%50);
      break;
  }
}

String.prototype.repeat = function(l){
  return new Array(l+1).join(this);
};

function countChar(el){
el.onchange=el.onmouseout=el.onmouseove=el.onclick=el.onkeyup=function(){
  document.getElementById('charleft').firstChild.nodeValue=(this.value.length);
}
}

function toogleDisplay(id,what){
  var el=document.getElementById(id)
  if(el){
  if(what=='show'){
    el.style.display='';
  }else{
    el.style.display='none';
  }
  }
}

function displayErrs(errs){
  if(errs.length>0){
    alert("Le serveur retourne les informations suivantes : \n" + errs.join("\n"));
    return false;
  }
  return true;
}

Date.prototype.fromRFC3339 = function(dString,format){  
    var regexp = /(\d\d\d\d)(-)?(\d\d)(-)?(\d\d)(T)?(\d\d)(:)?(\d\d)(:)?(\d\d)(\.\d+)?(Z|([+-])(\d\d)(:)?(\d\d))/;  
    if (dString.toString().match(new RegExp(regexp))) {  
       var d = dString.match(new RegExp(regexp));  
       var offset = 0;  

       this.setUTCFullYear(parseInt(d[1]));  
       this.setUTCMonth(d[3] - 1);  
       this.setUTCDate(d[5]);  
       this.setUTCHours(d[7]);  
       this.setUTCMinutes(d[9]);  
       this.setUTCSeconds(d[11]);  
       if (d[12])  
          this.setUTCMilliseconds(parseFloat(d[12]) * 1000);  
       else  
          this.setUTCMilliseconds(0);  
       if (d[13] != 'Z') {  
          offset = (d[15] * 60) + parseInt(d[17]);  
          offset *= ((d[14] == '-') ? -1 : 1);  
          this.setTime(this.getTime() - offset * 60 * 1000);  
       }  
    }  
    else {  
       this.setTime(Date.parse(dString));  
    }  
    return this;  
}
Date.prototype.format=function(format){
	format=format || "d.m.Y H:i:s";
	var f=format;
	var mt="";
	for(var mi=0;mi<f.length;mi++){
    switch(f.charAt(mi)){
      case "d":
        mt+=this.getDate().toString().padLeft('0',2);
        break;
      case "m":
        mt+=(this.getMonth()+1).toString().padLeft('0',2);
        break;
       case "Y":
        mt+=this.getFullYear().toString().padLeft('0',4);
        break;
      case "H":
        mt+=this.getHours().toString().padLeft('0',2);
        break;
      case "i":
        mt+=this.getMinutes().toString().padLeft('0',2);
        break;
      case "s":
        mt+=this.getSeconds().toString().padLeft('0',2);
        break;
      case "z":
        mt+=this.getDay().toString();
        break;
      default:
        mt+=f.charAt(mi);
      }
  }
  return(mt);
}

String.prototype.padLeft = function(strChar, intLength)
{
  return new Array(intLength+1-this.length).join(strChar)+this;
}

String.prototype.validStr = function(){
  return this.toLowerCase().strtr('Þßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŕ','bsaaaaaaaceeeeiiiidnoooooouuuyybyr').replace(/[^a-z0-9]/g,'_').replace(/_+/g,"_");;
}

String.prototype.strtr=function (from, to) {
    // *     example 2: strtr('äaabaåccasdeöoo', 'äåö','aao');
    // *     returns 2: 'aaabaaccasdeooo'
    var str=this;
    var fr = '', i = 0, lgth = 0;
 
    lgth = to.length;
    if (from.length < to.length) {
        lgth = from.length;
    }
    for (i = 0; i < lgth; i++) {
        str = str.replace(new RegExp(from.charAt(i),'g'), to.charAt(i));
    }
    return str;
}

function insertOption(elSel,value,text)
{
  opts=elSel.options
  var ib=opts.length-1;
  for(var i=0;i<opts.length;i++){
    if(value<opts[i].value){
      ib=i;break;
    }
  }
  if (true) {
    var elOptNew = document.createElement('option');
    elOptNew.text = text;
    elOptNew.value = value;
    var elOptOld = elSel.options[ib];  
    try {
      elSel.add(elOptNew, elOptOld); // standards compliant; doesn't work in IE
    }
    catch(ex) {
      elSel.add(elOptNew, ib); // IE only
    }
  }
  elSel.selectedIndex=ib;
}

