if (typeof Array.prototype.push == 'undefined') {
  Array.prototype.push = function(element) { this[this.length] = element; }
}
if(typeof Array.prototype.pop == 'undefined') {
  Array.prototype.pop = function() {
    var last = this[ this.length - 1 ]; this.length--; return last;
  }
}
String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
	return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
	return this.replace(/\s+$/,"");
}


var Class = {
  create: function() {
    return function() {
      this.initialize.apply(this, arguments);
    }
  }
}

var PageClass = Class.create();
PageClass.prototype = {
  initialize: function(){
    this.lang = $("html").get(0).getAttribute("lang");
  }
}

var NavList = Class.create();
NavList.prototype = {
  initialize: function(toggle_text){
    $("#nav div.choose-lang").after('<span id="expand-navigation">'+toggle_text+'</span>');
    var heading = $("#content > h1");
    this.links = $("#nav > ul:first > li a");
    this.current = this.links.filter(function() {
      return ($(this).text().toLowerCase().trim() == heading.text().toLowerCase().trim() || $(this).attr('id') == heading.attr('id')+'-link');
    }).addClass('current').get(0);
    this.closeAllButCurrent();
  },
  closed: false,
  closeAllButCurrent: function(){
    var self = this;
    this.links.filter(function(){ return this != self.current; }).removeClass('open').find("+ ul").hide();
    this.closed = true;
  },
  openAll: function() {
    this.links.filter(function(){ return $("+ ul", this).length != 0; }).addClass('open').find("+ ul").show();
    this.closed = false;
  }
}
function setActiveStyleSheet(title) {
   var i, a, main;
   for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
     if(a.getAttribute("rel").indexOf("style") != -1
        && a.getAttribute("title")) {
       a.disabled = true;
       if (a.getAttribute("title") == title) {
         a.disabled = false;
        }
     }
   }
}


$(document).ready(function(){
  
  var Page = new PageClass();
  
  if (Page.lang == 'sv') {
    var table_text = 'tabellen';
    var diagram_text = 'diagrammet';
    var close_text = 'Stäng';
    var show_text = 'Visa';
  	var government_goals_text = 'Regeringsmål';
    var nav_toggle_text = 'Visa alla underrubriker';
  }
  else if (Page.lang == 'en') {
    var table_text = 'table';
    var diagram_text = 'diagram';
    var close_text = 'Close';
    var show_text = 'Show';
  	var government_goals_text = 'Government objectives';
    var nav_toggle_text = 'Show all subheadings';
  }

  var Navigation = new NavList(nav_toggle_text);

  $('#expand-navigation').click(function(event){
    if(Page.lang == 'sv') {
      var hide_text = 'Göm underrubriker';
    } else if (Page.lang == 'en') {
      var hide_text =  'Hide subheadings';
    }
    if (Navigation.closed) {
      Navigation.openAll();
      this.old_text = $(this).text();
      $(this).addClass('active').text(hide_text);
    } else {
      Navigation.closeAllButCurrent();
      $(this).removeClass('active').text(this.old_text);
    }
    this.blur();
    event.preventDefault();
  });
    
  if(Page.lang == 'sv') { var header_back_text = 'Tillbaka'; }
  else if (Page.lang == 'en') { var header_back_text = 'Back'; }
  
  $("#header").before('<div id="preview-message" class="inactive">'+header_back_text+'</div>');
  $('#preview-message').click(function(){
    setActiveStyleSheet('Screen');
    $(this).toggleClass('inactive');
  });
  
  $('.print a').click(function(event){
    setActiveStyleSheet('Print');
    $("#preview-message").toggleClass("inactive");
    event.preventDefault();
    window.print();
  }).blur();
	

	$("div.expandable").each(function(i){
    var div = this;
	  name = $(this).find("> h3", this).text();
	  type = ($(this).children("table").size() > 0) ? table_text : diagram_text;
    $(this).append('<p class="close"><a href="#">'+close_text+'</a></p>').find('p.close a', this).click(function(event){
      $(div).toggleClass("inactive");
      event.preventDefault();
      this.blur();
    });
	  $(this).before('<div class="show-expandable"><a class="toggler" href="#" id="expandable-toggler-'+i+'">'+show_text+' '+type+' '+name+'</a></div>');
	  $("#expandable-toggler-"+i).click(function(event){
	    $(event.target).parent().toggleClass("active");
	    $(div).toggleClass("inactive");
	    event.preventDefault();
	    this.blur();
	  });
	  $(this).after('<hr class="clearer">');
	}).toggleClass("inactive").addClass("floater");

  if (!document.getElementById('all-pages') && (document.getElementById('notes') || document.getElementById('noter'))) {
    if (Page.lang == 'en') { var back_text = 'Back'; }
    else { var back_text = 'Tillbaka'; }
    $("#content div.c-a h2").after('<a href="#" class="go-back-a-page" onclick="history.back(); return false;">'+back_text+'</a>');
  } else if (document.getElementById('all-pages')) {
    setActiveStyleSheet('Print');
    $("#preview-message").toggleClass("inactive");
    window.print();
  }

	
  $("#content div.government-goals").each(function(i){
    var tip = this;
     // TODO: refactor
    $(this).append('<p class="close"><a href="#">'+close_text+'</a></p>').find('p.close a', this).click(function(event){
      $(tip).toggleClass("inactive");
      event.preventDefault();
      this.blur();
    });
    $(this).before('<p class="show-government-goals"><a href="#" id="show-government-goal-'+i+'">'+government_goals_text+'</a></p>');
    $("#show-government-goal-"+i).click(function(event){
      $(tip).toggleClass("inactive");
      event.preventDefault();
      this.blur();
    });
  }).toggleClass("inactive");
  
  // Safari
  if ($.browser.safari) {
    $('body').addClass('safari');
  }
});
