// JavaScript Document


// Create a jquery plugin that prints the given element.

jQuery.fn.print = function(){

	// NOTE: We are trimming the jQuery collection down to the

	// first element in the collection.

	if (this.size() > 1){

		this.eq( 0 ).print();

		return;

	} else if (!this.size()){

		return;

	}

 

	// ASSERT: At this point, we know that the current jQuery

	// collection (as defined by THIS), contains only one

	// printable element.

 

	// Create a random name for the print frame.

	var strFrameName = ("printer-" + (new Date()).getTime());

 

	// Create an iFrame with the new name.

	var jFrame = $( "<iframe name='" + strFrameName + "'>" );

 

	// Hide the frame (sort of) and attach to the body.

	jFrame

		.css( "width", "1px" )

		.css( "height", "1px" )

		.css( "position", "absolute" )

		.css( "left", "-9999px" )

		.appendTo( $( "body:first" ) )

	;

 

	// Get a FRAMES reference to the new frame.

	var objFrame = window.frames[ strFrameName ];

 

	// Get a reference to the DOM in the new frame.

	var objDoc = objFrame.document;

 

	// Grab all the style tags and copy to the new

	// document so that we capture look and feel of

	// the current document.

 

	// Create a temp document DIV to hold the style tags.

	// This is the only way I could find to get the style

	// tags into IE.

	var jStyleDiv = $( "<div>" ).append(

		$( "style" ).clone()

		);

 

	// Write the HTML for the document. In this, we will

	// write out the HTML of the current element.

	objDoc.open();

	objDoc.write( "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">" );

	objDoc.write( "<html>" );

	objDoc.write( "<body>" );

	objDoc.write( "<head>" );

	objDoc.write( "<title>" );

	objDoc.write( document.title );

	objDoc.write( "</title>" );

	objDoc.write( jStyleDiv.html() );

	objDoc.write( "</head>" );

	objDoc.write( this.html() );

	objDoc.write( "</body>" );

	objDoc.write( "</html>" );

	objDoc.close();

 

	// Print the document.

	objFrame.focus();

	objFrame.print();

 

	// Have the frame remove itself in about a minute so that

	// we don't build up too many of these frames.

	setTimeout(

		function(){

			jFrame.remove();

		},

		(60 * 1000)

		);

}
