/*************
Roboshrub Inc.
*************/

window.onresize = function() {
  if (g("maxBox").getAttribute("data-state") == "max" && g("minBox").getAttribute("data-state") != "min") {
    g("maxBox").setAttribute("data-state", "min");
    toggleMaximize();
  }
};
document.onsubmit = function() {
  return false;
};

function swap(arr, a, b) {
  var temp = arr[b];
  arr[b] = arr[a];
  arr[a] = temp;
}

function getGenerator() {
  return "Project Velt 2.8";
}
var veltIcon = "data:image/gif;base64,R0lGODlhEAAQAKIFAAAAAAAAhAAA/wBjAELGQgAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFCgAFACwAAAAAEAAQAAADQ0gEoOxtPUWrbWOwvHV0ljUsYCCcaECMz4i+AkmOKnEq6icrN8WClJ6ChakIZcVgjKLTHX+70Eqy8nAAV6B0O+lGGAkAOw==";

window.onload = function() {
  
  if (window.widget != null && data.get("Velt_2_maxScreen") == "1") {
    toggleMaximize();
  }
  
  // Gets IFRAME ready for Velt formatting
  g("contentFrame").contentDocument.designMode = "on";
  var tempLayoutStyle = document.createElement("style");
  tempLayoutStyle.type = "text/css";
  tempLayoutStyle.appendChild(document.createTextNode(layoutCSS));

  var t = g("contentFrame").contentWindow.document.getElementsByTagName("head")[0];
  if (t == null) {
    t = g("contentFrame").contentWindow.document.createElement("head");
    g("contentFrame").contentWindow.document.getElementsByTagName("html")[0].insertBefore(t, g("contentFrame").contentWindow.document.body);
  }
  t.appendChild(tempLayoutStyle);
  
  // Skin
  buildTransitionList();
  
  if (data.get("Velt_2_skinGlobal") != '') {
    loadSkinGlobal();
    loadSkinText();
    loadUserProfiles();
  }
  else {
    resetSkinBack();
    resetSkinGlobal();
    resetSkinText();
  }
  
  // Tooltips
  var inputs = document.getElementsByTagName("input");
  for (i=0; i < inputs.length; i++) {
    if (inputs[i].type == "image") {
      inputs[i].onmouseover = function() {
        alterSlogan(this);
      };
      inputs[i].onmouseout = function() {
        g("sloganArea").style.display = "none";
      };
    }
  }
  
  // Buttons activation
  g("contentFrame").contentDocument.addEventListener("keyup", buttonState, false);
  g("contentFrame").contentDocument.addEventListener("click", buttonState, false);
  buttonState();
  
  // Build S5 drop downs
  buildS5DropDown("editFileSelectTL", "editFileTL", 3);
  buildS5DropDown("editFileSelectTR", "editFileTR", 7);
  buildS5DropDown("editFileSelectBL", "editFileBL", 2);
  buildS5DropDown("editFileSelectBR", "editFileBR", 0);
  
  // Hide/show based on file type
  formtags = g("formatMenu").getElementsByTagName("input");
  showVelt = [formtags[1], formtags[5], formtags[6], formtags[7], g("exportWindow").getElementsByTagName("input")[5], g("vFirstSlide")];
  showS5 = [formtags[2], formtags[3], g("S5headingButton"), g("exportWindow").getElementsByTagName("input")[6], g("s5ExportURL"), g("s5ExportCustom"), g("exportWindow").getElementsByTagName("input")[7]];
  
  // Submit checking for save menu
  g("saveInput").onkeydown = checkSaveSubmit;
  g("passEnter").onkeydown = checkSaveSubmit;
  
  g("sSearchText").onkeyup = updateSearchBox;
  
  resizeWidget();
  
  // Prompt for last session
  if (g("eCP").checked && data.get("Velt_2_crashProtection") != "") {
    g("crashProtect").style.display = "block";
    g("mainbody").style.display = "none";
    if (window.widget != null) {
	  window.resizeTo(440, 175);
	}
    clearInterval(cpTimer);
  }
  // New file
  else {
    newFile(g("defaultFileType").selectedIndex);
  }
  
  g("mainbody").style.visibility = "visible"; // Don't show the window until after skinning
  
  // Fixes margins when not in widget form
  if (window.widget == null) {
    document.getElementsByTagName("html")[0].style.backgroundImage = "url(" + backSwatches[45] + ")";
    g("maxBox").setAttribute("data-state", "min");
    toggleMaximize();
  }
  
  // Webkit particulars
  if (/webkit/i.test(navigator.userAgent) && (/AppleWebKit\/525/.test(navigator.userAgent))) {
    for(i=0; i<document.getElementsByTagName("input").length; i++) {
      if (document.getElementsByTagName("input")[i].type == "range") {
        document.getElementsByTagName("input")[i].type = "text";
      }
    }
  }
};

// Returns the element
function g(a) {
  return document.getElementById(a);
}

var openedPrompt = null;	// Currently opened prompt.
var openedWindow = null;	// Currently opened window.
var openedButton = null;	// Button ID for current prompt.

function closeAllPrompts() {
  if (openedPrompt == null) {
    return;
  }
  g(openedPrompt).style.display = "none";
  g("sidebar").style.display = "none";
  openedPrompt = null;
}

function togglePrompt(promptID, ButtonID) {
  // Close a prompt that is already open.
  if (openedPrompt == promptID) {
    closeAllWindows();
    return;
  }
  
  closeAllPrompts();
  closeAllWindows();
  
  // Fade new button
  openedButton = ButtonID;
  if (openedButton) {
    g(openedButton).style.opacity = 1;
    g(openedButton).style.borderStyle = "inset";
  }
  openedPrompt = promptID;
  g("sidebar").style.display = "block";
  g(promptID).style.display = "block";
}

function closeAllWindows() {
  // Fade old button
  if (openedButton) {
    g(openedButton).style.opacity = 0.75;
    g(openedButton).style.borderStyle = "outset";
  }
  
  closeAllPrompts();
  if (openedWindow == null) {
    return;
  }
  g(openedWindow).style.display = "none";
  openedWindow = null;
  g("sidebar").style.display = "none";
  
  var t = HTMLToggle ? g("contentFrame") : g("textWindow");
  t.style.display = "block";
  
  if ((activeFileType == 2 || activeFileType == 3) && HTMLToggle) {
    getElementsByClassName("s5Overlay")[0].style.display = "block";
    getElementsByClassName("s5Overlay")[1].style.display = "block";
  }
}

function showWindow(windowID) {
  if (openedWindow) {
    g(openedWindow).style.display = "none";
  }
  g("contentFrame").style.display = "none";
  g("textWindow").style.display = "none";

  // Always hide the search bar.
  g("searchBar").style.display = "none";
  g("sText").style.borderStyle = "outset";
  g("sText").style.opacity = 0.75;
  
  g(windowID).style.display="block";
  openedWindow=windowID;
  
  getElementsByClassName("s5Overlay")[0].style.display = "none";
  getElementsByClassName("s5Overlay")[1].style.display = "none";
}

var holdSlogan = "";
function alterSlogan(a) {
  holdSlogan = g("sloganArea").innerHTML;
  g("sloganArea").innerHTML = a.alt;
  g("sloganArea").style.display = "inline";
}

// Returns array of all elements with specified class name.
function getElementsByClassName(c_name) {
  if (document.getElementsByClassName) {
    return document.getElementsByClassName(c_name);
  }
  var temp = document.getElementsByTagName('*');
  var found = [];
  for (i=0; i<temp.length; i++) {
    var c_class = temp[i].className.split(" ");
    for (k=0; k<c_class.length; k++) {
      if (c_class[k] == c_name) {
        found.push(temp[i]);
        break;
      }
    }
  }
  return found;
}

// Toggles HTML
var HTMLToggle = true;
function toggleHTML() {
  var HTMLshow = ["fLB", "fBQ", "fCO", "rText", "sText"];
  var HTMLhide = ["fRF", "fIN", "fOU", "undoB", "redoB", "gColorButton", "gHighlightButton", "rLinkButton"];
  
  if (HTMLToggle) {
    g("contentFrame").style.display = "none";
    g("textWindow").style.display = "block";
    g("textWindow").value = g("contentFrame").contentWindow.document.body.innerHTML;
    getElementsByClassName("s5Overlay")[0].style.display = "none";
    getElementsByClassName("s5Overlay")[1].style.display = "none";
	
	// HTML specific buttons
	for (i=0; i < HTMLshow.length; i++) {
	  g(HTMLshow[i]).style.display = "inline";
	}
	for (i=0; i < HTMLhide.length; i++) {
	  g(HTMLhide[i]).style.display = "none";
	}
  }
  else {
    g("textWindow").style.display = "none";
    g("contentFrame").style.display = "block";
    g("contentFrame").contentWindow.document.body.innerHTML = g("textWindow").value;
    if (activeFileType == 2 || activeFileType == 3) {
      getElementsByClassName("s5Overlay")[0].style.display = "block";
      getElementsByClassName("s5Overlay")[1].style.display = "block";
    }
	
	// Rich Text specific buttons
	for (i=0; i < HTMLshow.length; i++) {
	  g(HTMLshow[i]).style.display = "none";
	}
	for (i=0; i < HTMLhide.length; i++) {
	  g(HTMLhide[i]).style.display = "inline";
	}
  }
  HTMLToggle = !HTMLToggle;
  g("fontSize").selectedIndex = 0;
  g("fontNames").selectedIndex = 0;
  g("searchBar").style.display = "none";
  g("sText").style.borderStyle = "outset";
  g("sText").style.opacity = 0.75;
  buttonState();
  closeAllWindows();
}

// Opera needs a little prod sometimes to repaint the screen right...
function forceRepaint() {
  if (HTMLToggle) {
    g("contentFrame").style.visibility = "hidden";
    g("contentFrame").style.visibility = "visible";
  }
}

// Creates a drop-down select for CSS units.
function buildUnits(selectID, defaultUnit) {
  var units = ["px", "pt", "pc", "cm", "mm", "in", "em", "ex", "%"];
  var finalString = "<select id='" + selectID + "'>";
  for (i=0; i < units.length; i++) {
    finalString += "<option";
    if (units[i] == defaultUnit) {
      finalString += " selected='selected'";
    }
    finalString += ">" + units[i] + "</option>";
  }
  finalString += "</select>";
  document.write(finalString);
}

// Creates a drop-down select for CSS border styles.
function buildStyles(selectID, defaultStyle) {
  var styles = ["Solid", "Double", "Dotted", "Dashed", "Groove", "Ridge", "Inset", "Outset"];
  var finalString = "<select id='" + selectID + "'>";
  for (i=0; i<styles.length; i++) {
    finalString += "<option value='" + styles[i].toLowerCase() + "'";
    if (styles[i] == defaultStyle) {
      finalString += " selected='selected'";
    }
    finalString += ">" + styles[i] + "</option>";
  }
  finalString += "</select>";
  document.write(finalString);
}

// Color theme select
function buildColorSelect(selectID, defaultStyle, labelText) {
  var finalString = "<select id='" + selectID + "'>";
  for (i=0; i < tableColors.length; i++) {
    finalString += "<option style='color:" + tableColors[i][5] + ";background:" + tableColors[i][1] + ";'";
    if (tableColors[i][7] == defaultStyle) {
      finalString += " selected='selected'";
    }
    finalString += ">" + tableColors[i][7] + "</option>";
  }
  finalString += "</select> <label for='" + selectID + "'>" + labelText + "</label>";
  document.write(finalString);
}

// Format-Layout preview image list
function buildLayoutGrid(selectedIndex) {
  for (i=0; i < 20; i++) {
    g("layoutGrid").innerHTML += "<label><input type='radio' name='layoutButton'" + ((i == selectedIndex) ? " checked='checked'" : "") + "><img src='layout_img/layout" + i + ".png' alt='Layout Sample'></label>";
  }
  g("layoutGrid").innerHTML += "<div><label><input type='radio' name='layoutButton'> Logbook Date/Time</label></div>";
  g("layoutGrid").innerHTML += "<div><label><input type='radio' name='layoutButton'> Custom Content</label><textarea id='layoutCustom' rows='6' cols='30' style='width:230px;height:120px;'></textarea><input type='button' class='miniButton' value='Get Current Slide' onclick='getCurrentSlideData();'></div>";
}

// Dialog colors for global configuration box
function buildSkinThemer() {
  var temp = "<select id='skinTheme'>";
  for (i=0; i < tableColors.length; i++) {
    if (tableColors[i][8] != -1) {
      temp += "<option value='" + i + "' style='color:" + tableColors[i][5] + ";background:" + tableColors[i][1] + ";'>" + tableColors[i][7] + "</option>";
    }
  }
  temp += "</select><label for='skinTheme'>Dialog Theme</label>";
  g("skinThemeInsert").innerHTML = temp;
}

// Edit file info selects
function buildS5DropDown(selectID, parentID, defaultIndex) {
  var metas = ["None", "Slideshow Title", "Author", "Company", "Logo", "E-Mail", "Date", "Slogan", "Venue", "Website"];
  
  var selectIDs = ["editFileSelectTL", "editFileSelectTR", "editFileSelectBL", "editFileSelectBR"];
  var temp = "<select id='" + selectID + "' onchange='changeS5DropDown(this);'>";
  
  for (i=0; i < metas.length; i++) {
    temp += "<option";
    temp += ( i== defaultIndex) ? " selected='selected'" : '';
    temp += ">" + metas[i] + "</option>";
  }
  temp += "</select>";
  g(parentID).innerHTML = temp;
}

// Make sure the same meta data isn't used for more than one corner (messes up ID)
function changeS5DropDown(selectID) {
  var selectIDs = ["editFileSelectTL", "editFileSelectTR", "editFileSelectBL", "editFileSelectBR"];
  for (i=0; i < selectIDs.length; i++) {
    if ((g(selectIDs[i]).selectedIndex == selectID.selectedIndex) && (selectIDs[i] != selectID.id)) {
	  g(selectIDs[i]).selectedIndex=0;
	}
  }
  updateOverlay();
}

// Applies all meta data to the overlay.
function updateOverlay() {
  var selectIDs = [getS5CornerContents("editFileSelectTL"), getS5CornerContents("editFileSelectTR"), getS5CornerContents("editFileSelectBL"), getS5CornerContents("editFileSelectBR")];
  g("over1").innerHTML = selectIDs[0];
  g("over2").innerHTML = selectIDs[1];
  g("over3").innerHTML = selectIDs[2];
  g("over4").innerHTML = selectIDs[3];
}

// Minimize/Maximize toggle.
function minimize() {
  g("mainbody").style.display = "none";
  g("minBody").style.display = "block";
  g("minBox").setAttribute("data-state", "min");
  window.resizeTo(440, 90);
}
function maximize() {
  g("minBody").style.display = "none";
  g("mainbody").style.display = "block";
  g("minBox").setAttribute("data-state", "max");
  resizeWidget();
}
function toggleMaximize() {
  
  if (window.widget != null) {
    if (g("maxBox").getAttribute("data-state") == "min") {
      window.moveTo(0, 0);
      window.resizeTo(screen.availWidth, screen.availHeight);
      data.set("Velt_2_maxScreen", "1");
    }
    else {
      // No slide list
      if (g("slideFloater").style.display != "block") {
        window.resizeTo(720, 590);
      }
      // Yes slide list
      else {
        window.resizeTo(880, 590);
      }
      window.moveTo((screen.availWidth - window.innerWidth) / 2, (screen.availHeight - window.innerHeight) / 2);
      data.set("Velt_2_maxScreen", "0");
    }
  }
  
  getElementsByClassName("s5Overlay")[1].style.top = (window.innerHeight - 270) + "px";
  getElementsByClassName("s5Overlay")[0].style.width = getElementsByClassName("s5Overlay")[1].style.width = !slDisplay ? (window.innerWidth - 260) + "px" : (window.innerWidth - 110) + "px";
  
  // Maximize
  if (g("maxBox").getAttribute("data-state") == "min") {
    var slDisplay = g("slideFloater").style.display != "block";
    g("maxBox").setAttribute("data-state", "max");
    g("maxBox").setAttribute("alt", "Unmaximize");
    g("maxBox").setAttribute("title", "Unmaximize");
    g("maxBox").src = navigator.platform.indexOf("Win") == -1 ? "images\/unmax.gif" : "images\/unmax_win.gif";
    g("mainbody").style.marginTop = 0;
    g("mainbody").getElementsByTagName("fieldset")[0].style.margin = 0;
    g("mainWin").style.margin = "0 0 0 3px";
    g("slideFloater").style.left = (window.innerWidth - 180) + "px";
    g("sidebar").style.marginLeft = !slDisplay ? (window.innerWidth - 475) + "px" : (window.innerWidth - 325) + "px";
    
    // Width
    g("mainbody").getElementsByTagName("fieldset")[0].style.width = !slDisplay ? (window.innerWidth - 200) + "px" : (window.innerWidth - 50) + "px";
    g("sidebar-container").style.width = !slDisplay ? (window.innerWidth - 225) + "px" : (window.innerWidth - 75) + "px";
    g("contentFrame").style.width = !slDisplay ? (window.innerWidth - 225) + "px" : (window.innerWidth - 75) + "px";
    g("textWindow").style.width = !slDisplay ? (window.innerWidth - 225) + "px" : (window.innerWidth - 75) + "px";
    
    // Height
    g("mainbody").getElementsByTagName("fieldset")[0].style.height = (window.innerHeight - 50) + "px";
    g("contentFrame").style.height = (window.innerHeight - 250) + "px";
    g("textWindow").style.height = (window.innerHeight - 250) + "px";
    g("sidebar-container").style.height = (window.innerHeight - 250) + "px";
    g("sidebar").style.height = (window.innerHeight - 250) + "px";
    g("slideFloater").style.height = (window.innerHeight - 250) + "px";
    g("slideList").style.height = (window.innerHeight - 450) + "px";
    
    var tmp = getElementsByClassName("dialogWindow");
    for (i=0; i < tmp.length; i++) {
      tmp[i].style.width = !slDisplay ? (window.innerWidth - 475) + "px" : (window.innerWidth - 325) + "px";
      tmp[i].style.height = (window.innerHeight - 250) + "px";
    }
  }
  
  // Unmaximize
  else {
    g("maxBox").setAttribute("data-state", "min");
    g("maxBox").setAttribute("alt", "Maximize");
    g("maxBox").setAttribute("title", "Maximize");
    g("maxBox").src = "images\/max.gif";
    g("mainbody").style.marginTop = window.widget != null ? 0 : "2em";
    g("mainbody").getElementsByTagName("fieldset")[0].style.margin = window.widget != null ? 0 : "auto";
    g("mainWin").style.margin = "auto";
    g("slideFloater").style.left = "700px";
    g("sidebar").style.marginLeft = "400px";
    getElementsByClassName("s5Overlay")[1].style.top = "330px";
    
    // Width
    g("mainbody").getElementsByTagName("fieldset")[0].style.width = "680px";
    g("sidebar-container").style.width = "650px";
    g("contentFrame").style.width = "650px";
    g("textWindow").style.width = "650px";
    
    // Height
    g("mainbody").getElementsByTagName("fieldset")[0].style.height = "auto";
    g("contentFrame").style.height = "350px";
    g("textWindow").style.height = "350px";
    g("sidebar-container").style.height = "350px";
    g("sidebar").style.height = "350px";
    g("slideFloater").style.height = "350px";
    g("slideList").style.height = "10em";
    
    var tmp = getElementsByClassName("dialogWindow");
    for (i=0; i < tmp.length; i++) {
      tmp[i].style.width = "400px";
      tmp[i].style.height = "350px";
    }
  }
}

// Opens walkthrough
function about() {
  if (window.widget != null) {
    widget.openURL("http://www.databathing.com/Project_Velt/walkthrough.html");
  }
  else {
    window.open("http://www.databathing.com/Project_Velt/walkthrough.html");
  }
}

function resizeWidget() {
  if (window.widget != null) {
    // No slide list
    if (g("slideFloater").style.display!="block") {
      window.resizeTo(720, 590);
    }
    // Yes slide list
    else {
      window.resizeTo(880, 590);
    }
  }
  if (g("maxBox").getAttribute("data-state") == "max") {
    g("maxBox").setAttribute("data-state", "min");
    toggleMaximize();
  }
  if (g("maxBox").getAttribute("data-state") == "min") {
    g("maxBox").setAttribute("data-state", "max");
    toggleMaximize();
  }
}