	function form_is_modified(oForm) {
		var el, opt, hasDefault, i = 0, j;
		
		classArray = getElementsByClassName('mceWithEditor'); // Get all form elements with TinyMCE Selector class
		
		while (el = oForm.elements[i++]) {
			
			// ***** Edit to ignore TinyMCE textareas *****
			skipTinyMCE = false;
			classArrayLength = classArray.length 
			for (var t = 0; t < classArrayLength; t = t+1) {
				if (classArray[t]['name'] == el.name) {
					skipTinyMCE = true;
				}
			}			
			// ***** End of edit *****
	
			if (skipTinyMCE == false) {
				switch (el.type) {
					case 'text' :
							case 'textarea' :
							case 'password' :
							case 'hidden' :
									//if (!/^\s*$/.test(el.value) && el.value != el.defaultValue) return true;
									if (el.value != el.defaultValue) return true;
									break;
							case 'checkbox' :
							case 'radio' :
									if (el.checked != el.defaultChecked) return true;
									break;
							case 'select-one' :
							case 'select-multiple' :
									j = 0, hasDefault = false;
									while (opt = el.options[j++])
											if (opt.defaultSelected) hasDefault = true;
									j = hasDefault ? 0 : 1;
									while (opt = el.options[j++]) 
											if (opt.selected != opt.defaultSelected) return true;
									break;
				}
			}
		}
		return false;
	}
	
	
	// ***** My parts for window close prompt *****
	
	function checkChangedTinys() {
		for(prop in tinyChanges) {
			if (tinyChanges[prop]) {
				return true;
			}
		}
		return false;
	}
	
	function checkFormChanged() {
		classArray = getElementsByClassName('defaultForm'); // Get all forms tagged for checking
		
		// Loop each form checking if any forms have been changed
		classArrayLength = classArray.length;
		for (var t = 0; t < classArrayLength; t = t+1) {
		
			if ( (form_is_modified(classArray[t]) || checkChangedTinys()) && postingForm == false && fieldFocused) {
				postingForm = false; // Set form posting back to false incase they choose not to leave page
				return 'Your changes haven\'t been saved, closing the window will loose these updates.';
			}
		}
	}
	
	//var collapsedDivs = new array(); // Keep all collapsed divs in an array to check, ie the heights need removing if they are collapsed
	var fieldFocused = false; // Set to ensure a field is clicked, to prevent autofill/remember details prompting changes
	var tinyChanges = new Object(); // Track if a tinymce editor has been changed
	var postingForm = false; // Used to track if form is being submitted, i.e. don't prompt on submission
	addLoadEvent(setFormNotPosted);
	
	function setFormNotPosted() {
		
		classArray = getElementsByClassName('defaultForm'); // Get all forms tagged for checking
		
		// Loop each form ading onsubmit check to cancel prompts
		classArrayLength = classArray.length;
		for (var t = 0; t < classArrayLength; t = t+1) {
			XBrowserAddHandler(classArray[t], "submit", function() { postingForm = true; /* Stop prompt on submit */ } );
		}

		var myBorder = RUZEE.ShadedBorder.create({ corner:0, shadow:8 });
		myBorder.render('errorBoxInner');
				
		// If there is a form on the page setup the test to check for changes
		attachFieldEvents();
		window.onbeforeunload = checkFormChanged;
	}