var roundBottom = RUZEE.ShadedBorder.create({corner:8, shadow:14, edges:"blr" });
var roundTop = RUZEE.ShadedBorder.create({corner:8, edges:"tlr" });
var roundAll = RUZEE.ShadedBorder.create({corner:10});
// use different padding on div to shift shadow
var dropShadow = RUZEE.ShadedBorder.create({corner:0, shadow:8});
var gNewWindow = true;

/* hash ('associative array') in JS is really an Object */
var i_Count = 0;
var i_Cache = new Object();
function cacheImage(url,width,height) {
  var n = 'i' + i_Count;
  i_Cache[n] = new Image(width,height);
  i_Cache[n].scr = url;
  i_Count++;
}
// Cache common images
cacheImage("../images/close-oct_16.png",16,16);
cacheImage("../images/external_link.gif",14,12);
cacheImage("../images/loader.white.gif",16,16);
cacheImage("../images/resize.gif",11,11);

/* jQuery func called when DOM is ready */
$(document).ready(function() {
  /* Always render the bottom first */
  roundBottom.render($('.round-bottom'));
  roundTop.render($('.round-top'));
  roundAll.render($('.round-all'));
  dropShadow.render($('.drop-shadow'));

  /* add classes to all radio and checks to facilitate form styles */
  $('input:radio').addClass('radio');
  $('input:checkbox').addClass('checkbox');

  /* Set default window opening checkbox stuff */
  /* TODO: use cookie to save user's preference in a gNewWindow global
     and allow check in one page to migrate to all others */

  $('#ext_link').attr("checked",gNewWindow);
  $('#ext_link').click(changeExtLinks(this.checked));
  changeExtLinks(gNewWindow);

  /* do page-specific code */
  if ('function' == typeof window.moreReady) {
    moreReady();
  }
});

function changeExtLinks(newWindow)  {
  gNewWindow = newWindow;
  $('.ext').attr('target',(newWindow ? "_blank" : "_self"));
}


/* default highslide settings */
hs.graphicsDir = '../images/';
hs.objectLoadTime = "after";
//Filename for the png 'outline' file - MAKE MY OWN!
hs.outlineType = "rounded-white";
hs.dimmingOpacity = 0.5;
hs.dimmingDuration = 50; //min step = 25ms
hs.transitions = ["expand"];
hs.showCredits = false;
hs.onDimmerClick = function() {
  return hs.close();
};

/* Insert a copy of  launching link's text as a title on HS popup */
hs.Expander.prototype.onAfterGetContent = function (expander) {
  var txt = $(expander.a).text();
  $('#'+expander.contentId).find('.highslide-header').append('<div class="hs-title">'+txt+'</div>');
  return true;
}

/* FAQ via "question" and "answer" classes
   ele.answer slides open in place
   ele.answer must be on next element after ele.question
   Just one answer visible at a time
*/
function initFAQ() {
  // Hide all FAQ answers
  $(".answer").slideUp();
  //hide() and show() zooms width, causing jerky text flow

  // Bind onclick handlers to all questions
  $(".question").bind('click', function() {
    var answer = $(this).next('.answer');
    var currentVisible = answer.is(':visible');
    $("div.answer:visible").slideUp('fast'); // Close currently-open answer

    // Show answer if not the previously-open answer
    if(!currentVisible)
      answer.slideDown('slow');
  });
  $(".question").bind("mouseenter mouseleave", function(e){
      $(this).toggleClass("over");
  });
}
/** Position ele centered above another
 * overID    Element to reposition
 * underID   Element to center over
 * parentID  Closest parent block enclosing both of above
 *  (All 3 above must begin with "#")
 * REQUIRES jQuery.dimension JS in extras...js
*/
function setCenteredPosition(overID, underID, parentID) {
  /* parent must be 'relative' to use 'abosolute' on child */
  $(parentID).css('position','relative');
  var over = $(overID);
  over.css('margin','0');
  over.css('position','absolute');

  var underWidth = $(underID).outerWidth();
  var overWidth = over.outerWidth();
  var underHeight = $(underID).outerHeight();
  var overHeight = over.outerHeight();

  var underPos = $(underID).position();
  var diffHorz = underWidth + 2 - overWidth; // + 2 for focus outline
  var diffVert = underHeight + 2 - overHeight;
  var newPad;

  if(diffHorz > 0) {
    newPad = parseInt(over.css('padding-left'))
      + Math.ceil(diffHorz/2);;
    over.css('padding-left',newPad + 'px');

    newPad = parseInt(over.css('padding-right'))
      + Math.ceil(diffHorz/2);;
    over.css('padding-right',newPad + 'px');
    overWidth += diffHorz;
  }
  // Add extra padding so element under is covered completely
  if(diffVert >= 0) {
    newPad = parseInt(over.css('padding-top'))
      + Math.ceil(diffVert/2);
    over.css('padding-top',newPad + 'px');

    newPad = parseInt(over.css('padding-bottom'))
      + Math.ceil(diffVert/2);
    over.css('padding-bottom',newPad + 'px');
    overHeight += diffVert;
  }
  over.css('left',(underPos.left +
    Math.round((underWidth - overWidth)/2)) + 'px');
  over.css('top',(underPos.top +
    Math.round((underHeight - overHeight)/2)) + 'px');
}
