// 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.pageControls(parent);
                Site.sortControls(parent);
		Site.dragControls(parent);
		Site.slider(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');
				if ($('log')) var log = $('log').empty().addClass('ajax-loading');
				if (typeof window.tinyMCE != "undefined") window.tinyMCE.triggerSave();
				var request = new Request.HTML({
					url:options[2],
					update: container,
					onSuccess :  function() {
						Site.start(container);
						if (window.tinyMCE) Site.editor();
					},
					onComplete : function() {
						if ($('log')) 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();
				if ($('log')) 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]);
						if (window.tinyMCE) Site.editor();

					},
					onComplete : function() {
						if ($('log')) 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();
				if ($('log')) 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]);
						if (window.tinyMCE) Site.editor();
					},
					onComplete : function() {
						if ($('log')) log.removeClass('ajax-loading');
					}
					}).post(container);
				});
			}
		});
	},


	pageControls:function(parent) {
		$(parent).getElements(".smart li").each(function(el) {
			page = el.getElement(".page");
			if (page) page .addEvents({
			'mouseover' : function() { this.getElements(".controls").removeClass('hidden'); },
			'mouseout' : function() { this.getElements(".controls").addClass('hidden'); }
			});

                       var parent = $(el.getParent());
                        var child = el.getElement("ul");
                        var toggle = el.getElement(".toggle");
                        if (child && toggle) toggle.addEvent('click', function(e) {
                            e = new Event(e);
                            child.toggle();
                            e.stop();
                        });
		});
	},

        sortControls:function(parent) {

        
	    
            var sorted = $(parent).getElements('.information'). each(function(element) {
            var children = element.getElements('ul');
            var list = $$([element, children]);
            new Sortables(list, {
		revert: true,
                constrain: true,
			onStart: function(el) {
                        },
			onComplete: function(el) {
                                var options = el.getParent('.information').className.match(/information (\S+)/);
				var sort_order = '';
				$$('.information li').each(function(li) { sort_order = sort_order +  li.id  + '|'; });
					var req = new Request({
						url:options[1],
						method:'post',
						autoCancel:true,
						data:'sequence=' + sort_order,
						onRequest: function() {
						},
						onSuccess: function() {
						}
					}).send();
			}
            });
            });
        },

	dragControls:function(parent) {



               $(parent).getElements(".drag li").addEvent('mousedown',function(ev){
					var clone = this.clone();
					var origin = this.getPosition();
                                        clone.id = this.id;
					clone.setStyles({
                                                    opacity:0.7,
                                                    position:'absolute',
                                                    width:200,
                                                    left:origin.x,
                                                    top:origin.y,
                                                    border:'3px solid #87bcd8'
                                                }).inject(document.body).makeDraggable({
						droppables: '.drop',
						onEnter:function(el,drop){
                                                        drop.addClass('highlight');
						},
						onLeave:function(el, drop){
                                                    drop.removeClass('highlight');

						},
						onDrop:function(el,drop){
							if(drop){
                                                            drop.removeClass('highlight');
                                                            clone.destroy();
                                                            if ($('dropTarget')) $('dropTarget').set('value',el.id);
                                                            var container = drop.getParent('div.container');
                                                            if (container) {
                                                        	var options = drop.className.match(/drop (\S+)/);
                                                        	if ($('log')) var log = $('log').empty().addClass('ajax-loading');
                                                            	if (typeof window.tinyMCE != "undefined") window.tinyMCE.triggerSave();
                                                        	var request = new Request.HTML({
                                                        		url:options[1],
                                                        		update: container,
                                                                        onSuccess :  function() {
                                                                        	Site.start(container);
                                                                        	if (window.tinyMCE) Site.editor();
                                                                        },
                                                                        onComplete : function() {
                                                                        	if ($('log')) log.removeClass('ajax-loading');
                                                                        }
                                                                }).post(container);
                                                            }
							}else{
                                                                el.get('morph').start({
									opacity:0,
									left:origin.x,
									top:origin.y
								}).chain(el.destroy.bind(el));
                                                         }

							}
							//$('cart').removeEvents();

					}).start(ev);

				});




  /*

		$(parent).getElements(".drag li").each(function(el) {
		var myDrag = new Drag.Move(el, {
			droppables: '.drop',
			style:true,
                        modifiers: {},
                        revert: { duration: 500, transition: 'elastic:out' },


		    onDrop: function(element, droppable, event){
		       if (droppable) {
				droppable.removeClass('highlight');
				if ($('dropTarget')) $('dropTarget').set('value',element.id);
				element.dispose();
			var container = droppable.getParent('div.container');
			if (container) {
				var options = droppable.className.match(/drop (\S+)/);
				if ($('log')) var log = $('log').empty().addClass('ajax-loading');
				if (typeof window.tinyMCE != "undefined") window.tinyMCE.triggerSave();
				var request = new Request.HTML({
					url:options[1],
					update: container,
					onSuccess :  function() {
						Site.start(container);
						if (window.tinyMCE) Site.editor();
					},
					onComplete : function() {
						if ($('log')) log.removeClass('ajax-loading');
					}
					}).post(container);
			}
		       }
		   },

		   onEnter: function(element, droppable){
		       droppable.addClass('highlight');//alert(element, 'entered', droppable);
		   },

		   onLeave: function(element, droppable){
		       droppable.removeClass('highlight');
		       //alert(element, 'left', droppable);
		   }

		});
                el.setStyles({position:'relative', top:0, left : 0, float:'left'});
		});*/

	},



	editor:function(parent) {

	    if (typeof window.tinyMCE != "undefined") window.tinyMCE.init({
		mode : "specific_textareas",
		editor_selector : "richText",
		theme : "advanced",
               dialog_type : "modal",
               skin : "o2k7",
               skin_variant : "silver",
               plugins : "safari,spellchecker,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,imagemanager",
	        theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect,fontselect,fontsizeselect",
		theme_advanced_buttons2 : "undo,redo,|,cut,copy,paste,pastetext,pasteword,template,|,link,unlink,image,media,anchor,|,cleanup,removeformat,|,bullist,numlist,|,outdent,indent,blockquote,|,forecolor,backcolor",
		theme_advanced_buttons3 : "tablecontrols,|,hr,|,sub,sup,|,charmap,|,ltr,rtl,|,insertlayer,moveforward,movebackward,absolute",
		theme_advanced_buttons4 : "styleprops,attribs,|,|,fullscreen,print,|,visualaid,|,code",
		file_browser_callback : "mcImageManager.filebrowserCallBack",
               relative_urls : false,
	       cleanup_on_startup : true,
		cleanup: true,
		debug : false,
		forced_root_block : false,
		force_br_newlines : true,
		force_p_newlines : false
	    });

	    if (typeof window.mcImageManager != "undefined") window.mcImageManager.init({
		relative_urls : false,
		remember_last_path : false,
		path : "/assets/uploads"
	    });

	      //if (typeof window.tinyMCE != "undefined") window.tinyMCE.activeEditor.getContent();

	},

        slider: function(parent) {           

        },
	
	
	menu:function(parent) {
		$(parent).getElements('.toggle').each(function(el) {
			var myVerticalSlide = new Fx.Slide(el.id + 'Container');
			$(el.id).addEvent('click', function(e){
				e.stop();
				myVerticalSlide.toggle();
			});
		});
	},

	thumbs: function(){
		$$(".thumb").addEvents({
			'mouseover' : function() {
					this.getFirst('div').setStyle("display","block");
				},
			'mouseout' : function() {
				this.getFirst('div').setStyle("display","none");
			}
		});
	},

	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); });
		});
	},


	menu: function(){

		//create our Accordion instance
	var myAccordion = new Accordion($('accordion'), 'span.cat', 'div.element', {
		opacity: false,
		start: 'all-closed',
		onActive: function(toggler, element){

		},
		onBackground: function(toggler, element){

		}
	});

	}


}



if (typeof window.tinyMCE != "undefined") Site.editor();
window.addEvent('domready', function() {
	document.ondragstart = function() { return false; }
	
	Site.start(document.body);
});

