var popup_timeout;
var dismiss_interval;
var popup = {
lang: {
"Cancel": "Cancel",
"OK": "OK",
},
init: function(){
var ff = document.getElementById('popup-out')
if (!ff){
var ff = document.createElement('div');
ff.setAttribute('id','popup-out');
ff.setAttribute('class','popup-base');
document.body.appendChild(ff);
}
return ff;
},
load: function(){
popup.init();
},
mask: function(type) {
var ff = document.getElementById('popup-out');
if(type == "show"){
ff.className = 'popup-base popup-visible';
}else if(type == "hidden"){
ff.className = ' ';
}
},
build: function(e,f){
popup.init();
var prompt = '';
if (f.type == 'prompt'){
prompt = '
'+''+'
';
}
var buttons = '';
if (f.type != 'signal' && f.type != 'async' && f.type != 'loading'){
buttons = '';
if (f.type == 'alert'){
buttons += '';
}
if (f.type == 'prompt' || f.type == 'confirm'){
buttons += '';
buttons += '';
}
buttons += '
';
}
var box = '';
box += '';
// clear the timeout if it's already been activated
if (popup_timeout){
clearTimeout(popup_timeout);
}
var ff = document.getElementById('popup-out');
ff.innerHTML = box;
popup.set_pos();
ff.className = 'popup-base popup-visible';
// close on "popup-close" click
if (document.getElementById('popup-close')) {
var close = document.getElementById('popup-close');
close.addEventListener("click",function(){
popup.destroy(f.type);
if (f.type == 'prompt' || f.type == 'confirm' || f.type == 'signal'){
if (f.callback) {
f.callback(false);
}
}
}, false);
}
// close on background click
if (!f.hasOwnProperty("insist") || !f.insist) {
var g = document.getElementById('popup-bg');
g.addEventListener("click",function(){
popup.destroy(f.type);
if (f.type == 'prompt' || f.type == 'confirm' || f.type == 'signal'){
if (f.callback) {
f.callback(false);
}
}
}, false);
}
// listeners for button actions
if (f.type == 'alert'){
g.addEventListener("click", function(){
f.callback();
}, false);
// return true
var h = document.getElementById('alert-ok');
h.addEventListener("click", function(){
popup.destroy(f.type);
f.callback();
}, false);
// listen for enter key or space, close it
document.onkeyup = function(e){
if (e.keyCode == 13 || e.keyCode == 32){
popup.destroy(f.type);
f.callback();
}
};
}
if (f.type == 'confirm'){
// return false
var h = document.getElementById('confirm-cancel');
h.addEventListener("click", function(){
popup.destroy(f.type);
f.callback(false);
}, false);
// return true
var i = document.getElementById('confirm-ok');
i.addEventListener("click",function(){
popup.destroy(f.type);
f.callback(true);
}, false);
// listen for enter key or space, close it & return true
document.onkeyup = function(e){
if (e.keyCode == 13 || e.keyCode == 32){
popup.destroy(f.type);
f.callback(true);
}
};
}
if (f.type == 'prompt'){
// focus on input
var pi = document.getElementById('dialog-input');
setTimeout(function(){
pi.focus();
pi.select();
},100);
// return false
var h = document.getElementById('prompt-cancel');
h.addEventListener("click",function(){
popup.destroy(f.type);
f.callback(false);
}, false);
// return contents of input box
var j = document.getElementById('dialog-input');
var i = document.getElementById('prompt-ok');
i.addEventListener("click",function(){
popup.destroy(f.type);
f.callback(j.value);
}, false);
// listen for enter
document.onkeyup = function(e){
if (e.keyCode == 13){
popup.destroy(f.type);
f.callback(j.value);
}
};
}
// close after f.timeout ms
if (f.type == 'signal' && f.timeout != 0){
if (document.getElementById("dismiss-indicator")) {
document.getElementById("dismiss-indicator").style.display = "";
dismiss_interval = setInterval(function() {
document.getElementById("dismiss-indicator").innerHTML += "✾  ";
}, 1000);
}
popup_timeout = setTimeout(function(){
popup.destroy(f.type);
if (f.callback) {
f.callback();
}
}, f.timeout);
}
if(f.type == "async"){
var options = {
url: f.url,
data: {
lxt: sid
},
format: "html",
method: "GET",
before: null,
callback: function (html){
document.getElementById("dialog-content").innerHTML = html;
popup.set_pos();
},
};
ajax(options);
}
},
destroy: function(type){
if (dismiss_interval) {
clearInterval(dismiss_interval);
}
var box = document.getElementById('popup-out');
box.innerHTML = "";
box.setAttribute('class','popup-base');
// confirm/alert/prompt remove click listener
if (g = document.getElementById(type + '-ok')){
g.removeEventListener("click", function(){}, false);
// remove keyup listener
document.onkeyup = null;
}
// confirm/prompt remove click listener
if (h = document.getElementById(type + '-cancel')){
h.removeEventListener("click", function(){}, false);
}
},
set_pos: function(){
var dialog = document.getElementById("dialog-popup");
var offset_top = parseInt((window.innerHeight - dialog.clientHeight) / 2) >= 0 ? parseInt((window.innerHeight - dialog.clientHeight) / 2) : 5;
var top = document.body.scrollTop + offset_top;
dialog.style.top = top + "px";
dialog.style.left = (parseInt(document.body.clientWidth))/2 - parseInt(dialog.scrollWidth)/2 + document.body.scrollLeft + 5 +"px";
},
alert: function(e,f){
if (typeof(f) == 'undefined'){
f = function (){};
}
popup.build(e,{
type:'alert',
callback:f
});
},
signal: function(e, timeout, callback, insist, compact, indicator){
if (typeof(timeout) == 'undefined'){
var timeout = 5000;
}
var insist = typeof(insist) == 'undefined' ? false : insist;
var compact = typeof(compact) == 'undefined' ? false : compact;
var indicator = typeof(indicator) == 'undefined' ? false : indicator;
popup.build(e,{
type: 'signal',
timeout: timeout,
insist: insist,
compact: compact,
indicator: indicator,
callback: callback
});
},
confirm: function(e,f){
popup.build(e,{
type:'confirm',
callback:f
});
},
prompt: function(e,f){
return popup.build(e,{
type:'prompt',
callback:f
});
},
async: function(url){
var dialog = document.getElementById("dialog-content");
if (dialog) {
var html = "