function snTagWord(string, word, tag)
{
  if(string.length() == 0)
    return ;
    
  var tagOpen = tag;
  var tagEnd = tag.split(' ')[0];
  var $j = jQuery.noConflict();
  
  //if(links = $j(string).find('a'))
  if(false)
  {
    //alert(links); return string;
    links.find('a').each(function(){
      var regReplace = new RegExp('([^=&"/])(' + word + ')([^&"/])', 'ig');// i = caseless, g = all matches
      this.innerHTML = this.innerHTML.replace(regReplace, '$1<' + tagOpen + '>$2</' + tagEnd + '>$3');
    });
  }
  else
  {
	  var regReplace = new RegExp('([^=&"/])(' + word + ')([^&"/])', 'ig');// i = caseless, g = all matches
	  string = string.replace(regReplace, '$1<' + tagOpen + '>$2</' + tagEnd + '>$3');
	}
	
	return string;
}

function snApplyEditIcon(id)
{
  $j('#' + id + ' tbody > tr > td.texte4').find('a').not('a.icon').each(function(){
    $j(this).attr('class', 'edit');
  });
}

function snTableOverOut(id)
{
	$j('#' + id).find('tr.value').each(function(){
	  $j(this).mouseover(function(){
	    var cb = $j(this).find('input:checkbox').eq(0);
	    $j(this).attr('class', 'value-over');
	  }).mouseout(function(){
	    var cb = $j(this).find('input:checkbox').eq(0);
	    if(cb.attr('checked'))
	      $j(this).attr('class', 'value-selected');
	    else
	      $j(this).attr('class', 'value');
	  })
	});
}

function snOpenDialog(id, options, callback)
{
  if(!callback)
    callback = function() {
      alert("valider");
    };

  var baseOptions = {
    modal: true, 
    overlay: { 
      opacity: 0.5, 
      background: "black" 
    } ,
    buttons: { 
      "Valider": callback, 
      "Annuler": function() { 
        $j(this).dialog("close"); 
      } 
    } 
  };
  baseOptions = merge(baseOptions, options);
  
  $j("#" + id).dialog(baseOptions);
}

function merge(obj1, obj2)
{
  for(var i in obj2)
    obj1[i] = obj2[i];
    
  return obj1;
}

function snFillCombo(id, options, params)
{
  var cbOpts = $(id).options;
  cbOpts.length = options.length;
  var i = 0;
  
  if(params && params.include_custom)
  {
    cbOpts.length++;
    cbOpts[i].value = params.include_custom.value;
    cbOpts[i].text  = params.include_custom.text;
    i++;
  }
  
  for(var j = 0; j < options.length; j++, i++)
  {
    if(options[j].text)
    {
      cbOpts[i].value = options[j].value;
      cbOpts[i].text  = options[j].text;
    }
    else
    {
      cbOpts[i].value = options[j];
      cbOpts[i].text  = options[j].toString();//.toUpperCase();
    }
    if(params.selected && cbOpts[i].value == params.selected)
      cbOpts.selectedIndex = i;
  }
  
  if(!params.selected)
    cbOpts.selectedIndex = 0;
}

snMaskParams = { backgroundColor: '#000000' };
function snShowMask(id)
{
  var box = $j('#' + id);
  box.before('<div id="mask-' + id + '" class="snmask"></div>');
  //box.before('<div id="mask-box-' + id + '" style="height: 0;"><div id="mask-box-inner-' + id + '" class="mask-box"></div></div>');
  var offset = box.offset();
  offset.left+= snWindowHaveScroll() ? 1 : 0;
  
  //--o Prepare mask
  var mask = $j('#mask-' + id);
  var css = {
    backgroundColor: snMaskParams.backgroundColor,
    position: 'absolute',
    top: offset.top,
    left: offset.left,
    zIndex: 1000,
    opacity: 0
  };
  mask.css(css);
  mask.width(box.width());
  mask.height(box.height());
  
  //--o Prepare message box
  /*var messBox = $j('#mask-box-' + id);
  var innerBox = $j('#mask-box-inner-' + id);
  //alert(offset.top + (mask.width() / 2));
  var css = {
    backgroundColor: '#fff',
    position: 'absolute',
    top: offset.top + (mask.height() / 2) - (innerBox.height() / 2),
    left: offset.left + (mask.width() / 2) - (innerBox.width() / 2),
    zIndex: 1001,
    opacity: 0
  };
  messBox.css(css);*/
  
  mask.fadeTo('fast', 0.75);
  //messBox.fadeTo('fast', 1);
}
function snHideMask(id)
{
  var mask = $j('#mask-' + id);
  //var messBox = $j('#mask-box-' + id);
  mask.remove();
  //messBox.remove();
  //mask.fadeOut('fast', function(){ mask.remove(); });
}
function snWindowHaveScroll()
{
  //alert($j('body').height() + " > " + $j(window).height() + " ? " + ($j('body').height() > $j(window).height() ? 'true' : 'false'));
  //alert($j('html').css('overflow-y') == 'scroll' ? 'true' : 'false');
  if($j('html').css('overflow-y') == 'scroll') return false;
  return $j('body').height() > $j(window).height() ? true : false;
}

function snAnchorElement(el, elSrc, offsetX, offsetY)
{
  offsetX = offsetX ? offsetX : 0;
  offsetY = offsetY ? offsetY : 0;
  var _elSrc = $j("#" + elSrc);
  //alert(_elSrc.position().top + ', ' + _elSrc.position().left);
  var offset = _elSrc.position(); 
  $j("#" + el).css({
    top: offset.top + offsetY, 
    left: offset.left + _elSrc.width() + offsetX});
}

function snApplyTabs(callback)
{
	$j('div.tab-topbar').find('a.tab-item, a.tab-item-selected').each(function(){
	  $j(this).click(function(){
	    snOpenTab(this);
	    if(callback != undefined)
	     callback();
	    return false;
	  });
	  if($j(this).attr('class') == 'tab-item')
	    $j('#' + $j(this).attr('rel')).attr('style', 'display: none;');
	});
	
	function snOpenTab(tabItem) {
	  tabItem.blur();
	  $j('div.tab-topbar').find('.tab-item-selected').each(function(){
	    $j(this).attr('class', 'tab-item');
	    $j('#' + $j(this).attr('rel')).attr('style', 'display: none;');
	  });
	  tabItem.className = 'tab-item-selected';
	  $j('#' + $j(tabItem).attr('rel')).attr('style', 'display: block;');
	}
}
/**
 * Tabs button must be in a .tab-container box
 * Tabs buttons must have a .tb-button class
 * Tabs buttons must have an id
 * Tabs content boxes must have an id = {button_id}-content
 * Tabs content boxes must have a .tab-content class
 */
function snMakeTabs(container, default_tab)
{
  var tab_main = '#' + container;
	$j(tab_main).find('.tab-container a').each(function(){
	  $j(this).click(function(){
	    this.blur();
	    $j(tab_main).find('.tab-container a.tb-button-selected').removeClass('tb-button-selected').addClass('tb-button');
	    $j(this).removeClass('tb-button').addClass('tb-button-selected');
	  
	    $j(tab_main).find('.tab-content').css('display', 'none');
	    $j(tab_main).find('#' + $j(this).attr('id') + '-content').css('display', 'block');
	    
	    return false;
	  });
	});
	$j(tab_main).find('.tab-container a#' + default_tab).click();
}
/**
 * 
 */
function snMakeCombo(cb_id, options, selected, onChange)
{
  /* Valeur par défaut */
  var $cb_btn = $j('#' + cb_id);
  $cb_btn.html(options[selected]);
  
  /* Préparation des options */
  var cb_opts = '<ul id="' + cb_id + '-opts" class="combo">';
  for(i in options)
    cb_opts+= '<li><a href="#" rel="' + i + '"' + (i == selected ? ' class="cb-selected"' : '') + '>' + options[i] + '</a></li>';
  cb_opts+= '</ul>';
  $cb_btn.after(cb_opts);
  /* Positionnement des options */
  $cb_opts = $j('#' + cb_id + '-opts');
  //var offset = $(cb_id).cumulativeOffset();
  var offset = $cb_btn.offset();
  $cb_opts.css('left', offset.left);
  $cb_opts.css('display', 'none');
  
  /* function to close choices */
  $j('body').get(0).comboBodyClick = function(){
    if($cb_opts.css('display') != 'none') {
      $cb_btn.click();
    }
  }

  /* Evènements */
  $cb_btn.click(function(){
    $cb_opts.toggle();
    if($cb_opts.css('display') == 'none') {
      $j(this).removeClass('cb-up').addClass('cb-down');
      //$j('body').unbind('mouseup', $j('body').get(0).choicesBodyClick);
    } else {
      $j(this).removeClass('cb-down').addClass('cb-up');
      //$j('body').one('mouseup', $j('body').get(0).ajaxComboBodyClick);
    }
  });
  $cb_opts.find('a').each(function(){
    $j(this).click(function(){
      this.blur();
      $cb_opts.find('a.cb-selected').removeClass('cb-selected');
      $j(this).addClass('cb-selected');
      $cb_btn.html(options[$j(this).attr('rel')]);
      $cb_btn.click();
      onChange($j(this).attr('rel'));
    });
  });
  
  /* stop body mouseup on choices over */
  $cb_opts.mouseover(function(){
    $j('body').unbind('mouseup', $j('body').get(0).comboBodyClick);
  })
  /* restart body mouseup on choices out */
  .mouseout(function(){
    $j('body').one('mouseup', $j('body').get(0).comboBodyClick);
  })
  $cb_btn.mouseover(function(){
    $j('body').unbind('mouseup', $j('body').get(0).comboBodyClick);
  })
  /* restart body mouseup on choices out */
  .mouseout(function(){
    $j('body').one('mouseup', $j('body').get(0).comboBodyClick);
  })
}

function snStringToNumber(strNumber)
{
  return parseFloat(strNumber.replace(' ', '').replace(',', '.'));
}
function snNumberFormat(number, decimals, dec_point, thousands_sep)
{
  //----o Conversion du nombre en chaine
  //--o Calcul d'arrondi
  number = (isNaN(number) ? '0' : (Math.round(number * Math.pow(10, decimals)) / Math.pow(10, decimals)) + '');

  //----o SÃ©paration entier et dÃ©cimals
  arrIntegerDecimal = number.split('.');
  integer = arrIntegerDecimal[0];
  decimal = (arrIntegerDecimal.length > 1 ? arrIntegerDecimal[1] : '');

  //----o Formate dÃ©cimals
  strDecimal = (decimal.length > 0 ? decimal.substr(0, decimals) : '');
  decimalLength = strDecimal.length
  if (decimalLength < decimals)
    for (i = 0; i < decimals - decimalLength; i++)
      strDecimal+= "0";

  //----o Formate entier
  strInteger = '';
  reste = integer + '';
  pos = reste.length - 3;
  while (pos > 0)
  {
    strInteger+= thousands_sep + reste.substr(pos);
    reste = reste.substr(0, pos);
    pos-= 3;
  }
  strInteger = reste + strInteger;

  //----o Assemblage number
  dec_point = (decimals > 0 ? dec_point : '');
  return strInteger + dec_point + strDecimal;
}

laListHasCheckedCars = false;
function hasCheckedCars(form_id, alert_message, checkbox_name)
{
  laListHasCheckedCars = false;
  
  $j('#' + form_id).find("input[name='" + (checkbox_name ? checkbox_name : 'auto_id') + "[]']").each(function(){
    if(this.checked) {
      laListHasCheckedCars = true;
      return false;
    }
  });
  
  if(!laListHasCheckedCars) {
    alert(alert_message ? alert_message : 'Il faut sÃ©lectionner au moins une voiture !');
    return false;
  }
  
  return true;
}

function getCookieVar(name)
{
  var cookie = document.cookie;
  var cookie_vars = document.cookie.split(' ');
  for(i in cookie_vars)
    //alert(cookie_vars[i].indexOf);
    if(cookie_vars[i].toString().indexOf('symfony') > -1){
      //alert(i);
      //alert(' = ' + cookie_vars[i]);
      return cookie_vars[i];
    }
}

function snMakeMinusPlusBox(handlerElement_id, contentElement_id, bulletElement_id)
{
  var handler = $j('#' + handlerElement_id);
  var domHandler = $(handlerElement_id);
  
  domHandler.contentId = contentElement_id;
  domHandler.bulletId  = bulletElement_id;
  
  handler.mouseover(function(){
    var bullet  = $j('#' + this.bulletId);
    
    if(bullet.attr('class') == 'minus')
      bullet.attr('class', 'minus-over'); 
    else 
      bullet.attr('class', 'plus-over');
  })
  .mouseout(function(){
    var bullet  = $j('#' + this.bulletId);
    
    if(bullet.attr('class') == 'minus-over') 
      bullet.attr('class', 'minus'); 
    else 
      bullet.attr('class', 'plus');
  })
  .click(function(){
    var content = $j('#' + this.contentId);
    var bullet  = $j('#' + this.bulletId);
  
    if(content.attr('tagName').toLowerCase() != 'div') {
      content.toggle();
      if(content.css('display') == 'none') { 
        bullet.attr('class', 'plus-over');
      } else {
        bullet.attr('class', 'minus-over');
      } 
    } else {
      if(content.css('display') == 'none') { 
        content.slideDown('normal');
        bullet.attr('class', 'minus-over');
      } else {
        content.slideUp('normal');
        bullet.attr('class', 'plus-over');
      }
    }
  });
}

/**
 *
 */
function snMakeChoices(choices)
{
  /* options init */
  var effect = 'drop';
  var options = {direction: 'right'};
  var duration = 250;
  
  /* function to close choices */
  $j('body').get(0).choicesBodyClick = function(){
    if($j('#choices-' + this.snOpenedChoiceId).css('display') != 'none') {
      $j('#choices-' + this.snOpenedChoiceId).hide(effect, options, duration);
      $j('#choice-' + this.snOpenedChoiceId).attr('class', 'choice-title');
    }
  }
  
  /* for each choice */
  for(i = 0; i < choices.length; i++) {
    $('choice-' + choices[i]).snChoices = choices;
    $('choice-' + choices[i]).snId = choices[i];
    /* click event on choice button */
    $j('#choice-' + choices[i]).click(function(){
      this.blur();
      
      /* close all opened choices */
      /*for(i = 0; i < this.snChoices.length; i++)
        if(this.snChoices[i] != this.snId && $j('#choices-' + this.snChoices[i]).css('display') != 'none') {
          $j('#choices-' + this.snChoices[i]).hide(effect, options, duration);
           $j('#choice-' + this.snChoices[i]).attr('class', 'choice-title');
        }*/   
      
      /* open or close clicked choice */
      if($j('#choices-' + this.snId).css('display') != 'none') {
        //$j('#choices-' + this.snId).hide(effect, options, duration);
        //$j('#choice-' + this.snId).attr('class', 'choice-title');
      } else {
        $j('#choices-' + this.snId).show(effect, options, duration);
        $j('#choice-' + this.snId).attr('class', 'choice-title-selected');
        
        /* add mouseup event on body to close choice */
        $j('body').get(0).snOpenedChoiceId = this.snId;
        $j('body').one('mouseup', $j('body').get(0).choicesBodyClick);
      }
      
      return false;
    });
    
    /* stop body mouseup on choices over */
    $j('#choices-' + choices[i]).mouseover(function(){
      $j('body').unbind('mouseup', $j('body').get(0).choicesBodyClick);
    })
    /* restart body mouseup on choices out */
    .mouseout(function(){
      $j('body').one('mouseup', $j('body').get(0).choicesBodyClick);
    })
    /* mouseup event on checkbox label */
    .find('label').mouseup(function(){
      if(!$j('#' + $j(this).attr('for')).attr('checked'))
        $j(this).parent().attr('class', 'choice-option-container-selected');
      else
        $j(this).parent().attr('class', 'choice-option-container');
    }).end()
    /* mouseup event on checkbox */
    .find('input:checkbox').each(function(){ this.snId = choices[i]; }).mouseup(function(){
      if(!$j(this).attr('checked'))
        $j(this).parent().attr('class', 'choice-option-container-selected');
      else
        $j(this).parent().attr('class', 'choice-option-container');
    })
    /* change event on checkbox */
    .change(function(){
      if(this.checked)
        $('choice-count-' + this.snId).innerHTML = snStringToNumber($('choice-count-' + this.snId).innerHTML) + 1;
      else
        $('choice-count-' + this.snId).innerHTML = snStringToNumber($('choice-count-' + this.snId).innerHTML) - 1;
    });
    
    /* reset functions for reset filters */
    $('choice-' + choices[i]).reset = function(){
      $j(this).attr('class', 'choice-title').find('span').attr('innerHTML', '0');
    }
    $('choices-' + choices[i]).reset = function(){
      $j(this).find('div.choice-option-container-selected').each(function(){
        $j(this).attr('class', 'choice-option-container');
      });
      if($j(this).css('display') != 'none')
        $j(this).hide(effect, options, duration);
    }
  }
}
