;(function($){ $.fn.extend({ xWindow: function( options ) { var args = Array.prototype.slice.call(arguments, 1); return this.each(function() { var method = (typeof options == 'string') ? options : 'init', xWindow = $.data(this, 'xWindow') || $.data( this, 'xWindow', new $.xWindow(this, options)); xWindow[method].apply(xWindow, args); }); } }); $.xWindow = function(elem, options) { /**************************************************************************/ //Defaults var d = { title: '', status: '', position: 'center', width:'' , height:'', content: null, draggable: true, resizable: true, closable: false, maximizable: true, minimizable: true, autoShow: true, close: function(){}, resize: function(){}, restoreAfterDestroy: false, modal: false, overlayOpacity: 0.7, stayInView: false, draggableOptions: { cancel: '.xWindow-content,.xWindow-titlebar-btn', helper: 'clone', //or original || clone opacity: 0.7, scroll: true, scrollSensitivity: 80, scrollSpeed: 20 }, resizableOptions: { cancel: '.xWindow-content', maxWidth: null, maxHeight: null, minWidth: 200, minHeight: 100, containment: null, helper: 'xWindow-resizable-proxy' }, titlebar: true, statusbar: true, animate: false, showAnimation: {opacity: "show"}, closeAnimation: {opacity: "hide"}, mimimizeAnimation: null, maximizeAnimation: null, speed: 200, extension: false, buttons: null, bgiframe: true }; $.extend(d, options); /**************************************************************************/ //Privat variables var $elem = $(elem), $xWindow, $title, $titlebar, $titlebarButtons, $buttonsPanel, $status, $statusbar, $overlay, $bgiframe, $wnd = $(window), $doc = $(document), self = this, size = { width: d.width, height: d.height }, pos = d.position, savedPos = {}, savedSize = {}, statusbarHeight, titlebarHeight, buttonsPanelHeight ; /**************************************************************************/ //Public variables this.$elem = $elem; this.$xWindow = $xWindow; this.mimimized = false; this.maximized = false; this.contentSize = {}; this.buttons = {}; /**************************************************************************/ //Public methods this.init = function() { create(); d.autoShow && self.show(); //fix selectboxes in IE6 if (d.bgiframe && $.fn.bgiframe) { $xWindow.bgiframe(); $bgiframe = $xWindow.children('.bgiframe'); }; $doc.keydown(function(e) { if ($xWindow.hasClass('selected') && e.keyCode) { var ESC = 27, enter = 13; //e.keyCode == ESC && self.destroy(); e.keyCode == enter && $buttonsPanel && $buttonsPanel.children('.focus').click(); }; }); //alert('init' + document.getElementById("shield").style.display); }; this.object = function ( callback ) { createCallback(callback, [self]); }; this.defaults = function ( param ) { typeof param == 'object' ? $.extend(d, param) : createCallback(param, [d]); }; this.title = function ( param ) { /^[\s[]?function/.test( param + "" ) ? createCallback(param, [$title.text()]) : $title.text(param); }; this.status = function ( param ) { /^[\s[]?function/.test( param + "" ) ? createCallback(param, [$status.text()]) : $status.text(param); }; this.position = function ( param ) { typeof param == 'object' ? position(param) : createCallback(param, [pos]); }; this.size = function( param ) { typeof param == 'object' ? resize(param) : createCallback(param, [size]); }; //toggle minimize this.minimize = function() { //restore normal state self.maximized && self.maximize(); //minimize window if (!self.minimized) { saveSize(size); $statusbar && $statusbar.hide(); $buttonsPanel && $buttonsPanel.hide(); resize({width: size.width , height: $titlebar.height()}); self.minimized=true; } //restore window else { restoreSize(); resize(size); $statusbar && $statusbar.show(); $buttonsPanel && $buttonsPanel.show(); self.minimized = false; }; //alert('minimize' + document.getElementById("shield").style.display); }; //toggle fullscreen this.maximize = function() { //restore normal state self.minimized && self.minimize(); //fullscreen window if (!self.maximized) { saveSize(size); savePos(pos); position({top: 5, left: 5}); resize({width: $wnd.width()-10, height: $wnd.height()-10}); self.maximized=true; } //restore window else { restoreSize(); restorePos(); $xWindow.css(pos) resize(size); self.maximized=false; }; //alert('maximize' + document.getElementById("shield").style.display); }; this.show = function() { d.animate && d.showAnimation ? $xWindow.animate(d.showAnimation, d.speed) : $xWindow.show(); self.select(); titlebarHeight = $titlebar ? $titlebar.height() : 0; buttonsPanelHeight = $buttonsPanel ? $buttonsPanel.height() : 0; statusbarHeight = $statusbar ? $statusbar.height() : 0; resize({width: d.width, height: d.height}); position(d.position); //alert('show' + document.getElementById("shield").style.display); }; this.destroy = function() { //alert('destroy' + document.getElementById("shield").style.display); //setOpacity($("#content"),100); document.getElementById("shield").style.display = "none"; d.restoreAfterDestroy && $elem.removeClass('xWindow-content').hide().appendTo('body'); $.removeData($elem); $titlebar && $.removeData($titlebar, "ui-mouse"); $statusbar && $.removeData($statusbar, "ui-mouse"); $overlay && $overlay.remove(); $.removeData($elem.get(0), 'xWindow'); if($xWindow != null && $xWindow != undefined){ d.animate && d.closeAnimation ? $xWindow.animate(d.closeAnimation, d.speed, function(){ $xWindow.remove(); createCallback(d.onClose, [self]); }) : $xWindow.remove(); } createCallback(d.close, [self]); }; this.hide = function() { d.animate && d.closeAnimation ? $xWindow.animate(d.closeAnimation, d.speed) : $xWindow.hide(); createCallback(d.onClose, [self]); //alert('hide' + document.getElementById("shield").style.display); }; this.select = function() { $('.xWindow:visible').removeClass('selected'); $xWindow.addClass('selected'); }; this.buttonEnabled = function (buttonName, sw) { var action = sw ? 'removeClass' : 'addClass'; self.buttons[buttonName].$elem[action]('disabled'); //alert('buttonEnabled' + document.getElementById("shield").style.display); }; /**************************************************************************/ //Private methods function create () { $xWindow = $('
'); d.extension && $xWindow.addClass('xWindow-extended '+ d.extension); //add titlebar d.titlebar && titlebar(d.title || $elem.attr('title')); //add user container $elem.addClass('xWindow-content').show(). appendTo($xWindow); //add buttons d.buttons && buttons(d.buttons); //add status Bar d.statusbar ? statusbar(d.status) : $xWindow.addClass('no-xWindow-statusbar'); //set on top by click on each element $xWindow.children().mousedown(self.select); //add content d.content && $elem.html(d.content); //stayInView (d.stayInView || d.modal) && $doc.scroll(function(){position('center')}); //make it draggable d.draggable && $.fn.draggable && draggable(); //make it resizable d.resizable && $.fn.resizable && $statusbar && resizable(); //show overlay if modal if (d.modal) { $overlay = $('
'). css({'opacity':d.overlayOpacity, 'height' : $doc.height()}). appendTo('body'); d.bgiframe && $.fn.bgiframe && $overlay.bgiframe(); }; $xWindow.appendTo('body'); //alert('create' + document.getElementById("shield").style.display); }; function resize (s) { $.extend(size, s); $xWindow.css(size); initContentSize(); createCallback(d.resize, [self]); //alert('resize' + document.getElementById("shield").style.display); }; function initContentSize () { self.contentSize.height = size.height-titlebarHeight-statusbarHeight - buttonsPanelHeight; //self.contentSize.width = size.width; $elem.css(self.contentSize); //alert('initContentSize' + document.getElementById("shield").style.display); }; function titlebar (title) { $titlebar = $('
').appendTo($xWindow); $title = $(''+title+'').appendTo($titlebar); d.title = title; //add panel for titlebar buttons if (d.closable || d.minimizable || d.maximizable) $titlebarButtons = $('
'). appendTo($titlebar); d.closable && $('
'). appendTo($titlebarButtons). click(self.destroy); /*d.maximizable && $('
'). appendTo($titlebarButtons). click(self.maximize); d.minimizable && $('
'). appendTo($titlebarButtons). click(self.minimize); */ //alert('titlebar' + document.getElementById("shield").style.display); }; function buttons (btns) { if (!btns) return; $buttonsPanel = $('
'); var $container = $('
'), $button; var i=0; $.each(btns, function(name,val){ $button = $(''+val.title+''); val.focus && $button.addClass('focus').focus(); val.disabled && $button.addClass('disabled'); i>0 && $button.addClass('margin'); $button.click(function (){ !$(this).hasClass('disabled') && val.onclick(self); return false; }).appendTo($container); $.extend(self.buttons[i], val, {$elem: $button}); i++; }); $container.appendTo($buttonsPanel); $buttonsPanel.appendTo($xWindow); //alert('buttons' + document.getElementById("shield").style.display); }; function statusbar (status) { $statusbar = $('
'). appendTo($xWindow); $status = $(''+status+'').appendTo($statusbar); //alert('statusbar' + document.getElementById("shield").style.display); }; function draggable () { var dragHandles = []; $titlebar && dragHandles.push($titlebar.get(0)); $statusbar && dragHandles.push($statusbar.get(0)); if (dragHandles.length>0) { $.extend(d.draggableOptions, { handle : dragHandles, start: function(e,obj) { obj.helper.children('.xWindow-content').remove(); $xWindow.hide(); $bgiframe && $bgiframe.remove(); }, stop: function(e,obj) { position({top:obj.position.top-$doc.scrollTop(),left:obj.position.left-$doc.scrollLeft()}); $xWindow.show(); d.bgiframe && $xWindow.bgiframe(); } }); $xWindow.draggable(d.draggableOptions); }; //alert('draggable' + document.getElementById("shield").style.display); }; function resizable () { $.extend(d.resizableOptions, { handles : { se: $('
').appendTo($statusbar) }, stop: function(e, obj){ resize({width: obj.size.width, height: obj.size.height}); } }); $xWindow.resizable(d.resizableOptions); //alert('resizable' + document.getElementById("shield").style.display); }; function position (p) { var scrTop = $doc.scrollTop(), scrLeft = $doc.scrollLeft(); p = (typeof p == 'object') ? { left: p.left ? scrLeft+p.left : null, top: p.top ? scrTop+p.top : null, right: p.right ? scrLeft+p.right : null, bottom: p.bottom ? scrLeft+p.bottom : null } : (p == 'center') ? { top: Math.round(scrTop + ($wnd.height() - size.height)/2), left: Math.round(scrLeft + ($wnd.width() - size.width)/2) } : p; pos = $.extend({position: 'absolute'}, p); $xWindow.css(pos); //alert('position' + document.getElementById("shield").style.display); }; function savePos ( p ) { $.extend(savedPos,p); }; function saveSize ( s ) { $.extend(savedSize,s); }; function restorePos () { var prevPos = $.extend({},savedPos); $.extend(savedPos, pos); $.extend(pos,prevPos); //alert('restorePos' + document.getElementById("shield").style.display); }; function restoreSize () { var prevSize = $.extend({},savedSize); $.extend(savedSize, size); $.extend(size,prevSize); //alert('restoreSize' + document.getElementById("shield").style.display); }; function createCallback (fn,params) { typeof fn == 'string' && eval('fn='+fn); typeof fn == 'function' && fn.apply(self,params); //alert('createCallback' + document.getElementById("shield").style.display); }; }; })(jQuery); function alertMessages(message, title){ var showMessageJQuery = '
'+ ''+ ''+ ''+ '
 
'+message+'
'+ '
' $('
').xWindow({ content: showMessageJQuery, width:370, height:220, title: '                                     '+title, closable: true, animate: true, showAnimation: {opacity: "show"}, speed: 500, position: {top: 25, left: 250} }); } function largeMessage(message, title){ var showMessageJQuery = '
'+ ''+ ''+ ''+ '
 
'+ '
'+message+'
' $('
').xWindow({ content: showMessageJQuery, title: '                                     '+title, closable: true, animate: true, showAnimation: {opacity: "show"}, speed: 500, position: 'top', width:700, height:1050 }); } function closeshowMessageJQueryWindow(){ $('#showMessageJQueryWindow').xWindow('destroy'); document.getElementById("shield").style.display = "none"; }