// DHTML prompt() function replacement inspirated by :
// http://www.hunlock.com/blogs/Working_around_IE7s_prompt_bug,_er_feature
var pfcPrompt = Class.create();
pfcPrompt.prototype = {
initialize: function(container)
{
if (container == undefined || is_ie)
container = document.getElementsByTagName('body')[0];
this.container = container;
this.box = $('pfc_promptbox');
this.bgbox = $('pfc_promptbgbox');
this.prompt_field = $('pfc_promptbox_field');
this.prompt_title = $('pfc_promptbox_title');
this.buildBox();
this.buildBgBox();
},
buildBox: function()
{
if (!this.box)
{
this.box = document.createElement('div');
this.box.id = 'pfc_promptbox';
this.box.style.position = 'absolute';
this.box.style.zIndex = 100;
this.box.style.display = 'none';
var div = document.createElement('h2');
div.appendChild(document.createTextNode(pfc.res.getLabel('Input Required')));
this.box.appendChild(div);
this.prompt_title = document.createElement('p');
this.prompt_title.id = 'pfc_promptbox_title';
this.box.appendChild(this.prompt_title);
var form = document.createElement('form');
form.pfc_prompt = this;
form.onsubmit = function(evt) { return this.pfc_prompt._doSubmit(); };
this.box.appendChild(form);
this.prompt_field = document.createElement('input');
this.prompt_field.id = 'pfc_promptbox_field';
this.prompt_field.type = 'text';
this.prompt_field.value = '';
form.appendChild(this.prompt_field);
var br = document.createElement('br');
form.appendChild(br);
var cancel = document.createElement('input');
cancel.id = 'pfc_promptbox_cancel';
cancel.type = 'button';
cancel.value = pfc.res.getLabel('Cancel');
cancel.pfc_prompt = this;
cancel.onclick = function(evt) { return this.pfc_prompt._doSubmit(true); };
form.appendChild(cancel);
var submit = document.createElement('input');
submit.id = 'pfc_promptbox_submit';
submit.type = 'submit';
submit.value = pfc.res.getLabel('OK');
form.appendChild(submit);
var ct = document.getElementsByTagName('body')[0];
ct.appendChild(this.box);
}
},
buildBgBox: function()
{
if (!this.bgbox)
{
this.bgbox = document.createElement('div');
this.bgbox.id = 'pfc_promptbgbox';
// assign the styles to the blackout division.
this.bgbox.style.opacity = '.7';
this.bgbox.style.position = 'absolute';
this.bgbox.style.backgroundColor = '#555';
this.bgbox.style.filter = 'alpha(opacity=70)';
this.bgbox.style.display = 'none';
this.bgbox.style.zIndex = 50;
var ct = document.getElementsByTagName('body')[0];
ct.appendChild(this.bgbox);
}
},
prompt: function(text,def)
{
// if def wasn't actually passed, initialize it to null
if (def==undefined) { def=''; }
// Stretch the blackout division to fill the entire document
// and make it visible. Because it has a high z-index it should
// make all other elements on the page unclickable.
var pos = this._findPos(this.container);
this.bgbox.style.top = pos[1]+'px';
this.bgbox.style.left = pos[0]+'px';
this.bgbox.style.height = this.container.offsetHeight+'px';
this.bgbox.style.width = this.container.offsetWidth+'px';
this.bgbox.style.display = 'block';
// Position the dialog box on the screen and make it visible.
this.box.style.display = 'block';
this.box.style.top = parseInt(pos[1]+(this.bgbox.offsetHeight-this.box.offsetHeight)/2)+'px';
this.box.style.left = parseInt(pos[0]+(this.bgbox.offsetWidth-this.box.offsetWidth)/2)+'px';
this.prompt_field.value = def;
this.prompt_field.focus(); // Give the dialog box's input field the focus.
this.prompt_title.innerHTML = text;
},
_doSubmit: function(canceled)
{
// _doSubmit is called when the user enters or cancels the box.
var val = this.prompt_field.value;
this.box.style.display = 'none'; // clear out the dialog box
this.bgbox.style.display = 'none'; // clear out the screen
this.prompt_field.value = ''; // clear out the text field
// if the cancel button was pushed, force value to null.
if (canceled) { val = '' }
// call the user's function
this.callback(val,this);
return false;
},
_findPos: function(obj)
{
var curleft = curtop = 0;
if (obj.offsetParent) {
curleft = obj.offsetLeft;
curtop = obj.offsetTop;
while (obj = obj.offsetParent) {
curleft += obj.offsetLeft;
curtop += obj.offsetTop;
}
}
return [curleft,curtop];
},
focus: function()
{
this.prompt_field.focus();
},
callback: function(v,pfcp)
{
}
}