(function($){$.fn.closeDOMWindow=function(settings){if(!settings){settings={};}
var run=function(passingThis){if(settings.anchoredClassName){var $anchorClassName=$('.'+settings.anchoredClassName);$anchorClassName.fadeOut(0,function(){if($.fn.draggable){$anchorClassName.draggable('destory').trigger("unload").remove();}else{$anchorClassName.trigger("unload").remove();}});if(settings.functionCallOnClose){settings.functionCallAfterClose();}}else{var $DOMWindowOverlay=$('#DOMWindowOverlay');var $DOMWindow=$('#DOMWindow');$DOMWindowOverlay.fadeOut(0,function(){$DOMWindowOverlay.trigger('unload').unbind().remove();});$DOMWindow.fadeOut(0,function(){if($.fn.draggable){$DOMWindow.draggable("destroy").trigger("unload").remove();}else{$DOMWindow.trigger("unload").remove();}});$(window).unbind('scroll.DOMWindow');$(window).unbind('resize.DOMWindow');if($.fn.openDOMWindow.isIE6){$('#DOMWindowIE6FixIframe').remove();}
if(settings.functionCallOnClose){settings.functionCallAfterClose();}}};if(settings.eventType){return this.each(function(index){$(this).bind(settings.eventType,function(){run(this);return false;});});}else{run();}};$.closeDOMWindow=function(s){$.fn.closeDOMWindow(s);};$.fn.openDOMWindow=function(instanceSettings){var shortcut=$.fn.openDOMWindow;shortcut.defaultsSettings={anchoredClassName:'',anchoredSelector:'',borderColor:'#BB0000',borderSize:'6',draggable:0,eventType:null,fixedWindowY:100,functionCallOnOpen:null,functionCallOnClose:null,height:'auto',loader:0,loaderHeight:0,loaderImagePath:'',loaderWidth:0,modal:1,overlay:1,overlayColor:'#000000',overlayOpacity:'50',positionLeft:0,positionTop:0,positionType:'centered',width:300,windowBGColor:'#FFFFFF',windowBGImage:null,windowHTTPType:'get',windowPadding:0,windowSource:'inline',windowSourceID:'',windowSourceURL:'',windowSourceAttrURL:'href'};var settings=$.extend({},$.fn.openDOMWindow.defaultsSettings,instanceSettings||{});shortcut.viewPortHeight=function(){return self.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;};shortcut.viewPortWidth=function(){return self.innerWidth||document.documentElement.clientWidth||document.body.clientWidth;};shortcut.scrollOffsetHeight=function(){return self.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop;};shortcut.scrollOffsetWidth=function(){return self.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft;};shortcut.isIE6=typeof document.body.style.maxHeight==="undefined";var sizeOverlay=function(){var $DOMWindowOverlay=$('#DOMWindowOverlay');if(shortcut.isIE6){var overlayViewportHeight=document.documentElement.offsetHeight+document.documentElement.scrollTop-4;var overlayViewportWidth=document.documentElement.offsetWidth-21;$DOMWindowOverlay.css({'height':overlayViewportHeight+'px','width':overlayViewportWidth+'px'});}else{$DOMWindowOverlay.css({'height':'100%','width':'100%','position':'fixed'});}};var sizeIE6Iframe=function(){var overlayViewportHeight=document.documentElement.offsetHeight+document.documentElement.scrollTop-4;var overlayViewportWidth=document.documentElement.offsetWidth-21;$('#DOMWindowIE6FixIframe').css({'height':overlayViewportHeight+'px','width':overlayViewportWidth+'px'});};var centerDOMWindow=function(){var $DOMWindow=$('#DOMWindow');if(settings.height+50>shortcut.viewPortHeight()){$DOMWindow.css('left',Math.round(shortcut.viewPortWidth()/2)+shortcut.scrollOffsetWidth()-Math.round(($DOMWindow.outerWidth())/2));}else{$DOMWindow.css('left',Math.round(shortcut.viewPortWidth()/2)+shortcut.scrollOffsetWidth()-Math.round(($DOMWindow.outerWidth())/2));$DOMWindow.css('top',Math.round(shortcut.viewPortHeight()/2)+shortcut.scrollOffsetHeight()-Math.round(($DOMWindow.outerHeight())/2));}};var centerLoader=function(){var $DOMWindowLoader=$('#DOMWindowLoader');if(shortcut.isIE6){$DOMWindowLoader.css({'left':Math.round(shortcut.viewPortWidth()/2)+shortcut.scrollOffsetWidth()-Math.round(($DOMWindowLoader.innerWidth())/2),'position':'absolute'});$DOMWindowLoader.css({'top':Math.round(shortcut.viewPortHeight()/2)+shortcut.scrollOffsetHeight()-Math.round(($DOMWindowLoader.innerHeight())/2),'position':'absolute'});}else{$DOMWindowLoader.css({'left':'50%','top':'50%','position':'fixed'});}};var fixedDOMWindow=function(){var $DOMWindow=$('#DOMWindow');$DOMWindow.css('left',settings.positionLeft+shortcut.scrollOffsetWidth());$DOMWindow.css('top',+settings.positionTop+shortcut.scrollOffsetHeight());};var showDOMWindow=function(instance){if(arguments[0]){$('.'+instance+' #DOMWindowLoader').remove();$('.'+instance+' #DOMWindowContent').fadeIn(0,function(){if(settings.functionCallOnOpen){settings.functionCallOnOpen();}});$('.'+instance+'.closeDOMWindow').click(function(){$.closeDOMWindow();return false;});}else{$('#DOMWindowLoader').remove();$('#DOMWindow').fadeIn(0,function(){if(settings.functionCallOnOpen){settings.functionCallOnOpen();}});$('#DOMWindow .closeDOMWindow').click(function(){$.closeDOMWindow();return false;});}};var urlQueryToObject=function(s){var query={};s.replace(/b([^&=]*)=([^&=]*)b/g,function(m,a,d){if(typeof query[a]!='undefined'){query[a]+=','+d;}else{query[a]=d;}});return query;};var run=function(passingThis){if(passingThis==undefined){var ele={};ele.settings=$.extend({},settings||{});}else{var ele=passingThis;}
ele.settings.windowSourceID=$(passingThis).attr('href')||ele.settings.windowSourceID;ele.settings.windowSourceURL=$(passingThis).attr(ele.settings.windowSourceAttrURL)||ele.settings.windowSourceURL;ele.settings.windowBGImage=ele.settings.windowBGImage?'background-image:url('+ele.settings.windowBGImage+')':'';var urlOnly,urlQueryObject;if(ele.settings.positionType=='anchored'){var anchoredPositions=$(ele.settings.anchoredSelector).position();var anchoredPositionX=anchoredPositions.left+ele.settings.positionLeft;var anchoredPositionY=anchoredPositions.top+ele.settings.positionTop;$('body').append('<div class="'+ele.settings.anchoredClassName+'" style="'+ele.settings.windowBGImage+';background-repeat:no-repeat;padding:'+ele.settings.windowPadding+'px;overflow:auto;position:absolute;top:'+anchoredPositionY+'px;left:'+anchoredPositionX+'px;height:'+ele.settings.height+'px;width:'+ele.settings.width+'px;background-color:'+ele.settings.windowBGColor+';border:'+ele.settings.borderSize+'px solid '+ele.settings.borderColor+';z-index:10001"><div id="DOMWindowContent" style="display:block"></div></div>');if(ele.settings.loader&&ele.settings.loaderImagePath!==''){$('.'+ele.settings.anchoredClassName).append('<div id="DOMWindowLoader" style="width:'+ele.settings.loaderWidth+'px;height:'+ele.settings.loaderHeight+'px;"><img src="'+ele.settings.loaderImagePath+'" /></div>');}
if($.fn.draggable){if(ele.settings.draggable){$('.'+ele.settings.anchoredClassName).draggable({cursor:'move'});}}
switch(ele.settings.windowSource){case'inline':$('.'+ele.settings.anchoredClassName+" #DOMWindowContent").append($(ele.settings.windowSourceID).children());$('.'+ele.settings.anchoredClassName).unload(function(){$('.'+ele.settings.windowSourceID).append($('.'+ele.settings.anchoredClassName+" #DOMWindowContent").children());});showDOMWindow(ele.settings.anchoredClassName);break;case'iframe':$('.'+ele.settings.anchoredClassName+" #DOMWindowContent").append('<iframe frameborder="0" hspace="0" wspace="0" src="'+ele.settings.windowSourceURL+'" name="DOMWindowIframe'+Math.round(Math.random()*1000)+'" style="width:100%;height:100%;border:none;background-color:#fff;" class="'+ele.settings.anchoredClassName+'Iframe" ></iframe>');$('.'+ele.settings.anchoredClassName+'Iframe').load(showDOMWindow(ele.settings.anchoredClassName));break;case'ajax':if(ele.settings.windowHTTPType=='post'){if(ele.settings.windowSourceURL.indexOf("?")!==-1){urlOnly=ele.settings.windowSourceURL.substr(0,ele.settings.windowSourceURL.indexOf("?"));urlQueryObject=urlQueryToObject(ele.settings.windowSourceURL);}else{urlOnly=ele.settings.windowSourceURL;urlQueryObject={};}
$('.'+ele.settings.anchoredClassName+" #DOMWindowContent").load(urlOnly,urlQueryObject,function(){showDOMWindow(ele.settings.anchoredClassName);});}else{if(ele.settings.windowSourceURL.indexOf("?")==-1){ele.settings.windowSourceURL+='?';}
$('.'+ele.settings.anchoredClassName+" #DOMWindowContent").load(ele.settings.windowSourceURL+'&random='+(new Date().getTime()),function(){showDOMWindow(ele.settings.anchoredClassName);});}
break;}}else{if(ele.settings.overlay){$('body').append('<div id="DOMWindowOverlay" style="z-index:10000;display:block;position:absolute;top:0;left:0;background-color:'+ele.settings.overlayColor+';filter:alpha(opacity='+ele.settings.overlayOpacity+');-moz-opacity: 0.'+ele.settings.overlayOpacity+';opacity: 0.'+ele.settings.overlayOpacity+';"></div>');if(shortcut.isIE6){$('body').append('<iframe id="DOMWindowIE6FixIframe" src="blank.html" style="width:100%;height:100%;z-index:9999;position:absolute;top:0;left:0;filter:alpha(opacity=0);"></iframe>');sizeIE6Iframe();}
sizeOverlay();var $DOMWindowOverlay=$('#DOMWindowOverlay');$DOMWindowOverlay.fadeIn(0);if(!ele.settings.modal){$DOMWindowOverlay.click(function(){$.closeDOMWindow();});}}
if(ele.settings.loader&&settings.loaderImagePath!==''){$('body').append('<div id="DOMWindowLoader" style="z-index:10002;width:'+ele.settings.loaderWidth+'px;height:'+ele.settings.loaderHeight+'px;"><img src="'+ele.settings.loaderImagePath+'" /></div>');centerLoader();}
$('body').append('<div id="DOMWindow" style="background-repeat:no-repeat;'+ele.settings.windowBGImage+';overflow:auto;padding:'+ele.settings.windowPadding+'px;display:block;height:'+ele.settings.height+'px;width:'+ele.settings.width+'px;background-color:'+ele.settings.windowBGColor+';border:'+ele.settings.borderSize+'px solid '+ele.settings.borderColor+';position:absolute;z-index:10001"></div>');var $DOMWindow=$('#DOMWindow');$(window).bind('scroll.DOMWindow',function(){if(ele.settings.overlay){sizeOverlay();}
if(shortcut.isIE6){sizeIE6Iframe();}
if(ele.settings.positionType=='centered'){centerDOMWindow();}
if(ele.settings.positionType=='fixed'){fixedDOMWindow();}});$(window).bind('resize.DOMWindow',function(){if(shortcut.isIE6){sizeIE6Iframe();}
if(ele.settings.overlay){sizeOverlay();}
if(ele.settings.positionType=='centered'){centerDOMWindow();}});switch(ele.settings.windowSource){case'inline':$DOMWindow.append($(ele.settings.windowSourceID).children());$DOMWindow.unload(function(){$(ele.settings.windowSourceID).append($DOMWindow.children());});showDOMWindow();break;case'iframe':$DOMWindow.append('<iframe frameborder="0" hspace="0" wspace="0" src="'+ele.settings.windowSourceURL+'" name="DOMWindowIframe'+Math.round(Math.random()*1000)+'" style="width:100%;height:100%;border:none;background-color:#fff;" id="DOMWindowIframe" ></iframe>');$('#DOMWindowIframe').load(showDOMWindow());break;case'ajax':if(ele.settings.windowHTTPType=='post'){if(ele.settings.windowSourceURL.indexOf("?")!==-1){urlOnly=ele.settings.windowSourceURL.substr(0,ele.settings.windowSourceURL.indexOf("?"));urlQueryObject=urlQueryToObject(ele.settings.windowSourceURL);}else{urlOnly=ele.settings.windowSourceURL;urlQueryObject={};}
$DOMWindow.load(urlOnly,urlQueryObject,function(){showDOMWindow();});}else{if(ele.settings.windowSourceURL.indexOf("?")==-1){ele.settings.windowSourceURL+='?';}
$DOMWindow.load(ele.settings.windowSourceURL+'&random='+(new Date().getTime()),function(){showDOMWindow();});}
break;default:}
switch(ele.settings.positionType){case'centered':centerDOMWindow();if(ele.settings.height+50>shortcut.viewPortHeight()){$DOMWindow.css('top',(ele.settings.fixedWindowY+shortcut.scrollOffsetHeight())+'px');}
break;case'absolute':$DOMWindow.css({'top':(ele.settings.positionTop+shortcut.scrollOffsetHeight())+'px','left':(ele.settings.positionLeft+shortcut.scrollOffsetWidth())+'px'});if($.fn.draggable){if(ele.settings.draggable){$DOMWindow.draggable({cursor:'move'});}}
break;case'fixed':fixedDOMWindow();break;case'anchoredSingleWindow':var anchoredPositions=$(ele.settings.anchoredSelector).position();var anchoredPositionX=anchoredPositions.left+ele.settings.positionLeft;var anchoredPositionY=anchoredPositions.top+ele.settings.positionTop;$DOMWindow.css({'top':anchoredPositionY+'px','left':anchoredPositionX+'px'});break;}}};if(settings.eventType){return this.each(function(index){var ele=this,$ele=$(ele),data;eval("var data="+$ele.attr('data'));ele.settings=$.extend({},settings,data||{});$(this).bind(settings.eventType,function(){run(this);return false;});});}else{run();}};$.openDOMWindow=function(s){$.fn.openDOMWindow(s);};})(jQuery);

