function initDuplicates() {
  // AJAX for duplicates.
  $(".duplicates a.icon-expand").each(function() {
    var dupDiv = $('<div><img src="/static/images/loader.gif"></div>')
        .addClass('duplicate_entries').hide().insertAfter($(this).parent());
    $(this).click(function() {
      if (dupDiv.text() == "") {
        dupDiv.load($(this).attr('href'), null, function() {
          initAnalytics(this);
          initSend(this);
          initMore(this);
          initSearchResults(this);
        });
      }
      if (dupDiv.css('display') == 'none') {
        $(this).removeClass('icon-expand');
        $(this).addClass('icon-collapse');
        dupDiv.show();
      } else {
        $(this).removeClass('icon-collapse');
        $(this).addClass('icon-expand');
        dupDiv.hide();
      }
      return false;
    });
  });
}

function initAlerts() {
  var toggle = function() {
    $(".alert-form-hidden").toggle();
    $("#alerts-subscribe").show();
    $("#alerts-subscribe + span").hide();
  };
  $(".alert-form-hidden #alerts-subscribe").before($("<a>&times;</a>")
      .attr("href", "#").attr("class", "close").click(toggle));
  $("#alerts-link").click(toggle);
  $("#alerts-subscribe").submit(function() {
    var email = $("#alerts-subscribe #email").val();
    var filter = /^[^@]+@.+\..+$/
    if (!filter.test(email)) {
      alert("Introduceţi o adresă validă de email.");
      return false;
    }
    var postArgs = {
      "email": $("#alerts-subscribe #email").val(),
      "frequency": $("#alerts-subscribe [name=frequency]").val(),
      "query_job": $("#alerts-subscribe [name=query_job]").val(),
      "query_location": $("#alerts-subscribe [name=query_location]").val(),
      "query_employer": $("#alerts-subscribe [name=query_employer]").val(),
      "query_industry": $("#alerts-subscribe [name=query_industry]").val(),
      "query_type": $("#alerts-subscribe [name=query_type]").val(),
      "query_salary": $("#alerts-subscribe [name=query_salary]").val(),
      "cv_code": $("#alerts-subscribe [name=cv_code]").val()};
    var salaryCaption = {'': '', 'st500': 'sub 500 &euro;',
      'ge500': 'peste 500 &euro;',
      'ge1000': 'peste 1000 &euro;',
      'ge1500': 'peste 1500 &euro;',
      'ge2000': 'peste 2000 &euro;'}[postArgs.query_salary];
    var message = 'o alertă pentru căutarea <strong>'
        + postArgs.query_job + ' ' + postArgs.query_location + ' '
        + postArgs.query_employer + ' ' + postArgs.query_type + ' '
        + salaryCaption + '</strong> pe adresa de email '
        + '<strong>' + email + '</strong>.</span>';
    $.post("/alerte/aboneaza", postArgs, function(data) {
      $('#alerts-subscribe').hide();
      if (data == "OK") {
        $('#alerts-subscribe').after('<span class="ok">Am creat ' + message);
        if (Boolean($('.alerts-account').length)) {
          location.reload();
        }
      } else if (data == "found") {
        $('#alerts-subscribe').after('<span class="error">Există deja ' + message);
      }
    });
    return false;
  });
}

function drawTrends() {
  var data = new google.visualization.DataTable();
  if (chart_options['static'])
    data.addColumn('string', 'Data');
  else
    data.addColumn('date', 'Data');
  for (i = 0; i < chart_labels.length; ++i)
    data.addColumn('number', chart_labels[i]);
  months = ['Ian', 'Feb', 'Mar', 'Apr', 'Mai', 'Iun', 'Iul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
  for (i = 0; i < chart_data.length; ++i) {
    year = chart_data[i][0][0];
    month = chart_data[i][0][1]-1;
    if (chart_options['static'])
      chart_data[i][0] = months[month] + ' ' + String(year);
    else
      chart_data[i][0] = new Date(year, month);
  }
  data.addRows(chart_data);

  var container = document.getElementById('resize');
  if (chart_options['static'])
    var chart = new google.visualization.LineChart(container);
  else
    var chart = new google.visualization.AnnotatedTimeLine(container);

  chart.draw(data, chart_options);
}

function drawEvolution() {
  var data = new google.visualization.DataTable();
  data.addColumn('date', 'Data');
  for (i = 0; i < chart_labels.length; ++i) {
    data.addColumn('number', chart_labels[i]);
  }
  for (i = 0; i < chart_data.length; ++i) {
    crt_date = chart_data[i][0]
    row = Array(new Date(crt_date[0], crt_date[1] - 1, crt_date[2]));
    for (j = 1; j <= chart_labels.length; ++j) {
      row.push(chart_data[i][j]);
    }
    data.addRow(row);
  }
  var container = document.getElementById('evolution-chart');
  var chart = new google.visualization.AnnotatedTimeLine(container);

  chart.draw(data, {"min": 0, "scaleType": "maximized" });
}

function initFilters() {
  // Refinements slide effect.
  $("ul.filter li.filter_name").click(function() {
    $(this).parent().find('li:not(li.filter_name)').toggle();
    $(this).toggleClass("collapsed");
    return false;
  });
}

function initAnalytics(context) {
  $('.search_entry a.track', context).each(function () {
    var url = this.href.replace(/^http:\/\//i, '/external/')
        .replace(/^ymsgr:/i, '/external/ymsgr:');
    $(this).click(function() {
      try {
        pageTracker._trackPageview(url);
      } catch(err) {};
      setTimeout('document.location = "' + this.href + '"', 100);
      return false;
    });
  });
  $('a.track_index', context).click(function() {
    try {
      pageTracker._trackPageview(this.href);
    } catch(err) {};
    setTimeout('document.location = "' + this.href + '"', 100);
    return false;
  });
  $('a.track_event', context).click(function(e) {
    try {
      var data = $(this).metadata();
      pageTracker._trackEvent(data.track_category, data.track_action, data.track_label);
    } catch(err) {};
    setTimeout('document.location = "' + this.href + '"', 100);
    return false;
  });
}

function loadLinkedIn() {
  var scriptTag = $('<script src="http://www.linkedin.com/companyInsider'
      + '?script&useBorder=yes" type="text/javascript"></script>');
  $('body').append(scriptTag);
}

function initLinkedIn() {
  if (typeof(LinkedIn) == 'undefined') {
    /* not ready yet */
    setTimeout(initLinkedIn, 300);
    return;
  }
  $(".search_entry .employer").each(function(idx) {
    if (typeof(LinkedIn) != 'undefined') {
      new LinkedIn.CompanyInsiderPopup("linkedin" + idx, this.textContent);
    }
  });
}

function initSearch() {
  // search suggestions
  $(".location-suggestions a").each(function() {
    var text = $(this).text();
    $(this).click(function() {
      $("#l").attr('value', text);
      $("#l").focus();
      return false;
    });
  });
  $(".query-suggestions a").each(function() {
    var text = $(this).text();
    $(this).click(function() {
      $("#q").attr('value', text);
      $("#q").focus();
      return false;
    });
  });
}

function hideAllOptions(link, context) {
  if (!link.hasClass('options-link-on')) {
    $('.options-link-on', context).click();
  }
}

function initSend(context) {
  $('.send-link a', context).each(function() {
    var sendDiv = $('<div><img src="/static/images/loader.gif"></div>')
        .addClass('options-box').hide().insertAfter($(this).closest('.options'));
    var link = $(this);
    var toggle = function() {
      hideAllOptions(link, context);
      link.toggleClass('options-link-on');
      if (sendDiv.text() == "") {
        sendDiv.load($(this).attr('href'), null, function() {
          sendDiv.find('.close').click(toggle);
          sendDiv.find('.email-link').click(function() {
            sendDiv.find('.ok').hide();
            sendDiv.find('.email').toggle();
            return false;
          });
          initSend(this);
        });
      }
      sendDiv.toggle();
      return false;
    }
    $(this).click(toggle);
  });
  $('.email', context).submit(function() {
    var filter = /^[^@]+@.+\..+$/
    var from_email = $(this).find('.from').val();
    var to_email = $(this).find('.to').val();
    if (!filter.test(from_email)) {
      alert("Email-ul tău nu este valid!");
      return false;
    }
    if (!filter.test(to_email)) {
      alert("Email-ul destinatarului nu este valid!");
      return false;
    }
    var postArgs = {
      'from_': from_email,
      'to': to_email,
      'comments': $(this).find('.comments').val(),
      'ccMe': $(this).find('.ccMe').val(),
      'id': $(this).find('.id').val()
    };
    var email_form  = $(this);
    $.post('/email', postArgs, function(data) {
      if (data == 'OK') {
        if (typeof(pageTracker) != 'undefined')
          pageTracker._trackPageview('/external/send/email/' +
            from_email + '/' + to_email);
        email_form.hide();
        email_form.parent().find('.ok').html('S-a trimis un email către <strong>'
          + to_email + '</strong>!').show();
      } else {
        email_form.find('.errors').html(data);
      }
    });
    return false;
  });
}

function initMore(context) {
  $('.more-link a', context).each(function() {
    var link = $(this);
    var box = $(this).closest('.search_entry').find('.more-box');
    var toggle = function() {
      hideAllOptions(link, context);
      link.toggleClass('options-link-on');
      box.toggle();
      return false;
    }
    link.click(toggle);
    box.find('.close').click(toggle);
  });
}

function initHome() {
  if ($('.index_wrapper').length > 0) {
    $('#q').focus();
  }
  if ($('.homepage-ad').length > 0) {
    var img = $('.homepage-ad a img');
    $('.homepage-ad a').hover(
      function() { $(img).attr('src', '/static/ads/homepage-cv-o.gif'); },
      function() { $(img).attr('src', '/static/ads/homepage-cv.gif'); }
    );
  }
  $('.footer a.menu-arrow').click(function() {
    var menu = $(this).parent().find('.dropup-menu');
    var visible = menu.css('display');
    $('.dropup-menu').hide();
    if (visible == 'none') {
      var offset = $(this).offset();
      menu.css('left', offset.left - menu.innerWidth() + $(this).innerWidth() - 4);
      menu.css('top', offset.top - menu.innerHeight() - 4);
      menu.toggle();
    }
    return false;
  });
  $(".column3 .tweets").hover(function() {
    $(this).toggleClass("tweets-hover");
  }, function() {
    $(this).toggleClass("tweets-hover");
  });
}

function initHeader(context) {
  if (!$.fn.colorbox) {
    return;
  }
  $('a.colorbox', context).each(function() {
    var href = $(this).attr('href');
    $(this).colorbox({
      'href': href + (href.indexOf('?') != -1 ? '&' : '?') + 'partial=1',
      'initialWidth': 300,
      'initialHeight': 300,
      'opacity': 0.5,
      'speed': 100,
      'close': 'Închide'
    }, function() {
      initHeader($('#colorbox'));
    });
  });
}

function initConfirm() {
  $('.cv_delete').click(function() {
    if (!confirm('Sigur vrei să ştergi acest CV?'))
      return false;
  });
  $('.delete-cv-job').click(function() {
    if (!confirm('Sigur vrei să ştergi acest cuvânt?'))
      return false;
    var postArgs = { "code": $(this).prev().val() };
    $.post("/cont/sterge-cv-job", postArgs, function(data) {
      if (data == "OK") {
        location.reload();
      }
    });
    return false;
  });

  $('#profile .submit').click(function() {
    if ($('#old_email').val() != $('#email').val()) {
      return confirm('Sigur vrei să îţi schimbi emailul? Aceasta operaţie ' +
          'îţi va transfera toate alertele către noua adresă de email');
    }
  })
}

function initSearchResults(context) {
  $('.search_entry .loc_more a', context).click(function () {
    $(this).parent().hide();
    $(this).closest('.location').find('.hidden').show();
    return false;
  });
}

function initAutocomplete() {
  $('#l').attr("autocomplete", "off");
  $('#q').attr("autocomplete", "off");

  $.post('/autocomplete', function(data) {
    $('#q').autocomplete(data['q'], {
      max: 7,
      selectFirst: false
    });
    $('#l').autocomplete(data['l'], {
      max: 7,
      selectFirst: false
    });
  }, "json");
}

function initJobframe() {
  var resize = function() {
    $('#jobframe').attr('width', $(window).width() - 60)
                  .attr('height', $(window).height() - 47);
  };
  $(window).resize(resize);
  resize();
}

function initLanding() {
  var toggle = function() {
    $('#landing_page').hide();
  }
  $("#landing-box").prepend($("<a>&times;</a>").attr("href", "#").
      attr("class", "close").click(toggle));
}

$(document).ready(function() {
  initAnalytics();
  initSearch();
  initAutocomplete();
  initAlerts();
  initLanding();
  initFilters();
  initSearchResults();
  initDuplicates();
  initSend();
  initMore();
  initHeader();
  initHome();
  loadLinkedIn();
  initLinkedIn();
  initConfirm();
  initJobframe();
});
