/***********************************************************************
 * aclx.js
 *
 * JavaScript for AstroClick
 *
 * Uses the jQuery JavaScript Library, and the jQuery-Plugin history.
 *
 * Depends on aclx.cgi for AJAX-queries.
 * 
 * Author: Magnus Herold
 ***********************************************************************/

jQuery.noConflict();
jQuery(document).ready(function($) {

  var blocks;
  var toc;
  var blocknr = 0;
  var wait = false;
  var fade_enabled = true;
  var form = $('form[name=AstroClickForm]');
  var last_hash;
  var fade_elm;

  var a_in = function(f) {
    var time = 200;
    if (fade_elm == '#actx') time = 300;
    $(fade_elm).slideDown(time, f);
  };
  var a_out = function(elm, f) {
    fade_elm = elm;
    var time = 200;
    if (fade_elm == '#actx') time = 300;
    if (fade_elm == '#acpop') $('#fadeonoff').hide();
    $(elm).slideUp(time, f);
  };

  var image_click = function(e) {
    // user clicked on the chart
    var formparams = new Array;
    $(':input[type!=image][name!=style]', form).each(function() {
      formparams.push($(this).attr('name') + '=' + $(this).val());
    });
    var urlstr = formparams.join('&');
    var px = new Number(e.pageX - $(this).offset().left).toFixed(0);
    var py = new Number(e.pageY - $(this).offset().top).toFixed(0);
    urlstr += '&AstroClick.x=' + px;
    urlstr += '&AstroClick.y=' + py;
    $.historyLoad(urlstr);
    return false;
  };

  var toggle_fade = function() {
    if (fade_enabled) {
      fade_enabled = false;
      document.getElementById('fadeonoff').innerHTML = 'Turn effects ON';
    }
    else {
      fade_enabled = true;
      document.getElementById('fadeonoff').innerHTML = 'Turn effects OFF';
    }
  };

  var print_all = function(bnr) {
    // print toc and body
    var out = '';
    out += '<div id="acnavi" class="acnavi">';
    if (toc) {
      out += '<img src="/im/x.gif" height="10"/>';
      out += toc.html.replace(/(#bnr=\d*)/g, '$1&' + last_hash);
    }
    out += '</div>';
    out += '<div id="actx" class="actx">';
    if (blocks.length > bnr) { 
      out += '<p>';
      out += blocks[bnr].html;
      out += '</p>';
    }
    out += '</div>';
    /*out += '<div id="faadeonoff" class="verd8p" style="position:absolute;bottom:5px;right:5px"><a href="javascript:void(0)" style="color:grey"><small id="fadeonoff">';
    if (fade_enabled) out += 'Turn effects OFF'
    else out += 'Turn effects ON';
    out += '</small></a></div>';*/
    $('#acpop').html(out);
    //$('#fadeonoff').click(toggle_fade);
    /*$('#acpop a[href^=#]').click(function(e) {
      alert('mytest');
      $.historyLoad($(this).attr('href').substr(1));
      //return false;
    });*/
  };


  var print_all_fade = function() {
    while (wait) { 
      setTimeout(print_all_fade, 50);
      return;
    }
    print_all(blocknr);
    a_in();
  };

  var pageload = function(hash) {
    if (!hash) {
      location.href = location.href.replace(/#$/, '');
      return;
    }
    var bnr = 0;
    var arr = hash.match(/bnr=(\d*)/);
    if (arr) {
      bnr = arr[1];
      hash = hash.replace(/bnr=(\d*)/, '');
      hash = hash.replace(/^&|&(?=&)|&$/, '');
    }
    if (last_hash != hash) {
      if (fade_enabled) {
        wait = true;
        a_out('#acpop', function() { wait = false; });
      }
      var cgi = $(form).attr('action');
      if (!cgi) cgi = 'aclx.cgi';
      $.getJSON(cgi + '?style=ajax&' + hash, function(jsondata) {
        blocks = jsondata.blocks;
	toc = jsondata.toc;
	if (blocks && blocks[0] && blocks[0].name == 'file_expired') {
          location.href = location.href.replace(/#.*$/, '');
          return;
	}
	last_hash = hash;
	if (fade_enabled) {
	  blocknr = bnr;
	  print_all_fade();
	} else {
	  print_all(bnr);
	}
      });
    } else {
      if (fade_enabled) {
        blocknr = bnr;
        a_out('#actx', print_all_fade); 
      } else {
        print_all(bnr);
      }
    }
  };

  $(':image[name=AstroClick]').click(image_click);
  $('#acpop').click(function(e) {
    var re = /^.*#/;
    if (re.test(e.target.href))
      $.historyLoad(e.target.href.replace(re, ''));
      //alert(e.target.href.replace(re, ''));
  });

  $.historyInit(pageload);

});



