﻿var demoPanel = null
function createInfoPanel(contentNode, parentNode, moveNode) {
  function close(e) {
    try {
      if (e) demoPanel.mu(e)
      demoPanel.rootNode.parentNode.removeChild(demoPanel.rootNode)
    } catch (e) { }
  }
  demoPanel.borderWidth = 2
  demoPanel.close = close
  demoPanel.overflow = 'auto'
  demoPanel.padding = '0px 0px'
  demoPanel.movable = true

  var validHW = function(value) { return isNaN(pv = parseInt(value)) ? value : pv + 'px' }
  var rootNode = document.createElement('div')
  rootNode.style.cssText = 'position:absolute;overflow:hidden;height:auto;z-index:' + demoPanel.zindex + ';'
  rootNode.onmouseout = function() { this.style.zIndex = 1 }
  rootNode.onmouseover = function() { this.style.zIndex = 2 }

  var frameNode = document.createElement('div')
  frameNode.style.cssText = 'position:relative;overflow:hidden;background-color:'
    + demoPanel.backgroundColor + ';border-style:' + demoPanel.borderStyle + ';border-width:' + demoPanel.borderWidth + 'px;border-color:' + demoPanel.borderColor
  rootNode.appendChild(frameNode)
  var sizeNode = document.createElement('div')
  sizeNode.style.cssText = 'position:relative;overflow:' + demoPanel.overflow + ';padding:' + demoPanel.padding + ';margin-bottom:4px;'
  demoPanel.contentNode = sizeNode.appendChild(contentNode)
  frameNode.appendChild(sizeNode)
  if (parentNode) rootNode = parentNode.appendChild(rootNode)
  demoPanel.setupNodes(rootNode, frameNode, arguments.length == 3 && moveNode ? moveNode : contentNode)
  demoPanel.top(0)
  demoPanel.left(0)
  demoPanel.width(rootNode.offsetWidth)
  demoPanel.height(rootNode.offsetHeight)
  return rootNode
}
function demo() {
  this.img = null
  this.cm = null
  this.lastMsgId = null
  this.infobg = 'aliceblue'
  this.blurbg = 'white'
}
demo.prototype.panelVisible =
function(setting) {
  if (arguments.length == 0 || setting == undefined) return demoPanel.visible()
  demoPanel.visible(setting)
}

demo.prototype.showPage =
function(infoType, key, w, h, t, l, whenDone) {
  var _this = this
  function gotContent(result) {
    function setInfoType() {
      demoPanel.setBackground(_this.infobg)
      demoPanel.setBorder('Teal 3px double')
      if (!app.isIE) demoPanel.frameNode.style.cssText += ';-webkit-border-top-right-radius:8px;-moz-border-radius:8px;-webkit-border-bottom-left-radius:8px;-moz-birder-radius-bottomright;';
      demoPanel.boxShadow(false)
      demoPanel.movable = true
      demoPanel.sizable = true
    }
    function setBlurbType() {
      demoPanel.setBackground(_this.blurbg)
      demoPanel.setBorder('gray 1px solid')
      demoPanel.boxShadow(true)
      demoPanel.movable = false
      demoPanel.moveNode.style.cursor = 'default'
      demoPanel.sizable = false
    }
    function postXlat(result) {
      if (whenDone) whenDone()
    }
    if (demoPanel) demoPanel.close()
    demoPanel = new flexPanel()
    demoPanel.zindex = infoType ? 1 : 2
    demoPanel.backgroundColor = 'white'
    demoPanel.borderStyle = 'solid'
    demoPanel.borderColor = 'maroon'

    var content = document.createElement('div')
    content.innerHTML = result
    moveNode = (te = content.getElementsByTagName('div')[1]).className == 'infoTitle' ? te : content
    createInfoPanel(content, document.body, moveNode)
    if (infoType) setInfoType()
    else setBlurbType()
    demoPanel.visible(true)
    t = t ? t : 0
    l = l ? l : 0
    w = w ? w : demoPanel.frameNode.lastChild.offsetWidth
    h = h ? h : demoPanel.frameNode.lastChild.offsetHeight

    demoPanel.width(w)
//      alert(w + '\n' + demoPanel.width());
    demoPanel.height(h)
    demoPanel.moveWindowTo(l, t)
    /*
    demoPanel.frameNode.id = "DemoInfoPanel";
    $('#DemoInfoPanel').gradient(
    { from: 'FFFFFF',
    to: 'F0F8FF',
    direction: 'horizontal',
    length: null,
    position: 'top left '
    }
    );
    */
    if (whenDone) whenDone()
  }
  function error(err) { alert(err._message) }
  if (!this.cm) {
    this.cm = CM.newContentManager()
    this.cm.connection = app.connections[0]
  }
  this.gotContent = gotContent
  this.cm.getContent(key, this.gotContent)
}
demo.prototype.showImage =
function(imgNr, top, left) {
  imgs = ['images/n-resize.gif', 'images/pointer.gif']
  if (!this.img) {
    this.img = document.body.appendChild(document.createElement('img'))
    this.img.style.cssText = 'position:absolute;display:none;z-index:7;'
  }
  this.img.src = imgs[imgNr]
  this.img.style.left = parseInt(left) + 'px'
  this.img.style.top = parseInt(top) + 'px'
  this.img.style.display = ''
}
demo.prototype.setDatasheetView =
function(form, whenDone) {
  var pi = null
  function changeView() {
    window.clearTimeout(pi)
    app.ge.mainMenu.hide()
    form.view(enums.formView.datasheet)
    bhdemo.img.style.display = 'none'
    if (whenDone) whenDone()
  }
  function showViewMenu() {
    window.clearTimeout(pi)
    app.ge.mainMenu.items.item['views'].childMenu.show()
    y = app.ge.mainMenu.node.offsetTop + 2 + 'px'
    x = app.ge.mainMenu.node.offsetLeft + app.ge.mainMenu.node.offsetWidth - 4 + 'px'
    app.ge.mainMenu.items.item['views'].childMenu.node.style.left = x
    app.ge.mainMenu.items.item['views'].childMenu.node.style.top = y
    bhdemo.showImage(1, parseInt(y) + 8 + 'px', parseInt(x) + 48 + 'px')
    pi = bhdemo.pause(3, changeView)

  }
  function showDSPage() {
    MNU.showMainFormMenu(form, offsets.y - 7 + 'px', offsets.x + 'px')
    bhdemo.showImage(1, offsets.y + 8, offsets.x + 48)
    pi = bhdemo.pause(4, showViewMenu)
  }
  offsets = BC.getOffsets(form.node)
  l = offsets.x < 202 ? offsets.x + 200 : offsets.x - 202
  bhdemo.showPage(false, 'menuDatasheetView', 192, 'auto', offsets.y, l, showDSPage)
}
demo.prototype.setMinimizeForm =
function(form, whenDone) {
  function minwin() {
    form.window().minimize()
    bhdemo.pause(1, whenDone)
    bhdemo.img.style.display = 'none'
  }
  os = BC.getOffsets(form.node)
  mt = os.y - 12
  ml = os.x + form.node.offsetWidth - 68

  function pageComplete() {
    bhdemo.showImage(1, mt, ml)
    bhdemo.pause(3, minwin)
  }
  bhdemo.showPage(false, 'minimizeMsg', 144, 'auto', mt + 20, ml - 140, pageComplete)
}
demo.prototype.setMaximizeForm =
function(form, whenDone) {
  function maxwin() {
    form.window().maximize()
    bhdemo.pause(1, whenDone)
    bhdemo.img.style.display = 'none'
  }
  function pageComplete() {
    bhdemo.showImage(1, mt, ml - 8)
    bhdemo.pause(3, maxwin)
  }
  os = BC.getOffsets(form.node)
  mt = os.y - 12
  ml = os.x + form.node.offsetWidth - 32
  bhdemo.showPage(false, 'maximizeMsg', 'auto', 'auto', mt + 22, ml - 20, pageComplete)
}
demo.prototype.showFilterSort =
function(form, whenDone) {
  var scm = null
  function selectOption() {
    function sortDescending() {
      bypassLoad = true
      form.sort('UnitPrice', enums.actions.sort.desc)
      bypassLoad = false
      if (whenDone) whenDone()
    }
    scm.items.setNormalEntry(scm.items.item['filterIn'])
    scm.items.setSelectedEntry(scm.items.item['sortDesc'])
    bhdemo.showImage(1, scm.node.offsetTop + scm.node.offsetHeight - 12, mnuLeft + 48)
    bhdemo.pause(5, sortDescending)
  }
  function showMenu() {
    elem = form.controls['UnitPrice'].element()
    eo = BC.getOffsets(elem)
    evt = { srcElement: elem, clientY: eo.y, clientX: eo.x - 200 }
    form.controls['UnitPrice'].setFocus()
    scm = MNU.showFieldShortcutMenu(form, evt.srcElement)
    scm.setPosition(null, (mnuLeft = eo.x - scm.node.offsetWidth - 2))
    bhdemo.pause(5, selectOption)
  }
  bhdemo.showPage(false, 'menuSortFilter', '192', 'auto', null, form.node.offsetLeft + 144, showMenu)
}
var bhdemo = new demo()

var categoryPreview = false
function previewCategories() {
  categoryPreview = true
  if (app.forms['CategoriesWithReport']) app.forms['CategoriesWithReport'].window().close()
  app.openForm('CategoriesWithReport')
}
function runCategoriesPreview(form) {
  var rn = 0
  function preview() {
    function showDatasheet() {
      function minimizeCategories() {
        function minimize() {
          function mainmenu() {
            categoryPreview = false
            window.clearTimeout()
          }
          if (!categoryPreview) return
          bhdemo.setMinimizeForm(form, mainmenu)
        }
        function pageComplete() {
          if (!categoryPreview) return
          bhdemo.pause(7, minimize)
        }
        NB.gotoRecord(form, enums.navigation.action.first)
        bhdemo.showPage(false, 'CategoriesPV3', 192, 'auto', null, form.node.offsetLeft + form.node.offsetWidth, pageComplete)
      }
      if (!categoryPreview) return
      bhdemo.setDatasheetView(form, minimizeCategories)
    }
    if (!categoryPreview) return
    NB.gotoRecord(form, enums.navigation.action.next)
    rn++
    if (rn < form.displayRows() - 2) bhdemo.pause(3, preview)
    else {
      window.clearTimeout
      showDatasheet()
    }
  }
  function cycleSubform() {
    function subcycle() {
      function pageComplete() {
        bhdemo.pause(1, preview)
      }
      if (!categoryPreview) return
      NB.gotoRecord(sf, enums.navigation.action.next)
      sfrn++
      if (sfrn > sf.displayRows() - 2) {
        window.clearTimeout
        fos = BC.getOffsets(form.node)
        bhdemo.showPage(false, 'CategoriesPV2', 192, 'auto', fos.y, fos.x + sf.node.offsetLeft + sf.node.offsetWidth + 24, pageComplete)
      } else bhdemo.pause(1, subcycle)
    }
    function pageComplete() {
      sfrn = 0
      if (!categoryPreview) return
      if (form.currentView !== enums.formView.datasheet) DEMO.ie7Message('ie7msg2')
      bhdemo.pause(1, subcycle)
    }
    sf = form.controls['Product List'].form
    sfos = BC.getOffsets(sf.node)
    bhdemo.showPage(false, 'CategoriesPV1', 192, 'auto', sfos.y, sfos.x + sf.node.offsetLeft + sf.node.offsetWidth + 24, pageComplete)
  }
  //  form.window().fp.height(form.window().fp.height() + 90)
  //  form.window().fp.width(form.window().fp.width() + 90)
  cycleSubform()

}
var productPreview = false
var bypassLoad = false
function previewProducts() {
  productPreview = true
  if (app.forms['Products']) app.forms['Products'].window().close()
  app.openForm('Products')
}
function runProductsPreview(form) {
  function showDatasheet() {
    function mainmenu() {
      productPreview = false
      window.clearTimeout()
    }
    function minwin() {
      if (!productPreview) return
      bhdemo.setMinimizeForm(form, mainmenu)
    }
    function minimizeProducts() {
      bhdemo.panelVisible(false)
      if (!productPreview) return
      bhdemo.pause(5, minwin)
    }
    function sortFilterProducts() {
      if (!productPreview) return
      bhdemo.showFilterSort(form, minimizeProducts)
    }
    function maximizeProducts() {
      if (!productPreview) return
      bhdemo.setMaximizeForm(form, sortFilterProducts)
    }
    function adjustRowSize() {
      function showNResize() {
        if (!productPreview) return
        bhdemo.showImage(0, rso.y + pt, rso.x + 2)
        ro.row.firstChild.style.fontSize = (pt -= 1) + 'pt'
        if (pt > 8) bhdemo.pause(3, showNResize)
        else {
          bhdemo.img.style.display = 'none'
          ro.row.firstChild.style.height = '14px'
          ro.rs.style.height = '13px'
          if (form.rs) form.rs.resizeRow(ro, ro.rs, 0)
          bhdemo.pause(4, maximizeProducts)
        }
      }
      ro = form.sections[enums.section.detail].getRowObjByIndex(form.currentRecord())
      rso = BC.getOffsets(ro.rs)
      bhdemo.showImage(0, rso.y + 10, rso.x + 6)
      pt = parseInt(form.datasheetFontHeight) + 1
      bhdemo.showPage(false, 'ProductsPV2', 192, 'auto', rso.y - demoPanel.rootNode.offsetHeight - 25, rso.x - 200, showNResize)
    }
    if (!productPreview) return
    bhdemo.setDatasheetView(form, adjustRowSize)
  }
  function showDemoPage() {
    if (!productPreview) return
    bhdemo.pause(5, showDatasheet)
  }
  fos = BC.getOffsets(form.node)
  bhdemo.showPage(false, 'ProductsPV1', 192, 'auto', fos.y + form.node.offsetHeight - 144, fos.x - 196, showDemoPage)
}
demo.prototype.pause =
function(secs, whenDone) {
  return window.setTimeout(whenDone, secs * 1000)
}
var DEMO = function() {
  function closeAllButThis(element, tag) {
    elems = element.parentNode.getElementsByTagName(tag)
    for (el = 0; el < elems.length; el++)
      if (elems[el].parentNode == element) {
      if ((da = element.getElementsByTagName('input')[0]) && da.className === 'dnarrow') da.style.display = 'none'
      elems[el].style.display = 'block'
      elems[el].parentNode.style.cursor = 'default'
    }
    else {
      if ((da = elems[el].parentNode.getElementsByTagName('input')[0]) && da.className === 'dnarrow') da.style.display = 'inline'
      elems[el].style.display = 'none'
      elems[el].parentNode.style.cursor = 'pointer'
    }
  }
  function showInfobox(keywordid, infoid) {
    ielem = document.getElementById(infoid)
    //    debugger
    offsets = BC.getOffsets(keywordid)
    ielem.style.top = (offsets.y + keywordid.offsetHeight) + 'px'
    ielem.style.left = keywordid.offsetLeft + 'px'
    ielem.style.display = 'block'
  }
  function saveMessage(msgElem) {
    var fromElem = document.getElementById('email')
    var fromEmail = fromElem ? fromElem.value : ''
    var msgbody = msgElem.value.replace(/'/g, "''").replace(/\&/g, '&amp;').replace(/\</g, '&lt;')
    var but = document.getElementById('i_em')

    function whenDone(result) {
      function sendEmail() {
        function clearMessage() {
          if (app.hideMsgBox) app.hideMsgBox()
          else app.sc.msgbox.style.visibility = 'hidden';
        }
        function okay(result) {
          setTimeout(clearMessage, 5000)
          if (but) but.style.visibility = ''
          return app.msgbox('Message sent.', fromElem, { img: { src: enums.images.info} })
        }
        function failed(err) {
          setTimeout(clearMessage, 8000)
          if (but) but.style.visibility = ''
          return app.msgbox(err._message, fromElem, { img: { src: enums.images.cancel} })
        }
        var webService = eval(webServiceCall).DBI
        var xml = '<Root>' + (fromEmail === '' ? '' : '<From>' + fromEmail + '</From>') + '<Subject>Website Message</Subject><Body>' + msgbody + '</Body></Root>'
        webService(enums.dbOperation.email, xml, okay, failed)
      }
      if (!bhdemo.lastMsgId) bhdemo.lastMsgId = result
      sendEmail()
    }
    if (but) but.style.visibility = 'hidden'

    if (msgElem.value.replace(/ /g, '').length == 0) {
      msgElem.focus()
      return
    }
    if (bhdemo.lastMsgId) {
      sql = "UPDATE WebMessages SET " + (fromEmail !== '' ? "Email='" + fromEmail + "'," : '') + " MessageBody='" + msgbody + "'"
          + " WHERE PK=" + bhdemo.lastMsgId
      qd = DA.createQuery(enums.dbOperation.exec, 'Text', sql, whenDone)
    } else {
      sql = "INSERT WebMessages(" + (fromEmail !== '' ? 'Email,' : '') + " MessageBody) VALUES(" + (fromEmail !== '' ? "'" + fromEmail + "'," : '') + "'" + msgbody + "')"
      qd = DA.createQuery(enums.dbOperation.insert, 'Text', sql, whenDone)
      qd.xmlElements = '<AutoNumber DBName="SQL Server"></AutoNumber>'
    }
    qd.exec()
  }
  function ie7Message(elemid) {
    if (app.bi.browser === enums.browser.app.IE && app.bi.version <= 7) {
      elem = document.getElementById(elemid)
      if (elem) elem.innerHTML = 'The Picture is not displayed because IE 7 does not support embedded images. You may also experience problems with the MSSQL Report.'
    }
  }
  function showMyYahoo() {
    var win = app.openFormEx('Linked URL Example', 'http://my.yahoo.com/')
    //    var win = app.openFormEx('Linked URL Example', 'EffectiveGUIDesignWP.aspx')
    win.fp.sizable = true
    if (!home.babeView) {
      win.setupMaxButton(false)
      win.setupMinButton(false)
    }
    win.fp.resizeWindow(450, 350)
    BC.centerNode(win.fp.rootNode)
  }
  return {
    closeAllButThis: function(element, tag) { closeAllButThis(element, tag) },
    showMyYahoo: function() { showMyYahoo() },
    showInfobox: function(keywordid, infoid) { showInfobox(keywordid, infoid) },
    saveMessage: function(msgElem) { saveMessage(msgElem) },
    ie7Message: function(elemid) { ie7Message(elemid) }
  }
} ()