/*---------------------------------*/
/*-- SLIDESHOW                   --*/
/*---------------------------------*/
dojo.require("dojox.widget.AutoRotator");
dojo.require("dojox.widget.rotator.Controller");
dojo.require("dojox.widget.rotator.Fade");
dojo.require("dojox.widget.rotator.Pan");
dojo.require("dojox.widget.rotator.Slide");
dojo.require("dojox.widget.rotator.Wipe");

// parses a slideshow element using given params
function parseSlideshow(slideshowId, trans, rot, dur, sus)
{
  trans = trans.toUpperCase();
  rot = rot.toUpperCase();
  sus = sus.toUpperCase();

  var resolvedTrans = "dojox.widget.rotator.";
  switch(trans)
  {
    case "CROSSFADE"  : resolvedTrans += "crossFade";  break;
    case "PAN"        : resolvedTrans += "pan";        break;
    case "PAN LEFT"   : resolvedTrans += "panLeft";    break;
    case "PAN RIGHT"  : resolvedTrans += "panRight";   break;
    case "PAN UP"     : resolvedTrans += "panUp";      break;
    case "PAN DOWN"   : resolvedTrans += "panDown";    break;
    case "SLIDE LEFT" : resolvedTrans += "slideLeft";  break;
    case "SLIDE RIGHT": resolvedTrans += "slideRight"; break;
    case "SLIDE UP"   : resolvedTrans += "slideUp";    break;
    case "SLIDE DOWN" : resolvedTrans += "slideDown";  break;
    case "WIPE LEFT"  : resolvedTrans += "wipeLeft";   break;
    case "WIPE RIGHT" : resolvedTrans += "wipeRight";  break;
    case "WIPE UP"    : resolvedTrans += "wipeUp";     break;
    case "WIPE DOWN"  : resolvedTrans += "wipeDown";   break;
    default           : resolvedTrans += "fade";       break;
  }
  
  var mixin = {
            dojoType            : "dojox.widget.AutoRotator",
            duration            : dur, 
            autoStart           : (rot != "MANUAL"),
            cycles              : (rot.substring(0,4) == "ONCE" ? 1 : -1),
            suspendOnHover      : (sus == "HOVER"  || sus == "HOVER OR CHANGE"),
            pauseOnManualChange : (sus == "CHANGE" || sus == "HOVER OR CHANGE"),
            random              : (rot == "AUTOMATIC RANDOM"  || rot == "ONCE RANDOM"),       
            reverse             : (rot == "AUTOMATIC REVERSE" || rot == "ONCE REVERSE"),
            transition          : resolvedTrans
          };  

  dojo.parser.instantiate([dojo.byId(slideshowId)], mixin);
}

// parses a slideshow controller element using given params
function parseSlideshowControl(slideshowId, controlId, controls, customControls)
{
  controls = controls.toUpperCase();

  var resolvedControls;
  switch(controls)
  {
    case "PREVIOUS, NUMBERS AND NEXT":             resolvedControls = "prev,#,next"; break;
    case "PREVIOUS, PLAY/PAUSE AND NEXT":          resolvedControls = "prev,next,play/pause"; break;
    case "PREVIOUS, PLAY/PAUSE, NUMBERS AND NEXT": resolvedControls = "prev,#,next,play/pause"; break;
    case "TITLES":                                 resolvedControls = "titles"; break;
    default:                                       resolvedControls = "#"; break;
  }
  
  var mixin = {
          dojoType : "dojox.widget.rotator.Controller",
          rotator  : slideshowId,
          commands : resolvedControls
        };
        
  dojo.parser.instantiate([dojo.byId(controlId)], mixin);
}

// subscribe a caption element to a slideshow - sets up loading first caption, and subscribes for further caption updates
function setupSlideshowCaption(slideshowId, captionId)
{
  var slideshow = dojo.byId(slideshowId);
  var caption = dojo.byId(captionId);
  var pane = slideshow.childNodes[0];
  for (var i = 1; pane.nodeType == document.TEXT_NODE; i++) { pane = slideshow.childNodes[i]; }
  setCaptionFromPaneEle(caption, pane);
  slideshow.captionId = captionId;
  dojo.subscribe(slideshowId + "/rotator/update", function(t,slideshow){setCaption(slideshow)});  
}

// copies a hidden caption (marked with class "caption") from a slideshow pane into the specific caption element
function setCaptionFromPaneEle(caption, pane) 
{
  for (var i = 0; i < pane.childNodes.length; i++) 
  {
    if (pane.childNodes[i].className == "caption") { caption.innerHTML = pane.childNodes[i].innerHTML; break; }
  }
}

// copies the current pane caption into the caption element - caption Id must have been initialised aleady during onload
function setCaption(slideshow) 
{
  setCaptionFromPaneEle(dojo.byId(dojo.byId(slideshow.id).captionId), slideshow.panes[slideshow.idx].node);
}


/*---------------------------------*/
/*-- CAROUSEL                    --*/
/*---------------------------------*/
dojo.require("dojox.widget.Pager");
dojo.require("dojo.data.ItemFileReadStore");

// store/retrieve carousel data
var carouselData = new Array();
function storeCarouselData (id, data) { eval("carouselData." + id.replace(/-/g,"") + " = data;"); }
function retrieveCarouselData (id)    { var data; eval("data = carouselData." + id.replace(/-/g,"") + ";");  return data; }

// parses a carousel data store
function parseCarouselStore(carouselId, carouselStoreId)
{
  dojo.parser.instantiate([dojo.byId(carouselStoreId)], {data: retrieveCarouselData(carouselId)} );
}

// store/retrieve icon image paths
var carouselIcons = new Array();
function storeIcon    (id, icon) { eval("carouselIcons." + id.replace(/-/g,"") + " = icon;"); }
function retrieveIcon (id)       { var icon; eval("icon = carouselIcons." + id.replace(/-/g,"") + ";");  return icon; }

// parses a carousel element using given params
function parseCarousel(carouselId, nbr, dur, prevIconImg, nextIconImg)
{
  storeIcon(carouselId + '_PrevIcon', prevIconImg);
  storeIcon(carouselId + '_NextIcon', nextIconImg);
  
  var mixin = {
           dojoType            : "dojox.widget.Pager",
           duration            : dur, 
           itemsPage           : nbr,
           itemSpace           : 0,
           resizeChildren      : false,
           statusPos           : "trailing",
           pagerPos            : "none" ,
           postMixInProperties :  function() {            
               var h = (this.orientation == "horizontal");
               dojo.mixin(this, {
                   _totalPages:0, 
                   _currentPage:1, 
                   dirClass: "pager" + (h ? "Horizontal" : "Vertical"), 
                   iconNext : nextIconImg,
                   iconPrevious : prevIconImg
                   }
               );
             }
     };
  dojo.parser.instantiate([dojo.byId(carouselId)], mixin);
}

/*---------------------------------*/
/*-- EXPANDING INDEX             --*/
/*---------------------------------*/

function toggleExpand(bodyId, stateId)
{
  var bodyEle = document.getElementById(bodyId);
  var stateEle = document.getElementById(stateId);
  if (bodyEle && stateEle)
  {
    if (bodyEle.style.display == "none")
    {
      doExpand(bodyId, stateId);
    }
    else
    {
      doCollapse(bodyId, stateId);
    }
  }
}
function doExpand(bodyId, stateId)
{
  var bodyEle = document.getElementById(bodyId);
  var stateEle = document.getElementById(stateId);
  bodyEle.style.display = "block";
  stateEle.innerHTML = "hide";
}
function doCollapse(bodyId, stateId)
{
  var bodyEle = document.getElementById(bodyId);
  var stateEle = document.getElementById(stateId);
  bodyEle.style.display = "none";
  stateEle.innerHTML = "view";
}

/*---------------------------------*/
/*-- POP OPEN INLINE EDIT BARS   --*/
/*---------------------------------*/
// To be triggered from onfocus events
// Pop open the inline edit for keyboard navigation
function popInlineEdit(ele, showInEditMode)
{
  var inEditMode = document.body.className.match(/edit-mode/);
  if (!inEditMode && !showInEditMode)
  {
    showToolbars(ele);
  }
  else if (inEditMode && showInEditMode)
  {
    showToolbars(ele);
  }
}
function showToolbars(ele)
{
  var toolbars = ele.getElementsByClassName("contentInlineEditBar");
  for (var i = 0; i < toolbars.length; i++)
  {
    toolbars[i].style.display = "block";
  }
}


