jQuery(document).ready(function() {
    // attempt to update the dropdown value
    update_dropdown_selected_value();
});

header_toggle_int = null;

function init_header_toggle_observer()
{
  if(install_version_header_observer == "true")
  {
    // header observer is enabled, install the periodical
    // observer
    header_toggle_int = window.setInterval(iframe_src_check, 200);
  }
}

function clear_header_toggle_observer()
{
  if(header_toggle_int)
  {
    window.clearInterval(header_toggle_int);
  }
}

function update_dropdown_selected_value()
{
  // when a user pushes the back button of the browser, the select tag
  // for version selection is not updated correctly.
  // this periodically executed observer fixes the problem.
  try
  {
    var href = $("document").contentWindow.location.href;
    var selected_id = $("version_selector").down("option.selected").value;
    var selected_option_element = $("version_selector").options[$("version_selector").selectedIndex]
    if(href && href.match(/\/(\d+)\//) && (!href.include("/" + selected_id + "/")))
    {
      //alert("executor")
      // wrong value selected in dropdown. select correct value
      $("version_selector").down('option[value="' + href.match(/\/(\d+)\//)[1] + '"]').selected = true;
      jQuery("#version_selector option").removeClass("selected").addClass("not_selected");
    }
    if(!selected_option_element.hasClassName("selected"))
    {
      jQuery('#version_selector option[value="' + href.match(/\/(\d+)\//)[1] + '"]').removeClass("not_selected");
      jQuery('#version_selector option[value="' + href.match(/\/(\d+)\//)[1] + '"]').addClass("selected");
    }
  }
  catch(ex)
  {
    // content window location href cannot be executed due to cross
    // domain security restrictions. the dropdown value cannot be adapted
  }
  finally
  {
  }
}

//thefirstwatcher = true
function iframe_src_check()
{
  var iframe = $$("iframe.document_frame")[0];
  if(iframe)
  {
    try
    {
      iframe_href = iframe.contentWindow.location.href;
      iframe_host = iframe.contentWindow.location.host;
      orig_src_arr = $("iframe_original_src").innerHTML.evalJSON();
      /*
      if(thefirstwatcher)
      {
        thefirstwatcher = false
        alert(iframe_href);
        alert(iframe_host);
        alert(orig_src_arr);
      }
      */
      //console.log(iframe_href + " == " + orig_src);
      //console.log(iframe_href == orig_src)
      //console.log("http://" + iframe_host + orig_src == iframe_href)
      var found = false;
      orig_src_arr.each(function(orig_src) {
        if(iframe_href == orig_src || "http://" + iframe_host + orig_src == iframe_href || "https://" + iframe_host + orig_src == iframe_href)
        {
          found = true;
        }
      });
      if(found)
      {
        // source of the iframe is the original source, expand the header
        expand_header();
      }
      else
      {
        // source of the iframe has changed, collapse the header
        collapse_header();
      }
    }
    catch(ex)
    {
      // cannot access content of the iframe. whatever reason this
      // has, it no longer makes sense to display the header
      collapse_header();
    }
  }
}

function version_selector_change_handler()
{
  //thefirstwatcher = true
  iframe_start_loading();
  clear_header_toggle_observer();
  var new_version_id = $('version_selector').value;
  var new_src = "/frontend/versions/" + new_version_id + "/embedded_version_content";
  $("document").src = new_src;
  var tmp = $("iframe_original_src").innerHTML.evalJSON();
  if(!tmp.include(new_src))
  {
    tmp.push(new_src);
  }
  $("iframe_original_src").innerHTML = tmp.toJSON();
  // update version selector by ajax call
  new Ajax.Updater("version_selector_container", "/frontend/versions/version_selector/" + new_version_id);
  new Ajax.Updater("version_links", "/frontend/versions/version_links/" + new_version_id);
  options = { parameters: { action_override: "show" } };
  new Ajax.Updater("language_selector", "/frontend/versions/language_selector/" + new_version_id, options);
}

function iframe_finished_loading()
{
  init_header_toggle_observer();
  parent.jQuery('#document').show();
  parent.jQuery('#loading_document_spinner').hide();
  parent.jQuery('#document_container_overlay').hide();
  // update the dropdown value, if needed
  update_dropdown_selected_value();
}

// remember the document container top position and top padding
document_container_top = null;
document_container_padding_top = null;

// TODO: add a small breadcrumb-like navigation to the header
// and rewrite expand / collapse, so they exchange the full header
// with the "breadcrumb" part.
function expand_header()
{
  var document_container = jQuery("#document_container");
  var header = $$("#header")[0];
  header.show();
  if(document_container_top != null)
  {
    document_container.css("top", document_container_top);
  }
  if(document_container_padding_top != null)
  {
    document_container.css("padding-top", document_container_padding_top);
  }
}

function collapse_header()
{
  var document_container = jQuery("#document_container");
  var header = $$("#header")[0];
  header.hide();
  if(document_container_top == null)
  {
    document_container_top = document_container.css("top");
  }
  if(document_container_padding_top == null)
  {
    document_container_padding_top = document_container.css("padding-top");
  }
  document_container.css("top", "0");
  document_container.css("padding-top", "0");
}

function iframe_start_loading()
{
  jQuery('#document_container_overlay').show();
  jQuery('#document').hide();
  jQuery('#loading_document_spinner').show();
}

function resize_containers()
{
  jQuery("#document_container_overlay").height(jQuery("#document_container").height() + "px");
}

function open_change_document_from_dropdown(dd)
{
  var change_document_id = $(dd).value;
  window.open("http://" + location.host + "/frontend/change_documents/" + change_document_id, "_blank");
}

