/*
* Infusor v3.0
* Copyright © Hiteule Créative
*/

var antiflood = false;
var last = 0;
var smilies = new Array(':\\)', ':D', ';\\)', ':snif:', ':@', ':P', ':-\\/', '8\\)', ':\\$', ':haha:',
  ':woot:', ':s', 'O_o', ':ouch:', ':l:', ':ok:', ':\\(', ':siflotte:', ':coeur:', ':boulet:',
  ':ff:', ':lol:', ':livre:', ':lol2:', ':badsmile:', ':cali:', ':m:');
var smilies_url = new Array('01.gif', '02.gif', '03.gif', '04.gif', '05.gif', '06.gif', '07.gif', '08.gif', '09.gif', '10.gif',
  '12.gif', '18.gif', '13.gif', '14.gif', '15.gif', '16.gif', '19.gif', '11.gif', '21.gif', '24.gif',
  '17.gif', '25.gif', '23.gif', '26.gif', '27.gif', '20.gif', '22.gif');
var smilies_path = './static/smiley';
var smiley_page=0;
var page = new Array();
var height_avant = 200;
var zform_names_of_text = Array();

// Adapte la taille du textarea
function edit_form_height(id_textarea, id_prev, diff){
  var champ = document.getElementById(id_textarea);
  var div_prev = document.getElementById(id_prev);
  height_avant = height_avant + Number(diff);
  if(height_avant < 200) height_avant = 200;
  if(height_avant > 2000) height_avant = 2000;
  change = height_avant+"px";
  champ.style.height = change;
  div_prev.style.height = change;
  return false;
}

// Affiche ou cache la prévisualisation
function switch_activ(textarea,prev){
  div = document.getElementById(prev);
  if(document.getElementById('activ_'+textarea).checked == true)  {
    div.style.display = 'block';
    storeCaret(textarea);
    parse(textarea,prev);
  }
  else div.style.display = 'none';
}

// Enregistre le curseur du textarea
function storeCaret(id_textarea){
  champ = document.getElementById(id_textarea);
  if(champ.createTextRange) champ.curseur = document.selection.createRange().duplicate();
}

// Insère une balise dans le textarea
function balise(balise_debut, balise_fin, id_textarea){
  var champ = document.getElementById(id_textarea);
  var scroll = champ.scrollTop;
  balise_debut = remplace(balise_debut, '<br />', "\n");
  if(balise_fin == '') balise_debut = ' ' + balise_debut + ' ';
  if(champ.curseur){champ.curseur.text = balise_debut + champ.curseur.text + balise_fin;}
  else if(champ.selectionStart >= 0 && champ.selectionEnd >= 0){
    var debut = champ.value.substring(0, champ.selectionStart);
    var entre = champ.value.substring(champ.selectionStart, champ.selectionEnd);
    var fin = champ.value.substring(champ.selectionEnd);
    champ.value = debut + balise_debut + entre + balise_fin + fin;
    champ.focus();
    champ.setSelectionRange(debut.length + balise_debut.length, champ.value.length - fin.length - balise_fin.length);
  }
  else{
    champ.value += balise_debut + balise_fin;
    champ.focus();
  }
  champ.scrollTop = scroll;
}

// Aperçu temps réel
function parse(id_textarea, id_prev){
  if(parse.arguments.length == 3) var is_opened_window = true;
  else var is_opened_window = false;
  if((is_opened_window && opener.document.getElementById('activ_'+id_textarea).checked) || (!is_opened_window && document.getElementById('activ_'+id_textarea).checked)){
    clearTimeout(last);
    last = setTimeout('parse2(\''+id_textarea+'\',\''+id_prev+'\', '+is_opened_window+')',100);
    antiflood = true;
  }
}

// Aperçu temps réel, parsage et smilies
function parse2(id_textarea, id_prev, is_opened_window){
  if(is_opened_window){
    var champ = opener.document.getElementById(id_textarea);
    var div_prev = opener.document.getElementById(id_prev);
  }
  else{
    var champ = document.getElementById(id_textarea);
    var div_prev = document.getElementById(id_prev);
  }
  var contenu = champ.value;
  antiflood = false;
  if(document.body.scrollTop) var scroll = document.body.scrollTop;
  else var scroll = window.pageYOffset;
  if(champ.selectionStart != 'undefined' && !champ.curseur){
    var pos = champ.selectionStart;
    contenu = remplace(remplace(contenu.substring(0, pos).replace(/&/g,'&amp;'),'>','&gt;'),'<','&lt;') + '<a href="#" name="prev_ancre_suivi" id="prev_ancre_suivi"></a>' +
    remplace(remplace(contenu.substring(pos).replace(/&/g,'&amp;'),'>','&gt;'),'<','&lt;');
  }
  else contenu = remplace(remplace(contenu.replace(/&/g,'&amp;'),'>','&gt;'),'<','&lt;');
  var reg = '';
  for (i=0;i<smilies.length;i++){
    eval('reg = /(\\s|\\r|^|&gt;)'+smilies[i]+'(\\s|\\r|$|&lt;)/g');
    contenu = contenu.replace(reg, '$1<img src="'+smilies_path+'/'+smilies_url[i]+'" alt="'+smilies[i]+'" class="smilies" />$2');
  }
  contenu = remplace(contenu, "\n", '<br />');
  contenu = contenu.replace(/\[b\]([\s\S]*?)\[\/b\]/g, '<strong>$1</strong>');
  contenu = contenu.replace(/\[u\]([\s\S]*?)\[\/u\]/g, '<span style="text-decoration:underline;">$1</span>');
  contenu = contenu.replace(/\[i\]([\s\S]*?)\[\/i\]/g, '<span style="font-style:italic;">$1</span>');
  contenu = contenu.replace(/\[s\]([\s\S]*?)\[\/s\]/g, '<span style="text-decoration:line-through;">$1</span>');
  contenu = contenu.replace(/\[liste\]\s*(<br \/>)?\s*([\s\S]*?)\s*(<br \/>)?\s*\[\/liste\]/g, '<ul>$2</ul>');
  contenu = contenu.replace(/\[liste=(disc|circle|square|none)\]([\s\S]*?)\[\/liste\]/g, '<ul style="list-style-type:$1;">$2</ul>');
  contenu = contenu.replace(/\[puce\]([\s\S]*?)\[\/puce\]\s*(<br \/>)?\s*/g, '<li>$1</li>');
  var i = 0;
  while((contenu.search(/\[quote=(.*?)\]([\s\S]*?)\[\/quote\]/g) != -1 || contenu.search(/\[quote\]([\s\S]*?)\[\/quote\]/g) != -1) && i < 20){
    contenu = contenu.replace(/\[quote=(.*?)\]([\s\S]*?)\[\/quote\]/g, '<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>Citation de $1 :</strong><div class="quote">$2</div>');
    contenu = contenu.replace(/\[quote\]([\s\S]*?)\[\/quote\]/g, '<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>Citation :</strong><div class="quote">$1</div>');
    i++;
  }
  contenu = contenu.replace(/\[img[ \w="]*\]([^"]*?)\[\/img\]/g, '<img src="$1" alt="Image" />');
  contenu = contenu.replace(/\[url\]([\s\S]*?)\[\/url\]/g, '<a href="$1">$1</a>');
  contenu = contenu.replace(/\[url=([\s\S]*?)\]([\s\S]*?)\[\/url\]/g, '<a href="$1">$2</a>');
  contenu = contenu.replace(/\[email\]([\s\S]*?)\[\/email\]/g, '<a href="mailto:$1">$1</a>');
  contenu = contenu.replace(/\[email=([\s\S]*?)\]([\s\S]*?)\[\/email\]/g, '<a href="mailto:$1">$2</a>');
  contenu = contenu.replace(/\[align=(left|right|center|justify)\]([\s\S]*?)\[\/align\]/g, '<div class="$1">$2</div>');
  contenu = contenu.replace(/\[float=(left|right|none)\]([\s\S]*?)\[\/float\]/g, '<div style="float:$1">$2</div>');
  contenu = contenu.replace(/\[size=(small|vsmall|big|vbig)\]([\s\S]*?)\[\/size\]/g, '<span class="$1">$2</span>');
  contenu = contenu.replace(/\[color=(fuchsia|red|orange|yellow|lime|green|olive|aqua|teal|blue|navy|purple|maroon|black|gray|silver|white)\]([\s\S]*?)\[\/color\]/g, '<span style="color:$1;">$2</span>');
  contenu = contenu.replace(/\[police=(arial|times|monospace|impact)\]([\s\S]*?)\[\/police\]/g, '<span style="font-family: $1, serif;">$2</span>');
  div_prev.innerHTML = contenu;
  if(is_opened_window){
    if(opener.document.getElementById('prev_ancre_suivi')) opener.document.getElementById('prev_ancre_suivi').focus();
    opener.document.getElementById(id_textarea).focus();
  }
  else{
    if(document.getElementById('prev_ancre_suivi')) document.getElementById('prev_ancre_suivi').focus();
    document.getElementById(id_textarea).focus();
  }
}

// Remplace search par replace dans data
function remplace(data, search, replace){
  var temp = data;
  var longueur = search.length;
  while (temp.indexOf(search) > -1){
    pos = temp.indexOf(search);
    temp = (temp.substring(0, pos) + replace + temp.substring((pos + longueur), temp.length));
  }
  return temp;
}

// Ajoute une balise au textarea (menu deroulant)
function add_bal(nom, val, id_liste, id_textarea, id_prev){
  bal = document.getElementById(id_liste).value;
  if(bal != '') balise('['+nom+''+val+'='+bal+']','[/'+nom+']', id_textarea);
  else balise('['+nom+']','[/'+nom+']', id_textarea);
  parse(id_textarea, id_prev);
  if(document.getElementById(id_liste)) document.getElementById(id_liste).options[0].selected = true;
}

// Ajoute une balise au textarea (prompt pour l'argument)
function add_bal2(nom, val, id_textarea, id_prev){
  var champ = document.getElementById(id_textarea);
  var texte = '';
  if(nom == 'quote'){
    texte = 'Veuillez renseigner l\'auteur de la citation';
    bal = prompt(texte);
    if(!bal && nom == 'quote') bal = 'Pas de titre';
    balise_debut = '['+nom+''+val+'='+bal+']';
    balise_fin = '[/'+nom+']';
  }
  else if(nom == 'url'){
    if (champ.curseur)
    txt_selectionne = champ.curseur.text;
    else if(champ.selectionStart >= 0 && champ.selectionEnd >= 0) txt_selectionne = champ.value.substring(champ.selectionStart, champ.selectionEnd);
    else txt_selectionne = '';
    if (txt_selectionne.indexOf('http://') == 0 || txt_selectionne.indexOf('https://') == 0 || txt_selectionne.indexOf('ftp://') == 0 || txt_selectionne.indexOf('apt://') == 0){
      texte = 'Veuillez indiquer le texte du lien';
      bal2 = prompt(texte);
      balise_debut = '['+nom+' '+val+'="';
      balise_fin = '"]'+bal2+'[/'+nom+']';
    }
    else if (txt_selectionne == ''){
      texte = 'Veuillez indiquer le lien';
      bal = prompt(texte);
      bal2 = prompt('Veuillez indiquer le texte du lien');
      balise_debut = '['+nom+'='+bal+']'+bal2;
      balise_fin = '[/'+nom+']';
    }
    else{
      texte = 'Veuillez indiquer le lien';
      bal = prompt(texte);
      balise_debut = '['+nom+'='+bal+']';
      balise_fin = '[/'+nom+']';
    }
  }
  else if(nom == 'email'){
    texte = 'Veuillez indiquer l\'email';
    bal = prompt(texte);
    balise_debut = '['+nom+'='+bal+']';
    balise_fin = '[/'+nom+']';
  }
  balise(balise_debut,balise_fin, id_textarea);parse(id_textarea, id_prev);
  if(document.getElementById(nom)) document.getElementById(nom).options[0].selected = true;
}

// Ajoute une liste au textarea
function add_liste(id_textarea, id_prev){
  var texte = '';
  while(tmp = prompt('Saisir le contenu d\'une puce (si vous voulez arrêter ici, cliquez sur annuler)')) texte += '[puce]'+tmp+'[/puce]'+"\n";
  balise('[liste]'+"\n"+texte,'[/liste]', id_textarea);parse(id_textarea, id_prev);
}

// Autre smileys
function smiley_change_page(id_div_smiley, id_textarea, id_prev){
  if(smiley_page == 1){
    html='';
    for(i=0; i<=18; i++){
      html+='<img src="'+smilies_path+'/'+smilies_url[i]+'" alt="'+smilies[i]+'" onclick="balise(\''+smilies[i]+'\',\'\',\''+id_textarea+'\'); parse(\''+id_textarea+'\',\''+id_prev+'\'); return false;"/>';
      if((i+1)%4 == 0) html += '<br />';
    }
    document.getElementById(id_div_smiley).innerHTML = html;
    smiley_page=0;
  }
  else{
    html='';
    for(i=19; i<=26; i++){
      html+='<img src="'+smilies_path+'/'+smilies_url[i]+'" alt="'+smilies[i]+'" onclick="balise(\''+smilies[i]+'\',\'\',\''+id_textarea+'\'); parse(\''+id_textarea+'\',\''+id_prev+'\'); return false;"/>';
      if((i)%2 == 0) html += '<br />';
    }
    document.getElementById(id_div_smiley).innerHTML = html;
    smiley_page=1;
  }
}

function param_bbcode(smil_path){
  smilies_path=smil_path;
}