head.ready(function () {

  function init() {

    // Get weather buttons
    var weatherButtons = $("#takepart-widget .weather a");
    weatherButtons.click(function () {
      weatherButtons.removeClass("active");
      $(this).addClass("active");
      return false;
    });

    // Get gender buttons
    var genderButtons = $("#takepart-widget .gender a");
    genderButtons.click(function () {
      genderButtons.removeClass("active");
      $(this).addClass("active");
      return false;
    });

    $("#takepart-widget a#rolloverarrowsend").click(function () {
      var valName =  $("#takepart-widget #name").attr("value");
      var valCity = $("#takepart-widget #city").attr("value");
      var valGender = $("#takepart-widget .gender").find("a[class*='active']").attr("id");
      var valWeather = $("#takepart-widget .weather").find("a[class*='active']").attr("id");

      if (valName && valCity && valGender && valWeather) {
      	eventTracking("click-widget_weather_"+valGender);
        var url =  $.soliver.takepartUrl + "?name="+encodeURIComponent(valName)+"&city="+encodeURIComponent(valCity)+"&sex="+encodeURIComponent(valGender)+"&selection="+encodeURIComponent(valWeather);
        $.get(url, loadComplete);
      }

      return false;
    });
  }

  function loadComplete(data) {
    var con = $("#takepart-widget");
    animate(con, "fadeOut", fadeOutComplete, data);
  }

  function fadeOutComplete(con, data) {
    $('#takepart-widget > *').remove();
    $('#takepart-widget').append(data);
    fbAsyncInit();

    var newCon = $('#takepart-widget');
    con.find("img[class*='tp-product']").hide();
    animate(con, "fadeIn", fadeInComplete, null);
  }

  function fadeInComplete(data) {
    $("#takepart-widget").clearQueue();
    init();
  }

  function animate(con, easeFunction, callBack, data) {
    con.clearQueue();

    var elm = con.find("img[class*='tp-product']");

    for (var j, x, i = elm.length; i; j = parseInt(Math.random() * i), x = elm[--i], elm[i] = elm[j], elm[j] = x);
    elm.each(

    function (ix, el) {
      con.queue(function () {

        var duration = randomNumber(150, 400);
        $(el)[easeFunction](duration, function () {
          if (ix + 1 < elm.length) {
            con.dequeue()
          } else {
            callBack(con, data);
          }
        })
      })
    });
  }

  function randomNumber(min, max) {
    return Math.floor(Math.random() * (1 + max - min)) + min;
  }

  init();

});

