if (jqTools === undefined) { var jqTools = {} };
jqTools.action_en_cours = false;
jqTools.init_list_pagination = Array();

jqTools.updateTips = function (obj, t)
{
  if(obj.find("#validateTips").get() == "")
  {
    if(obj.find('.ui-loading').get() != "")
    {
      obj.find('.ui-loading').after('<p id="validateTips"></p>');
    }
    else
    {
      obj.prepend('<p id="validateTips"></p>');
    }
  }

  if(t != "")
  {
    obj.find("#validateTips").html(t).effect("highlight",{},1500);
  }
  else
  {
    obj.find("#validateTips").remove();
  }
}

jqTools.form_init = function (form, reset)
{
  $(form).find(":input").each(function(elem){
    if(reset)
    {
      switch($(this).attr('type'))
      {
        case "submit":
          break;
        case "hidden":
          break;
        case "checkbox":
          $(this).removeAttr("checked");
          break;
        case "select":
          $(this).html('');
          break;
        default:
          $(this).val('');
          break;
      }
    }

    jqTools.removeErrorClass($(this));

  });
}

jqTools.dialogLoadToUpdate = function (open_link, dialog, options)
{
  if(options == null)
  {
    options = {};
  }


  if(!dialog.get(0))
  {
    dialog = $("#jq-tools-dialog");
    if(!dialog.get(0))
    {
      $('body').append('<div id="jq-tools-dialog"></div>');
      dialog = $('#jq-tools-dialog');
    }
  }

  var dialog_width = options['dialog_width'] || 300;
  var dialog_height = options['dialog_height'] || 300;
  var callback = options['callback'] || null;
  var call_to_init_form = options['call_to_init_form'] || null;
  var call_before_submit = options['call_before_submit'] || null;
  var dont_close_after_success = options['dont_close_after_success'] || false;
  var success_msg = options['success_msg'] || '';
  var extra_buttons = options['extra_buttons'] || {};
  var label_ok = options['label_ok'] || 'Ok';
  var label_cancel = options['label_cancel'] || 'Annuler';

  open_link.click(function(event) {
	  event.preventDefault();

    if(!jqTools.action_en_cours)
    {
      jqTools.action_en_cours = true;

      var dialog_title = $(this).attr('title');
      jqTools.showLoading(dialog);
      var ajax_request = $.get($(this).attr("href"), {},
        function(data_receive){
          dialog.hide();
          dialog.html(data_receive);

    		  if(call_to_init_form)
    		  {
            call_to_init_form.call();
    		  }
    		  dialog.show();

          var form = dialog.find("form");
          jqTools.form_init(form);

          //Ajout des boutons
          var buttons = {}

          for (i in extra_buttons)
    		  {
    		    buttons[i] = extra_buttons[i];
    		  }

    		  buttons[label_ok] = function() {
    		    form.submit();
    		  };

    		  buttons[label_cancel] = function() {
    			  jqTools.action_en_cours = false;
    				dialog.dialog('close');
    			}

          dialog.dialog('option', 'buttons', buttons);

      		//Initialisation du formulaire
          form.bind('submit', function(event){
    			    if(!jqTools.action_en_cours)
    			    {
      			    jqTools.action_en_cours = true;
      			    jqTools.form_init(form, false);
      			    jqTools.showLoading(dialog);
      			    jqTools.updateTips(dialog, "Envoi en cours...");

          		  if(call_before_submit)
          		  {
                  call_before_submit.call();
          		  }
    			    }
    			    else
    			    {
                event.preventDefault();
                event.stopImmediatePropagation();
    			    }
            });

          form.ajaxForm({
            dataType: 'json',
            success: function(data_receive){
              jqTools.action_en_cours = false;
              if(data_receive.result == 'KO')
              {
                var errors = "";
                $.each(data_receive.errors, function(i,item){
                  if(item.name)
                  {
                    jqTools.addErrorClass(form.find("#"+item.name));
                  }
                  if(errors != "")
                  {
                    errors = errors + "<br />";
                  }
                  errors = errors + item.msg;
                })

                jqTools.hideLoading(dialog);
                jqTools.updateTips(dialog, errors);
              }
              else
              {
                if(dont_close_after_success)
                {
                  jqTools.hideLoading(dialog);
                  jqTools.updateTips(dialog, success_msg);
                }
                else
                {
                  dialog.dialog('close');
                }

                if(callback)
          		  {
                  callback(data_receive);
          		  }
              }
            }
          });

          jqTools.action_en_cours = false;
          //Fin de la chargement du formulaire
        }
      );

      // Initialisation de la dialog
    	dialog.dialog({
    		bgiframe: true,
    		autoOpen: true,
    		height: dialog_height,
    		width: dialog_width,
    		modal: true,
    		title: dialog_title,
    		buttons: {
  		    'Annuler': function() {
  		      ajax_request.abort();
    			  jqTools.action_en_cours = false;
    				dialog.dialog('close');
    			}
    		},
    		open: function() {
    		},
    		close: function() {
    		  jqTools.hideLoading(dialog);
    		  jqTools.updateTips(dialog, '');
    			dialog.dialog('destroy');
    			dialog.html('');
    		}
    	});

    	//Si il y a une erreur de chargement
    	dialog.ajaxError(jqTools.errorLoad);
    }

  });
}

jqTools.errorLoad = function(event, request, settings)
{
  jqTools.hideLoading($(this));
  $(this).html('<p class="error">Erreur de chargement, merci de réessayer ultérieurement.</p>');
  jqTools.action_en_cours = false;
  $(this).unbind('ajaxError', jqTools.errorLoad);
}

jqTools.showLoading = function (dialog)
{
  if(dialog.find('.ui-loading').get() == "")
  {
    dialog.prepend('<div class="ui-loading"></div>');
  }
}

jqTools.hideLoading = function (dialog)
{
  dialog.find('.ui-loading').remove();
}

jqTools.autoCompleteVille = function(input_code_postal, href, select_ville, callback_before, callback_after)
{
  var last_request = input_code_postal.val();

  input_code_postal.keyup(function(){
    if(href && $(this).val().length == 5 && $(this).val() != last_request)
    {
      last_request = $(this).val();
      $(select_ville).attr("class", "disabled");

      if(callback_before)
      {
        callback_before.call();
      }

      $.getJSON(href+"?code_postal="+$(this).val(),
          function(data)
          {
            var html = '<select name="'+$(select_ville).attr('name')+'" id="'+$(select_ville).attr('id')+'">';
            $.each(data.communes, function(i,commune)
            {
              html += '<option value="'+commune.id+'">'+commune.libelle+'</option>';
            });
            html += '</select>';

            $(select_ville).removeAttr("disabled");
            $(select_ville).replaceWith(html);

            if(callback_after)
            {
              callback_after.call();
            }
          });
    }
  });

  input_code_postal.change(function(){

    if(href && $(this).val() != last_request)
    {
      last_request = $(this).val();

      $(select_ville).attr("class", "disabled");

      if(callback_before)
      {
        callback_before.call();
      }

      $.getJSON(href+"?code_postal="+$(this).val(),
          function(data)
          {
            var html = '<select name="'+$(select_ville).attr('name')+'" id="'+$(select_ville).attr('id')+'">';
            $.each(data.communes, function(i,commune)
            {
              html += '<option value="'+commune.id+'">'+commune.libelle+'</option>';
            });
            html += '</select>';

            $(select_ville).removeAttr("disabled");
            $(select_ville).replaceWith(html);

            if(callback_after)
            {
              callback_after.call();
            }
          });
    }
  });
}

jqTools.initList = function(link, list, callback)
{
  link.click(function(event) {
  	  event.preventDefault();

  	  var reg = new RegExp("(.*page[\/=])([0-9]+)(.*)", "gi");
  	  var url = $(this).attr("href");

  	  var res = reg.exec(url);
  	  if(res && res.length >=4)
  	  {
  	    var url_page = res[1];
  	    var numero_page = res[2];
  	    var params = res[3];

  	    jqTools.init_list_pagination[url_page] = numero_page;
  	  }

  	  jqTools.refreshAjaxElement($(this).attr("href"), list, callback);
  	});
}

jqTools.refreshAjaxElement = function(href, list, callback)
{
  if(href)
  {
	  var reg = new RegExp("(.*page[\/=])([^\/=]*)(.*)", "gi");

	  var res = reg.exec(href);
	  if(res && res.length >=4)
	  {
	    var url_page = res[1];
	    var numero_page = res[2];
	    var params = res[3];

	    if(jqTools.init_list_pagination[url_page] != undefined)
	    {
	      href = url_page+jqTools.init_list_pagination[url_page]+params;
	    }
	  }

    jqTools.showLoading(list);
    list.ajaxError(jqTools.errorLoad);
    $.ajax({
      type: "GET",
      url: href,
      data: "",
      success: function(msg){
        if(msg)
        {
          list.html(msg);

          jqTools.hideLoading(list);
          list.unbind('ajaxError', jqTools.errorLoad);
          if(callback)
          {
            callback.call();
          }
        }
      },
      dataType: "html"
      });
  }
}

jqTools.addFancy = function(element)
{
  $(element).find("a.fancybox").fancybox({'zoomOpacity' : true,
                                          'overlayShow' : false,
                                          'zoomSpeedIn' : 500,
                                          'zoomSpeedOut' : 500});
}

jqTools.addWymEditor = function(textarea, options)
{
  if(options == null)
  {
    options = {};
  }

  var update_selector = options['update_selector'] || ".sf_admin_action_save, .sf_admin_action_save_and_add, .bouton_save";

  if (typeof $.fn.wymeditor != "undefined")
  {
        {
          textarea.wymeditor({
            lang:  'fr',
            width:670,
            height:600,
            updateSelector: update_selector,
            updateEvent:    'click',
            toolsItems: [
              {'name': 'Bold', 'title': 'Strong', 'css': 'wym_tools_strong'},
              {'name': 'Italic', 'title': 'Emphasis', 'css': 'wym_tools_emphasis'},
              {'name': 'InsertUnorderedList', 'title': 'Unordered_List', 'css': 'wym_tools_unordered_list'},
              {'name': 'Indent', 'title': 'Indent', 'css': 'wym_tools_indent'},
              {'name': 'Outdent', 'title': 'Outdent', 'css': 'wym_tools_outdent'},
              {'name': 'Undo', 'title': 'Undo', 'css': 'wym_tools_undo'},
              {'name': 'Redo', 'title': 'Redo', 'css': 'wym_tools_redo'},
              {'name': 'CreateLink', 'title': 'Link', 'css': 'wym_tools_link'},
              {'name': 'Unlink', 'title': 'Unlink', 'css': 'wym_tools_unlink'},
              {'name': 'Paste', 'title': 'Paste_From_Word', 'css': 'wym_tools_paste'},
              {'name': 'ToggleHtml', 'title': 'HTML', 'css': 'wym_tools_html'}
            ],
            containersItems: [
                {'name': 'P', 'title': 'Paragraph', 'css': 'wym_containers_p'},
                {'name': 'H4', 'title': 'Heading_4', 'css': 'wym_containers_h4'}
            ],
            stylesheet: '/wymeditor/css/my_wym_styles.css'
          });
          $('.wym_skin_default .wym_dropdown').css({ borderWidth: '1px 1px 1px 1px' });
        }
  }
}

jqTools.confirm = function(question, titre, callback, ok_button, cancel_button)
{
  $('body').append('<div id="dialog-confirm">'+question+'</div>');

  if(!ok_button)
  {
    ok_button = 'OK';
  }
  if(!cancel_button)
  {
    cancel_button = 'Annuler';
  }

  var my_buttons = {}
  my_buttons[ok_button] = function() {
        $('#dialog-confirm').dialog('close');

        if(callback)
        {
          callback(true);
        }
  }
  my_buttons[cancel_button] = function() {
        $('#dialog-confirm').dialog('close');

        if(callback)
        {
          callback(false);
        }
  }

	$('#dialog-confirm').dialog({
		bgiframe: true,
		autoOpen: true,
		modal: true,
		title: titre,
		buttons: my_buttons,
		open: function() {
		},
		close: function() {
		  $('#dialog-confirm').dialog('destroy');
		  $('#dialog-confirm').remove();
		}
	});

}

jqTools.alert = function(question, titre, callback, ok_button)
{
  $('body').append('<div id="dialog-alert">'+question+'</div>');

  if(!ok_button)
  {
    ok_button = 'OK';
  }

  var my_buttons = {}
  my_buttons[ok_button] = function() {
        $('#dialog-alert').dialog('close');

        if(callback)
        {
          callback.call();
        }
  }

	$('#dialog-alert').dialog({
		bgiframe: true,
		autoOpen: true,
		modal: true,
		title: titre,
		buttons: my_buttons,
		open: function() {
		},
		close: function() {
		  $('#dialog-alert').dialog('destroy');
		  $('#dialog-alert').remove();
		}
	});

}

jqTools.confirmAndSend = function(button, options)
{
  if(options == null)
  {
    options = {};
  }

  var title = options['title'] || '';
  var confirm_msg = options['confirm_msg'] || '';
  var callback = options['callback'] || null;
  var ok_button = options['ok_button'] || 'OK';
  var cancel_button = options['cancel_button'] || 'Annuler';
  var type = options['type'] || '';
  var method = options['method'] || 'POST';

  var return_function = function(data_receive){
    $('#dialog-alert').dialog('close');
    jqTools.action_en_cours = false;
    if(callback)
    {
      callback(data_receive);
    }
  }

  button.click(function(event) {
      	  event.preventDefault();

          if(!jqTools.action_en_cours)
          {
            var the_button = $(this);
            jqTools.confirm(confirm_msg, title, function(r){
                if(r)
                {
                  jqTools.action_en_cours = true;

                  jqTools.alert('', 'Envoi en cours');
                  jqTools.showLoading($('#dialog-alert'));
                	//Si il y a une erreur de chargement
                	$('#dialog-alert').ajaxError(jqTools.errorLoad);

            	    $.ajax({
                      type: method,
                      url: the_button.attr("href"),
                      data: "",
                      success: return_function,
                      dataType: type
                      });
                }
              }, ok_button, cancel_button);
          }
      	});
}

jqTools.addErrorClass = function(element)
{
  element.addClass('ui-state-error');
  element.trigger("class_change");
}

jqTools.removeErrorClass = function(element)
{
  element.removeClass('ui-state-error');
  element.trigger("class_change");
}

jqTools.useDatePicker = function(date_selector, options)
{
  if(options == null)
  {
    options = {};
  }

  var with_time = options['withtime'] || false;
  var time_mode = options['timemode'] || "default";
  var minute_step = options['minutestep'] || 15;


  var reg = new RegExp('[ #]', 'gi');
  var new_selector = date_selector.replace(reg, '');

  options['dateFormat'] = options['dateFormat'] || 'DD  d M yy';

  //var options2 = jQuery.makeArray( options );
  var options2 = jqTools.clone( options );

  options2['showButtonPanel'] = options2['showButtonPanel'] || true;
  options2['dateFormat'] = 'yy-mm-dd';
  options2['altField'] = options2['altField'] || "#"+new_selector+'_jqdp_date_hidden';
  options2['altFormat'] = options2['altFormat'] || 'yy-mm-dd';

  if($(date_selector))
  {
    $(date_selector).hide();
    var date_value = $(date_selector).val();
    if(date_value)
    {
      date_value = date_value.split(' ');
    }
    else
    {
      date_value = {0:'', 1:''};
    }

    if(with_time)
    {
      switch(time_mode)
      {
        case 'select':
          var heure_value = date_value[1];
          if(heure_value)
          {
            heure_value = heure_value.split(':');
          }
          else
          {
            heure_value = {0:'', 1:''};
          }

          var heures_select = '<select id="'+new_selector+'_jqdp_heure" class="date_picker_heure '+$(date_selector).attr('class')+'">';
          for(i=0; i< 24; i++)
          {
            heures_select += '<option value="'+jqTools.str_pad(i, 2, '0', 'STR_PAD_LEFT')+'">'+jqTools.str_pad(i, 2, '0', 'STR_PAD_LEFT')+'</option>';
          }
          heures_select += '</select>';

          var minutes_select = '<select id="'+new_selector+'_jqdp_minute" class="date_picker_minute '+$(date_selector).attr('class')+'">';
          for(i=0; i< 60; i += parseInt(minute_step))
          {
            minutes_select += '<option value="'+jqTools.str_pad(i, 2, '0', 'STR_PAD_LEFT')+'">'+jqTools.str_pad(i, 2, '0', 'STR_PAD_LEFT')+'</option>';
          }
          minutes_select += '</select>';

          $(date_selector).after(minutes_select);
          $(date_selector).after('<span class="date_piker_hour_separator"> H </span>');
          $(date_selector).after(heures_select);

          $("#"+new_selector+"_jqdp_heure").val(heure_value[0]);
          $("#"+new_selector+"_jqdp_minute").val(heure_value[1]);
          break;
        default:
          $(date_selector).after('<input type="text" id="'+new_selector+'_jqdp_heure" value="'+date_value[1]+'" class="'+$(date_selector).attr('class')+'"/>');
          break;
      }

      $(date_selector).after('<span class="date_piker_separator"> à </span>');
    }
    $(date_selector).after('<input type="text" id="'+new_selector+'_jqdp_date" value="'+date_value[0]+'" class="date_picker_date '+$(date_selector).attr('class')+'"/>');
    $(date_selector).after('<input type="hidden" id="'+new_selector+'_jqdp_date_hidden" value="'+date_value[0]+'"/>');

    $("#"+new_selector+"_jqdp_date").datepicker(options2);

    $("#"+new_selector+"_jqdp_date").datepicker('option', 'dateFormat', options['dateFormat']);

    $(date_selector).bind("class_change", function(){
        var new_classes = $(date_selector).attr('class');
        $("#"+new_selector+"_jqdp_date").attr('class', new_classes);
        $("#"+new_selector+"_jqdp_heure").attr('class', new_classes);
        if(time_mode == 'select')
        {
          $("#"+new_selector+"_jqdp_minute").attr('class', new_classes);
        }
    });
  }
}

jqTools.concatDate = function(date_selector)
{
  var reg = new RegExp('[ #]', 'gi');
  var new_selector = date_selector.replace(reg, '');

  if($(date_selector))
  {
    if(!$("#"+new_selector+'_jqdp_date').val())
    {
      $("#"+new_selector+'_jqdp_date_hidden').val('');
      if($("#"+new_selector+'_jqdp_heure').get() != '')
      {
        $("#"+new_selector+'_jqdp_heure').val('');
      }
    }

    if($("#"+new_selector+'_jqdp_date_hidden').val())
    {
      if($("#"+new_selector+'_jqdp_heure').get() != '')
      {
        if($("#"+new_selector+'_jqdp_minute').get() != '')
        {
          $(date_selector).val( $("#"+new_selector+'_jqdp_date_hidden').val() + ' ' + $("#"+new_selector+'_jqdp_heure').val() + ':' + $("#"+new_selector+'_jqdp_minute').val() );
        }
        else
        {
          $(date_selector).val( $("#"+new_selector+'_jqdp_date_hidden').val() + ' ' + $("#"+new_selector+'_jqdp_heure').val() );
        }
      }
      else
      {
        $(date_selector).val( $("#"+new_selector+'_jqdp_date_hidden').val() );
      }
    }
    else
    {
      $(date_selector).val('');
    }
  }
}

jqTools.str_pad = function (input, pad_length, pad_string, pad_type)
{
    var half = '', pad_to_go;

    var str_pad_repeater = function (s, len) {
        var collect = '', i;

        while (collect.length < len) {collect += s;}
        collect = collect.substr(0,len);

        return collect;
    };

    input += '';
    pad_string = pad_string !== undefined ? pad_string : ' ';

    if (pad_type != 'STR_PAD_LEFT' && pad_type != 'STR_PAD_RIGHT' && pad_type != 'STR_PAD_BOTH') { pad_type = 'STR_PAD_RIGHT'; }
    if ((pad_to_go = pad_length - input.length) > 0) {
        if (pad_type == 'STR_PAD_LEFT') { input = str_pad_repeater(pad_string, pad_to_go) + input; }
        else if (pad_type == 'STR_PAD_RIGHT') { input = input + str_pad_repeater(pad_string, pad_to_go); }
        else if (pad_type == 'STR_PAD_BOTH') {
            half = str_pad_repeater(pad_string, Math.ceil(pad_to_go/2));
            input = half + input + half;
            input = input.substr(0, pad_length);
        }
    }

    return input;
}

jqTools.clone = function (srcInstance)
{
    /*Si l'instance source n'est pas un objet ou qu'elle ne vaut rien c'est une feuille donc on la retourne*/
    if(typeof(srcInstance) != 'object' || srcInstance == null)
    {
        return srcInstance;
    }
    /*On appel le constructeur de l'instance source pour crée une nouvelle instance de la même classe*/
    var newInstance = srcInstance.constructor();
    /*On parcourt les propriétés de l'objet et on les recopies dans la nouvelle instance*/
    for(var i in srcInstance)
    {
        newInstance[i] = jqTools.clone(srcInstance[i]);
    }
    /*On retourne la nouvelle instance*/
    return newInstance;
}
