// JavaScript Document
function debug(value){
var deb = getById('bug');
if(deb.value.length > 100) deb.value = "";
var val = deb.value + " " + value;
deb.value=val;
}

function getById(id){
  return document.getElementById(id);
}

function $id(id){
  var comp = getById(id);
  return $(comp);
}

function getEvent(e){
  return jQuery.event.fix( e || window.event || {} );
}

var lastShown= null;
var menuWait = null;
var waitTimeout;
var HEIGHT = 3;
var TIMER = 5;
var HOVER_TIMEOUT = 1000;
var LINE_HEIGHT = 25; 
var print = false;

function initSlagMenu(){
 if(print)
  return;
 $("#menu li.level1").children("a").each(function (i){
   if(this.nodeType != 3){
    if(!$(this).hasClass('prep')){
      $(this).click(function(){hoveMenu(this)});
      $(this).hover(function(e){
        $(document).click();//delete the hint if page on construction.
        var src = getEvent(e).target;
        if(lastShown != src && menuWait != src){
            menuWait = src;
            if(waitTimeout) clearTimeout(waitTimeout);
            waitTimeout = setTimeout(function(){hoveMenu(src);}, HOVER_TIMEOUT);
          }
        }, function(){
           if(waitTimeout) clearTimeout(waitTimeout);
       });
     }
   }
 });
 $("#menu a.load").each(function(i){
    $(this).click(function(){
        $("#menu li.hove").removeClass("hove");
        $(this).parent().addClass("hove");
    });
 });
 $("#menu a.prep").each(function(i){
   $(this).click(function(){constructMenu(this)});
 });
}
function hoveMenu(a){
  if(lastShown != a){
    clearTimeout(waitTimeout);
    if(lastShown != null){
      $id("menu").find(".hove").removeClass("hove");
      $(lastShown).next("UL").slideUp("medium");
    }
    selectMenuAnchor(a);
    lastShown = a;
  }
}
function selectMenuAnchor(a){
  $(a).parent().addClass("hove");
  var menuToShow = $(a).next("UL");
  if(menuToShow != null){
   $(menuToShow).slideDown("medium");
  }
}
//Create accordeon
var selectedTab = null;
var tabWait = null;
var tabTimeout = null;
var waittabTimeout = null;
function createAccor(gpClass){
if(print)
  return;
$("."+gpClass).children("li").each(function (i){
  var title = $(this).find("h2");
  var para = $(this).find("div");
  $(title).click(function(){
      toggleTab(para);
  });
  $(title).hover(function(e){
        if(selectedTab != para && tabWait != para){
          tabWait = para;
          if(waittabTimeout) clearTimeout(waittabTimeout);
          waittabTimeout = setTimeout(function(){toggleTab(para);}, HOVER_TIMEOUT);
        }
     }, function(){
         if(waittabTimeout) clearTimeout(waittabTimeout);
     });
    para.hide();
    if(this.className == "current")
      toggleTab(para);
});
}

function toggleTab(para){
  if(para.css("display")=="none"){
    if(selectedTab != null && selectedTab != para){
      selectedTab.slideUp("fast", function (){para.slideDown("fast");});
    }else{
      para.slideDown("fast");
    }
    selectedTab = para;
  }
  tabWait = null;
}

//Change photos on the top of the page
var CHANGEPHOTOTO = 3000;
function changePhotoInit(){
   setTimeout("changePhoto()", CHANGEPHOTOTO);
}
function changePhoto(){
if(print)
  return;
var ran = (Math.random() * 11)+1;
var alea = Math.round(ran);
var newPhoto = getById("photo_"+alea);
var oldPhoto = $("#photos img:visible")[0];
if(newPhoto == null){
    var data = "<img id=\"photo_"+alea+"\" style=\"display:none\" src=\"../photos/"+alea+".jpg\"></img>";
    $id("photos").append(data);
    newPhoto = getById("photo_"+alea);
}
    $(oldPhoto).fadeOut("slow");
    $(newPhoto).fadeIn("slow");

setTimeout("changePhoto()", CHANGEPHOTOTO);
}

function selectMenu(id){
  var sel = getById(id);
  if(!sel) return;
  var parent = sel.parentNode.parentNode;
  var i=1;
  var tableau = [sel];
  while(parent.id != "menu"){
    sel = parent.parentNode.firstChild;
    tableau[i] = sel;
    i++;
    parent = sel.parentNode.parentNode;
  }

  var j = i-1;
  lastShown = tableau[j];
  for(; j>-1; j--){
    selectMenuAnchor(tableau[j]);
  }
}
function bureau(bureau,type){
  var url = "/php/page_frame.php?bureau="+bureau+"&page=contact&stt=0&type="+type;
  $("#contentMain").load(url);
  return false;
}
function selectPTab(comp, nbr){
  var id= "pTab"+nbr;
  var selected = $("#gallery .pTab");
  selected.removeClass("pTab");
  var compDisp = $id(id);
  compDisp.addClass("pTab");
  selected.fadeOut("fast", function(){compDisp.fadeIn("fast");});
  //Numbers
  var num = selected[0].id;
  var old = num.substring(4,num.length);
  var newObj = "<a href=\"#\"  onclick=\"selectPTab(this,"+old+")\">"+old+"</a>";
  var span = $(".num .click").replaceWith(newObj);
  var newObj2 = "<span class=\"click\">"+nbr+"</span>";
  var span = $(comp).replaceWith(newObj2);
}
var BAD_CLASS = "bad";
var OK_CLASS = "OK";
var CHECK_CLASS = "check";
var FOCUS_CLASS = "focus";
var fieldsToValidate;
var testIfNotEmpty = true;
function loadForm(validate){
  testIfNotEmpty = true;
  fieldsToValidate = 0;
  $("#contentMain p input:text").not("#bmail").each(function(i,j){
    fieldsToValidate++;
    if(j.className.indexOf("cp")!=-1){
      this.validate = function(){isPostCode(this);};
    }else if(j.className.indexOf("mail")!=-1){
      this.validate = function(){isMail(this);};
    }else{
      this.validate = function (){isNotEmpty(this);};
      this.zoblig = true;
    }
    $(j).focus(function(){
        $(this).addClass(FOCUS_CLASS);
        j.justFocused=false;
    });
    $(j).blur(function(){
        $(this).removeClass(FOCUS_CLASS);
        this.validate();
        if(!this.test){
          if(!testIfNotEmpty)
            throwError(this);
        }else{
            setOK(this);
        }
        validateState();
    });
    if(this.zoblig){
      $(j).keyup(function(){
        if(this.justFocused){
          this.validate();
          if(this.test && $(findP(this)).hasClass(BAD_CLASS)){
              setOK(this);
          }else if(!this.test){
            if(!testIfNotEmpty)
              setBad(this);
          }
        }else{
          this.justFocused=true;
        }
      });
    }
    //if(validate)
      $(this).blur();
  });
  var oldName = "";
  $("#contentMain p input:radio").each(function(i,j){
    if(j.name != oldName){
      fieldsToValidate++;
      oldName = j.name;
    }
    $(j).click(function(){
        var p = findP(this);
        var bool = false;
        $(p).find("INPUT").each(function(i,j){
            if(j.checked)
              bool=true;
        });
        if(bool)
          setOK(this);
        validateState();
    });
   if(this.checked)
      $(this).click();
  });
  testIfNotEmpty = false;
}

function setBad(comp){
  $(findP(comp)).removeClass(CHECK_CLASS).removeClass(OK_CLASS).addClass(BAD_CLASS);
}

function setOK(comp){
  var parent = findP(comp);
  $(parent).removeClass(CHECK_CLASS).removeClass(BAD_CLASS).addClass(OK_CLASS);
  $(parent).find("span.error").slideUp();
  
}

function validateState(){
  if($("form p.OK").length==fieldsToValidate){
    getById("submiter").disabled=false;
  }else{
    getById("submiter").disabled=true;
  }
}

function isPostCode(comp){
    updateComponentTest(comp, /\d{4}/, "Veuillez entrer un code postal valide.");
}
function isMail(comp){
    updateComponentTest(comp, /.+@.+\..+/, "Veuillez entrer une adresse E-Mail valide.");
}
function isNotEmpty(comp){
    updateComponentTest(comp, /[\s\w]+/, "Ce champ ne peut être vide.");
}
function updateComponentTest(comp, regExp, message){
    var va = comp.value;
    comp.test = regExp.test(va);
    comp.message = message;
}

function throwError(comp){
    var parent = findP(comp);
    var err = $(parent).find("span.error");
    if(err.length == 0){
      err = document.createElement("span");
      $(err).addClass("error");
      $(parent).append(err);
      setBad(comp);
    }else if(err[0].style.display != "none"){
      $(err).slideUp("fast");
    }
    $(err).empty().text(comp.message).slideDown();
}
function findP(comp){
    var parent = comp.parentNode;
    while(parent.tagName != "P" && parent.tagName != "BODY"){
      parent = parent.parentNode;
    }
    return parent;
}
function submitOnce(){
  var shadow = $("#shadow");
  if(!shadow[0]){
    $("body").append("<div id=\"loader\">&nbsp;</div><div id=\"shadow\">&nbsp;</div>");
    shadow = $("#shadow");
  }
  positionLoader();
  shadow.css({opacity:0,backgroundColor:"#000",height:$("#page").height()+"px"}).show().animate({opacity:0.4},"fast");
  $("#loader").show();
}

function pageLoaded(){
  var shadow = $("#shadow");
  if(shadow[0]){
    shadow.animate({opacity:"hide"},"fast");
    $("#loader").hide();
  }
}

function centerTag(tag){
  var dim = getWindowSize();
  var left = (dim.width - tag.width()) /2;
  var top = ((dim.height - tag.height()) /2)+getScrollHeight();
  tag.css({left: left+"px", top: top+"px"});
}

function positionLoader(){
  var shadow = $("#shadow:visible");
  if(shadow[0]){
    var loader = $("#loader:visible");
    centerTag(loader);
  }
}

function scrollTag(tag){
  if(tag){
    var scrollHeight = getScrollHeight();
    tag.css({top:scrollHeight+"px"});
  }
}

function getScrollHeight(){
  if (document.documentElement && document.documentElement.scrollTop)
    return document.documentElement.scrollTop;
  else if (document.body)
    return document.body.scrollTop;
}

function getWindowSize() {
  return {width: $(window).width(), height:$(window).height()};
}
function constructMenu(comp){
  var prep = $("div.hint")[0];
  if(!prep){
    $("body").append('<div class="hint" style="display:none"><span>Cette partie du site est en construction</span></div>');
    prep = $("div.hint")[0];
  }
  var offset = $(comp).offset();
  $(prep).css({top:(offset.top+$(comp).height())+"px",left:(offset.left + 7)+"px"}).fadeIn("fast");
  setTimeout(function(){$(document).one("click", function(){
    $(prep).fadeOut("fast");
  });},50);
}
$(document).ready(function(){
   $(window).bind("scroll",positionLoader);
   $(window).bind("resize",positionLoader);
   $().ajaxStart(function(request, settings){
         submitOnce();
 	 });
 	 $().ajaxSuccess(function(request, settings){
  			pageLoaded();
 	 });
});

