﻿/// <reference path="jquery-1.3.2.min.js" />
/// <reference path="jquery.watermark.js" />
/// <reference path="jquery.tooltip.min.js" />
/// <reference path="library.js" />

//Bestemmer, om der skal søges efter referencer i formatet (000) via regex,
//eller om det kun er manuelt angivne referencer, der tages med.
var auto = true;

$(function() {
    if (auto) {
        //Find automatisk referenceer
        autoAddRefeernces();
    }


    var references = $(".footnote-reference");

    references.each(function() {
        var reference = $(this);
        var ref_number;
        var span = false;
        //Hvis det er en sup-tag, har automodus allerede fjernet paranteserne
        if (reference.context.tagName == "SUP") {
            ref_number = reference.text();


        }
        else {
            ref_number = reference.text().substr(1, reference.text().length - 2);
            span = true;
        }
        //For hver reference skal den tilhørende fodnote findes






        //Paranteserne er allerede fjernet, hvis auto er aktiv
        if (span) {
            //erstat reference i parantes med rigtig reference
            var new_reference = $("<sup class='footnote-reference'>" + ref_number + "</sup>");

            //lagr tekst til senere brug

            reference.before(new_reference);


            reference.remove();
        }
        else {

        }
        //return true for at fortsætte loop
        return true;

    });

    $("p, div.caption").each(function() {
        //fjern mellemrum før henvisninger
        //Skal være før tooltip, ellers virker tooltip ikke
        var html = $(this).html() + "";
        html = html.replace(" <sup", "<sup");
        $(this).html(html);
    });
    //tilføj teksten via jquery.data
    $("sup.footnote-reference").each(function() {
        var s = $(this);
        var footnote = $(findFootnoteForReference(s.text()));

        var text = "";
        try {
            text = footnote.html().replace("(" + s.html() + ") ", "");
        }
        catch (error) {
            //Firebug console api
            if (window.console) {
                console.log("Error getting text for footnote no. " + s.text());
            }
            //Annuller fodnotereference, fjern formattering igen.
            s.before("(" + s.text() + ")");
            s.remove();
        }
        s.data("reference-text", text);
    })
    .tooltip({
        delay: 0,
        fade: 250,
        bodyHandler: function() {
            return $(this).data("reference-text");
        }
    });

});

function findFootnoteForReference(number) {
    var ret;
    
    /// <summary>Forsøger at finde en fodnote for en given reference</summary>
    /// <returns type="jQuery" />
    $("p").each(function() {
        var p = $(this);
        if (p.text().beginsWith("(")) {
            var fnumber = p.text().substr(1, number.length);
            if (fnumber == number) {
                
                
                ret = p;
                
                // returner false for at soppe loop
                return false;
            }
        }
    });
    return ret;
}

function processFootnoteReferences(elem)
{
  $(elem).contents()
  .filter(function() {
      return this.nodeType == 3 //Node.TEXT_NODE;
  }).each(function() {
      var c = $(this);
      var text = this.nodeValue + "";

      var newText = text.replace(/\s?\((\d{1,3})\)/g, "_fref_$1_/fref_");
     
      if (newText != "")
          this.nodeValue = newText;
      else
          return true;
  })
  $(elem).children().each(function() {
      processFootnoteReferences(this);
  });
  
}

function autoAddRefeernces() {
    $("p, div.caption").each(function() {
        //Convert text references to unique identifiers

        var p = $(this);
        if (!p.text().beginsWith("(")) {

            //Two pass processing is nesccessary to avoid messing up innerHTML - for now at least.

            //Uses recursive processing to process children
            processFootnoteReferences(p);

            //Replace footnote codes with real footnotes.
            var html = p.html() + "";

            var newHtml = html.replace(/_fref_(\d{1,3})_\/fref_/g, "<sup class=\"footnote-reference\">$1</sup>");
            p.html(newHtml);
            return true;

        }
    });
}
