/*************
Import-Export
**************/

// Opens the export window
function exportWindow() {
  g('expName').value=(activeFile<0)?'Untitled':data.get('Velt_2').split('|F|')[activeFile].split('|P|')[0];
  showWindow('exportWindow');
}

// Readies tableColors for exported slideshows
function getColorData() {
  var temp=[];
  for (i=0; i<tableColors.length; i++) {
    temp[i]="['"+tableColors[i].join("','")+"']";
  }
  return "["+temp.join(",")+"]";
}

// Gets only background swatches that have been used
function getUsedSwatches(bSwatches) {
  var tempSwatches=[];
  // Instantiates empty array
  for (i=0; i<backSwatches.length; i++) {
    tempSwatches[i]=0;
  }
  // Checks for backgrounds in use, saved them
  for (i=0; i<bSwatches.length; i++) {
    if (bSwatches[i][0]<backSwatches.length) {
      tempSwatches[bSwatches[i][0]]=backSwatches[bSwatches[i][0]];
    }
  }
  return "['"+tempSwatches.join("','")+"']";
}

// Export single slide
function exportSlide() {
  var finalString = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">";
  finalString += "<html xmlns=\"http://www.w3.org/1999/xhtml\"><head><title>" + g('expName').value + "</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />";
  finalString += "<link rel=\"icon\" href=\"" + veltIcon + "\" />";
  finalString += "<link type='application/x-opera-widgets' rel='alternate' href='http://widgets.opera.com/widget/6367/' title='" + getGenerator() + "' />";
  finalString += "<style type='text/css'>";
  
  // Template data
  finalString += "td {padding:3px;} .template {text-align:center;margin:auto;} .container ul, .container ol {text-align:left;margin:0px;} .layoutBox {padding:.5em;margin:.5em;font-size:100%;} .title {font-size:300%;font-family:Arial Black;} .subtitle {font-size:50%;} .cell {display:inline-block;vertical-align:text-top;width:90%;overflow:visible;} .half {width:42%;} .third {width:25%;} ";
  
  // Backgrounds
  var temp = [slideBacks[curSlide][2], slideBacks[curSlide][3], slideBacks[curSlide][4]];
  finalString+="html {background-color:rgb("+temp[0]+","+temp[1]+","+temp[2]+");";
  if (slideBacks[curSlide][0] < backSwatches.length) {
    finalString += "background-image:url(" + backSwatches[slideBacks[curSlide][0]] + ")";
  }
  else if (slideBacks[curSlide][0] == backSwatches.length) {
    finalString += "background-image:url(" + slideBacks[curSlide][1] + ");";
  }
  finalString += "}";
  
  // Links
  var linkTemp = ((slideLinks[curSlide][3] == '1' || slideLinks[curSlide][0] == '1') ? ' underline' : '');
  linkTemp += (slideLinks[curSlide][4] == '1' ? ' line-through' : '');
  linkTemp += (slideLinks[curSlide][5] == '1' ? ' overline' : '');
  if (linkTemp == '') {linkTemp = 'none';}
  
  finalString += "a:link {color:" + tableColors[parseInt(slideLinks[curSlide][2])][1] + " !important; text-decoration:" + ((slideLinks[curSlide][0] == "1") ? 'underline' : 'none') + ";}";
  finalString += "a:visited {color:" + tableColors[parseInt(slideLinks[curSlide][2])][2] + " !important;"
  finalString += "text-decoration:" + ((slideLinks[curSlide][0] == "1" || slideLinks[curSlide][1] == "1") ? (((slideLinks[curSlide][0] == "1") ? 'underline' : '') + ((slideLinks[curSlide][1] == "1") ? ' line-through' : '')) : 'none') + ";}";
  finalString += "a:hover {color:" + tableColors[parseInt(slideLinks[curSlide][2])][0] + " !important; text-decoration:" + linkTemp + ";}";
  
  // Lists
  var ols = ['decimal', 'decimal-leading-zero', 'lower-alpha', 'upper-alpha', 'lower-roman', 'upper-roman', 'lower-greek', 'hebrew', 'armenian', 'georgian', 'cjk-ideographic', 'hiragana', 'katakana', 'hiragana-iroha', 'katakana-iroha'];
  var uls = ['Disc', 'Circle', 'Square'];
  finalString += "ul {list-style-type:" + uls[slideLists[curSlide][1]] + "}";
  finalString += "ol {list-style-type:" + ols[slideLists[curSlide][0]] + "}";
  finalString += "ul {list-style-image:" + ((slideLists[curSlide][2]>0) ? "url(" + slideLists[curSlide][3] + ")" : "none") + "}";
  
  // Line Spacing
  var units = ['px', 'pt', 'pc', 'cm', 'mm', 'in', 'em', 'ex', '%'];
  var tempSpaces = ['100%', '150%', '200%', slideSpace[curSlide][1] + units[slideSpace[curSlide][2]]];
  finalString += "html {line-height:" + tempSpaces[slideSpace[curSlide][0]] + ";}";
  
  slideContent[curSlide] = HTMLToggle ? g('contentFrame').contentWindow.document.body.innerHTML : g('textWindow').value;
  var tempContent = slideContent[curSlide] + "";
  
  // Custom variables
  for (k=0; k<customFields.length; k++) {
    tempContent = tempContent.replace(new RegExp(stripRegExp(customFields[k][0]), 'g'), customFields[k][1]);
  }

  finalString += "</style></head><body>" + tempContent + "</body></html>";
  
  if (window.widget != null) {
    widget.openURL("data:text/html," + encodeURIComponent(finalString));
  }
  else {
    window.open("data:text/html," + encodeURIComponent(finalString));
  }
}

// Export whole slideshow
function exportFile(runTimeData, startingTheme) {
  stripReserved('expName');
  
  var t = parseInt(runTimeData.split('|P|')[11]);
  
  // S5 Slideshow export
  if (t == 2 || t == 3) {
    exportS5(runTimeData, startingTheme);
    return;
  }
  
  t = runTimeData.split('|P|')[5].split('|S|');
  var tempBacks = [];
  for (i=0; i < t.length; i++) {
    tempBacks.push(t[i].split('|N|'));
  }

  var tempTrans = "";
  for (i in slideTransitions) {
    tempTrans += i + ": " + slideTransitions[i] + ",\n";
  }
  tempTrans = tempTrans.substring(0, tempTrans.length-2);
  tempTrans = tempTrans.replace(/function \(/gi, "function(");
  tempTrans = tempTrans.replace("smooth: 10", "smooth: 6");
  tempTrans = tempTrans.replace("#000", "'#000'");
  tempTrans = tempTrans.replace(/g\(('|")transition-preview-button('|")\).disabled = (false|true);/gi, "");
  tempTrans = tempTrans.replace("this.dir = false;", "this.dir = false;changeSlide(); /* Now go to new slide */");
  
  var s = "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>\n<html xmlns='http://www.w3.org/1999/xhtml'>\n<head>\n  <title>$TITLE</title>\n  <meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />\n  <link type='image/x-icon' rel='icon' href='" + veltIcon + "' />\n  <link type='application/x-opera-widgets' rel='alternate' href='http://widgets.opera.com/widget/6367/' title='" + getGenerator() + "' />\n  <style type='text/css' id='slideStyler'></style>\n  <style type='text/css' id='slideUserStyler'></style>\n  <style type='text/css'>\n  div#welcomeScreen {\n    text-align:center;\n    margin:auto;\n    padding-top:3em;\n  }\n  div#slideBox {\n    position:relative;\n    margin:auto;\n    border:3px ridge #000;\n    width:400px;\n    height:10em;\n    -moz-border-radius-bottomright:20px;\n    -webkit-border-bottom-right-radius:20px;\n  }\n  div#slideBox textarea {\n    margin:.3em auto;\n    width:200px;\n    height:75px;\n  }\n  div#slideList {\n    float:left;\n    width:90px;\n    height:10em;\n    overflow:auto;\n    border:ridge #000;\n    border-width:0 3px 0 0;\n    text-align:left;\n  }\n  div#slideList div {\n    padding:.1em .1em .1em .2em;\n    cursor:pointer;\n  }\n  div#importContainer, div#importContainer + div {\n    width:300px;\n    text-align:center;\n    float:right;\n    margin-top:.5em;\n  }\n  div#importContainer + div {\n    margin-top:.7em;\n  }\n  div#mainTitle {\n    margin:.5em auto;\n  }\n  input[type=button] {\n    font-weight:bold;\n    cursor:pointer;\n    opacity:.75;\n    -ms-filter:'alpha(opacity=75)';\n  }\n  input[type=button]:hover {\n    opacity:1;\n    -ms-filter:'alpha(opacity=100)';\n  }\n  div.slide, div.notes, div#nav {\n    display:none;\n  }\n  div.notes {\n    position:fixed;\n    right:0;\n    bottom:0;\n    border-top:3px ridge;\n    border-left:3px ridge;\n    padding:.5em;\n    width:50%;\n    max-height:10em;\n    overflow:auto;\n    line-height:100% !important;\n  }\n  div#nav {\n    position:fixed;\n    left:0;\n    bottom:0;\n    border-top:3px ridge;\n    border-right:3px ridge;\n    padding:.5em;\n    text-align:center;\n    opacity:0;\n    -ms-filter:'alpha(opacity=0)';\n    -moz-border-radius-topright:10px;\n    -webkit-border-top-right-radius:10px;\n    line-height:100% !important;\n  }\n  div#nav:hover {\n    opacity:.95;\n    -ms-filter:'alpha(opacity=95)';\n  }\n  div#nav input {\n    margin:.4em .25em;\n    vertical-align:middle;\n  }\n  td {\n    padding:3px;\n  }\n  div.template {\n    text-align:center;\n    margin:auto;\n    padding-top:3em;\n  }\n  div.template div.container ul, div.template div.container ol {\n    text-align:left;\n    margin:0;\n  }\n  div.template div.layoutBox {\n    padding:.5em;\n    margin:.5em;\n    font-size:100%;\n  }\n  #welcomeScreen div.title, div.template div.title {\n    font-size:300%;\n    font-family:'Arial Black';\n  }\n  select#themeSelect {\n    position:absolute;\n    width:75px;\n    left:325px;\n  }\n  div.template div.subtitle {\n    font-size:50%;\n  }\n  div.template div.cell {\n    display:inline-block;\n    vertical-align:text-top;\n    width:90%;\n    overflow:visible;\n  }\n  div.template div.half {\n    width:42%;\n  }\n  div.template div.third {\n    width:25%;\n  }\n  div#transition-container {\n    display:none;\n    position:fixed;\n    top:0;\n    left:0;\n    padding:0;\n    margin:0;\n    width:100%;\n    height:100%;\n    z-index:100;\n    overflow:hidden;\n  }\n  div#transition-container div.transition-panel {\n    padding:0;\n    margin:0;\n    width:0;\n    height:0;\n    position:absolute;\n  }\n  @media print {\n    html {\n      background:none;\n    }\n    div.slide {\n      display:block !important;\n      page-break-before:always !important;\n    }\n    div#slideBox, div#nav {\n      display:none !important;\n    }\n    div#welcomeScreen {\n      display:block !important;\n      counter-reset:slideNum;\n    }\n    div.notes:before {\n      counter-increment:slideNum;\n      content:'Slide ' counter(slideNum) ' Notes:';\n      display:block;\n      font-weight:bold;\n      margin-top:2em;\n    }\n    div.notes:empty:before {\n      content:'Slide ' counter(slideNum) ' has no notes.';\n      font-style:italic;\n    }\n    div.notes {\n      display:block !important;\n      width:100%;\n      position:relative;\n      border:0;\n      border-bottom:3px #000 dashed;\n    }\n  }\n  </style>\n  <!--[if lte IE 8]>\n  <style>\n  @media screen {\n    div.notes, #navNotes, #themeSelect {\n      display:none !important;\n    }\n  }\n  </style>\n  <![endif]-->\n  <script type='text/javascript'>\n  /*<![CDATA[*/\n  \n  var tableColors = " + getColorData() + ";\n  var backSwatches = " + getUsedSwatches(tempBacks) + ";\n  var runTimeData = '" + escape(runTimeData) + "';\n  var curSlide = -1;\n  var curNotes = -1;\n  var sT = " + startingTheme + ";\n  var showTitle;\n  var slideContent = [];\n  var slideNotes = [];\n  var slideBacks = [];\n  var slideLinks = [];\n  var slideLists = [];\n  var slideSpace = [];\n  var slideTrans = [];\n  var slideTiming = [];\n  var customFields = [];\n  var inTransit = false;\n  var advanceTimer = null;\n  \n  function g(a) {\n    return document.getElementById(a);\n  }\n  \n  function getElementsByClassName(c_name) {\n    if (document.getElementsByClassName) {\n      return document.getElementsByClassName(c_name);\n    }\n    var temp = document.getElementsByTagName('*');\n    var found = [];\n    for (var i=0; i<temp.length; i++) {\n      var c_class = temp[i].className.split(' ');\n      for (var k=0; k<c_class.length; k++) {\n        if (c_class[k] == c_name) {\n          found.push(temp[i]);\n          break;\n        }\n      }\n    }\n    return found;\n  }\n  \n  function buildThemeSelect() {\n    var s = '';\n    for (var i=0; i < tableColors.length; i++) {\n      s += '<option style=\\'color:' + tableColors[i][5] + ';background:' + tableColors[i][1] + ';\\'>' + tableColors[i][7] + '</option>';\n    }\n    s += '';\n    \n    g('themeSelect').innerHTML = s;\n    g('themeSelect').onchange = function() {\n      sT = this.selectedIndex;\n      slideListColors();\n    };\n  }\n  \n  function slideListColors() {\n    slideTransitions.color = tableColors[sT][1];\n    g('slideList').style.backgroundColor = tableColors[sT][0];\n    var options = g('slideList').getElementsByTagName('div');\n    for (var i=0; i<options.length; i++) {\n      options[i].style.color = (i%2 != 0) ? tableColors[sT][5] : tableColors[sT][4];\n      options[i].style.backgroundColor = (i%2 != 0) ? tableColors[sT][1] : tableColors[sT][0];\n    }\n    var temp = '';\n    temp += 'div#slideList, div#slideBox {border-color:' + tableColors[sT][4] + ';}';\n    temp += 'div#slideList div:hover, div#slideBox {background-color:' + tableColors[sT][4] + ' !important;color:' + tableColors[sT][0] + ' !important;}';\n    temp += 'div.notes, div#nav {background-color:' + tableColors[sT][0] + ';color:' + tableColors[sT][4] + ';border-color:' + tableColors[sT][4] + ';}';\n    temp += 'html {background-color:' + tableColors[sT][2] + ';}';\n    temp += 'div#mainTitle {color:' + tableColors[sT][6] + ';}';\n    g('themeSelect').selectedIndex = sT;\n    \n    /*@cc_on\n    document.body.innerHTML += '<style>' + temp + '</style>';\n    return;\n    @*/\n    \n    if (g('slideStyler').hasChildNodes()) {\n      g('slideStyler').removeChild(g('slideStyler').childNodes[0]);\n    }\n    g('slideStyler').appendChild(document.createTextNode(temp));\n  }\n  \n  window.onload = function() {\n    g('importData').value = unescape(runTimeData);\n    var temp = unescape(runTimeData).split('|P|');\n    showTitle = temp[0];\n    document.title = showTitle;\n    g('mainTitle').innerHTML = showTitle;\n    slideContent = temp[3].split('|S|');\n    slideNotes = temp[4].split('|S|');\n    slideBacks = temp[5].split('|S|');\n    slideLinks = temp[6].split('|S|');\n    slideLists = temp[7].split('|S|');\n    slideSpace = temp[8].split('|S|');\n    customFields = temp[10].split('|S|');\n    slideTrans = temp[12].split('|S|');\n    slideTiming = temp[13].split('|S|');\n    \n    for (var i=0; i < slideContent.length; i++) {\n      slideBacks[i] = slideBacks[i].split('|N|');\n      slideLinks[i] = slideLinks[i].split('|N|');\n      slideLists[i] = slideLists[i].split('|N|');\n      slideSpace[i] = slideSpace[i].split('|N|');\n      slideTiming[i] = slideTiming[i].split('|N|');\n      slideTiming[i][0] = slideTiming[i][0] == '1';\n      slideTiming[i][1] = parseInt(slideTiming[i][1]);\n      slideTiming[i][2] = parseInt(slideTiming[i][2]);\n    }\n    if (customFields[0] != '') {\n      for (i=0; i < customFields.length; i++) {\n        customFields[i] = customFields[i].split('|N|');\n      }\n    }\n    g('totalSlide').innerHTML = slideContent.length;\n    for (i=0; i < slideContent.length; i++) {\n      if (customFields[0] != '') {\n        for (var k=0; k < customFields.length; k++) {\n          slideContent[i] = slideContent[i].replace(new RegExp(stripRegExp(customFields[k][0]), 'g'), customFields[k][1]);\n        }\n      }\n      slideContent[i] = slideContent[i].replace(/\\$CSLIDE/g, i+1);\n      slideContent[i] = slideContent[i].replace(/\\$TITLE/g, g('mainTitle').innerHTML);\n      slideContent[i] = slideContent[i].replace(/\\$TSLIDE/g, slideContent.length);\n      slideContent[i] = slideContent[i].replace(/\\$NOTES/g, slideNotes[i]);\n      g('slideList').innerHTML += '<div onclick=\\'begin(' + (i+1) + ');\\'>Slide ' + (i+1) + '</div>';\n      var newSlide = document.createElement('div');\n      newSlide.className = 'slide';\n      newSlide.innerHTML = slideContent[i];\n      document.body.appendChild(newSlide);\n      var newNotes = document.createElement('div');\n      newNotes.className = 'notes';\n      newNotes.innerHTML = slideNotes[i];document.body.appendChild(newNotes);\n    }\n    \n    buildThemeSelect();\n    slideListColors();\n    " + ((g('exportFirstSlide').checked) ? "  curSlide = 0;\n    changeSlide();\n    g('nav').style.display = 'block';" : '') + "\n  };\n  \n  function checkKey(e) {\n    if (inTransit) {\n      return;\n    }\n    clearTimeout(advanceTimer);\n    q = (window.event) ? (event.keyCode ? event.keyCode : 36) : (e.keyCode ? e.keyCode : 36);\n    switch (q) {\n      case 35: curSlide = getElementsByClassName('slide').length-1; g('nav').style.display = 'block'; break;\n      case 36: g('nav').style.display = 'none'; curSlide = -1; break;\n      case 33:\n      case 37:\n      case 38: curSlide -= 1; g('nav').style.display = 'block'; break;\n      case 34:\n      case 39:\n      case 40:\n      case 32: curSlide += 1; g('nav').style.display = 'block'; break;\n      case 78: toggleNotes(); return;\n      default: return;\n    }\n    if (curSlide < 0) {\n      curSlide = -1;\n      turnOffSlides();\n      turnOffNotes();\n      document.title = showTitle;\n      if (g('slideUserStyler').hasChildNodes()) {\n        g('slideUserStyler').removeChild(g('slideUserStyler').childNodes[0]);\n      }\n      g('welcomeScreen').style.display = 'block';\n      g('nav').style.display = 'none';\n      g('navBack').disabled = true;\n      g('navHome').disabled = true;\n      g('navNext').disabled = true;\n      return;\n    }\n    if (curSlide > getElementsByClassName('slide').length-1) {\n      curSlide--;\n      return;\n    }\n    playTrans();\n  }\n  \n  function doubleClicker() {\n    curSlide++;\n    if (curSlide > getElementsByClassName('slide').length-1) {\n      curSlide--;\n      return;\n    }\n    g('nav').style.display = 'block';\n    playTrans();\n  }\n  \n  function stripRegExp(a) {\n    var reservedChars = ['\\\\', '[', ']', '$', '^', '.', '?', '*', '+', '(', ')'];\n    for (var n=0; n<reservedChars.length; n++) {\n      a = a.replace(new RegExp('\\\\' + reservedChars[n], 'g'), '\\\\' + reservedChars[n]);\n    }\n    return a;\n  }\n  \n  document.onkeydown = checkKey;\n  document.ondblclick = doubleClicker;\n\n  function begin(index) {\n    slideJump(index);\n    g('nav').style.display = 'block';\n  }\n  \n  function turnOffSlides() {\n    g('welcomeScreen').style.display = 'none';\n    var allSlides = getElementsByClassName('slide');\n    for (var i=0; i < allSlides.length; i++) {\n      allSlides[i].style.display = 'none';\n    }\n  }\n  \n  function slideJump(a) {\n    curSlide = a-1;\n    if (curSlide < 0) {\n      curSlide = 0;\n    }\n    if (curSlide > getElementsByClassName('slide').length-1) {\n      curSlide = getElementsByClassName('slide').length-1\n    }\n    playTrans();\n  }\n  \n  /* Loads slide[curSlide] */\n  function changeSlide() {\n    turnOffSlides();\n    turnOffNotes();\n    document.title = showTitle + ' - Slide ' + (curSlide + 1);\n    g('curSlide').innerHTML = (curSlide+1);\n    getElementsByClassName('slide')[curSlide].style.display = 'block';\n    g('navHome').disabled = false;\n    g('navBack').disabled = (curSlide <= 0);\n    g('navNext').disabled = (curSlide >= getElementsByClassName('slide').length-1);\n    var units = ['px', 'pt', 'pc', 'cm', 'mm', 'in', 'em', 'ex', '%'];\n    var lineHeightCSS = 'line-height:';\n    if (slideSpace[curSlide][0] == 0) {\n      lineHeightCSS += '100%;';\n    }\n    else if (slideSpace[curSlide][0] == 1) {\n      lineHeightCSS += '150%;';\n    }\n    else if (slideSpace[curSlide][0] == 2) {\n      lineHeightCSS += '200%;';\n    }\n    else {\n      lineHeightCSS += slideSpace[curSlide][1] + units[parseInt(slideSpace[curSlide][2])] + ';';\n    }\n    temp = 'html {background-color:rgb(' + slideBacks[curSlide][2] + ',' + slideBacks[curSlide][3] + ',' + slideBacks[curSlide][4] + ');' + lineHeightCSS;\n    if (slideBacks[curSlide][0] < backSwatches.length) {\n      temp += 'background-image:url(' + backSwatches[slideBacks[curSlide][0]] + ');';\n    }\n    else if (slideBacks[curSlide][0] == backSwatches.length) {\n      temp += 'background-image:url(' + slideBacks[curSlide][1] + ');';\n    }\n    temp += '}';\n    var finalString = '';\n    finalString += ((slideLinks[curSlide][3] == '1' || slideLinks[curSlide][0] == '1') ? ' underline' : '');\n    finalString += (slideLinks[curSlide][4] == '1' ? ' line-through' : '');\n    finalString += (slideLinks[curSlide][5] == '1' ? ' overline' : '');\n    if(finalString == '') {\n      finalString = 'none';\n    }\n    temp += 'a:link {color:' + tableColors[slideLinks[curSlide][2]][1] + ' !important; text-decoration:' + ((slideLinks[curSlide][0] == '1') ? 'underline' : 'none') + ';}';\n    temp += 'a:visited {color:' + tableColors[slideLinks[curSlide][2]][2] + ' !important;';\n    temp += 'text-decoration:' + ((slideLinks[curSlide][0] == '1' || slideLinks[curSlide][1] == '1') ? (((slideLinks[curSlide][0] == '1') ? 'underline' : '') + ((slideLinks[curSlide][1] == '1') ? ' line-through' : '')) : 'none') + ';}';\n    temp += 'a:hover {color:' + tableColors[slideLinks[curSlide][2]][0] + ' !important; text-decoration:' + finalString + ';}';\n    var ols = ['decimal', 'decimal-leading-zero', 'lower-alpha', 'upper-alpha', 'lower-roman', 'upper-roman', 'lower-greek', 'hebrew', 'armenian', 'georgian', 'cjk-ideographic', 'hiragana', 'katakana', 'hiragana-iroha', 'katakana-iroha'];\n    var uls = ['Disc', 'Circle', 'Square'];\n    temp += 'ol {list-style-type:' + ols[slideLists[curSlide][0]] + ';}';\n    temp += 'ul {list-style-type:' + uls[slideLists[curSlide][1]] + '; list-style-image:' + ((slideLists[curSlide][2] == '1') ? 'url('+slideLists[curSlide][3] + ')' : 'none') +';}';\n    \n    inTransit = false;\n    clearTimeout(advanceTimer);\n    if (slideTiming[curSlide][0] && curSlide < getElementsByClassName('slide').length-1) {\n      advanceTimer = setTimeout(function() {slideJump(curSlide+2);}, (slideTiming[curSlide][1] * 60 * 1000) + (slideTiming[curSlide][2] * 1000));\n    }\n    \n    /*@cc_on\n    document.body.innerHTML += '<style>' + temp + '</style>';\n    return;\n    @*/\n    \n    if (g('slideUserStyler').hasChildNodes()) {\n      g('slideUserStyler').removeChild(g('slideUserStyler').childNodes[0]);\n    }\n    g('slideUserStyler').appendChild(document.createTextNode(temp));\n  }\n  \n  function toggleNotes() {\n    if (curSlide < 0) {\n      return;\n    }\n    curNotes = curSlide;\n    var notes = getElementsByClassName('notes')[curSlide];\n    notes.style.display = (notes.style.display != 'block') ? 'block' : 'none';\n  }\n  \n  function turnOffNotes() {\n    if (curNotes < 0) {return;}\n    \n    var notes = getElementsByClassName('notes');\n    notes[curNotes].style.display = 'none';\n  }\n  \n  function playTrans() {\n    if (parseInt(slideTrans[curSlide]) != 0) {\n      inTransit = true;\n      clearTimeout(advanceTimer);\n    }\n    switch (parseInt(slideTrans[curSlide])) {\n      case 0: changeSlide(); break; /* No transition */\n      case 1: slideTransitions.left(); break;\n      case 2: slideTransitions.right(); break;\n      case 3: slideTransitions.up(); break;\n      case 4: slideTransitions.down(); break;\n      case 5: slideTransitions.rightDown(); break;\n      case 6: slideTransitions.rightUp(); break;\n      case 7: slideTransitions.leftUp(); break;\n      case 8: slideTransitions.leftDown(); break;\n      case 9: slideTransitions.vComb(); break;\n      case 10: slideTransitions.hComb(); break;\n      case 11: slideTransitions.vBlinds(); break;\n      case 12: slideTransitions.hBlinds(); break;\n      case 13: slideTransitions.vSplitIn(); break;\n      case 14: slideTransitions.hSplitIn(); break;\n      case 15: slideTransitions.hSplitOut(); break;\n      case 16: slideTransitions.vSplitOut(); break;\n      case 17: slideTransitions.box(); break;\n      case 18: slideTransitions.boxIn(); break;\n      case 19: slideTransitions.boxOut(); break;\n      case 20: slideTransitions.cornerIn(); break;\n      case 21: slideTransitions.cornerOut(); break;\n      case 22: slideTransitions.windmill(); break;\n      case 23: slideTransitions.fade(); break;\n    }\n  }\n  \n  var slideTransitions = {\n" + tempTrans + "\n  };\n  \n  /*]]>*/\n  </script>\n</head>\n<body>\n  <div id='transition-container'></div>\n  <div id='welcomeScreen'>\n    <div id='mainTitle' class='title'>$TITLE</div>\n    <div id='slideBox'>\n      <select id='themeSelect'>\n        <option></option>\n      </select>\n      <div id='slideList'></div>\n      <div id='importContainer'>\n          Import Data<br /><textarea id='importData' rows='3' cols='25' onfocus='this.select();'></textarea>\n      </div>\n      <div>\n        <input id='navBegin' type='button' value='Begin Slideshow' onclick='begin(1);' />\n      </div>\n    </div>\n  </div>\n  <div id='nav'>\n    <input id='navBack' type='button' value='&lt;&lt; Back' onclick='curSlide--; playTrans();' />\n    <span id='curSlide'></span> / <span id='totalSlide'></span>\n    <input id='navNext' type='button' value='Next &gt;&gt;' onclick='curSlide++; playTrans();' /><br />\n    <input id='navHome' type='button' value='Home' onclick='checkKey(36);' />\n    <input id='navNotes' type='button' value='Notes' onclick='toggleNotes();' />\n  </div>\n</body>\n</html>";
  
  if (window.widget != null) {
    widget.openURL("data:text/html,"+encodeURIComponent(s));
  }
  else {
    window.open("data:text/html,"+encodeURIComponent(s));
  }
}

// Import 2.0 files
function importFile() {
  g('importStatus').innerHTML = "ERROR: You need to use the import data on your slideshow's home screen.";
  var temp = [].concat(g('importData').value.split("|P|"));
  
  if (temp.length != 15 && temp.length != 12) {
    return; // File isn't valid
  }
  if (data.get("Velt_2").length > 1) {
    data.set("Velt_2", data.get("Velt_2") + "|F|" + temp.join("|P|"));
  }
  else {
    data.set("Velt_2", temp.join("|P|"));
  }
  g('importStatus').innerHTML = "<q>" + temp[0] + "<\/q> has been successfully imported.";
  g('importData').value = '';
}

// Compensates for idiosyncrasies of designMode, turns invalid HTML into valid XHTML
function toXHTML(s) {
  var HTMLtags = [
  
  /* Div */
  [/<div/gi, "<div"],
  [/<\/div>/gi, "</div>"],
  
  /* Span */
  [/<span/gi, "<span"],
  [/<\/span>/gi, "</span>"],
  
  /* Font tags! */
  [/<font face="/gi, "<span style=\"font-family:"],
  [/<font size="1/gi, "<span style=\"font-size:8pt"],
  [/<font size="2/gi, "<span style=\"font-size:10pt"],
  [/<font size="3/gi, "<span style=\"font-size:12pt"],
  [/<font size="4/gi, "<span style=\"font-size:14pt"],
  [/<font size="5/gi, "<span style=\"font-size:18pt"],
  [/<font size="6/gi, "<span style=\"font-size:24pt"],
  [/<font size="7/gi, "<span style=\"font-size:36pt"],
  [/<font color="/gi, "<span style=\"color:"],
  [/<\/font>/gi, "</span>"],
  
  /* Tables */
  [/<td/gi, "<td"],
  [/<\/td>/gi, "</td>"],
  [/<tr/gi, "<tr"],
  [/<\/tr>/gi, "</tr>"],
  [/<tbody/gi, "<tbody"],
  [/<\/tbody>/gi, "</tbody>"],
  [/<table/gi, "<table"],
  [/<\/table>/gi, "</table>"],
  
  /* Paragraphs */
  [/<p/gi, "<p"],
  [/<\/p>/gi, "</p>"],
  
  /* Breaks */
  [/<br>/gi, "<br />"],
  
  /* Links */
  [/<a /gi, "<a "],
  [/<\/a>/gi, "</a>"],
  
  /* Strong */
  [/<strong>/gi, "<strong>"],
  [/<\/strong>/gi, "</strong>"],
  
  /* Emphasis */
  [/<em>/gi, "<em>"],
  [/<\/em>/gi, "</em>"],
  
  /* Bold */
  [/<b>/gi, "<b>"],
  [/<\/b>/gi, "</b>"],
  
  /* Italic */
  [/<i>/gi, "<i>"],
  [/<\/i>/gi, "</i>"],
  
  /* Underline */
  [/<u>/gi, "<span style=\"text-decoration:underline;\">"],
  [/<\/u>/gi, "</span>"],
  
  /* Superscript */
  [/<sup>/gi, "<sup>"],
  [/<\/sup>/gi, "</sup>"],
  
  /* Subscript */
  [/<sub>/gi, "<sub>"],
  [/<\/sub>/gi, "</sub>"],
  
  /* Strike */
  [/<strike>/gi, "<span style=\"text-decoration:line-through;\">"],
  [/<\/strike>/gi, "</span>"],
  
  /* Blockquote */
  [/<blockquote>/gi, "<blockquote>"],
  [/<\/blockquote>/gi, "</blockquote>"],
  
  /* Headers */
  [/<h/gi, "<h"],
  [/<\/h/gi, "</h"],
  
  /* Preformatted */
  [/<pre/gi, "<pre"],
  [/<\/pre>/gi, "</pre>"],
  
  /* Address */
  [/<address/gi, "<address"],
  [/<\/address>/gi, "</address>"],
  
  /* Lists */
  [/<ol>/gi, "<ol>"],
  [/<\/ol>/gi, "</ol>"],
  [/<ul>/gi, "<ul>"],
  [/<\/ul>/gi, "</ul>"],
  [/<li/gi, "<li"],
  [/<\/li>/gi, "</li>"],
  
  /* Iframe */
  [/<iframe src="/gi, "<object type=\"text/html\" data=\""],
  [/<\/iframe>/gi, "</object>"],
  
  /* Images */
  [/<img/gi, "<img"],
  
  /* Horizontal Rules */
  [/<hr/gi, "<hr"],
  
  /* Make sure attributes are proper XHTML */
  [/;" align="/gi, ";text-align:"],
  [/ align="/gi, " style=\"text-align:"],
  [/ align='/gi, " style=\'text-align:"],
  [/ style="/gi, " style=\""],
  [/ style='/gi, " style='"],
  [/ src="/gi, " src=\""],
  [/ src='/gi, " src='"],
  [/ alt="/gi, " alt=\""],
  [/ alt='/gi, " alt='"]
  
  ];

  for (k=0; k<HTMLtags.length; k++) {
    s = s.replace(HTMLtags[k][0], HTMLtags[k][1]);
  }
  
  var indexStart;
  var voidTag;
  
  // Images
  indexStart = 0;
  do {
    indexStart = s.indexOf("<img", indexStart);
    if (indexStart != -1) {
      voidTag = s.indexOf(">", indexStart);
      s = s.substring(0, voidTag) + " /" + s.substring(voidTag); // Adds trailing slash
      indexStart = voidTag;
    }
  }
  while (indexStart != -1);
  
  // Horizontal Rules
  indexStart = 0;
  do {
    indexStart = s.indexOf("<hr", indexStart);
    if (indexStart != -1) {
      voidTag = s.indexOf(">", indexStart);
      s = s.substring(0, voidTag) + " /" + s.substring(voidTag); // Adds trailing slash
      indexStart = voidTag;
    }
  }
  while (indexStart != -1);
  return s;
}