var PageKit = Class.create();

PageKit.prototype = {
	initialize: function(element, url, options) {
		this.element = $(element);
	}
};

PageKit.initPage = function() {
	PageKit.init();
};

PageKit.init = function(container) {
	var textInputs = container ? $(container).getElementsBySelector('input[type=text]') : $$('input[type=text]');
	textInputs.each( function(input) {
		input.addClassName('text');
	} );
	
	var submitInputs = container ? $(container).getElementsBySelector('input[type=submit]') : $$('input[type=submit]');
	submitInputs.each( function(input) {
		input.addClassName('submit');
	} );
	
	var mceTextAreas = container ? $(container).getElementsBySelector('textarea.mce') : $$('textarea.mce');
	mceTextAreas.each( function(textarea) {
		if (tinyMCE) {
			tinyMCE.execCommand("mceAddControl", true, textarea.id);			
		}
	} );
	
	var links = container ? $(container).getElementsBySelector('a.remote') : $$('a.remote');
	links.each( function(link) {
		
		var updateCallback = Prototype.emptyFunction;
		var itemSortedCallback = Prototype.emptyFunction;
		var itemSelectedCallback = Prototype.emptyFunction;
		// check for action callback
		var params = link.href.toQueryParams();
		if (params.action) {
			var actionKey = params.action.replace(/\./g, '-').camelize();
			if (PageKit[actionKey] && PageKit[actionKey].loaded) {
				updateCallback = PageKit[actionKey].loaded;
			}
			if (PageKit[actionKey] && PageKit[actionKey].itemSorted) {
				itemSortedCallback = PageKit[actionKey].itemSorted;
			}
			if (PageKit[actionKey] && PageKit[actionKey].itemSelected) {
				itemSelectedCallback = PageKit[actionKey].itemSelected;
			}
		}
		// modify every remote link
		link.onclick = function() {
			var container = $(link.target + '') || link.up('div.container');
			new Ajax.Updater(container, link.href, { 
				evalScripts: true,
				evalJS: true,
				onComplete:function() {
				PageKit.init(container);
				updateCallback(container);
				var sortableList = container.down('ul.sortable');
				if (sortableList) {
					Sortable.create(sortableList, { onUpdate:itemSortedCallback });
					new PageList(container, 'a', itemSelectedCallback);
				};
			} });
			return false;
		};
	} );

	var forms = container ? $(container).getElementsBySelector('form.remote') : $$('form.remote');
	forms.each( function(form) {
		form.onsubmit = function() {
			form.request( {onSuccess:function(request){
				var container = $(form.target) || form.up('div.container');
				container.update(request.responseText);
				PageKit.init(container);
			}} );
			return false;
		};
	} );
}

Event.observe(window, 'load', PageKit.initPage, false);

