/**
 * @author acid
 */

if(window.jscore) (function() {
	jscore.requireJS(["dnd","effects"]);
	jscore.namespace("jscore.widget.dialog");

        var windowSilhouette=null;
	var b = jscore;
	var curZIndex = 0;
	jscore.extend("jscore.widget.dialog",{
		dialogs : {},
		
		setDialog : function(properties) {
			if("" in properties) {
				
			}
		},
		centerDialog : function(el) {
			if(b.isString(el)) {
                el = b.ge(el);
            }
            
            if(el && el.style) {
            	el.style.top = "50%";
            	el.style.left = "50%";
            	el.style.marginLeft = "-"+Math.floor(el.offsetWidth/2)+"px";
            	el.style.marginTop = "-"+Math.floor(el.offsetHeight/2)+"px";
            }
		},

        setDialogResizable : function(el,value) {
            value = value || null;
            var _this=this
            if(b.isString(el)) {
                el = b.ge(el);
            }
            
            if(jscore.dnd && el) {
            
                var divResize = jscore.ne("div");
                divResize.style.position="absolute";
                divResize.style.right="-2px";
                divResize.style.bottom="0";
                divResize.style.height="10px";
                divResize.style.width="10px";
                divResize.style.cursor="se-resize";
                divResize.style.textAlign="right";
                divResize.innerHTML = "&#9496;"; // or &#9565;
                divResize.fontSize = "100%";
                divResize.onmousedown = function(){return false;};
                el.appendChild(divResize);
                jscore.dnd.draggable(divResize,value,this.resizeDialog,null,null);
                
                jscore.widget.dialog.centerDialog(el.parentNode);
            }
            
            
        },
        setDialogMovable : function(el,value,moveEl) {
            value = value || null;
            moveEl = moveEl || false;

            if(jscore.isString(moveEl)) {
                if(moveEl == "") {
                    moveEl = false;
                }
            }

            var ele,_this=this;
            if(b.isString(el)) {
                ele = b.ge(el);
                if(!moveEl && ele) {
                    moveEl = ele.parentNode;
                }
            }

            
            
            
            if(jscore.dnd && ele && moveEl) {

                
                if(!windowSilhouette) {
                    windowSilhouette = jscore.ne("div");
                    windowSilhouette.style.position="absolute";
                    windowSilhouette.style.right="-2px";
                    windowSilhouette.style.bottom="0";
                    windowSilhouette.style.textAlign="right";
                    windowSilhouette.innerHTML = "&nbsp;"; // or &#9565;
                    windowSilhouette.fontSize = "100%";
                    windowSilhouette.style.display = "none";
                    windowSilhouette.style.zIndex="9999";
                    windowSilhouette.style.border="1px dotted #ddd";
                    windowSilhouette.style.backgroundColor="#222";
                    windowSilhouette.style.left = "1px";
                    windowSilhouette.style.top = "1px";


                    jscore.effects.opacity(windowSilhouette,70);
                    //windowSilhouette.onmouseup = function(){return false;};
                    document.body.appendChild(windowSilhouette);
                    //jscore.dnd.draggable(windowSilhouette,null,null,null,null);
                    windowSilhouette.onmouseup = function() {
                        this.style.display="none";
                        
                    }
                }
            	
                if(ele) ele.style.cursor="move";

                jscore.dnd.draggable(el,value,
                    function(x,y,e,el){
                        
                        //*
                        
                        //windowSilhouette._jscDND = el._jscDND;
                    //*/
                        //windowSilhouette.style.left = (x-(windowSilhouette._jscDND.clickX))+"px";
                        //windowSilhouette.style.top = (y-(windowSilhouette._jscDND.clickY))+"px";
                        //jscore.dnd.callOnDown(e,windowSilhouette);
                        //console.log("X:"+x+", Y:"+y);
                        if(!jscore.Browser.IE) {
                            //x += jscore.getScrollLeft();
                            //y += jscore.getScrollTop();
                        } else {
                            x -= jscore.getScrollLeft();
                            y -= jscore.getScrollTop();
                        }

                        windowSilhouette._jscDND.moveX = x;
                        windowSilhouette._jscDND.moveY = y;
                        
                        
                        _this.moveDialog(x,y,e,el,windowSilhouette);
                    },
                    function(e,el){
                       //moveEl.style.display="";
                       if(!jscore.Browser.IE) {
                            //windowSilhouette._jscDND.moveX -= jscore.getScrollLeft();
                               //windowSilhouette._jscDND.moveY -= jscore.getScrollTop();
                        } else {
                            //x -= jscore.getScrollLeft();
                            //y -= jscore.getScrollTop();
                            windowSilhouette._jscDND.moveX += jscore.getScrollLeft();
                               windowSilhouette._jscDND.moveY += jscore.getScrollTop();
                        }
                       
                       
                       _this.moveDialog(windowSilhouette._jscDND.moveX,windowSilhouette._jscDND.moveY,e,windowSilhouette,moveEl);
                       windowSilhouette.style.display = "none";
                       
                       
                    },
                    function(e,el) {
                        windowSilhouette._jscDND = el._jscDND;
                        jscore.mouse.update(e);
						//jscore.mouse.x += jscore.getScrollLeft();
						//jscore.mouse.y += jscore.getScrollTop();
                      var pos = jscore.getPos(windowSilhouette);

                       var x = (jscore.mouse.x-pos.x);
                       var y = (jscore.mouse.y-pos.y);
                       x += jscore.getScrollLeft();
                       y += jscore.getScrollTop();
                       
                       
                       x = (x-(windowSilhouette._jscDND.clickX));
                       y = (y-(windowSilhouette._jscDND.clickY));

						x += jscore.getScrollLeft();
						y += jscore.getScrollTop();

                       if(x > 0) windowSilhouette.style.left = x+"px";
                       if(y > 0) windowSilhouette.style.top = y+"px";
                        windowSilhouette.style.marginLeft="0";
                        windowSilhouette.style.marginTop="0";
                        windowSilhouette.style.width=moveEl.offsetWidth+'px';
                        windowSilhouette.style.height=moveEl.offsetHeight+'px';
                        
                        setTimeout(function(){windowSilhouette.style.display = "";},0);
                    }
                );
                
                jscore.widget.dialog.centerDialog(ele.parentNode);
            }
            
            
        },
		
		hideDialog : function(el,elModal) {
                    if(b.isString(el)) {
                        el = b.ge(el);
                    }

                    if(elModal) {
                        if(b.isString(elModal)) {
                            elModal = b.ge(elModal);
                        }
                        this.hideModal(elModal);
                    }
                    

                    if(el) {
                        if(el.offsetLeft >= 0) {
                                el.style.left = (el.offsetLeft-(el.offsetLeft*2))+"px";
                                el.style.top = (el.offsetTop-(el.offsetTop*2))+"px";
                        }
                        el.style.visibility = "hidden";
                    }

                    
		},
		
		showDialog : function(el,elModal) {
                    if(b.isString(el)) {
                            el = b.ge(el);
                    }

                    if(elModal) {
                        if(b.isString(elModal)) {
                            elModal = b.ge(elModal);
                        }
                        this.showModal(elModal);
                    }

                    if(el) {
                        if(el.offsetLeft < 0) {
                                el.style.left = (el.offsetLeft-(el.offsetLeft*2))+"px";
                                el.style.top = (el.offsetTop-(el.offsetTop*2))+"px";
                        }
                        //this.focusDialog(el);
                        el.style.visibility = "visible";
                        this.centerDialog(el);
                    }
		},

        hideModal : function(el) {
                    if(b.isString(el)) {
                        el = b.ge(el);
                    }
                    if(el) {
                        el.style.visibility = "hidden";
                    }
		},

		showModal : function(el) {
                    if(b.isString(el)) {
                        el = b.ge(el);
                    }

                    if(el) {
                        el.style.visibility = "visible";
                    }
		},
		
		focusDialog : function(el) {
			if(b.isString(el)) {
				el = b.ge(el);
			}
			if(el) {
				if (el.style.visibility == "visible") {
					curZIndex++;
					el.style.zIndex = curZIndex;
				}
			}
		},
		
		blurDialog : function(el) {

		},
		
		moveDialog : function(x,y,e,el,moveEl) {
                    //console.log(el);
                    //if(el._jscDND) {

                    
                        //*
                        moveEl.style.marginLeft="0";
                        moveEl.style.marginTop="0";

                        moveEl.style.left = (x-(el._jscDND.clickX))+"px";
                        moveEl.style.top = (y-(el._jscDND.clickY))+"px";

                        if(moveEl.offsetTop < 1) {

                            moveEl.style.top = "1px";
                        }

                        if(moveEl.offsetLeft < 1) {

                            moveEl.style.left = "1px";
                        }
                     //*/
                        jscore.endPropogation(e);
                    //}
		},

                buildInfoDialog : function(prefix_id,header_txt,createHeader,dialog_style) {
                        prefix_id = prefix_id || "Info";
                        header_txt = header_txt || "";


                        if(jscore.isString(prefix_id) && jscore.isString(header_txt) && jscore.widget.dialog && jscore.effects) {
                            var modal = jscore.ce("div",{
                                id : prefix_id+"modalDialog",
                                className: "DialogModal",
                                style : {visibility:"hidden"}
                            });

                            var dialog = jscore.ce("div",{
                                id : prefix_id+"mainDialogModal",
                                className: "DialogModal",
                                style : {visibility:"hidden",minWidth:"200px",border:"1px solid #ddd"}
                            });

                            modal.style.zIndex = 5000;
                            dialog.style.zIndex = 5001;
                            dialog.style.height = "auto";
                            dialog.style.maxWidth = "100%";
                            dialog.style.width = "300px";
                            
                            if(jscore.isObject(dialog_style)) {
                            	jscore.extend(dialog,dialog_style);
                            }

                            if(createHeader === false) {
                                dialog.innerHTML = '<div class="DialogContent" style="position:relative;background-color:#fff;color:#000" id="'+prefix_id+'contentDialogModal" ></div>';
                                
                            } else {
                                dialog.innerHTML = '<div class="DialogHeader" id="'+prefix_id+'headerDialogModal">'+
                                                        '<div style="position:relative;" id="'+prefix_id+'headerTxtDialogModal">'+header_txt+'</div></div>'+
                                                        '<div class="DialogContent" style="position:relative;background-color:#fff;color:#000" id="'+prefix_id+'contentDialogModal" >'+
                                                    '</div>';
                            }

                            document.body.appendChild(modal);
                            document.body.appendChild(dialog);

                            jscore.widget.dialog.setDialogMovable(prefix_id+'headerDialogModal',null,'');
                            jscore.effects.opacity(modal,70);

                        }
                    },

                imageDialog : function(imgSrc,callback,width,height) {
                    var dialog_id = "ImagemainDialogModal",modal_id = "ImagemodalDialog",content_id = "ImagecontentDialogModal";
                    if(!jscore.ge(dialog_id)) {
                        this.buildInfoDialog("Image","",false);
                        jscore.ge(dialog_id).style.width = "";
                        //jscore.ge(dialog_id).style.position = "absolute";
                        jscore.ge(content_id).style.padding = "5px";
                    }

                    jscore.ge(modal_id).onmousedown = function(e) {
                        var e = e || window.event;

                        jscore.widget.dialog.hideDialog(dialog_id,modal_id);

                        if(jscore.isFunction(callback)) {
                            callback();
                        }

                        jscore.endPropogation(e);
                   }

                    

                    if(jscore.ge(content_id) && jscore.ge(dialog_id)) {
                        var scrn = jscore.getScreenSize();
                        

                        if(width) {
                            jscore.ge(dialog_id).style.width = width+"px";
                        } else {
                            //jscore.ge(dialog_id).style.maxWidth = Math.floor(scrn['width']*0.7)+"px";
                            jscore.ge(dialog_id).style.maxWidth = "50%";
                            jscore.ge(dialog_id).style.width = "auto";
                            
                        }

                        if(height) {
                            jscore.ge(dialog_id).style.height = height+"px";
                        } else {
                            //jscore.ge(dialog_id).style.maxHeight = Math.floor(scrn['height']*0.7)+"px";

                            jscore.ge(dialog_id).style.height = "auto";
                        }
                       // console.log((width ? "width:"+width+"px;" : "width:"+Math.floor(scrn['width']*0.7)+"px;")+(height ? "height:"+height+"px" : "height:"+Math.floor(scrn['height']*0.7)+"px;"));
                       //jscore.ge(content_id).innerHTML = "<img src='"+imgSrc+"' onload=\"jscore.widget.dialog.centerDialog('"+dialog_id+"');\" style='"+(width ? "width:"+width+"px;" : "width:"+(Math.floor(scrn['width']*0.7)-2)+"px;")+(height ? "height:"+height+"px" : "height:"+(Math.floor(scrn['height']*0.7)-2)+"px;")+"'>";
                       //onload=\"jscore.widget.dialog.centerDialog('"+dialog_id+"');\"
                       jscore.ge(content_id).innerHTML = "<a href='"+imgSrc+"' target='_blank'><img src='"+imgSrc+"' onload=\"jscore.widget.dialog.centerDialog('ImagemainDialogModal');\" border='0' style='"+(width ? "width:"+width : "width:100%;")+(height ? "height:"+height : "height:auto")+"'></a>";
                    }

                    jscore.widget.dialog.showDialog(dialog_id,modal_id);
                },
		
		resizeDialog : function(x,y,e,el) {
                    //if(el) {
                        el.parentNode.style.width = (x-(el.parentNode.offsetLeft))+"px";
                        el.parentNode.style.height = (y-(el.parentNode.offsetTop))+"px";
                    //}
                    jscore.endPropogation(e);
		},
                notify : function(type,txt,callback,header_txt) {

                    if(!jscore.isString(txt)) txt = "";
                    if(!jscore.isString(header_txt)) header_txt = document.title;

                    var dialog_id = "InfomainDialogModal",modal_id = "InfomodalDialog",content_id = "InfocontentDialogModal";

                    var alertHTML = function(txt) {
                    return '<table cellpadding="0" cellspacing="0" border="0" align="center" style="position:relative;width:100%">'+
                                '<tr><td id="alertText" align="center" valign="middle">'+txt+'</td></tr>'+
                                '<tr><td id="alertButtons" nowrap align="center" valign="middle" style="padding-top:20px"><input type="button" class="button-default" style="width:60px" value="OK" id="alertBtnOk"/></td></tr>'+
                            '</table>';
                    }

                    var confirmHTML = function(txt) {
                    return '<table cellpadding="0" cellspacing="0" border="0" align="center" style="position:relative;width:100%">'+
                                '<tr><td id="confirmText" align="center" valign="middle">'+txt+'</td></tr>'+
                                '<tr><td id="confirmButtons" nowrap align="center" valign="middle" style="padding-top:20px">'+
                                     '<input type="button" value="OK" class="button-default" id="confirmBtnOk" style="width:60px"/>'+
                                     '<input type="button" value="Cancel" class="button-default" id="confirmBtnCancel" style="margin-left:20px;width:60px"/>'+
                                 '</td></tr>'+
                            '</table>';
                    }

                    var loadingHTML = function(txt) {
                    return '<table cellpadding="0" cellspacing="0" border="0" align="center" style="position:relative;width:100%">'+
                                '<tr><td id="confirmText" align="center" valign="middle">'+txt+'<br><img src="../core/_img/ajax-loader.gif"/></td></tr>'+
                            '</table>';
                    }


                    if(!jscore.ge(dialog_id)) {
                        this.buildInfoDialog("Info",header_txt);
                    }

                    if(type && jscore.widget.dialog && jscore.ge(dialog_id) && jscore.ge(modal_id)) {

                        switch(type) {
                            case 'alert' :
                                if(jscore.ge(content_id)) {
                                   jscore.ge(content_id).innerHTML = alertHTML(txt);
                                }

                                jscore.ge("alertBtnOk").onmouseup = function(e) {
                                        var e = e || window.event;

                                        jscore.widget.dialog.hideDialog(dialog_id,modal_id);

                                        if(jscore.isFunction(callback)) {
                                            callback();
                                        }

                                        jscore.endPropogation(e);
                                   }

                                jscore.widget.dialog.showDialog(dialog_id,modal_id);
                                break;
                            case 'confirm' :
                                if(jscore.ge(content_id)) {
                                   jscore.ge(content_id).innerHTML = confirmHTML(txt);

                                   jscore.ge("confirmBtnOk").onmouseup = function(e) {
                                        var e = e || window.event;

                                        jscore.widget.dialog.hideDialog(dialog_id,modal_id);

                                        if(jscore.isFunction(callback)) {
                                            callback(true);
                                        }

                                        jscore.endPropogation(e);
                                   }

                                   jscore.ge("confirmBtnCancel").onmouseup = function(e) {
                                        var e = e || window.event;

                                        jscore.widget.dialog.hideDialog(dialog_id,modal_id);

                                        if(jscore.isFunction(callback)) {
                                            callback(false);
                                        }

                                        jscore.endPropogation(e);
                                   }
                                }
                                jscore.widget.dialog.showDialog(dialog_id,modal_id);
                                break;
                            case 'loading' :
                                if(jscore.ge(content_id)) {
                                   jscore.ge(content_id).innerHTML = loadingHTML(txt);
                                }

                                jscore.widget.dialog.showDialog(dialog_id,modal_id);
                                break;

                            case 'hide' :
                                jscore.widget.dialog.hideDialog(dialog_id,modal_id);
                                break;
                            case 'blank' :
                                if(jscore.ge(content_id)) {
                                   jscore.ge(content_id).innerHTML = txt;
                                }
                                jscore.widget.dialog.showDialog(dialog_id,modal_id);
                                break;
                        }
                    }
                }
	});

})();

