var toggle_formrows = function()
{
	$$('input.toggle').each(
		function( el )
		{
			if(!el.type == 'checkbox') { return; }
			$w(el.className).each(
				function( c )
				{
					if(!c.match('toggle-')) { return; }
					var elem = 'formrow-form_' + c.replace('toggle-', '');
					if($(elem))
					{
						if(el.checked) { $(elem).hide(); } else { $(elem).show(); }
						el.onchange = function()
						{
							if(el.checked) { $(elem).hide(); } else { $(elem).show(); }
						}
					}
				}
			);
		}
	);
}

var maxchars = function()
{
	$$('input').each(
		function( el )
		{	
			if(el.type=='text' && el.className.match('maxchars'))
			{
				Event.observe(el, "keypress", 
					function(event)
					{
						var el = event.element();
						var size = el.className.replace('maxchars-', '');
						
						var key_code = event.keyCode;
						if(key_code!=8 && !(key_code >= 37 && key_code <= 40) && el.value.length >= size-1)
						{
							alert('You have exceeded the maximum number of characters (max '+size+' including spaces)');
							Event.stop(event);
						}
					}
				);
			}
		}
	)
}

var textarea_maxchars = function()
{
	$$('textarea').each(
		function( el )
		{	
			if(el.className.match('maxchars'))
			{
				Event.observe(el, "keypress", 
					function(event)
					{
						var el = event.element();
						var size = el.className.replace('maxchars-', '');
						
						var key_code = event.keyCode;
						if(key_code!=8 && !(key_code >= 37 && key_code <= 40) && el.value.length >= size-1)
						{
							alert('You have exceeded the maximum number of characters (max '+size+' including spaces)');
							Event.stop(event);
						}
					}
				);
			}
		}
	)
}

document.write('<script type="text/javascript" src="/staticfiles/js/global/tiny_mce/tiny_mce.js"></script>');
var wysiwyg = function()
{
	if(tinyMCE)
	{
		tinyMCE.settings = {
		    mode: 'none', 
		    theme: 'advanced',
			convert_urls : false,
			relative_urls : false,
		    theme_advanced_buttons1 : "bold,italic,underline,separator,strikethrough,justifyleft,justifycenter,justifyright, justifyfull,bullist,numlist,undo,redo,link,unlink",
		    theme_advanced_buttons2 : "",
		    theme_advanced_buttons3 : "",
		    theme_advanced_toolbar_location : "top",
		    theme_advanced_toolbar_align : "left",
		    onchange_callback : function() { document.hasEdits = true; }
		};
		
		var elm = $$('textarea.wysiwyg').each(
			function( el )
			{
				var id = el.id;
				if (tinyMCE.getInstanceById(id) == null)
			        tinyMCE.execCommand('mceAddControl', false, id);
			    else
			        tinyMCE.execCommand('mceRemoveControl', false, id);
			}
		);
	}
}

function markForDirtying()
{
	$$('.warnifdirty form').each( function( el ) { Event.observe(el, 'submit', function() { document.hasEdits = false; } ) } );
	$$('.warnifdirty form input').each( function( el ) { Event.observe(el, 'change', function() { document.hasEdits = true; } ) } );
	$$('.warnifdirty form textarea').each( function( el ) { Event.observe(el, 'change', function() { document.hasEdits = true; } ) } );
}

// Used for page unloading - ie reloading whole page
function warnIfDirty(evt){
	if (document.hasEdits == true) {
		var msg = "You've made changes but not saved them. Please click the 'Publish Changes'/'Submit' button if you want to keep them";
		if (typeof evt == 'undefined') {
			evt = window.event;
		}
		evt.returnValue = msg;
		return msg; 
	}
}

var Steamform = Class.create();

Steamform.prototype = {
	initialize : function( form )
	{
		this.form_id = form.identify();
		this.errors = 0;
		
		Event.observe(form,'submit',this.check_url_listener.bindAsEventListener(this),false);
	},
	
	check_url_listener : function( e )
	{
		this.errors = 0;
		var es = $$('#'+this.form_id+' select.external-select').each( this.check_url.bind( this ) );			

		if(this.errors > 0) { e.stop(); }
	},
	
	check_url : function( el )
	{
		if( el.value == 1 )
		{
			$$(this.form_id+' input.external-input').each( this.check_external.bind( this ) );
		}
	},
	
	check_external : function( el )
	{
		if( /^http:\/\/.*/.test($(el).value) != true )
		{
			alert("External links must start with 'http://'");
			this.errors++;
		}
	}
}
Steamform.load = function() {
	$$('div.form form').each(
		function( form )
		{
			return new Steamform( form );
		}
	);
};

Event.observe(window, 'load', Steamform.load);

Event.observe(window, 'load', toggle_formrows, false);
Event.observe(window, 'load', maxchars, false);
Event.observe(window, 'load', textarea_maxchars, false);
Event.observe(window, 'load', wysiwyg, false);


Event.observe(window, "load", markForDirtying, false);
Event.observe(window, "beforeunload", warnIfDirty, false);