(function ($) {
	
	var div = document.createElement( "div" );
	
	jQuery.support.DOMSubtreeModified = false;
	
	function support_DOMSubtreeModified(){
		jQuery.support.DOMSubtreeModified = true;
	}
	
	if( document.implementation.hasFeature('MutationEvents','2.0') || window.MutationEvent ){
		jQuery.support.DOMSubtreeModified = true;
	}
	
	//alert(jQuery.support.DOMSubtreeModified);
	
	//div.addEventListener('DOMSubtreeModified', support_DOMSubtreeModified);
	//div.innerHTML = "<div></div>";
	
	
	
	jQuery.fn.iframeResize = function(options){
		
		
		function debug(message) {
		  if (window.console) {
			console.log(message);
		  }
		}
		
		
		var settings = {
			autoUpdate : true,
			width: false,
			height: true,
			interval: false,
			interval_postcheck: false
		};
		
		var filler = 50;
		
		return this.each(function() {        
			// If options exist, lets merge them
			// with our default settings
			if ( options ) { 
				$.extend( settings, options );
			}
						
			function updateFrame(event){
                resizeFrame(event.data);
			}
			
			function resizeFrame(obj){
				
				var _frame = obj._frame;
				var _body = obj._body;
				
				if(settings.height){
					var height = _body.outerHeight(true);
					if(parseInt(_frame.css("height")) != height && height != null && height != "" && height != 0){
						_frame.css("height", height + filler);
					}
				}
				
				if(settings.width){
					var width = _body.outerWidth(true);
					if(parseInt(_frame.css("width")) != width && width != null && width != "" && width != 0){
						_frame.css("width", width);
					}
				}
				
				//console.log(height);
			}
			
			
			
			function updateFrameIntervaled(obj){
					var e = jQuery.Event();
					e.data = obj
					updateFrame.call(obj._body, e);
			}
			
			function updateFrameIntervaledPostCheck(obj){
					clearInterval(settings.interval_postcheck);
					var e = jQuery.Event();
					e.data = obj
					updateFrame.call(obj._body, e);
			}
			
			
			$(this).load(function () {
				
				if(settings.interval){
					clearInterval(settings.interval);
				}
				
				var _frame = $(this);
				
				//var domain_root = document.domain.toLowerCase();
				//var domain_iframe = _frame.attr("src").toLowerCase();
				
				//console.log(_frame.get(0));
				
				var _body = $(_frame, window.top.document).contents().find("body");
				
				//console.log("document.domain: "+document.domain+" | _frame.domain: "+_frame.attr("src").search("health"));
				
				// if autoUpdate true
          		if (settings.autoUpdate) {
					// if support DOMSubtreeModified Event
					if(jQuery.support.DOMSubtreeModified){
						_body.bind("DOMSubtreeModified", {
								_frame: _frame,
								_body: _body
						}, updateFrame);
					}else{
						settings.interval = setInterval(function() { updateFrameIntervaled({_frame:_frame, _body:_body}); }, 1000);
					}
				}
				
				
				settings.interval_postcheck = setInterval(function() { updateFrameIntervaledPostCheck({_frame:_frame, _body:_body}); }, 1500);
				
				resizeFrame({_frame:_frame, _body:_body});
				
			});
			
			
	
		});
	};
}(jQuery)); // (function ($) {
