/**
 *  The first DN-JavaScript file to be loaded by the client, 
 *  however, jquery.js must be called first.
 *
 *  Contains:
 *    - name space definitions
 *    - functions for dnJobb
 *    - common functions for sections (header / footer)
 *    - common functions for article template
 *    
 */

//// top namespaces
var NHST = {};
NHST.DN = {};

//// 'forum' is defined here because it is used by both dn and dnforum-webapp.
NHST.DN.forum = {};

//// The most basic functionality 
NHST.DN.lang = {};

NHST.DN.lang.compareIgnoreCase = function(oneString, otherString){
    if (!(oneString && otherString)){
        return false;
    }
    return  oneString.toUpperCase() ==
        otherString.toUpperCase();
}

//// Navigate, manipulate and more with DOM (html documents)

NHST.DN.dom = {};

NHST.DN.dom.isHtmlElement = function(candidate){
  return candidate && candidate.tagName;
}

NHST.DN.dom.elementIsType = function(candidate, type){
  return NHST.DN.dom.isHtmlElement(candidate) &&  
    NHST.DN.lang.compareIgnoreCase(candidate.tagName, type);
}

//childNodes[] often contains 'garbage'
NHST.DN.dom.findChildNodesOfType = function(container, reqestedType){
  var validElements = new Array(0)
  for (var i=0; i <  container.childNodes.length; i++){
      var elementOfUnknownType = container.childNodes[i];
  if (NHST.DN.dom.elementIsType(elementOfUnknownType, reqestedType)) {
      validElements.push(elementOfUnknownType);
  }
  }
  return validElements;
}

NHST.DN.dom.findChildNodesOfTypeLi = function(containingUl){
  return NHST.DN.dom.findChildNodesOfType(containingUl, 'LI');
}

NHST.DN.dom.findChildNodesOfTypeDiv = function(container){
  return NHST.DN.dom.findChildNodesOfType(container, 'DIV');
}

//// Toggeling value of input field or similar 
NHST.DN.form = {};

NHST.DN.form.isEmpty = function(value) {
    return value == '';
}
NHST.DN.form.empty = function() {
    return '';
}

//valueContainer is typically a form input-element, but can be
//anything with a 'value' attribute
NHST.DN.form.updateValue = function(valueContainer, value) {
 if (NHST.DN.form.isEmpty(valueContainer.value)) {
  valueContainer.value = value;
 }
};

NHST.DN.form.clearIfDefaultValue = function(valueContainer, defaultValue) {
 if (valueContainer.value == defaultValue) {
  valueContainer.value = NHST.DN.form.empty();
 }
};

/**
 * Functions for dnJobb section
 *
 */

NHST.DN.dnjobb = {};

NHST.DN.dnjobb.changeAlle = function (inputElement, formId, inputGroupName) {
  if (inputElement.checked == true) {
    var form = document.getElementById(formId);
    form.elements[inputGroupName].item(1).checked = false;
    form.elements[inputGroupName].item(2).checked = false;
    form.elements[inputGroupName].item(3).checked = false;
    form.elements[inputGroupName].item(4).checked = false;
  }
}

NHST.DN.dnjobb.changeRest = function (inputElement, formId, inputGroupName) {
  var form = document.getElementById(formId);
  if (inputElement.checked == true
      && form.elements[inputGroupName].item(0).checked == true) {
    form.elements[inputGroupName].item(0).checked = false;
  } else if (form.elements[inputGroupName].item(1).checked == true
      && form.elements[inputGroupName].item(2).checked == true
      && form.elements[inputGroupName].item(3).checked == true
      && form.elements[inputGroupName].item(4).checked == true) {
    form.elements[inputGroupName].item(1).checked = false;
    form.elements[inputGroupName].item(2).checked = false;
    form.elements[inputGroupName].item(3).checked = false;
    form.elements[inputGroupName].item(4).checked = false;
    form.elements[inputGroupName].item(0).checked = true;
  }
}

/**
 * Functions for toggeling tabbed content
 * 
 * Tests are found in src/test/javascript/ 
 * 
 * The HTML must look as follows, with an equal number of li elements and divs with content.
 * CSS classes visible and hidden hides/shows content with display: block|none, while
 * while active and hidden are indended for visual effects, e.g. high lighting active li element.
 * 
 * <div>
 *  <ul>
 *    <li class="active">  <a href="#" onclick="return NHST.DN.toggle.toggle(this);">...</a>
 *    <li class="inactive"><a href="#" onclick="return NHST.DN.toggle.toggle(this);">...</a>
 *  </ul>
 *  <div class="visible">...</div>
 *  <div class="hidden">...</div>
 * </div>
 * 
 */

NHST.DN.toggle = {};

//CSS naming conventions for toggeling content
//active/inactive tabs/links vs visible/hidden content
NHST.DN.toggle.visibleContentCss = 'visible';
NHST.DN.toggle.hiddenContentCss = 'hidden';
NHST.DN.toggle.activeLinkCss = 'active';
NHST.DN.toggle.inactiveLinkCss = 'inactive';

NHST.DN.toggle.getActiveOrInactiveClass = function(isActive) {
    return isActive ? NHST.DN.toggle.activeLinkCss : NHST.DN.toggle.inactiveLinkCss;  
}

NHST.DN.toggle.getVisibleOrHiddenClass = function(isVisible) {
    return isVisible ? NHST.DN.toggle.visibleContentCss : NHST.DN.toggle.hiddenContentCss;  
}

NHST.DN.toggle.findSuperContainer = function(containedUl){
    //not fail safe...
    return containedUl.parentNode;
}

//constructor
NHST.DN.toggle.ToggleBox = function(clickedLink){
    var activatedLi = clickedLink.parentNode;
    var ul = activatedLi.parentNode;
    this.liArray = NHST.DN.dom.findChildNodesOfTypeLi(ul);
    this.superContainer = NHST.DN.toggle.findSuperContainer(ul);
    this.contentArray = NHST.DN.dom.findChildNodesOfTypeDiv(this.superContainer); 
}

NHST.DN.toggle.ToggleBox.prototype.toggleLinks = function(clickedLink){
    var clickedLi = clickedLink.parentNode;
    var indexOfClicked = 0;//fallback value
    for (var i = 0; i < this.liArray.length; i++){
        var currentLi = this.liArray[i];
        if (clickedLi == currentLi){
            currentLi.className = NHST.DN.toggle.getActiveOrInactiveClass(true);
            indexOfClicked = i;
        } else {
            currentLi.className = NHST.DN.toggle.getActiveOrInactiveClass(false);
        }
    }
    return indexOfClicked;
}


NHST.DN.toggle.ToggleBox.prototype.toggleContent = function(divIndex){
    for (var i = 0; i < this.contentArray.length; i++) {
        this.contentArray[i].className = NHST.DN.toggle.getVisibleOrHiddenClass(i == divIndex);
    }
}

NHST.DN.toggle.ToggleBox.prototype.toggle = function(clickedLink){
    var indexOfClicked = this.toggleLinks(clickedLink);
    this.toggleContent(indexOfClicked);
}

//To be called from an a-element
NHST.DN.toggle.toggle = function(clickedLink){
    var box = new NHST.DN.toggle.ToggleBox(clickedLink);
    box.toggle(clickedLink);
    return false;
}

/**
 *  Function for toggeling the menu
 * 
 */
function toggleContentList() {
  $("#content_list").toggle();
  $("#sub_menu").toggle();

  if($("#browse_content").hasClass("browse_content")) {
    $("#browse_content").removeClass("browse_content")                              
    $("#browse_content").addClass("browse_content_active")
  }
  else {
    $("#browse_content").removeClass("browse_content_active")                              
    $("#browse_content").addClass("browse_content")          
  }
}

$(document).ready(function() {
  $("#browse_content").click(function() {
    toggleContentList();        
  });
});

$(document).ready(function() {
  $("#content_list").click(function() {
    toggleContentList();        
  });
});


/**
 * Function for moving ads
 *
 */
function moveAd(cuid) {
  var adPlacementEl = document.getElementById("adPlacement"+cuid);
  var adFactoryEl = document.getElementById("adFactory"+cuid);
  if (adPlacementEl && adFactoryEl) {
    // size is set to "auto" to enable expanding ads and ads without correct configuration
    adPlacementEl.style.height="auto";
    adPlacementEl.style.width="auto";

    // IE will reload scripts after moving unless we set src to null
    var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
    var x=adFactoryEl.getElementsByTagName('script');
    if (x != null) {
      for (i=0;i<x.length;i++) {
        var t=x[i];
        if (isIE) {
          t.src="http://www.dn.no/include/js/empty.js";
        } else {
          t.src.replace="http://www.dn.no/include/js/empty.js";
        }
      }
    }

    var adFactoryParentEl = adFactoryEl.parentNode;
    adFactoryParentEl.removeChild(adFactoryEl);
    adPlacementEl.innerHTML='';
    adPlacementEl.appendChild(adFactoryEl);
  }
}

/**
 * Script for showing the popup panels for the job carousel flash
 * The flash calls: ExternalInterface.call("nhst.dnJobbCarousel.showPanel"...)
 */
var nhst = {};
nhst.dnJobbCarousel = {};
nhst.dnJobbCarousel.showPanel = function(containerId,top,jobTitle,jobDescription,companyName,companyDescription,link) {
  var container= $("#" + containerId);

  // init container events
  if(!container.data("init")) {    
    var waitBeforeClose = 100; // ms    
    var out = function() {
      container.data("mouseover",false)
      window.setTimeout(function() {
          // wait waitBeforeClose ms before closing to be sure that
          // the pointer is really outside the container and not just
          // moved between the flash element and the popup div
          if(!container.data("mouseover")) {
            container.children(".carousel_popup").remove();
            container.data("alreadyWaited",false); // leaving the container so wait before opening next popup
          }
        }, waitBeforeClose);
      }
    
    var over = function() {container.data("mouseover",true)};
    container.hover(over, out);
    
    container.data("init", true)
    container.trigger('mouseover');
  }
  
  // delete previous popup in this container, if any
  container.find(".carousel_popup").remove();
  
  // open popup if this ad has data for it (!= 'null' for comparing with null and 'null' from flash)
  if(jobTitle != 'null' && jobDescription != 'null' && companyName != 'null' && companyDescription != 'null') {    
    
    // create new popup from template
    var template = container.find(".dnjobbcarousel_popup_template");
    var popup = template.clone();
    popup.attr("id","");
    popup.addClass("carousel_popup");
    
    // add content
    popup.find(".header h1").html(companyName);
    popup.find(".ingress").html(companyDescription);
    popup.find("h2").html(jobTitle);
    popup.find(".description").html(jobDescription);    
    popup.find("a.jobLink").attr("href", link);
    
    // set style
    if(top < 0) {
      top = 0;
    }
    var offset = container.find("object").position().top;
    var border = 9;
    popup.css("top", offset + top + border);
    
    // add close button event
    popup.find(".closelink").click(function(event) {
      event.preventDefault();
      $(this).parents(".carousel_popup").remove();
    });

    // add popup to DOM
    template.after(popup);
    
    var waitBeforeOpening = 1500; // ms
    if(container.data("alreadyWaited")) {
      if(container.data("mouseover")) popup.fadeIn("fast");
    } else {
      // open after timeout
      window.setTimeout(function() {
          container.data("alreadyWaited",true); // no delay until we leave container again
          if(container.data("mouseover")) popup.fadeIn("fast");
        }, waitBeforeOpening);
    }
  }
}

/**
 *  Scripts used by the article template
 *  
 *  - Toggle tip a friend box in toolbar
 *  - Validate netmeeting form
 *  - Article discussion (reply and alert actions)
 *    
 */

/**
 * Store initial value as default value,
 * clear value whenever input gets focus and
 * value is equal to the default value
 */
NHST.DN.focusInput = function(event) {
  var input = event.target;
  
  if(!$(input).data("default_value")) {
    var defaultValue = $(input).val();
    if(!defaultValue) defaultValue = " "; // or inputUpdated() won't work on inputs with no initial value
    $(input).data("default_value", defaultValue)
  }
  
  if($(input).attr("value") == $(input).data("default_value")) {
    $(input).attr("value",'');
  }
}

/**
 * Restore default value on blur if input is empty
 */
NHST.DN.blurInput = function(event) {
  var input = event.target;

  if($(input).val().length == 0) {
    $(input).val($(input).data("default_value"));
  }
}

/**
 * Check if input has been updated
 */
NHST.DN.inputUpdated = function(input) {
  // only for inputs with class "restore_default_value"
  if($(input).hasClass("restore_default_value")) {
    var defaultValue = $(input).data("default_value");
    if(!defaultValue || defaultValue == $(input).val()) {
      return false;
    }
  }
  return true;
}

/**
 *  Article discussion  
 */
NHST.DN.toggleReplyBox = function(event) {
  var replyTitlePrefix = "Re: ";  // prefix used for suggesting reply title
  var replyButton = event.target;
  
  if(!$(replyButton).hasClass("replybox_added")) {
    var comment = $(replyButton).parents(".comment");
    var commentId = NHST.DN.getCommentId(comment);
    // clone template box with events
    var replyBoxTemplate = $("#replyto_template").clone(true);
    replyBoxTemplate.attr("id", "replyto_" + commentId);
    replyBoxTemplate.find("input[name='entry_id']").val(commentId);
    // set title to "Re: XXX" where XXX is title of parent
    var parentTitle = $(comment).find("h5").attr("title");
    replyBoxTemplate.find("input[name='entry_title']").val(replyTitlePrefix + parentTitle);    
    comment.after(replyBoxTemplate);
    $(replyButton).addClass("replybox_added");
  }
  
  var comment = $(replyButton).parents(".comment");
  var commentId = NHST.DN.getCommentId(comment);
  
  $("#alert_" + commentId + ":visible").slideToggle("fast");
  $("#replyto_" + commentId).slideToggle("fast");

  event.preventDefault();
}

NHST.DN.toggleAlertBox = function(event) {
  var alertButton = event.target;
  
  if(!$(alertButton).hasClass("alertbox_added")) {
    var comment = $(alertButton).parents(".comment");
    var commentId = NHST.DN.getCommentId(comment);
    // clone template box with events
    var alertBoxTemplate = $("#alert_template").clone(true);
    alertBoxTemplate.attr("id", "alert_" + commentId);
    alertBoxTemplate.find("input[name='entry_id']").val(commentId);
    comment.after(alertBoxTemplate);
    $(alertButton).addClass("alertbox_added");
  }
  
  var comment = $(alertButton).parents(".comment");
  var commentId = NHST.DN.getCommentId(comment);
  
  $("#replyto_" + commentId + ":visible").slideToggle("fast");
  $("#alert_" + commentId).slideToggle("fast");

  event.preventDefault();
}

NHST.DN.submitReply = function(event) {
  event.preventDefault();  
  var replyBox = $(event.target).parents(".comments_form");
  var form = $(event.target).parents("form");

  var titleInput = form.find("input[name='entry_title']");
  var usernameInput = form.find("input[name='entry_username']");
  var commentInput = form.find("textarea[name='entry_comment']");
  
  var formValid = true;
  
  replyBox.find(".missing_title").hide();
  replyBox.find(".missing_name").hide();
  replyBox.find(".missing_comment").hide();
  
  if(!(NHST.DN.inputUpdated(titleInput) && titleInput.val().length > 0)) {    
    replyBox.find(".missing_title").fadeIn("slow");
    formValid = false;
  }
  if(!(NHST.DN.inputUpdated(usernameInput) && usernameInput.val().length > 0)) {
    replyBox.find(".missing_name").fadeIn("slow");
    formValid = false;
  }

  if(!(NHST.DN.inputUpdated(commentInput) && commentInput.val().length > 0)) {
    replyBox.find(".missing_comment").fadeIn("slow");
    formValid = false;
  }
  
  if(formValid) {
    // disable reply button to avoid multiple submits
    replyBox.find(".entry_submit").attr("disabled","disabled");
    
    var parentEntryId = form.find("input[name='entry_id']").val();
    
    var data = {
        action: form.find("input[name='action']").val(),
        advice: '',
        article_id: form.find("input[name='article_id']").val(),
        article_url: '',
        entry_id: parentEntryId ? parentEntryId : '',
        forum_id: form.find("input[name='forum_id']").val(),
        generic: form.find("input[name='entry_title']").val(),
        text: form.find("textarea[name='entry_comment']").val(),        
        topic_id: form.find("input[name='topic_id']").val(),
        url: artdiscPostURL, // set in javascriptBottom.tag
        username: form.find("input[name='entry_username']").val()
    };
    
    $.ajax({
      type: "POST",
      url: "/www.dn.no/servlet/articlediscussion/post/",
      data: data,
      success: function(msg){
        var successBox = $("#replyto_success_template").clone();
        successBox.attr("id","");
        replyBox.empty();
        replyBox.append(successBox);
        successBox.fadeIn("slow");
      },
      error: function(request, type){
        replyBox.find(".post_error").hide();
        replyBox.find(".post_error").fadeIn("slow");
        replyBox.find(".entry_submit").removeAttr("disabled"); // allow retry
      }
    });
  }
}

NHST.DN.submitAlert = function(event) {
  event.preventDefault();  
  var alertBox = $(event.target).parents(".comments_form");
  var form = $(event.target).parents("form");

  var emailInput = form.find("input[name='alert_email']");
  var usernameInput = form.find("input[name='alert_username']");
  var commentInput = form.find("textarea[name='alert_comment']");
  
  var formValid = true;
  
  alertBox.find(".missing_name").hide();
  alertBox.find(".missing_comment").hide();
  
  if(!(NHST.DN.inputUpdated(usernameInput) && usernameInput.val().length > 0)) {
    alertBox.find(".missing_name").fadeIn("slow");
    formValid = false;
  }

  if(!(NHST.DN.inputUpdated(commentInput) && commentInput.val().length > 0)) {
    alertBox.find(".missing_comment").fadeIn("slow");
    formValid = false;
  }
  
  if(formValid) {
    // disable send button to avoid multiple submits
    alertBox.find(".alert_submit").attr("disabled","disabled");
    
    var parentEntryId = form.find("input[name='entry_id']").val();
    
    var data = {
        action: form.find("input[name='action']").val(),
        advice: '',
        article_id: '',
        //article_id: form.find("input[name='article_id']").val(),
        article_url: '',      
        entry_id: parentEntryId ? parentEntryId : '',
        forum_id: form.find("input[name='forum_id']").val(),
        generic: form.find("input[name='alert_email']").val(),
        text: form.find("textarea[name='alert_comment']").val(),        
        topic_id: form.find("input[name='topic_id']").val(),
        url: artdiscPostURL, // set in javascriptBottom.tag
        username: form.find("input[name='alert_username']").val()
    };
    
    $.ajax({
      type: "POST",
      url: "/www.dn.no/servlet/articlediscussion/post/",
      data: data,
      success: function(msg){
        var successBox = $("#alert_success_template").clone();
        successBox.attr("id","");
        alertBox.empty();
        alertBox.append(successBox);
        successBox.fadeIn("slow");
      },
      error: function(request, type){
        alertBox.find(".post_error").hide();
        alertBox.find(".post_error").fadeIn("slow");
        alertBox.find(".alert_submit").removeAttr("disabled"); // allow retry
      }
    });
  }
}

NHST.DN.getCommentId = function(comment) {
  return comment.attr("id").split("_")[1];
}

NHST.DN.initArticleDiscussion = function() {
  if ($("#art_comments").length > 0) {
    $(".entry_reply").click(NHST.DN.toggleReplyBox);
    $(".entry_alert").click(NHST.DN.toggleAlertBox);
    
    $(".entry_submit").click(NHST.DN.submitReply);
    $(".alert_submit").click(NHST.DN.submitAlert);
  }
}

/**
 * Move the article_body_ad div into the article body if
 * present, and float the ad container to the right
 * 
 * Will be added directly after the first "P" in the
 * article body, but if the ad div isn't aligned to the
 * right border of the article body (-10px "safety margin")
 * it will be moved to after the next "P" (lather, rinse,
 * repeat, max five times). This can happen when there is
 * right floated content at the top of the article body.
 */
NHST.DN.moveArticleBodyAd = function() {
  var artElement = $("#body_text");
  var adElement = $("#article_body_ad");
  var safetyMargin = 10;
  var maxTries = 5;
  if(artElement.length > 0 && adElement.length > 0) {
    
    adElement.find("script").attr("src","/www.dn.no/include/js/empty.js");
    var paragraphs = artElement.find("> p");    
    adElement.css("float","right");    
    paragraphs.eq(0).after(adElement);

    var i = 1; 
    var lim = (artElement.position().left + artElement.width()) - (adElement.width() + safetyMargin);    
    while((adElement.position().left < lim) && (i < maxTries)) {
      paragraphs.eq(i).after(adElement);
      i++;
    }
  }
}
// Move article_body_ad immediatly if it is present and this isn't IE
// (see DNNO-1404 and 1436), otherwise defer to dom ready
if(!$.browser.msie && $("#article_body_ad").length) {
  NHST.DN.moveArticleBodyAd();
} else {
  $(NHST.DN.moveArticleBodyAd);
}

NHST.DN.videoInArticle = function() {  
  if(paragraph) {
	  
    paragraph--;
  
    var numParagraphs = $("#body_text").children("p").length;

//    document.write("Video_var: " + video)
    if(paragraph > numParagraphs) {
      paragraph = numParagraphs - 1;
    }
      
    if(paragraph < 0) {
      paragraph = 0;
    }

    for (var test = 0; test < vidArray.length; test=test+5) {
    	
    	$($("#body_text").children("p")[paragraph]).after("<div id='body_video"+vidArray[test+4]+"' class='videoThumbnail'><img src='"+vidArray[test]+"' alt='' /><div class='videoThumbnailOverlay2' style='width: "+vidArray[test+2]+"px; height:"+vidArray[test+3]+"px;'><a href='javascript: insertVideoInArticle( \"body_video"+vidArray[test+4]+"\",\""+embedURL+"\","+vidArray[test+1]+","+vidArray[test+2]+","+vidArray[test+3]+");' class='videoThumbnailOverlay' style='width: "+vidArray[test+2]+"px; height:"+vidArray[test+3]+"px;'></a></div></div>");
    }
  }
}

NHST.DN.twitterFeed = function() {
  
  $(document).ready(function(){
    
    var $tweet_queries = $('.tweet-container form');
    
    $tweet_queries.each(function(i, form){ 
      var queryString = encodeURIComponent($(form).find("input[name='twitter_query']").val());
      var count = $(form).find("input[name='twitter_rpp']").val();
      
      var fileref = document.createElement('script');
      fileref.setAttribute("type","text/javascript");
      fileref.setAttribute("src", "http://search.twitter.com/search.json?q="+queryString+"&callback=NHST.DN.twitterCallback&rpp="+count+"");
      var $link = $(form).parents('.box_content').siblings('.box_menu').find('a');      
      $link.attr('href', 'http://search.twitter.com/search?q=' + queryString);
      document.getElementsByTagName("head")[0].appendChild(fileref);
    });
  });  
}

NHST.DN.twitterCallback = function(ob) {  
  var original_query = ob.query;
  
  var $tweet_queries=$('.tweet-container form');
  
  var container;
  $tweet_queries.each(function(i, form){
    var query = $(form).find("input[name='twitter_query']").val();
    // Twitter replaces spaces with '+' in returned json
    query = encodeURIComponent(query).replace(/%20/g, '+');

    if(query === original_query) {
      container = $(form).parent();
      return false;
    }    
  });
  
  if(typeof(container) != 'undefined') {  
    container.html('');
  
    $(ob.results).each(function(i){
        var str = '<div class="twitter_message">\
        <div class="txt">'+NHST.DN.formatTweetString(this.text)+'</div>\
        <span class="byline">'+NHST.DN.relativeTime(this.created_at)+"  fra  "+this.from_user+'</span>\
        </div>';
  
        container.append(str);
    });
  }
}

NHST.DN.formatTweetString = function(str){
    str=' '+str;
    str = str.replace(/((ftp|https?):\/\/([-\w\.]+)+(:\d+)?(\/([\w/_\.]*(\?\S+)?)?)?)/gm,'<a href="$1" target="_blank">$1</a>');
    // The tweets arrive as plain text, so we replace all the textual URLs with hyperlinks
    str = str.replace(/([^\w])\@([\w\-]+)/gm,'$1@<a href="http://twitter.com/$2" target="_blank">$2</a>');
    // Replace the mentions
    str = str.replace(/([^\w])\#([\w\-]+)/gm,'$1<a href="http://twitter.com/search?q=%23$2" target="_blank">#$2</a>');
    // Replace the hashtags
    return str;
}


NHST.DN.relativeTime = function(pastTime){
    var origStamp = Date.parse(pastTime);
    var curDate = new Date();
    var currentStamp = curDate.getTime();
    var difference = parseInt((currentStamp - origStamp)/1000);

    if(difference < 0) return false;

    if(difference <= 5)         return "Nå nettopp";
    if(difference <= 20)        return "Sekunder siden";
    if(difference <= 60)        return "Et minutt siden";
    if(difference < 3600)       return parseInt(difference/60)+" minutter siden";
    if(difference <= 1.5*3600)  return "En time siden";
    if(difference < 23.5*3600)  return Math.round(difference/3600)+" timer siden";
    if(difference < 1.5*24*3600)    return "En dag siden";

    var dateArr = pastTime.split(' ');

    return dateArr[4].replace(/\:\d+$/,'')+' '+dateArr[2]+' '+dateArr[1]+
    (dateArr[3]!=curDate.getFullYear()?' '+dateArr[3]:'');
}


NHST.DN.initArticleTemplate = function() {  
  // Init toolbar
  $("#toolbar_tipafriend_btn").click(function () {
    $("#toolbar_tipafriend_btn").toggleClass("toolbar_tipfriend_selected");
    $("#toolbar_tipafriend_container").slideToggle("fast");
    return false;
  });
  
  // Toggle tabbed panel (Most read today/week), works for all panels with HTML like:
  // <ul><li class="tab"><li class"tab></ul><ul class="panel"><ul class="panel">
  $(".tab").click(function(event) {
    event.preventDefault();
    var clickedTab = $(this);
    var allTabs = clickedTab.parent().find("li");    
    allTabs.removeClass("active");
    clickedTab.addClass("active");
    var selectedIndex = allTabs.index(clickedTab);
    var panels = clickedTab.parent().nextAll();
    panels.hide();
    $(panels.get(selectedIndex)).show();
  });
  
  // Init article discussion
  NHST.DN.initArticleDiscussion();

  // Handle related videos if any.
  NHST.DN.videoInArticle();
  
  // Validate netmeeting form
  $("#art_netmeeting_form form").submit(function() {
    if(this.title.value == "" || this.name.value == "" || this.body.value == "") {
      $("#art_netmeeting_input_error").hide();
      $("#art_netmeeting_input_error").fadeIn("slow");
      return false;
    }
    return true;
  });
  
}

// Only run this when in article context
if ($("#art_column_main").length > 0) {
  $(NHST.DN.initArticleTemplate);
}

NHST.DN.sendTip = function(event) {
  event.preventDefault();  
  var tipBox = $(event.target).parents(".dn_tip_form");
  var form = $(event.target).parents("form");
        
  var data = {
    mailfrom: form.find("input[name='mailfrom']").val(),
    subject: form.find("input[name='subject']").val(),
    fields: form.find("input[name='fields']").val(),
    fieldnames: form.find("input[name='fieldnames']").val(),
    forslag: form.find("textarea[name='forslag']").val(),
    mailto: form.find("input[name='mailto']").val(),        
    redirect: form.find("input[name='redirect']").val()    
    };  
    
  $.ajax({
    type: "POST",
    url: "/www.dn.no/simpleformmailer/",
    data: data,
    success: function(msg){ 
        var successBox = $("#dn_footer_tip_success").clone();
        successBox.attr("id","");
        tipBox.empty();
        tipBox.append(successBox);
        successBox.fadeIn("slow");
        
    },
      error: function(request, type){
        var failBox = $("#tip_status_error").clone();
        failBox.attr("id","");
        tipBox.empty();
        tipBox.append(failBox);
        failBox.fadeIn("slow");
    }
  });
}

NHST.DN.initIdnContactPage = function() {
  $('#contactSelector').change(function(e){

    var sel = $('#contactSelector :selected').attr('value');
    $('.contact_information').show();
    $('.contact_information').children('.employee').show();
    
    var emp = $('.contact_information').find('.employee');
        
    if(sel != ('all')) {
      
      for (var a=0; a<emp.length; a++) {
        if ($(emp[a]).children('.contactbox').length == 0) {
          $(emp[a]).hide();
        } 
      }
      if ($('.employee').children('.contactbox').length == 0) {
        $('.employee').hide();
      }    
      
      var elements = $('#idn_contact_article').find('.contactbox');
      for (var i = 0; i < elements.length; i++) {
        var test = $(elements[i]).hasClass('.' + sel);
        if (test == false) {
          $(elements[i]).parent().hide();
        }
      }
      var contactInfoBoxes = $('.contact_information');
      $.each(contactInfoBoxes, function(i, box) {
        
        var contactBox = $(box);

        if (contactBox.children('.employee:visible').length == 0) {
          contactBox.hide();
        }
      });
    }
    else {
      $('.employee').show();
      
      for (var a=0; a<emp.length; a++) {
        if ($(emp[a]).children('.contactbox').length == 0) {
          $(emp[a]).hide();
        } 
      }
      if ($('.employee').children('.contactbox').length == 0) {
        $('.employee').hide();
      }
    }
  });
}

NHST.DN.initAllPages = function() {  
  // All inputs with class .restore_default_value will revert to
  // init value when blurred after no change to value
  // used by: "tip us", articlediscussion 
  $(".restore_default_value").focus(NHST.DN.focusInput);
  $(".restore_default_value").blur(NHST.DN.blurInput);
  
  // tip us(on all pages with default footer)
  $("#dn_footer_sendtip .tip_form_submit").click(NHST.DN.sendTip);
  
  NHST.DN.twitterFeed();
  
  NHST.DN.initIdnContactPage();
}
$(NHST.DN.initAllPages);


function insertVideoInArticle(divID, baseURL, videoID, width, height) {
  var params = {
      allowfullscreen: "true"
    };
  swfobject.embedSWF(baseURL + "&watch=" + videoID + "&width=" + width, divID, width, height, "9.0.28", false, false, params, false);
}



function insertTVplayer(url, width, height) {
  // For integration with VideoPlaza library:
  // allowScriptAccess must be always
  var params = {
    allowfullscreen: "true",
    allowScriptAccess: "always"
  };
  swfobject.embedSWF(url, "dntv_player", width, height, "9.0.28", false, false, params, false);
}
 