// REGULAR PAGE MANIPULATION ----------------------------------------------------------
function showHide(inId) {
  var obj = document.getElementById(inId + "list");
  var img = document.getElementById(inId + "flipper");
  
  if (obj.style.display == "none") {
    obj.style.display = "block";
    img.src = "/images/minus.gif";
  } else {
    obj.style.display = "none";
    img.src = "/images/plus.gif";
    
    // Hide potentially displayed video
    hideVideo(inId);
  }
  
  //obj.scrollIntoView();
}


function showPicture(inId, inPath, inWidth, inHeight) {
  var img = document.getElementById(inId + "picture");
  img.src = inPath;
  img.style.width  = inWidth;
  img.style.height = inHeight;
}

function showVideo(inId, inPath, inWidth, inHeight, inDescription) {

  // Hide current video
  hideVideo(inId);
  
  // Create new video
  var videoContainer   = document.getElementById(inId + "video");
  var videoDescription = document.getElementById(inId + "description");
  
  videoContainer.style.display   = "block";
  videoContainer.innerHTML       = "<embed id='" + inId + "embed' src='" + inPath + "' type='video/quicktime' bgcolor='#ffffff' width='" + inWidth + "' height='" + (inHeight+16) + "' pluginspage='http://www.apple.com/quicktime/download/' enablejavascript='true'>";
  
  videoDescription.style.display = "block";
  videoDescription.style.width   = 540 - inWidth - 10;
  videoDescription.style.height  = inHeight + 16;
  videoDescription.innerHTML     = inDescription;

  //videoContainer.scrollIntoView();
}

function hideVideo(inId) {
  var videoContainer   = document.getElementById(inId + "video");
  var videoDescription = document.getElementById(inId + "description");
  var videoEmbed       = document.getElementById(inId + "embed");
  
  try {
    videoEmbed.Stop();
  } catch (e) {
    // Noop
  }
  
  if (videoContainer && videoContainer) {
    videoContainer.style.display   = "none";
    videoContainer.innerHTML       = "";
    
    videoDescription.style.display = "none";
    videoDescription.innerHTML     = "";
  }
}


// ADMINISTRATIVE PAGE MANIPULATION -------------------------------------------------
function queueLogin(inForm) {
  queueContent(null, "/ajax.php?action=login", inForm);
}

function queueLogout(inPage, inSection) {
  queueContent(null, "/ajax.php?action=logout&page=" + inPage + "&sectiontitle=" + inSection);
}


// ANIMATION METHODS ----------------------------------------------------------------
var slideQueue = [];
function queueSlide(inObj, inToX, inToY) {
  slideQueue.push([inObj, (inToX!=null)?(inToX):(parseInt(inObj.style.left)), (inToY!=null)?(inToY):(parseInt(inObj.style.top))]);
}
      
function doSlide() {
  for (var i=0; i<slideQueue.length; i++) {
    slideQueue[i][0].style.left = (parseInt(slideQueue[i][0].style.left) + slideQueue[i][1]) / 2;
    slideQueue[i][0].style.top  = (parseInt(slideQueue[i][0].style.top) + slideQueue[i][2]) / 2;
          
    if (Math.abs(parseInt(slideQueue[i][0].style.left) - slideQueue[i][1])<=1 && Math.abs(parseInt(slideQueue[i][0].style.top) - slideQueue[i][2])<=1) {
      slideQueue[i][0].style.top  = slideQueue[i][2];
      slideQueue[i][0].style.left = slideQueue[i][1];
      slideQueue.splice(i, 1);
    }
  }
  self.setTimeout("doSlide()", 15);
}


// DOM MANIPULATION -----------------------------------------------------------------
function findFirstChild(inObj) {
  var fChild = inObj.firstChild;
  while (fChild && fChild.nodeType == 3) {
    fChild = fChild.nextSibling;
  }
  return fChild;
}

function findNextSibling(inObj) {
  var nSibling = inObj.nextSibling;
  while (nSibling && nSibling.nodeType == 3) {
    nSibling = nSibling.nextSibling;
  }
  return nSibling;
}
      
function findPreviousSibling(inObj) {
  var pSibling = inObj.previousSibling;
  while (pSibling && pSibling.nodeType == 3) {
    pSibling = pSibling.previousSibling;
  }
  return pSibling;
}

// DYNAMIC DATA LOADING -------------------------------------------------------------
var serverPresent  = location.hostname;
var requestQueue   = [];
var request        = null;
var requestTarget  = 0;
var requestRunning = false;
function distributeContent() {
  if (request.readyState == 4) {
    if (request.status == 200 || !serverPresent) {
      
      // Javascript transfer hack
      if (request.responseText.indexOf("javascript:") === 0) {
        eval(request.responseText.substr(11));
      } else {
        if (requestTarget) {
          var targetObj = document.getElementById(requestTarget);
          targetObj.innerHTML = request.responseText;
          //targetObj.scrollIntoView();
        }
      }
      // Reset request state
      requestRunning = false;
      loadContent();
    }
  }
}

function loadContent() {

  // Check wheter a request is running
  if (!requestRunning && requestQueue.length) {

    // Lock requesting
    requestRunning = true;
  
    // Get last queued request
    var thisRequest = requestQueue.shift();
    var inUrl       = thisRequest[1];
    var inTargetId  = thisRequest[0];
    var inForm      = thisRequest[2];
    var paramString = "";
    
    // Check if there's a form to post
    if (formObj = document.getElementById(inForm)) {
      for (var i=0; i<formObj.elements.length; i++) {
        switch (formObj.elements[i].tagName) {
          case "select": // Multiple select is not implemented
          case "SELECT":
            var selectedIndex = formObj.elements[i].options.selectedIndex;
            var selectedValue = formObj.elements[i].options[selectedIndex].value;
            paramString += "&" + formObj.elements[i].name + "=" + encodeURIComponent(selectedValue);
            break;
            
          case "input":
          case "INPUT":
            switch (formObj.elements[i].type) {
                
              case "checkbox":
              case "radio":
                if (formObj.elements[i].checked) {
                  paramString += "&" + formObj.elements[i].name + "=" + encodeURIComponent(formObj.elements[i].value);
                }
                break;
                
              case "file":
                break;
                
              case "text":
              case "hidden":
              case "submit":
              default:
                paramString += "&" + formObj.elements[i].name + "=" + encodeURIComponent(formObj.elements[i].value);
                break;
            }
            break;
            
          case "textarea":
          case "TEXTAREA":
          default:
            paramString += "&" + formObj.elements[i].name + "=" + encodeURIComponent(formObj.elements[i].value);
            break;
        }
      }
    }
    
    // Load last queue
    requestTarget = inTargetId;
    if (window.XMLHttpRequest) {
      request = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
      request = new ActiveXObject("Microsoft.XMLHTTP");
    }
    
    request.open("POST", inUrl, true);
    request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    request.onreadystatechange = distributeContent;
    request.send(paramString);
  }
}

function queueContent(inTargetId, inUrl, inForm) {
  // Queue the request
  requestQueue.push([inTargetId, inUrl, inForm]);
  
  // Load last queue
  loadContent();
}

