/*
 * Jquery Printer Plugin
 * Version: 1.0.0
 *
 * Changelog: 
 * Version: 1.0.0
 *
 */

jQuery.fn.print = function( options ){
	
	var settings = { // Defaults
		css : '',
		logo : '',
		footer : ''
	};
	
	// If options exist, lets merge them with our default settings
	if ( options ) { 
		$.extend( settings, options );
	}

	// 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( "<head>" );
	objDoc.write( "<title>" );
	objDoc.write( document.title );
	objDoc.write( "</title>" );
	
	if( settings.css != ""){
		objDoc.write( settings.css );
	}
	
	objDoc.write( jStyleDiv.html() );
	objDoc.write( "</head>" );
	
	if( settings.logo != ""){
		objDoc.write( settings.logo );
	}
	
	objDoc.write( "<body>" );
	objDoc.write( this.outerHTML() );
	
	if( settings.footer != ""){
		objDoc.write( settings.footer );
	}
	
	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)
	);
}
