<?php if(!defined('PmWiki'))exit;
/**
  Page Not Saved Warning for PmWiki
  Written by (c) Petko Yotov 2009-2015

  This text is written for PmWiki; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published
  by the Free Software Foundation; either version 3 of the License, or
  (at your option) any later version. See pmwiki.php for full details
  and lack of warranty.

  Copyright 2009-2015 Petko Yotov www.pmwiki.org/petko
*/
$RecipeInfo['NotSavedWarning']['Version'] = '20170712';

SDV($NsWarning, '$[Content was modified, but not saved!]');
SDVA($HTMLFooterFmt, array('Notsaved' => '<script type="text/javascript"><!--
(function() {
  function aE(el, ev, fn) {
    return window.addEventListener
      ? el.addEventListener(ev, fn, false)
      : el.attachEvent("on" + ev, fn);
  }

  function NsSubmit(evt) {
    if (typeof evt == "undefined") evt = window.event;
    if(NsForm.text && NsForm.nsscroll)
      NsForm.nsscroll.value = NsForm.text.scrollTop;

    if(NsPromptAuthor && typeof(NsForm.author)!="undefined" && NsForm.author.value=="") {
      var r = uPrompt(NsPromptAuthor, "");
      if(typeof(r)=="string") NsForm.author.value = r;
      else {
        evt.preventDefault(); 
        NsForm.author.focus(); 
        return false;
      }
    }
    if(NsPromptSum && typeof(NsForm.csum)!="undefined" && NsForm.csum.value=="") {
      var r = uPrompt(NsPromptSum, "");
      if(typeof(r)=="string") NsForm.csum.value = r;
      else {
        evt.preventDefault();
        NsForm.csum.focus(); 
        return false;
      }
    }
    NsMessage="";
    return true;
  }

  function uPrompt(msg) {
    var ua = navigator.userAgent;
    var idx = ua.indexOf("MSIE ");
    var sel = false;
    if(NsForm.author.type == "select-one") {
      if(NsForm.author.options[NsForm.author.selectedIndex].value == "") sel = true;
    }
    if(sel || (idx>0 && parseFloat( ua.substring(idx+4) )>=7) ) {
      alert(msg);
      return false;
    }
    else return prompt(msg, "");
  }

  var NsMessage = "";
  var NsForm = false;
  var NsPreview = false;
  var NsPromptSum = false;
  var NsPromptAuthor = false;

  for(var i=0; i<document.forms.length; i++) {
    var f = document.forms[i];
    for(var j=0; j<f.elements.length; j++) {
      var e = f.elements[j];
      if(e.type == "submit" && e.name.match(/^post(edit|draft)?$/)) {
        NsForm = f;
      }
      else if(e.type == "submit" && e.name.match(/^(preview|cancel)$/))
        e.onclick = function(){NsMessage="";return true;};
    }
    if(NsForm) break;
  }

  if(NsForm) {
    if(NsForm.text && NsForm.nsscroll && NsForm.nsscroll.value>0)
      NsForm.text.scrollTop = NsForm.nsscroll.value;

    window.onbeforeunload = function(ev) {
      if(NsMessage=="") return;
      if (typeof ev == "undefined") ev = window.event;
      var tarea = document.getElementById("text");
      if (tarea && tarea.codemirror) tarea.codemirror.save();

      for(var i=0; i<NsForm.elements.length; i++) {
        var e = NsForm.elements[i];
        if (NsPreview || (e.type.match(/^text(area)?$/) && e.value != e.defaultValue)) {
          if (ev) {ev.returnValue = NsMessage;}
          return NsMessage;
        }
      }
    }
    aE(NsForm, "submit", NsSubmit);
  }
})();
//--></script>'));

if(@$_REQUEST['preview']>'') $HTMLFooterFmt['Notsaved']
  = str_replace('var NsPreview = false;', 'var NsPreview = true;', $HTMLFooterFmt['Notsaved']);

if(IsEnabled($NsPromptSum, false)) $HTMLFooterFmt['Notsaved']
  = str_replace('var NsPromptSum = false;', "var NsPromptSum = \"".addslashes($NsPromptSum)."\";",
  $HTMLFooterFmt['Notsaved']);
if(IsEnabled($NsPromptAuthor, false)) $HTMLFooterFmt['Notsaved']
  = str_replace('var NsPromptAuthor = false;',
  "var NsPromptAuthor = \"".addslashes($NsPromptAuthor)."\";", $HTMLFooterFmt['Notsaved']);
if(IsEnabled($NsWarning, false)) $HTMLFooterFmt['Notsaved']
  = str_replace('var NsMessage = "";',
  "var NsMessage = \"".addslashes($NsWarning)."\";", $HTMLFooterFmt['Notsaved']);

$PostConfig['NsScroll'] = 120;

function NsScroll() {
  global $InputTags;
  if( @$InputTags['e_form'][':html'] ) {
    $InputTags['e_form'][':html'] .= '<input type="hidden" name="nsscroll" value="'.intval(@$_REQUEST['nsscroll']).'"/>';
  }
}