//	INIT

// Add an eventListener to browsers that can do it somehow.
// Original: Scott Andrew
// Modified to put attachEvent as perference to fix Opera
function addEvent(obj, evType, fn){
	if (obj.attachEvent){
		return obj.attachEvent("on" + evType, fn);
	} else if (obj.addEventListener){
		obj.addEventListener(evType, fn, true);
		return true;
	} else {
		return false;
	}
}

//DIMENSIONS DE LA FENETRE
var QView =
 {
  size : {},
  init : function ()
   {
    var wsize = document.createElement("div");
    wsize.style.position = "absolute";
    wsize.style.left = "-100%";
    wsize.style.top = "-100%";
    wsize.style.paddingRight = "1px";
    wsize.style.width = "1px";
    wsize.style.height = "1px";
    document.body.appendChild(wsize);
  
    var view;
    if (window.pageXOffset !== undefined)
     view = { left:window.pageXOffset, top:window.pageYOffset };
    else if (document.body.scrollLeft !== undefined)
     view = { left:document.body.scrollLeft, top:document.body.scrollTop };
    else if (window.scrollX !== undefined)
     view = { left:window.scrollX, top:window.scrollY };
    else
     view = null;
  
    if (view)
     {
      // We know where the screen is
      // wsize and/or document.body might be screen height or doc height.
      // Pick the smallest, and cross our fingers.
      view.right = view.left + Math.min(document.body.offsetWidth, -wsize.offsetLeft);
      if (window.innerWidth) view.right = Math.min(view.right, view.left + window.innerWidth);
      view.bottom = view.top + Math.min(document.body.offsetHeight, -wsize.offsetTop);
      if (window.innerHeight) view.bottom = Math.min(view.bottom, view.top + window.innerHeight);
     }else{
      // We don't know where we are
      view = { left: 0, top: 0, right: document.body.offsetWidth, bottom: Number.POSITIVE_INFINITY}
     }
    view.width = view.right - view.left;
    view.height = view.bottom - view.top;
    QView.size = view;
    
    QPositionning();
   }
 }
addEvent(window, "load", QView.init);
addEvent(window, "resize", QView.init);


//POSITION SOURIS
var QMouse =
 {
  coord : {x:0,y:0,active:0},
  pos : function (e)
   {
    var event = e;
    var m;
    if (window.event && (window.event.clientX !== undefined) && (document.body.scrollLeft !== undefined))		// IE
     m = { x:(window.event.clientX + document.body.scrollLeft), y:(window.event.clientY + document.body.scrollTop) };
    else if ((event.clientX !== undefined) && (window.scrollX !== undefined))					// Mozilla/Netscape
     m = { x:(event.clientX + window.scrollX), y:(event.clientY + window.scrollY) };
    else if ((event.clientX !== undefined) && (window.pageXOffset !== undefined))				// One last Netscape method
     m = { x:(event.clientX + window.pageXOffset), y:(event.clientY + window.pageYOffset) };
    else												// Report position of what caused the event
     m = getNodePos(getEventTarget(event));

    // Return whether mouse actively caused this event
    m.active = ((window.event && window.event.type.indexOf("mouse") >= 0) || (event.type && event.type.indexOf("mouse") >= 0));

    QMouse.coord = m;
    //$('Qtest').innerHTML = 'test : x'+QMouse.coord.x+'-y'+QMouse.coord.y;
   }
 }
addEvent(document, "mousemove", QMouse.pos);













//	FIN INIT

//FONCTION MANQUANTES
function trim (myString)
 {
  return myString.replace(/^\s+/g,'').replace(/\s+$/g,'')
 } 

//




/* 
 * place le foot et l'overlay
 */
function QPositionning()
 {
  if ($('all'))
   {
    var pac = $('pac').offsetHeight;
    var top = 0;
    var foot = 0;
    if ($('gameek_top')) top = $('gameek_top').offsetHeight;
    if ($('partenaire'))
     {
      $('partenaire').className='css_dblock';
      foot = $('partenaire').offsetHeight;
     }
    //contenu plus petit que le contenant
    if (pac < QView.size.height - top - foot) pac = QView.size.height - top - foot;
    if ($('all').style) $('all').style.height=pac+'px';
   }
 }


function jpop(id,jeu)
 {
  new Ajax.Updater({success:'zone',failure:'alert_txt'}, '/commun/jpop?jid='+id+'&jeu='+jeu, {asynchronous:true, evalScripts:true, insertion:Insertion.Bottom});
 }

var Qajax = {
 wait : function()
  {
   $('body').style.cursor='wait';
  },
 tiaw : function()
  {
   $('body').style.cursor='auto';
  }
}

function avatar(fnom)
 {
  $('img').src='/i/a/'+fnom+'.png';
  $('avatar').value=fnom;
  delete_zone('galerie','zone');
 }

function Qcv()
 {
  //$("overlay").style.display = "block";
  $('cv').style.top = QMouse.coord.y+'px';
  new Draggable('cv', {handle:'handle_cv'});
 } 

function delete_zone(adelete,zone)
 { 
  noeud_adelete = $(adelete);
  if (noeud_adelete) { $(zone).removeChild(noeud_adelete); }
  if ($(zone).childNodes.length == 0) { $('overlay').style.display='none'; }
 }

function clear_zone()
 { 
  $('zone').innerHTML='';
  $('overlay').style.display='none';
 }

function delete_insert()
 { 
  if ($('corps_page')) { $('corps_page').style.display='block'; }
  $('insert_page').innerHTML='';
  $('alert_page').style.display='none';
  QPositionning();
 }



function scroller(element,hv,delta)
 {
  element = $(element);
  if (hv == 0)
   {
    var taille =  element.offsetWidth;
    var max = parseInt(element.style.width,10);
    var actuel = parseInt(element.style.left,10);
   }
  if (hv == 1)
   {
    var taille =  element.offsetHeight;
    var max = parseInt(element.style.height,10);
    var actuel = parseInt(element.style.top,10);
   }
  var new_value = actuel + delta;
  if (new_value < -taille + delta) new_value = -taille + delta; //trop de défilement-> prise valeur maximale de décalage
  if (new_value > 0) new_value = 0; //défilement qui veut dépasser l'originie -> décalage remis à 0
  //if (new_value >= max) new_value -= taille + delta; //trop � droite
  //if (new_value <= -taille) new_value += taille - delta; // trop � gauche, retour au d�but
//  if (max == taille) { new_value = 0; } //pas besoin de d�filement
  if (hv == 0) element.style.left = new_value + 'px';
  if (hv == 1) element.style.top = new_value + 'px';
 }

function autoScroller(element,hv,delta)
 {
  scroller(element,hv,delta);
  autoscroll = setTimeout("autoScroller('"+element+"',"+hv+","+delta+")",10);
 }

function autoScrollerStop()
 {
  clearTimeout(autoscroll);
 }

var Qinscription = {
 control : function(type,value)
  {
   new Ajax.Updater({success:'zone',failure:'alert_txt'}, '/commun/insctrl_'+type+'/val/'+value, {asynchronous:true, evalScripts:true, insertion:Insertion.Bottom});
  }
    
}

function inscription_avatar(liste_avatar)
 {
  var html = '';
  var liste = liste_avatar.split(',');
  for (var i=0; i<liste.length; i++)
   {
    html += "<a href=\"#js\" onclick=\"$('img').src='/i/a/200/"+liste[i]+".png';$('inscr_avatar').value='"+liste[i]+"'\"><img src=\"/i/a/50/"+liste[i]+".png\" width=\"50\" height=\"50\" /></a>&nbsp;";
    if ((i+1)%9 == 0) { html += '<br />'; }
   }
  $('liste_avatar').innerHTML=html;
 }

function inscription_class_reset(objet)
 {
  objet.className='';
 }

function inscription_form_ctrl()
 {
  ko = 0;
  var inscr_tags = new Array;
  inscr_tags[0] = "inscr_email";
  inscr_tags[1] = "inscr_pass1";
  inscr_tags[2] = "inscr_pass2";
  inscr_tags[3] = "inscr_joueur_nom";
  for(var i = 0; i < inscr_tags.length; i++)
   {
    if (!$(inscr_tags[i]).value)
     {
      $(inscr_tags[i]).className='css_c990000_bgc009900_bdc000000';
      ko = 1;
     }
   }
  
  if (ko != 1) { $('inscription').submit(); }
 }

function show_hide(e)
 {
  if ($(e).style.display == 'none')
   {
    $(e).style.display = 'block';
   }else{
    $(e).style.display = 'none';
   }
  QPositionning();
 }



/************************* IMG ***************************/
addEvent(window, "load", makeImg);
function makeImg()
 {
  document.tag = document.getElementsByTagName('img');
  for (var j = 0; j < document.tag.length ; j++)
   {
    var img = document.tag[j];
    if (img.getAttribute('qwidth') || img.getAttribute('qheight'))
     {
      //dimension maximum définie
      var qw = img.getAttribute('qwidth');
      var qh = img.getAttribute('qheight');
      var w = img.width;
      var h = img.height;
      if (w > qw) { h = h * qw / w; w = qw; }
      if (h > qh) { w = w * qh / h; h = qh; }
      img.setAttribute('width',w+'px');
      img.setAttribute('height',h+'px');
     }else{
      if (!img.getAttribute('width') || !img.getAttribute('height'))
       {
        //pas de dimension définie -> attribuer les dimensions
        img.setAttribute('width',img.width+'px');
        img.setAttribute('height',img.height+'px');
       }
     }
    if (img.getAttribute('qdisplay')) img.style.display = 'block';
   }
 }


/************************* FORUM ***************************/
var Forum = {
  modo_checked : function(i)
   {
    modo = $('modo'+i);
    if (modo.value == 0)
     {
      modo.value = i;
     }else{
      modo.value = 0;
     }
   },

  flood : function()
   {
    $('ForumPostMessage').submit();
   },
   
  plus : function(id)
   {
    if ($('liste_topic'+id).innerHTML != '')
     {
      $('plus_'+id).src = '/i/+.png';
      $('liste_topic'+id).innerHTML = '';
     }else{
     $('plus_'+id).src = '/i/-.png';
     var html = '';
     var topic,nonlu;
     var topic_liste = document.getElementsByTagName('topic');
     for (var i=0; i<topic_liste.length; i++)
      {
       if (id == topic_liste[i].getAttribute('tparent'))
        {
         topic = topic_liste[i].getAttribute('tid');
         html += '<br />';
         for(j=0; j<topic_liste[i].getAttribute('tbz'); j++) html += '&nbsp;&nbsp;';
         if (topic_liste[i].getAttribute('tnonlu') > 0)
          {
           nonlu = topic_liste[i].getAttribute('tnonlu');
           html += '<a href="/forumm/'+nonlu+'#'+nonlu+'"><img width="15" height="10" src="/i/enveloppe.gif" /></a>';
          }else{
           html += '<img width="15" height="10" src="/c/vide.gif" />';
          }
         html += '&nbsp;';
         if (topic_liste[i].getAttribute('tenfant') > 0) html += '<a onclick="Forum.plus(\''+topic+'\'); return false;" href="#"><img src="/i/+.png" id="plus_'+topic+'" height="9" width="9" /></a>';
         html += '&nbsp;<a class="css_ctxtalt_hov_ctxtalt" href="/forum/'+topic+'">'+topic_liste[i].getAttribute('tnom')+'</a>';
         if (topic_liste[i].getAttribute('tenfant') > 0) html += '<span id="liste_topic'+topic+'"></span>';
        }
      }
      $('liste_topic'+id).innerHTML = html;
     }
   },
   
  tempo : null,
  
  selectshow : function(select_id,interdit,bzmin)
   {
    if (interdit == undefined) interdit = '';   
    $(select_id+'_select').style.display='';
    Position.clone($(select_id+'_text'), $(select_id+'_select'), { setHeight: false, setWidth: false, offsetTop: $(select_id+'_text').offsetHeight } );
    Forum.select($(select_id+'_id').value,select_id,interdit,bzmin);
    $(select_id+'_select').focus();
   },
  
  selecthide : function(id,select_id,interdit,bzmin)
   {
    if (Forum.tempo != null) clearTimeout(Forum.tempo);
    $(select_id+'_select').style.display='none';
    Qtt.hide();
    Forum.select(id,select_id,interdit,bzmin);
   },
   
  selectTempo : function(id,select_id,interdit,bzmin)
   {
    if (Forum.tempo == null) Forum.tempo = setTimeout("Forum.select("+id+",'"+select_id+"',"+interdit+","+bzmin+")","300");
   },
   
  select : function(id,select_id,interdit,bzmin)
   {
    if (interdit == undefined) interdit = '';
    if (bzmin == undefined) bzmin = 0;
    if (id == '') id = 0;
    var liste_enfant, enfant_id, enfant_nom, html, html_enfant;
    var ex_id = 0;
    var futur_id = 0;
    var topic_liste = document.getElementsByTagName('topic');
    
    var topic_select = id; //topic en cours
    id_text = ''; //texte à afficher
    while (topic_select != -1)
     {
      futur_id = -1;
      html_enfant = html; //reprise construction précédente
      html = ''; //réinit construction

      //parcours topic
      for (var i=0; i<topic_liste.length; i++)
       {
        //si topic enfant du topic en cours && pas interdit && (bz > bzmin || ancien topic parcouru)
        if (topic_liste[i].getAttribute('tparent') == topic_select && interdit != topic_liste[i].getAttribute('tid') && (topic_liste[i].getAttribute('tbz') > bzmin || topic_liste[i].getAttribute('tid') == ex_id))
         {
          enfant_id = topic_liste[i].getAttribute('tid');
          //si le topic existe (ie pas topic racine)
          if (enfant_id > 0)
           {
            enfant_nom = topic_liste[i].getAttribute('tnom');
            html += '<option value="'+enfant_id+'"';
            //si le topic est celui en cours de sélection
            if (enfant_id == id)
             {
              html += 'class="css_ctxtcolor_bgcbgdark" selected';
              id_text = enfant_nom;
             }
            if (ex_id == 0) html += 'class="css_ctxtcolor_bgcbglight"'; //premier parcours -> liste des enfants du topic en cours de sélection -> affichage distinct
            html += '>'+enfant_nom+'</option>';
            if (enfant_id == ex_id) html += html_enfant; //copie de l'ancienne construction
           }
         }
        //si topic en cours pas racine && topic en cours est celui qui vient d'être parcours -> prochain topic en cours sera le topic parent
        if (topic_select > 0 && topic_select == topic_liste[i].getAttribute('tid')) futur_id = topic_liste[i].getAttribute('tparent');
       }
      
      ex_id = topic_select;
      topic_select = futur_id;
     }
    
    $(select_id+'_select').innerHTML = '<option value="0"></option>' + html;   
    $(select_id+'_id').value = id;
    $(select_id+'_text').value = id_text;
    Forum.tempo = null;
   },
   
  listing : function(id,select_id,interdit)
   {
    var liste_enfant, enfant_id, enfant_nom, html, html_enfant;
    var ex_id = 0;
    var topic_select = document.getElementsByTagName('topic'+id)[0];
   
    while (topic_select.parentNode.tagName.toLowerCase() == 'enfant'.toLowerCase())
     {
      html_enfant = html;
      html = '';

      liste_enfant = topic_select.getElementsByTagName('enfant')[0].childNodes;
      for (var i=0; i<liste_enfant.length; i++)
       {
        enfant_id = liste_enfant[i].tagName.substring(5);
        enfant_nom = liste_enfant[i].getElementsByTagName('nom')[0].innerHTML;
     
        if (interdit == 'undefined' || interdit != enfant_id)
         {
          html += '<option value="'+enfant_id+'" onclick="Forum.listing(this.value,\''+select_id+'\','+interdit+')"';
          if (enfant_id == id) html += 'class="css_ctxtcolor_bgcbgdark" selected';
          if (ex_id == 0) html += 'class="css_ctxtcolor_bgcbglight"';
          html += '>'+enfant_nom+'</option>';
          if (enfant_id == ex_id) html += html_enfant;
         }
       }
     
      ex_id = topic_select.tagName.substring(5);
      topic_select = topic_select.parentNode.parentNode;
     }

    $(select_id).innerHTML = '<option value="0" onclick="Forum.listing(this.value,\''+select_id+'\')"></option>' + html;
   },

  sondage : function()
   {
    var span,input,br;
    option_nb = $('sondage_nb').value;
   
    if (option_nb == 0)
     {
      //modif texte
      $('sondage_a').innerHTML = $('sondage_txt_ajout').innerHTML;
      //question
      span = Builder.node('span','',$('sondage_txt_question').innerHTML+' : ');
      $('sondage').appendChild(span);
      input = Builder.node('input', { name: 'sondage_question', type: 'text' });
      $('sondage').appendChild(input);
      //date
      var br = Builder.node('br');
      $('sondage').appendChild(br);
      span = Builder.node('span','',$('sondage_txt_date').innerHTML+' : ');
      $('sondage').appendChild(span);
      input = Builder.node('input', { name: 'sondage_date', type: 'text' });
      $('sondage').appendChild(input);
     }
    option_nb ++;
    
    //création de l'option
    var br = Builder.node('br');
    $('sondage').appendChild(br);
    span = Builder.node('span','',$('sondage_txt_option').innerHTML+' '+option_nb+' : ');
    $('sondage').appendChild(span);
    input = Builder.node('input', { name: 'sondage_option['+option_nb+']', type: 'text' });
    $('sondage').appendChild(input);
   
    $('sondage_nb').value=option_nb;
   }
   
 };


var Gazette = {
  DestRecap: function()
   {
    var option = $('dest').options;
    var recap = '';
    for (i=0; i<option.length; i++)
     {
      if (option[i].selected == 1) recap += option[i].text+'; ';
     }
    $('dest_recap').innerHTML = recap;
   },
  Affiche : function(affiche)
   {
    enfant = $('affiche').getElementsByTagName('div');
    for (i=0; i<enfant.length; i++) $('affiche'+i).style.display = 'none';
    $('affiche'+affiche).style.display = '';
   },
  Record : function(record)
   {
    enfant = $('record').getElementsByTagName('div');
    for (i=0; i<enfant.length; i++) $('record'+i).style.display = 'none';
    $('record'+record).style.display = '';
   }
 };


/************************* text_form ***********************/
function QtxtBB(bb,txt)
 {
  if (txt == undefined) txt = 'txt_area';
  txt = $(txt);
  txt_scroll = txt.scrollTop;
  txt.focus();
  if(typeof document.selection != 'undefined') //IE
   {
    var range = document.selection.createRange();
    var insText = range.text;
    range.text = '[' + bb + ']' + insText + '[/' + bb + ']';

    range = document.selection.createRange();
    if (insText.length == 0)
     {
      range.move('character', -repfin.length);
     } else {
      range.moveStart('character', repdeb.length + insText.length + repfin.length);
     }
    range.select();
   }
  else if(typeof txt.selectionStart != 'undefined') //autre
   {
    var start = txt.selectionStart;
    var end = txt.selectionEnd;
    var insText = txt.value.substring(start, end);
    txt.value = txt.value.substr(0, start) + '[' + bb + ']' + insText + '[/' + bb + ']' + txt.value.substr(end);

    var pos;
    if (insText.length == 0)
    {
      pos = start + bb.length + 2;
    } else {
      pos = start + bb.length + 2 + insText.length + bb.length + 3;
    }
    txt.selectionStart = pos;
    txt.selectionEnd = pos;
  }
  else //vieux
  {
    var pos = input.value.length;
    txt.value = txt.value + '[' + bb + ']' + '[/' + bb + ']';
  }
  txt.scrollTop = txt_scroll;
  //txt.verticalScrollPosition = txt.maxVerticalScrollPosition;

  QtxtVisu();
 }


function QtxtVisu(txt)
 {
  if (txt == undefined) txt = 'txt_area';
  $('div_visu').style.display = 'block';
  txt = $(txt).value;
  txt = txt.replace(/\r\n/gi,'<br />');
  txt = txt.replace(/\n/gi,'<br />');
  txt = txt.replace(/\r/gi,'<br />');
  txt = txt.replace(/\[(b|i|s|u)]/g,'<$1>');
  txt = txt.replace(/\[\/(b|i|s|u)]/g,'</$1>');
 // txt = txt.replace(/\[img](https?:\/\/.*)\[\/img]/g,'<img src="$1" />');
  txt = txt.replace(/\[img](https?:\/\/[^<\]]*)\[\/img]/g,'<img src="$1" />');
  //txt = txt.replace(/(https?:\/\/.]*)\s/g,'<a href="$1" target="_blank">$1</a>');
  txt = txt.replace(/\[url](https?:\/\/[^<\]]*)\[\/url]/g,'<a href="$1" target="_blank">$1</a>');
  txt = txt.replace(/\[url=(https?:\/\/[^<\]]*)]([^\]]*)\[\/url]/g,'<a href="$1" target="_blank">$2</a>');
  txt = txt.replace(/\[quote]([^\]]*)\[\/quote]/g,'<div class="forum_quote">$1</div>');
  txt = txt.replace(/\[quote=([^\]]*)]([^\]]*)\[\/quote]/g,'<div class="forum_quote"><span class="cssi9">$1</span> :<br />$2</div>');
  txt = txt.replace(/\[rp]([^\]]*)\[\/rp]/g,'<div class="forum_rp">$1</div>');
  txt = txt.replace(/\[hrp]([^\]]*)\[\/hrp]/g,'<div class="forum_hrp"><span class="cssb">HRP : </span>$1</div>');
  txt = txt.replace(/\[spoil]([^\]]*)\[\/spoil]/g,'<div class="forum_spoil"><span class="cssi_ctxtcolor">spoil : </span>$1</div>');
  $('visu').innerHTML = txt;
 }

function BRtoRN()
 {
  var txt = document.getElementsByTagName('textarea');
  for(var i=0; i<txt.length; i++) txt[i].value = txt[i].value.replace(/<br \/>/g,'\r\n');
 }

function Separate_Mill(x)
 {
  if (x==0) return x;
  var str = x.toString(), n = str.length;
  if (n < 4) return x;
  return ( (n % 3) ? str.substr(0, n % 3) + ' ' : '') + str.substr(n % 3).match(new RegExp('[0-9]{3}', 'g')).join(' ');
 }

/************************* QTT ***********************/

var Qtt = {
  tt : null,  //tooltip
  xPad : 15,  // Padding between nicetitle and viewport sides
  xOffset : 15,  // Offset to right of link left
  yOffset : 15,  // Padding between link and nicetitle

  show : function(lnk,text,css,title)
   {
    if (!lnk) return;
    if (text == undefined) return;
    Qtt.lnk = lnk;
    Qtt.hide();

    if (css == undefined || css == '') css = 'tooltip';
    if (title == undefined) title = '';
   
    Qtt.tt = document.createElement("div");
    Qtt.tt.className = css;
    var reg = new RegExp("@DQ@",'g');
    text = text.replace(reg,'"');
    Qtt.tt.innerHTML = "<span>" + text + "</span>";

    Qtt.tt.style.top = "-1000em";
    Qtt.tt.style.left = "-1000em";
    $('all').appendChild(Qtt.tt);
   
    addEvent(lnk,"mouseout",Qtt.hide);
   },
 
  hide : function ()
   {
    if (Qtt.tt) $('all').removeChild(Qtt.tt);
    Qtt.tt = null;
   },
 
  move : function()
   {
    if (!Qtt.tt) return;
   
    // Position TT
    var dim = getNodeDims(Qtt.lnk);
    var mouse = QMouse.coord;
    var dx = (mouse.active ? mouse.x : dim.left) + Qtt.xOffset;
    var dy = (mouse.active ? mouse.y : dim.bottom) + Qtt.yOffset;

    // Align horizontally
    if ((Qtt.tt.offsetWidth + Qtt.xPad * 2) > QView.size.width)
     {
      // Too wide for viewport.  Just use all possible space
      Qtt.tt.style.width = (QView.size.width - Qtt.xPad * 2) + "px";
      Qtt.tt.style.left = Qtt.xPad + "px";
      Qtt.tt.style.right = Qtt.xPad + "px";
     }
    else if ((dx + Qtt.tt.offsetWidth + Qtt.xOffset) > QView.size.right)
     {
      // Pin to  right side
      Qtt.tt.style.left = "auto";
      Qtt.tt.style.right = Qtt.xPad + "px";
     }else{
      // Pin to left side
      Qtt.tt.style.left = dx + "px";
     }
    // Align vertically
    if (dy + Qtt.tt.offsetHeight > QView.size.bottom)
     {
      // Not enough room below link
      if (mouse.active)
       {
        Qtt.tt.style.top = (mouse.y - Qtt.tt.offsetHeight - Qtt.yOffset) + "px";
       }else{
        Qtt.tt.style.top = (dim.top - Qtt.tt.offsetHeight - Qtt.yOffset) + "px";
       }
     }else{
      // Enough room below link.  Move above.
      Qtt.tt.style.top = dy + "px";
     }
   }
 
 }

addEvent(window, "resize", Qtt.hide);
addEvent(document,"mousemove",Qtt.move);

/************************* QTable ***********************/
var QTable = {
  Clean : function()
   {
    tr = $('gtable').getElementsByTagName('tr');
    for (i=0; i<tr.length; i++)
     {
      for (j=0; j<tr[i].childNodes.length; j++)
       {
        if (tr[i].childNodes[j] == '[object Text]') tr[i].removeChild(tr[i].childNodes[j]);
       }
     }
   },
   
  Update : function(tr)
   {
    var value;
    var ligne_base = $('insert');
    var ligne = $('tr'+tr);
    ligne.removeAttribute('onclick');
    
    for (i=0; i<ligne.childNodes.length; i++)
     {
      if (ligne.childNodes[i] != '[object Text]')
       {
        if (i == 0)
         {
          //checkbox
          ligne.childNodes[i].appendChild( Builder.node('input', { name:'check['+tr+']', id:'check_'+tr, type:'checkbox', checked:'checked' }) );
         }else if (i == 1)
         {
          //id
          //child = Builder.node('span','', ligne.childNodes[i].innerHTML);
         }else if(i == ligne.childNodes.length - 1)
         {
          //delete
          ligne.childNodes[i].appendChild( Builder.node('input', { name:'del['+tr+']', type:'checkbox', value:'1' }) );
         }else{
          if (ligne_base.childNodes[i].childNodes.length == 1)
           {
            value = trim(ligne.childNodes[i].innerHTML);
            ligne.childNodes[i].innerHTML = ligne_base.childNodes[i].innerHTML;
            element = ligne.childNodes[i].firstChild;
            field = element.getAttribute('name').substring(4);
  
            element.setAttribute('name','field['+field+']['+tr+']');
            element.setAttribute('id','field_'+field+'_'+tr);
            element.removeAttribute('onchange');
            
            //value
            if (element.tagName.toUpperCase() == 'INPUT')
             {
              if (element.getAttribute('type').toUpperCase() == 'TEXT')
               {
                //input text
                element.setAttribute('value',value);
               }else if (element.getAttribute('type') == 'checkbox')
               {
                //checkbox
                ligne.childNodes[i].innerHTML = value;
                element = ligne.childNodes[i].firstChild;
                element.setAttribute('name','field['+field+']['+tr+']');
                element.setAttribute('id','field_'+field+'_'+tr);
                element.removeAttribute('readonly');
               }
              }else if (element.tagName.toUpperCase() == 'SELECT')
              {
               //select
               for(k=0; k<element.options.length; k++)
                {
                 if (element.options[k].text == value) element.value = element.options[k].value;
                }
              }else if (element.tagName.toUpperCase() == 'TEXTAREA')
              {
               //textarea
               element.innerHTML=value;
              }
           }else{
            //lang
            field = ligne_base.childNodes[i].childNodes[2].getAttribute('name').substring(4,ligne_base.childNodes[i].childNodes[2].getAttribute('name').length-3);
            type = ligne_base.childNodes[i].childNodes[2].tagName;
            array_key = new Array;
            array_value = new Array;
            k = 0;
            for(j=1; j<ligne.childNodes[i].childNodes.length-4; j+=4)
             {
              array_key[k] = ligne.childNodes[i].childNodes[j].innerHTML.substring(0,2);
              array_value[k] = ligne.childNodes[i].childNodes[j+2].innerHTML;
              k++;
             }
            
            ligne.childNodes[i].innerHTML = '';
            for (j=0; j<array_key.length; j++)
             {
              ligne.childNodes[i].appendChild( Builder.node('span', '', array_key[j]+' :') );
              if (type.toUpperCase() == 'TEXTAREA')
               {
                array_value[j] = array_value[j].replace(/<br>/g,'\r\n');
                array_value[j] = array_value[j].replace(/<br \/>/g,'\r\n');
                ligne.childNodes[i].appendChild( Builder.node('textarea', { name:'field['+field+']['+array_key[j]+']['+tr+']', type:'text', cols:'30', rows:'5', id:'field_'+field+'_'+array_key[j]+'_'+tr}, array_value[j] ) );
               }else{
                ligne.childNodes[i].appendChild( Builder.node('input', { name:'field['+field+']['+array_key[j]+']['+tr+']', type:'text', size:'8', id:'field_'+field+'_'+array_key[j]+'_'+tr, value:array_value[j]} ) );
               }
              ligne.childNodes[i].appendChild( Builder.node('br') );
             }
           }
         }
       }
     }
   },
   
  Select : function(objet)
   {
    array_tr = $('gtable').getElementsByTagName('tr');
    for (i=0; i<array_tr.length; i++) array_tr[i].style.display = '';

    array_entete = $('gtable_entete').getElementsByTagName('span');
    for (j=0; j<array_entete.length; j++)
     {
      objet = array_entete[j].firstChild;
      if (objet.value)
       {
        field = objet.getAttribute('field');
        value = objet.value;
        //champs select
        if (objet.tagName.toUpperCase() == 'SELECT')
         {
          key = value;
          for(k=0; k<objet.options.length; k++)
           {
            if (objet.options[k].value == key) value = objet.options[k].text;
           }
         }
        //champs checkbox
        if (objet.getAttribute('type') == 'checkbox') value = objet.checked;
       
        array_hidden = new Array;
        array_td = $('gtable').getElementsByTagName('td');
        for (i=0; i<array_td.length; i++)
         {
          if (array_td[i].getAttribute('Qfield') && array_td[i].getAttribute('Qfield') == field)
           {
            if (array_td[i].childNodes.length ==3 && array_td[i].childNodes[1].getAttribute('type') == 'checkbox')
             {
              array_td[i].removeChild(array_td[i].firstChild);
              array_td[i].removeChild(array_td[i].lastChild);
             }
            
            if (array_td[i].firstChild == '[object Text]')
             {
              if (!trim(array_td[i].innerHTML).match(new RegExp(value, 'g'))) array_hidden.push(array_td[i].getAttribute('Qtr'));
             }else{
              if (array_td[i].firstChild.tagName.toUpperCase() == 'INPUT')
               {
                if (array_td[i].firstChild.getAttribute('type').toUpperCase() == 'TEXT')
                 {
                  if (!array_td[i].firstChild.value.match(new RegExp(value, 'g'))) array_hidden.push(array_td[i].getAttribute('Qtr'));
                 }else if (array_td[i].firstChild.getAttribute('type').toUpperCase() == 'CHECKBOX')
                 {
                  if (array_td[i].firstChild.checked != value) array_hidden.push(array_td[i].getAttribute('Qtr'));
                 }
                }else if (array_td[i].firstChild.tagName.toUpperCase() == 'SELECT')
                {
                 if (array_td[i].firstChild.value != key) array_hidden.push(array_td[i].getAttribute('Qtr'));
                }else if (array_td[i].firstChild.tagName.toUpperCase() == 'TEXTAREA')
                {
                 if (!array_td[i].firstChild.innerHTML.match(new RegExp(value, 'g'))) array_hidden.push(array_td[i].getAttribute('Qtr'));
                }          
             }
           }
         }
        for (i=0; i<array_hidden.length; i++)
          {
           //$('tr'+array_hidden[i]).style.visibility = 'hidden';
           $('tr'+array_hidden[i]).style.display = 'none';
          }
       }
     }
   },
   
  Left : function()
   {
    if ($('gtable').parentNode.offsetWidth > $('pac').offsetWidth)
     {
      min = Math.min($('gtable').parentNode.offsetWidth,QView.size.width)
      decalage = (min - $('pac').offsetWidth) / 2;
      $('gtable').parentNode.style.left = '-'+decalage+'px';
     }
   }
 }



/************************* NODE ***********************/

// This will get the position of the specified element.  For text, this will return the
// position of the first character, and not the top left bounds if the text wraps.
function getNodePos(el)
{
	if (!el) return { x:0, y:0 };
	var pos = { x:el.offsetLeft, y:el.offsetTop }
	for (var parent = el.offsetParent; parent != null; parent = parent.offsetParent)
	{
		pos.x += parent.offsetLeft;
		pos.y += parent.offsetTop;
	}
	return pos;
}

// Finds the top, bottom and total height of an element and it's nodes.
// The left position is given, but it's only the x of the top node.
// The horizontal dims can't be reliably calculated because of wrapping text.
function getNodeDims(el) {
	function recurse(el, dim) {
		for (var num = 0; num < el.childNodes.length; num++)
		{	// Recurse through children
			var child = el.childNodes[num];
			if (!isNaN(child.offsetHeight))
			{	// See if child will push dims out
				var p = getNodePos(child);
				if (dim.top > p.y) dim.top = p.y;
				p.y += child.offsetHeight;
				if (dim.bottom < p.y) dim.bottom = p.y;
			}
			recurse(child, dim);
		}
	}

	// Set initial bounds
	var p = getNodePos(el);
	var dim = { left:p.x, top:p.y, bottom:(p.y + el.offsetHeight), right:(p.x + el.offsetWidth) };
	recurse(el, dim);
	dim.height = dim.bottom - dim.top;
	dim.width = dim.right - dim.left;

	return dim;
}

function getEventTarget(event)
 {
  if (window.event && window.event.srcElement)
   return window.event.srcElement;
  else if (event && event.target)
   return event.target;
  return null;
 }


/***** FACEBOOK *****/
function callPublish(msg, attachment, action_link) {
FB.ensureInit(function () {
  FB.Connect.streamPublish('', attachment, action_link);
});
}

