Nemotaku / Thalie-Changer Miss Thalie

// ==UserScript==
// @name        Thalie-Changer Miss Thalie
// @namespace   nemotaku.thalie
// @description Changer Miss Thalie
// @include       http://*forum-thalie.fr/thalie/*
// @version     1.02
// @grant       none
// ==/UserScript==
/*
 * JavaScript Cookie v2.1.3
 * https://github.com/js-cookie/js-cookie
 *
 * Copyright 2006, 2015 Klaus Hartl & Fagner Brack
 * Released under the MIT license
 */
(function (factory) {
  var registeredInModuleLoader = false;
  if (typeof define === 'function' && define.amd) {
    define(factory);
    registeredInModuleLoader = true;
  }
  if (typeof exports === 'object') {
    module.exports = factory();
    registeredInModuleLoader = true;
  }
  if (!registeredInModuleLoader) {
    var OldCookies = window.Cookies;
    var api = window.Cookies = factory();
    api.noConflict = function () {
      window.Cookies = OldCookies;
      return api;
    };
  }
}(function () {
  function extend() {
    var i = 0;
    var result = {
    };
    for (; i < arguments.length; i++) {
      var attributes = arguments[i];
      for (var key in attributes) {
        result[key] = attributes[key];
      }
    }
    return result;
  }
  function init(converter) {
    function api(key, value, attributes) {
      var result;
      if (typeof document === 'undefined') {
        return;
      } // Write

      if (arguments.length > 1) {
        attributes = extend({
          path: '/'
        }, api.defaults, attributes);
        if (typeof attributes.expires === 'number') {
          var expires = new Date();
          expires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 86400000);
          attributes.expires = expires;
        }
        try {
          result = JSON.stringify(value);
          if (/^[\{\[]/.test(result)) {
            value = result;
          }
        } catch (e) {
        }
        if (!converter.write) {
          value = encodeURIComponent(String(value)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);
        } else {
          value = converter.write(value, key);
        }
        key = encodeURIComponent(String(key));
        key = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);
        key = key.replace(/[\(\)]/g, escape);
        return (document.cookie = [
          key,
          '=',
          value,
          attributes.expires ? '; expires=' + attributes.expires.toUTCString()  : '', // use expires attribute, max-age is not supported by IE
          attributes.path ? '; path=' + attributes.path : '',
          attributes.domain ? '; domain=' + attributes.domain : '',
          attributes.secure ? '; secure' : ''
        ].join(''));
      } // Read

      if (!key) {
        result = {
        };
      } // To prevent the for loop in the first place assign an empty array
      // in case there are no cookies at all. Also prevents odd result when
      // calling "get()"

      var cookies = document.cookie ? document.cookie.split('; ')  : [
      ];
      var rdecode = /(%[0-9A-Z]{2})+/g;
      var i = 0;
      for (; i < cookies.length; i++) {
        var parts = cookies[i].split('=');
        var cookie = parts.slice(1).join('=');
        if (cookie.charAt(0) === '"') {
          cookie = cookie.slice(1, - 1);
        }
        try {
          var name = parts[0].replace(rdecode, decodeURIComponent);
          cookie = converter.read ?
          converter.read(cookie, name)  : converter(cookie, name) || cookie.replace(rdecode, decodeURIComponent);
          if (this.json) {
            try {
              cookie = JSON.parse(cookie);
            } catch (e) {
            }
          }
          if (key === name) {
            result = cookie;
            break;
          }
          if (!key) {
            result[name] = cookie;
          }
        } catch (e) {
        }
      }
      return result;
    }
    api.set = api;
    api.get = function (key) {
      return api.call(api, key);
    };
    api.getJSON = function () {
      return api.apply({
        json: true
      }, [
      ].slice.call(arguments));
    };
    api.defaults = {
    };
    api.remove = function (key, attributes) {
      api(key, '', extend(attributes, {
        expires: - 1
      }));
    };
    api.withConverter = init;
    return api;
  }
  return init(function () {
  });
}));
window.toggleDiv = function ()
{
  $('#change-miss-thalie-div').toggle();
  if ($('#change-miss-thalie-div').is(':visible'))
  {
    $('#a-miss-thalie').text('Ne pas changer Miss Thalie');
  } 
  else
  {
    $('#a-miss-thalie').text('Changer Miss Thalie');
  }
}
window.cookie_name = 'missthalie';
window.getMissThalie = function ()
{
  return Cookies.get(cookie_name);
}
window.setMissThalie = function (value)
{
  Cookies.set(cookie_name, value, { expires: 365, path: '/' });
  $('.site_logo').css('background-image', 'url(\'' + value + '\')');
  toggleDiv();
}
$('document').ready()
{
  var miss_thalie = getMissThalie();
  if (miss_thalie) $('.site_logo').css('background-image', 'url(\'' + miss_thalie + '\')');
  $('#quick-links').after('<li class="small-icon icon-mark" data-last-responsive="true"><a href="#"  onclick="toggleDiv()" id="a-miss-thalie">Changer Miss Thalie</a></li>');
  $('<div id="change-miss-thalie-div" hidden>'
  + '<select id="miss-thalie-select"><option value="0">Choisir par thème</option></select>'
  + ' <b>OU</b> Votre miss Thalie : <input type="text" id="new-miss-thalie"/>'
  + '<input type="button" id="change-miss-thalie" value="Changer de Miss Thalie"/>&nbsp;&nbsp;<input type="button" id="raz-miss-thalie" value="Miss Thalie par défaut"/>'
  ).appendTo('.headerbar');
  var themes = {
    'GreenProsilver': 'http://www.forum-thalie.fr/thalie/styles/Greenprosilver/theme/images/site_logo.png',
    'Grey Launch Frest': 'http://www.forum-thalie.fr/thalie/styles/IDLaunch_Fresh/theme/images/site_logo.png',
    'SE Square': 'http://www.forum-thalie.fr/thalie/styles/se_square_left/theme/images/site_logo.png',
    'Blog Thalie': 'http://neantvert.eu/logo_thalie.png'
  };
  $.each(themes, function (key, value)
  {
    $('#miss-thalie-select').append($('<option>', {
      value: value,
      text: key
    }));
  });
  $('#miss-thalie-select').change(function ()
  {
    var value = $(this).val();
    if (value) setMissThalie(value);
  });
  $('#miss-thalie-select option').hover(function () {
    $('.site_logo').css('background-image', 'url(\'' + $(this).val() + '\')');
  });
}
$('#change-miss-thalie').click(function ()
{
  setMissThalie($('#new-miss-thalie').val());
});
$('#raz-miss-thalie').click(function ()
{
  Cookies.remove(cookie_name);
  document.location.reload(true);
});