function doJqueryStuff() {
  $(function() {
      // Print link
    $(".printLink").click(function() {
      var printMessage = 'For å få en fin utskrift må du selv gjøre dette: \n\nI Firefox: Fil -> Utskriftsformat -> Kryss av for "Skriv ut bakgrunner" \n\nI IE8: Trykk på pilen ved siden av printer-ikonet -> Utskriftsformat -> Kryss av for "Skriv ut bakgrunnsfarger og bilder" \n\nI IE7: Verktøy -> Alternativer for internett -> Avansert -> Scroll ned til Utskrift -> Kryss av for "Skriv ut bakgrunnsfarger og bilder"\n\nI Safari (på mac): Kryss av for "Skriv ut bakgrunner" i utskriftsvinduet';
      alert(printMessage);
      window.print();
      return false;
    });
    //Set class "active" on list anchor that should be displayed by default
    $(".tabContent").removeClass("activeTab"); //Hide all content

    changeTab(findDefaultTab());
    
    $("ul.tabs li").click(function() {
      var link = $(this).find("a").attr("href");
      changeTab(link);
      return false;
    });

    //Weight loss calculator
    $("#weightLossPerWeek").change(function() {
      var weightNow = $("#weightNow").text();
      var target = $("#target").text();
      var lossPerWeek = $(this).val();
      calculatetargetReachedDate(weightNow,target,lossPerWeek);
    })
    calculatetargetReachedDate($("#weightNow").text().replace(/,/,"."),$("#target").text().replace(/,/,"."),$("#weightLossPerWeek").val()); //Calculate onload 
    
    $(".o2Form input").focus( function() {
      $(this).parents(".o2InputWrapper").addClass("focused");
    });
    $(".o2Form input").blur( function() {
      $(this).parents(".o2InputWrapper").removeClass("focused");
    });
    
    // Replace radio buttons with smileys
    replaceRadioButtons(".replace");
    
    if (window.updateCartContent) {
      updateCartContent();
    }
    
    $(".toggleHandle").click(function() {
      var t = $(this);
      t.siblings(".togglePanel").slideToggle("fast", "linear", function() {
        var panel = $(this);  
        t.html(panel.is(":visible") ? "Skjul info" : "Mer info");
      });
    });
    
    $("input[name='courseLevel']").click(toggleShowAvailableCourses);
  });
}
o2.addLoadEvent(doJqueryStuff);

function toggleShowAvailableCourses(radioValue) {
  $(".availableCourseTypes").hide();
  var idToShow = radioValue && o2.isOfType(radioValue, "String")  ?  radioValue  :  $(this).val();
  $("#" + idToShow).show();
}

function replaceRadioButtons(radioGroup) {
 $(radioGroup).find(".o2RadioButton").each(function() {
    var wrapper = $(this).parents(".o2InputWrapper");
    var input = $(this).children("input[type=radio]").hide(); //Hide the actual inputs
    var label = $(this).children("label");
    label.hide(); // Hide label too
    var name = input.attr("name");
    var isChecked = input.prop("checked") ? " selected" : ""; //If the input is already selected the smiley should be too
    var labelText = wrapper.hasClass("useLabels") ? label.html() : "";
    $("<span />", { //Create a span with the smiley instead
      "class" : "replacedRadioSmiley "+input.attr("class")+" "+name+isChecked,
      "html"  : labelText,
      "click" : function() {
        $("."+name).removeClass("selected");
        $(this).addClass("selected");
        input.prop("checked", true);
      }
    }).insertBefore(input);
  });
}

function getUrlVars() {
  var vars = [], hash;
  var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
  for (var i = 0; i < hashes.length; i++) {
    hash = hashes[i].split('=');
    vars.push(hash[0]);
    vars[hash[0]] = hash[1];
  }
  return vars;
}

function getUrlHash() {
  var url = document.location.href;
  var matches = url.match(/[#](.*)$/);
  return matches ? matches[1] : "";
}

function findDefaultTab() {
  var activeElm = $("ul.tabs").find("li a.active");
  var urlVars   = getUrlVars();
  var urlHash   = getUrlHash();
  if (urlHash.match( /^tab\d+$/ )) {
    return urlHash;
  }
  else if (urlVars["tab"]) {
    return urlVars["tab"];
  }
  else if (activeElm) {
    return activeElm.attr("href");
  }
  else {
    return "";
  }
}

function changeTab(tab) {
  var originalTab = tab;
  tab = tab || "tab1";
  var tabHref = !tab.match(/#/) ? "#"+tab : tab;
  var tabUrl = tabHref.replace(/#/,"");
  var ajaxUrl;
  $(".tabs li a").each(function() {
    var a = $(this);
    a.removeClass("active");
    if (a.attr("href") == tabHref) {
      a.addClass("active");
      ajaxUrl = a.attr("tabUrl");
    }
  });
  $(".tabContent").removeClass("activeTab").hide();
  if ( ajaxUrl && !$(tabHref).html().match(/\S/) ) {
    ajaxCall({
      serverScript : ajaxUrl,
      target       : tabUrl,
      where        : "replace",
      onSuccess    : "runNecessaryOnLoadJs();"
    });
  }
  $(tabHref).addClass("activeTab").hide().fadeIn("fast"); //Hide first because of absolute positioning
  $("input[name=tab]").val(tabUrl); //If a hidden input contains active tab for form submission it should be updated
  if (originalTab) {
    var htmlTag = $("html:first");
    var scrollTop = htmlTag.scrollTop();
    document.location.href = o2.urlMod.urlMod({ setHash : tab.replace(/^#/, "") });
    htmlTag.scrollTop(scrollTop);
  }
}

function runNecessaryOnLoadJs() {
  if (window.doTransformations) {
    doTransformations();
  }
  if (window.fixResultsTabs) {
    fixResultsTabs();
  }
  if (window.initProfile) {
    initProfile();
  }
  replaceRadioButtons('.replace');

  for (var id in createTabCallbackFunctions) {
    createTabCallbackFunctions[id].call(this);
  }
}

function calculatetargetReachedDate(weightNow,target,lossPerWeek) {
  // User selects weight loss per week, and by using their current weight and target weight we can calculate what day they will reach it.
  
  // Replacing commas with periods to use them for calculations
  weightNow = weightNow.replace(/,/,".");
  target = target.replace(/,/,".");
  
  var today = new Date();
  var monthNames = ["jan.","feb.","mar.","apr.","mai","jun.","jul.","aug.","sep.","okt.","nov.","des."];

  var weightToLose = parseFloat(weightNow) - parseFloat(target);
  var weeks = weightToLose / parseFloat(lossPerWeek); //How many weeks left to reach target weight
  var days = Math.round(weeks * 7); //Converting to days for a more precise date
  var $messageDiv = $("#targetReached");

  if (!weightNow.length || !target.length || weightNow == '0' || target == '0') {
    var message;
    if (weightNow.length && (!target.length || target == '0')) {
      message = "Vennligst fyll ut din <a href='/o2/User-Profile?tab=tab3'>trivselsvekt</a>";
    }
    else if ((!weightNow || weightNow == '0') && target.length) {
      message = "Vennligst fyll ut din <a href='/o2/User-Register/?tab=tab2'>vekt</a>";
    }
    else { message = "Vennligst fyll ut <a href='/o2/User-Register/?tab=tab2'>vekt</a> og <a href='/o2/User-Profile?tab=tab3'>trivselsvekt</a>"}
    $messageDiv.html(message);
  }
  else if(weightNow.length && target.length && days >= 1) { //If there's more than 1 day left until user reaches target weight, let's find out what date they will!
    var dateReached = new Date(today.setDate(today.getDate()+days));
    $("#targetReached").text("Du når din trivselsvekt "+dateReached.getDate()+". "+monthNames[dateReached.getMonth()]+" "+dateReached.getFullYear()+"!"); //e.g. 14. jun. 2011
  }
  else { //There is less than 1 day until target is reached, so we're assuming they don't need to lose more weight.
    $("#targetReached").text("Du har nådd din trivselsvekt, gratulerer!");
  }
}

var createTabCallbackFunctions = {};
function registerOnCreateTabCallback(id, callbackFunction) {
  createTabCallbackFunctions[id] = callbackFunction;
}

