// refactored 20090303 for more efficient wiring of events

var Site = {

	start: function(parent){		
		if ($('nav')) Site.sfHover(parent);	
		Site.rollOver(parent);
		if (window.gecko) Site.formLayoutFix(parent);
		Site.ajax(parent);
		Site.fetch(parent);
		Site.update(parent);
		Site.inputStyle(parent);
		Site.inPlace(parent);
		if ($('sortable')) Site.sortable(parent);	
		 //Site.datePicker(parent);
		 Site.selections(parent);
	},

	tracker: function(code) {
		new Asset.javascript('https://ssl.google-analytics.com/ga.js', {
			id: 'gaTracker',
			onload: function() {
				var pageTracker = _gat._getTracker(code);
				pageTracker._initData();
				pageTracker._trackPageview();	
			}
		});
	},
	
	inputStyle:function(parent) {
	$(parent).getElements(".input").addEvents({
			'focus' : function() { this.addClass("focus"); },
			'blur' : function() { this.removeClass("focus"); }
		});
	},
	
	rollOver : function(parent) {
		$(parent).getElements("img").each( function(el) {
			if (el.hasClass("rollover")) {
			el.setAttribute("xsrc",el.getAttribute("src"));
			el.addEvents({
				'mouseover' : function() { this.setAttribute('src',this.className.match(/rollover (\S+)/)[1]); },
				'mouseout' : function() { this.setAttribute('src',this.getAttribute("xsrc")); }
			});
			}
		});
	},	

	formLayoutFix : function(parent) {
	$(parent).getElements('.form label').each( function(el) {
		var content = el.getText();
		el.empty();
		el.adopt(new Element('span', {
			'styles' : {
				'display' : 'block',
				'width' : el.getStyle('width')
			}		
		}).setText(content));
		el.setStyle('display','-moz-inline-box');
		});	
	},
		
	sfHover: function(parent){
		$(parent).getElements("#nav li").addEvents({
			'mouseover' : function() { this.addClass("sfhover"); },
			'mouseout' : function() { this.removeClass("sfhover"); }
		});
	},
	
	ajax:function(parent) {
			
		$(parent).getElements('.ajax').each(function(el) {
			var id = el.id;
			var container = el.getParent('div.container');
			if (container) {
				var options = el.className.match(/ajax \[(.*)\] (\S+)/);
				el.addEvent(options[1], function(e) {
				e = new Event(e).stop();
				if (el.getProperty('type') == 'button') el.setProperty('disabled','disabled');
				var log = $('log').empty().addClass('ajax-loading');
				var request = new Request.HTML({
					url:options[2],
					update: container,
					onSuccess :  function() {
						Site.start(container);
					},
					onComplete : function() {
						log.removeClass('ajax-loading');
					}
					}).post(container);
				});
			}
		});
	},
	

	fetch:function(parent) {	
		$(parent).getElements('.fetch').each(function(el) {
				var options = el.className.match(/fetch \[(.*)\] (\S+)/);
				el.addEvent('click', function(e) {
				e = new Event(e).stop();
				var log = $('log').empty().addClass('ajax-loading');
				var request = new Request.HTML({
					url:options[2],
					evalScripts:true,
					update: options[1],
					onSuccess :  function() { 
						Site.start(options[1]);
					},
					onComplete : function() {
						log.removeClass('ajax-loading');
					}
					}).get();
				});
		});
	},

	update:function(parent) {	
		$(parent).getElements('.update').each(function(el) {
			var id = el.id;
			var container = el.getParent('div.container');
			if (container) {
				var options = el.className.match(/update \[(.*)\] (\S+)/);
				el.addEvent('change', function(e) {
				e = new Event(e).stop();
				var log = $('log').empty().addClass('ajax-loading');
				var request = new Request.HTML({
					url:options[2],
					evalScripts:true,
					update: options[1],
					onSuccess :  function() {
						Site.start(options[1]);	
					},
					onComplete : function() {
						log.removeClass('ajax-loading');
					}
					}).post(container);
				});
			}
		});
	},
	
	
	
	thumbs: function(){
		$$(".thumb").addEvents({
			'mouseover' : function() {
					this.getFirst('div').setStyle("display","block");
				},
			'mouseout' : function() {
				this.getFirst('div').setStyle("display","none");
			}
		});
	},
	
	
	selections: function() {
		var all = $('selectAll');
		var none = $('selectNone');
		if (all) all.addEvent('click', function(e) {
			e.stop();
			$$('.checkbox').each(function(el) { el.checked = true; });
		});
		if (none) none.addEvent('click', function(e) {
			e.stop();
			$$('.checkbox').each(function(el) { el.checked = false; });
		});
	},
	
	fader : function() {
		$$('.fader').each(function(el, i) {
			var ExampleFx = new Fx.Style(el, 'opacity', { 
			wait: false,
			duration: 400,
			transition: Fx.Transitions.Quart.easeInOut});
				el.addEvent('mouseenter', function() { ExampleFx.start(1, 0.01); });
				el.addEvent('mouseleave', function() { ExampleFx.start(0.01, 1); });
		});	
	},
	
	
	datePicker: function (parent) {
			
		new DatePicker('.date', {
		pickerClass: 'dashboard',
		inputOutputFormat: 'd/m/Y'
		});
		
	},


	

	
	inPlace: function(parent) {
		
		$(parent).getElements('.place').each(function(el) {
			var options = el.className.match(/place (\S+)/);
			var container = el.getParent('td');	
			var content = el.innerHTML;
			el.addEvent('click', function() {
				el.style.display = 'none';
				var content = el.innerHTML;
				
				//textarea
				var control = new Element('span').injectInside(container);
				var textbox = new Element('input', {'type':'text', 'size':'40', 'class':'input', 'id':'txt', 'name':'txt', 'value': content}).injectInside(control);
				new Element('span').injectInside(control).innerHTML = '&nbsp';
				var save = new Element('input', {type:'button', value:'save'}).injectInside(control);
				var span = new Element('span').injectInside(control); span.innerHTML = ' or ';
				var cancel = new Element('a', {href : 'javascript:;'}).injectInside(control); cancel.innerHTML = 'cancel';
					
				
				save.addEvent('click', function() {
					var log = $('log').empty().addClass('ajax-loading');
					var request = new Request({
					url:options[1],
					onSuccess :  function() {
					},
					onComplete : function() {
						log.removeClass('ajax-loading');
					}
					}).post(container);
					
					el.style.display = 'block';
					el.innerHTML = textbox.value;
					control.dispose();

				});
				cancel.addEvent('click', function() {
					el.style.display = 'block';
					control.dispose();
				});	
			});
			
		});		
	},
	
	
	
	sortable: function(parent) {
		//var so = new Element('input', {type: 'hidden', id: 'sortOrder', name: 'sortOrder'}).inject('#sortable', 'after');
		var sb = new Sortables('#sortable tbody', {
		/* set options */

		handle: '.handle',
		/* initialization stuff here */
		initialize: function() { 
			
		},
		/* once an item is selected */
		onStart: function(el) { 
			el.addClass('highlight');
		},
		/* when a drag is complete */
		onComplete: function(el) {
			el.removeClass('highlight');
			var sortOrder = new Array();
			$$('#sortable tbody tr').each(function(el) { sortOrder.push(el.get('rel')); });
			$('sortOrder').value = sortOrder.join(",");
			
		}
	});
}

	
}



window.addEvent('domready', function() {Site.start(document.body)});







