;(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 = ''
$('').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 = '
'
$('
').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";
}