
(function($){$.fn.printElement=function(options){var mainOptions=$.extend({},$.fn.printElement.defaults,options);$("[id^='printElement_']").remove();return this.each(function(){var opts=$.meta?$.extend({},mainOptions,$this.data()):mainOptions;_printElement($(this),opts);});};$.fn.printElement.defaults={printMode:'iframe',pageTitle:'',overrideElementCSS:[],printBodyOptions:{styleToAdd:'padding:10px;margin:10px;',classNameToAdd:''},leaveOpen:false,iframeElementOptions:{styleToAdd:'position:absolute;width:0px;height:0px;',classNameToAdd:''}};function _printElement(element,opts){var $elementToPrint=$(element);var html=_getMarkup($elementToPrint,opts);var popupOrIframe=null;var documentToWriteTo=null;if(opts.printMode.toLowerCase()=='popup'){popupOrIframe=window.open('','printElementWindow','width=650,height=440,scrollbars=yes');documentToWriteTo=popup.document;}
else{var printElementID="printElement_"+(Math.random()*99999).toString();iframe=document.createElement('IFRAME');$(iframe).attr({style:opts.iframeElementOptions.styleToAdd,id:printElementID,className:opts.iframeElementOptions.classNameToAdd});document.body.appendChild(iframe);documentToWriteTo=iframe.contentWindow.document;var iframe=document.frames?document.frames[printElementID]:document.getElementById(printElementID);popupOrIframe=iframe.contentWindow||iframe;}
documentToWriteTo.open();documentToWriteTo.write(html);documentToWriteTo.close();popupOrIframe.focus();};function _getMarkup(element,opts){var $elementToPrint=$(element);var html=new Array();html.push('<html><head><title>'+opts.pageTitle+'</title>');if(opts.overrideElementCSS&&opts.overrideElementCSS.length>0){for(var x=0;x<opts.overrideElementCSS.length;x++){html.push('<link type="text/css" rel="stylesheet" href="'+opts.overrideElementCSS[x]+'" >');}}
else{$(document).find("link ").filter(function(){return $(this).attr("rel").toLowerCase()=="stylesheet";}).each(function(){html.push('<link type="text/css" rel="stylesheet" href="'+$(this).attr("href")+'" >');});}
html.push('</head><body onload="printPage();" style="'+opts.printBodyOptions.styleToAdd+'" class="'+opts.printBodyOptions.classNameToAdd+'">');html.push('<div class="'+$elementToPrint.attr("class")+'">'+$elementToPrint.html()+'</div>');html.push('<script type="text/javascript">function printPage() { focus();print();'+(opts.leaveOpen?'':'close();')+'}</script></body></html>');return html.join('');};})(jQuery);
