
function ModalDialog(){}
ModalDialog.isRendered=false;ModalDialog.parent=null;ModalDialog.classPageMask="modalDialogPageMask";ModalDialog.classContentMask="modalDialogContentMask";ModalDialog.classDialog="modalDialog";ModalDialog.classTitleBar="modalDialogTitleBar";ModalDialog.classTitleBarText="modalDialogTitleBarText";ModalDialog.classTitleBarControls="modalDialogTitleBarControls";ModalDialog.classNonSelectableText="nonSelectableText";ModalDialog.okButtonText="OK";ModalDialog.cancelButtonText="Cancel"
ModalDialog.promptTitleText="Prompt";ModalDialog.oldOnMouseUp=document.onmouseup;ModalDialog.oldOnMouseMove=document.onmousemove;ModalDialog.okButton=null;ModalDialog.cancelButton=null;

ModalDialog.render=function(){
    if(ModalDialog.parent==null)
        ModalDialog.parent=document.body;
    var divPageMask=document.createElement("div");
    divPageMask.className=ModalDialog.classPageMask;
    addEvent(divPageMask,"contextmenu",cancelEvent);
    setOpacity(divPageMask,4);
    ModalDialog.parent.appendChild(divPageMask);
    var divDialog=document.createElement("div");
    divDialog.className=ModalDialog.classDialog;
    var divTitleBar=document.createElement("div");
    divTitleBar.className=ModalDialog.classTitleBar;
    divTitleBar.style.padding="3px";
    divTitleBar.style.cursor="default";
    addEvent(divTitleBar,"mousedown",ModalDialog.onMoveStart);
    addEvent(divTitleBar,"contextmenu",cancelEvent);
    addEvent(divTitleBar,"selectstart",cancelEvent);
    var divTitle=document.createElement("div");
    var textNode=document.createTextNode("\u00a0");
    divTitle.appendChild(textNode);
    divTitle.className=ModalDialog.classTitleBarText;
    var divControls=document.createElement("div");
    divControls.className=ModalDialog.classTitleBarControls;
    var imgClose=new Image();
    imgClose.src=ModalDialog.iconClose;
    imgClose.style.width="15px";
    imgClose.style.height="15px";
    addEvent(imgClose,"click",ModalDialog.close);
    divControls.appendChild(imgClose);
    divTitleBar.appendChild(divTitle);
    divTitleBar.appendChild(divControls);
    divDialog.appendChild(divTitleBar);
    var divContent=document.createElement("div");
    divDialog.appendChild(divContent);
    var divContentMask=document.createElement("div");
    divContentMask.className=ModalDialog.classContentMask;
    setOpacity(divContentMask,4);
    divDialog.appendChild(divContentMask);
    ModalDialog.parent.appendChild(divDialog);
    
    divDialog.style.left="-1000px";
    divDialog.style.top="-1000px";
    divDialog.style.display="block";
    divControls.style.height=divTitle.offsetHeight+"px";
    imgClose.style.marginTop=(divTitle.offsetHeight-imgClose.height)/2+"px";
    divTitleBar.style.height=divTitle.offsetHeight+"px";
    ModalDialog.divPageMask=divPageMask;
    ModalDialog.divDialog=divDialog;
    ModalDialog.divTitleBar=divTitleBar;
    ModalDialog.textTitle=textNode;
    ModalDialog.divContent=divContent;
    ModalDialog.divContentMask=divContentMask;
    ModalDialog.isRendered=true;
}

ModalDialog.show=function(url,width,height,titleText){
    if(!ModalDialog.isRendered)
        ModalDialog.render();
    var frameContent=document.createElement("iframe");
    frameContent.style.backgroundColor="transparent";
    frameContent.allowTransparency="true";
    frameContent.scrolling="no";
    frameContent.frameBorder="0";
    ModalDialog.divContent.appendChild(frameContent);
    ModalDialog.frameContent=frameContent;
    ModalDialog.setTitle(titleText);
    ModalDialog.onParentResize();
    ModalDialog.divPageMask.style.display="block";
    ModalDialog.divDialog.style.display="block";
    ModalDialog.width=width;
    ModalDialog.height=height;
    ModalDialog.resize(width,height);
    ModalDialog.center();
    addEvent(window,"resize",ModalDialog.onParentResize);
    ModalDialog.frameContent.src=url;
}

ModalDialog.prompt=function(message,defaultInput,returnFunction,validateFunction){
    if(!ModalDialog.isRendered)
        ModalDialog.render();
    var table=document.createElement("table");
    table.border=0;
    table.cellPadding=8;
    table.cellSpacing=0;
    table.style.width="100%";
    table.style.height="100%";
    table.style.fontSize="1em";
    addEvent(table,"contextmenu",cancelEventExceptForTextInput);
    addEvent(table,"selectstart",cancelEventExceptForTextInput);
    addEvent(table,"dragstart",cancelEventExceptForTextInput);
    var tbody=document.createElement("tbody");
    var row1=document.createElement("tr");
    row1.className=ModalDialog.classNonSelectableText;
    var cell1=document.createElement("td");
    var image1=new Image();
    image1.border=0;
    image1.width=32;
    image1.height=32;
    image1.src=ModalDialog.iconPrompt;
    cell1.appendChild(image1);
    row1.appendChild(cell1);
    var cell2=document.createElement("td");
    var text1=document.createTextNode(message);
    cell2.appendChild(text1);
    row1.appendChild(cell2);
    var row2=document.createElement("tr");
    var cell3=document.createElement("td");
    row2.appendChild(cell3);
    var cell4=document.createElement("td");
    var input1=document.createElement('input');
    input1.type="text";
    input1.style.width="300px";
    input1.value=defaultInput;
    cell4.appendChild(input1);
    row2.appendChild(cell4);
    var row3=document.createElement("tr");
    row3.className=ModalDialog.classNonSelectableText;
    var cell5=document.createElement("td");
    cell5.colSpan=2;
    cell5.align="center";
    var button1=document.createElement('input');
    button1.type="button";
    button1.value=ModalDialog.okButtonText;button1.style.width="82px";
    button1.style.height="26px";
    addEvent(button1,"click",function(e){var input=input1.value;if(validateFunction(input)){ModalDialog.close();returnFunction(input);}else{if(input1.value=="")input1.value=defaultInput;input1.select();}});
    cell5.appendChild(button1);
    var text2=document.createTextNode("\u00a0\u00a0");
    cell5.appendChild(text2);
    var button2=document.createElement('input');
    button2.type="button";
    button2.value=ModalDialog.cancelButtonText;
    button2.style.width="82px";
    button2.style.height="26px";
    addEvent(button2,"click",function(e){ModalDialog.close();returnFunction(null);});
    cell5.appendChild(button2);
    row3.appendChild(cell5);
    tbody.appendChild(row1);
    tbody.appendChild(row2);
    tbody.appendChild(row3);
    table.appendChild(tbody);
    ModalDialog.divContent.appendChild(table);
    ModalDialog.setTitle(ModalDialog.promptTitleText);
    ModalDialog.onParentResize();
    ModalDialog.divPageMask.style.display="block";
    ModalDialog.divDialog.style.display="block";
    ModalDialog.resize(375,135);
    ModalDialog.center();
    input1.select();
    addEvent(window,"resize",ModalDialog.onParentResize);
    ModalDialog.okButton=button1;
    ModalDialog.cancelButton=button2;
    addEvent(ModalDialog.parent,"keydown",ModalDialog.onKeyDown);
}

ModalDialog.onKeyDown=function(e){if(!e)var e=window.event;switch(e.keyCode){case 13:ModalDialog.okButton.click();return false;break;case 27:ModalDialog.cancelButton.click();return false;break;}}

ModalDialog.resize=function(width,height){
    ModalDialog.divTitleBar.style.width=width+"px";
    ModalDialog.divContent.style.width=width+"px";
    ModalDialog.divContent.style.height=height+"px";
    if(ModalDialog.frameContent){
        ModalDialog.frameContent.style.width=width+"px";
        ModalDialog.frameContent.style.height=height+"px";
    }
    ModalDialog.divContentMask.style.left=ModalDialog.divContent.offsetLeft+"px";
    ModalDialog.divContentMask.style.top=ModalDialog.divContent.offsetTop+"px";
    ModalDialog.divContentMask.style.width=width+"px";
    ModalDialog.divContentMask.style.height=height+"px";
}

ModalDialog.center=function(){var dialogWidth=ModalDialog.divDialog.offsetWidth;var dialogHeight=ModalDialog.divDialog.offsetHeight;var parentPosition=findPosition(ModalDialog.parent);ModalDialog.divDialog.style.left=parentPosition[0]+(ModalDialog.getParentWidth()-dialogWidth)/2+"px";ModalDialog.divDialog.style.top=parentPosition[1]+(ModalDialog.getParentHeight()-dialogHeight)/2+"px";}
ModalDialog.getParentWidth=function(){if(ModalDialog.parent==document.body)
return Viewport.getWidth();else
return ModalDialog.parent.offsetWidth;}
ModalDialog.getParentHeight=function(){if(ModalDialog.parent==document.body)
return Viewport.getHeight();else
return ModalDialog.parent.offsetHeight;}
ModalDialog.close=function(){ModalDialog.divPageMask.style.display="none";ModalDialog.divDialog.style.display="none";while(ModalDialog.divContent.hasChildNodes())
ModalDialog.divContent.removeChild(ModalDialog.divContent.firstChild);removeEvent(window,"resize",ModalDialog.onParentResize);removeEvent(ModalDialog.parent,"keydown",ModalDialog.onKeyDown);}
ModalDialog.setTitle=function(titleText){ModalDialog.textTitle.nodeValue=titleText?titleText:"\u00a0";}
ModalDialog.fitToContent=function(doc){var w,h;if(doc.documentElement&&(doc.documentElement.scrollWidth||doc.documentElement.scrollHeight)){w=doc.documentElement.scrollWidth;h=doc.documentElement.scrollHeight;}else if(document.body){w=doc.body.scrollWidth;h=doc.body.scrollHeight;}
if(w>ModalDialog.width||h>ModalDialog.height){ModalDialog.resize(w,h);ModalDialog.center();}}
ModalDialog.onMoveStart=function(e){if(!e)var e=window.event;ModalDialog.onMoveStop(e);var leftButton=(e.which)?(e.which==1):(e.button==1);if(!leftButton)return;var mouseX=(e.pageX)?e.pageX:e.clientX+document.body.scrollLeft;var mouseY=(e.pageY)?e.pageY:e.clientY+document.body.scrollTop;ModalDialog.relativeMouseX=mouseX-ModalDialog.divDialog.offsetLeft;ModalDialog.relativeMouseY=mouseY-ModalDialog.divDialog.offsetTop;addEvent(ModalDialog.parent,"mouseup",ModalDialog.onMoveStop);addEvent(ModalDialog.parent,"mousemove",ModalDialog.onMove);ModalDialog.divContentMask.style.display="block";}
ModalDialog.onMoveStop=function(e){removeEvent(ModalDialog.parent,"mouseup",ModalDialog.onMoveStop);removeEvent(ModalDialog.parent,"mousemove",ModalDialog.onMove);ModalDialog.divContentMask.style.display="none";}
ModalDialog.onMove=function(e){if(!e)var e=window.event;var leftButton=(e.which)?(e.which==1):(e.button==1);if(!leftButton)
ModalDialog.onMoveStop(e);var mouseX=(e.pageX)?e.pageX:e.clientX+document.body.scrollLeft;var mouseY=(e.pageY)?e.pageY:e.clientY+document.body.scrollTop;ModalDialog.divDialog.style.left=mouseX-ModalDialog.relativeMouseX+"px";ModalDialog.divDialog.style.top=mouseY-ModalDialog.relativeMouseY+"px";}
ModalDialog.onParentResize=function(e){var parentPosition=findPosition(ModalDialog.parent);ModalDialog.divPageMask.style.left=parentPosition[0]+"px";ModalDialog.divPageMask.style.top=parentPosition[1]+"px";ModalDialog.divPageMask.style.width=ModalDialog.getParentWidth()+"px";ModalDialog.divPageMask.style.height=ModalDialog.getParentHeight()+"px";}
