/* mmObjects */
var mmObjects = new Class({
	Implements : [Options, Events]
	, options : {	
		
	}
	, initialize: function(options) {
		this.setOptions(options);
		this.setupDefaults();
		this.scan(); // initial scan for document.body
	}
	, domReady:function() {

	}
	// only on initialize:
	, setupDefaults:function() {
		this.setupDefaultDialogs();
		this.setupDefaultMessages();
	}
	
	// this method can be used after ajax dom results are injected and is automatically called on initialize
	, scan:function(container) {
		if (container == undefined) {
			this.container = document.id(document.body);			
		} else {
			this.container = document.id(container);
		}
		this.setupElements();		
	}
	// default dialog functions mm.info, mm.alert, mm.confirm, mm.prompt
	, setupDefaultDialogs:function() {
		if (mm.info == undefined) {
			mm.info = function(msg) {
				if (mm.infoDialog == undefined) {
					this.setupInfoDialog();
				}
				mm.infoDialog.setMessage(msg).open();
			}.bind(this);			
		}		
		if (mm.loading == undefined) {
			mm.loading = function(msg) {
				if (mm.loadingDialog == undefined) {
					this.setupLoadingDialog();
				}
				mm.loadingDialog.setMessage(msg).open();
			}.bind(this);
		}		
		if (mm.alert == undefined) {
			mm.alert = function(msg) {
				if (mm.alertDialog == undefined) {
					this.setupAlertDialog();
				}
				mm.alertDialog.setMessage(msg).open();
			}.bind(this);
		}		
		if (mm.confirm == undefined) {
			mm.confirm = function(msg, posFunc, negFunc) {
				if (mm.confirmDialog == undefined) {
					this.setupConfirmDialog();
				}	
				mm.confirmDialog.setPosFunc(posFunc).setNegFunc(negFunc);
				mm.confirmDialog.setMessage(msg).open();					
			}.bind(this);			
		}	
		if (mm.prompt == undefined) {
			mm.prompt = function(msg, posFunc, negFunc) {
				if (mm.promptDialog == undefined) {
					this.setupPromptDialog();
				}	
				mm.promptDialog.setPosFunc(posFunc).setNegFunc(negFunc);
				mm.promptDialog.setMessage(msg).open();					
			}.bind(this);			
		}			
	}	
	, setupDefaultMessages:function() {
		
	}
	, setupElements:function() {
		// disabled links
		var disabledLinks = this.container.getElements('a.disabled');
		if (disabledLinks.length > 0) {
			disabledLinks.each(function(link) {
				link.addEvent('click', function(e) {
					e.preventDefault();
				});
			},this);
		}
		
		// disabled btn links		
		var mmBtns = this.container.getElements('a.mmBtn, a.mmBtnPill');
		if (mmBtns.length > 0) {
			mmBtns.each(function(btn) {
				btn.addEvent('mousedown', function(e) {
					if (btn.hasClass('btn-disabled')) {
						e.preventDefault();
						e.stop();
					} else {
						btn.blur();
					}
				});
			});		
		}
		
		// styled select elements
		var mmSelects = this.container.getElements('select.mmSelect');
		if (mmSelects.length > 0) {
			mmSelects.each(function(el) {
				new mmSelect(el,{

				});
			});
		}		
		
		// input placeholders
		var mmPlaceholders = this.container.getElements('input.mmPlaceholder, textarea.mmPlaceholder');
		if (mmPlaceholders.length > 0) {
			// new mmPlaceholder({elements:mmPlaceholders});
			mmPlaceholders.each(function(input){
				new mmPlaceholder(input, {positionOptions:{offset:{x:5, y:5}}});
			});			
		}		
		
		// automatic form validators
		var mmFormValidates = this.container.getElements('form.mmFormValidate');
		if (mmFormValidates.length > 0) {
			this.setupFormValidates(mmFormValidates);
			// this.request2FormValidator = new Form.Validator(this.request2Form, {
			// 	evaluateFieldsOnBlur:false, evaluateFieldsOnChange:false, serial:false
			// });			
		}
		
		// positioned tips on elements
		var mmTipsFixed = this.container.getElements('.mmTipFixed');
		if (mmTipsFixed.length > 0) {
			this.setupTipsFixed(mmTipsFixed);
		}
		// regular moving tooltips
		var mmTips = this.container.getElements('.mmTip');
		if (mmTips.length > 0) {
			this.setupTips(mmTips);
		}
		// auto growing textareas
		var mmTextareas = this.container.getElements('.mmTextarea');
		if (mmTextareas.length > 0) {
			mmTextareas.each(function(el) {
				var extrah = el.getStyle('padding-top').toInt() + el.getStyle('padding-bottom').toInt();
				var minsize = el.get('data-textarea-minsize');
				if (!minsize) { minsize = 40; } else { minsize = minsize.toInt(); }
				if (el.hasClass('bsB')) {
					extrah += 5;			
				}					
				var tArea = new mmTextareaGrow(el, { /* resizeDuration:50, */  minSize:minsize, extraHeight:extrah});				
				el.store('mmTextarea', tArea);
			});
		}
		
		// ajax dialog links
		var mmDialogAjaxLinks = this.container.getElements('a.mmDialogAjax');
		if (mmDialogAjaxLinks.length > 0) {
			this.setupDialogAjaxLinks(mmDialogAjaxLinks);
		}
		// info dialog links
		var mmInfoDialogLinks = this.container.getElements('a.mmInfo');
		if (mmInfoDialogLinks.length > 0) {
			this.setupmmInfoDialogLinks(mmInfoDialogLinks);
		}		
		// alert dialog links
		var mmAlertDialogLinks = this.container.getElements('a.mmAlert');
		if (mmAlertDialogLinks.length > 0) {
			this.setupmmAlertDialogLinks(mmAlertDialogLinks);
		}
		// confirm dialog links
		var mmConfirmDialogLinks = this.container.getElements('a.mmConfirm');
		if (mmConfirmDialogLinks.length > 0) {
			this.setupmmConfirmDialogLinks(mmConfirmDialogLinks);
		}
		// prompt dialog links
		var mmPromptDialogLinks = this.container.getElements('a.mmPrompt');
		if (mmPromptDialogLinks.length > 0) {
			this.setupmmPromptDialogLinks(mmPromptDialogLinks);
		}		
		
		var mmAutofocus = this.container.getElements('.mmAutofocus');
		if (mmAutofocus.length > 0) {
			setTimeout(function() {
				mmAutofocus[0].focus();
			},100);
		}
		
		
		var mmMenus = this.container.getElements('.mmMenu');
		if (mmMenus.length > 0) {
			this.setupmmMenus(mmMenus);
		}
		
		// ie specific elements
		if (Browser.ie) {
			this.setupIEElments();
		}
		
		
	}
	, setupIEElments: function() {
		var ie_notice = this.container.getElement('#ie_notice');
		if (ie_notice) {
			ie_notice.show();
		}		
	}	

	, setupmmInfoDialogLinks:function(mmInfoDialogLinks) {
		mmInfoDialogLinks.each(function(link){
			var info = link.get('data-info');
			if (info) {
				link.addEvent('click', function(e) {
					e.preventDefault();
					link.blur();
					mm.info(info);
				});
			}
		});		
	}
	, setupInfoDialog:function() {
		mm.infoDialog = new mmDialog.Info('',{
			autosize:true
			, disposeOnClose:false
			, useEscKey:true
			, closeable:true
			, overlay:{
				id:'mmDialogOverlayInfo'
				, opacity: (mm.runtime && mm.runtime.iframe_embed != undefined && mm.runtime.iframe_embed) ? 0 : 0.25				
			}
		});		
	}	
	, setupmmAlertDialogLinks:function(mmAlertDialogLinks) {
		mmAlertDialogLinks.each(function(link){
			var msg = link.get('data-alert');
			if (msg) {
				link.addEvent('click', function(e) {
					e.preventDefault();
					link.blur();
					mm.alert(msg);
				});
			}
		});
	}
	, setupAlertDialog:function() {
		mm.alertDialog = new mmDialog.Alert('',function() {}, {
			autosize:true
			, disposeOnClose:false
			, useEscKey:true
			, overlay:{
				id:'mmDialogOverlayAlert'
				, opacity: (mm.runtime && mm.runtime.iframe_embed != undefined && mm.runtime.iframe_embed) ? 0 : 0.25				
			}
		});		
	}	
	, setupLoadingDialog: function() {
		mm.loadingDialog = new mmDialog.Loading('',{
			autosize:true
			, disposeOnClose:false
			, useEscKey:false
			, closable: false
			, overlay:{
				id:'mmDialogOverlayLoading'
				, opacity: (mm.runtime && mm.runtime.iframe_embed != undefined && mm.runtime.iframe_embed) ? 0 : 0.25				
			}
		});		
	}
	, setupmmConfirmDialogLinks:function(mmConfirmDialogLinks) {
		mmConfirmDialogLinks.each(function(link){
			var msg = link.get('data-confirm');
			var href = link.get('href');
			var url = '';
			var is_ajax = false;
			var posFunc, negFunc = function() {};

			if (href != undefined && href != '' && href!='#') {
				url = href;
			}
			if (link.hasClass('mmAjax')) {
				is_ajax = true;
			}
			if (!is_ajax && url != '') {
				var posFunc = function() {
					window.location.href = url;
				}
			} else if (is_ajax && url != '') {
				// ajax stuff here?
			}
			if (msg) {
				link.addEvent('click', function(e) {
					e.preventDefault();
					link.blur();					
					mm.confirm(msg, posFunc, negFunc);
				});
			}
		});
	}	
	, setupConfirmDialog:function() {
		var posFunc = Function.from(true);
		var negFunc = Function.from(false);
		mm.confirmDialog = new mmDialog.Confirm('', posFunc, negFunc, {
			autosize:true
			, disposeOnClose:false
			, useEscKey:false
			, closeable:false
			, overlay:{
				id:'mmDialogOverlayConfirm'
				, opacity: (mm.runtime && mm.runtime.iframe_embed != undefined && mm.runtime.iframe_embed) ? 0 : 0.25
			}
		});		
		mm.confirmDialog.addEvents({
			'confirmed':function() {
// mm.log('confirmDialog confirmed');				
			}
			, 'denied':function() {
// mm.log('confirmDialog denied');				
			}
		});	
	}
	, setupmmPromptDialogLinks:function(mmPromptDialogLinks) {
		mmPromptDialogLinks.each(function(link) {
// dbug.log('mmPromptDialogLinks each');	
			var msg = link.get('data-prompt');
			var rel = link.get('rel');
			var href = link.get('href');
			var url = '';
			var is_ajax = false;
			var posFunc, negFunc = function() {};
			if (href != undefined && href != '' && href!='#') {
				url = href;
			}
			if (link.hasClass('mmAjax')) {
				is_ajax = true;
			}
			if (!is_ajax && url != '') {
				var posFunc = function(prompt) {
					window.location.href = url+'?prompt='+prompt;
				}
			} else if (is_ajax) {
				// ajax stuffies here
			}
			if (msg) {
				link.addEvent('click', function(e) {
					e.preventDefault();
					link.blur();					
					mm.prompt(msg, posFunc, negFunc);
				});
			}			
		});
	}
	, setupPromptDialog:function() {
mm.log('mmmain setupPromptDialog');		
		var posFunc = Function.from(true);
		var negFunc = Function.from(false);
		mm.promptDialog = new mmDialog.Prompt('', posFunc, negFunc, {
			autosize:true
			, disposeOnClose:false
			, useEscKey:false
			, closeable:false
			, overlay:{
				id:'mmDialogOverlayPrompt'
				}
		});		
		mm.promptDialog.addEvents({
			'prompted':function(input) {
mm.log('promptDialog prompted input='+input);				
			}
			, 'denied':function() {
mm.log('promptDialog denied');				
			}
		});
	}	
	, setupDialogAjaxLinks:function(mmDialogAjaxLinks) {
		mmDialogAjaxLinks.each(function(link) {
			var href = link.get('href');
			if (href != undefined) {
				link.set('href', '#');
				var ajaxDialog = new mmDialog.Ajax(href, {
					overlay: {
						id: 'mmDialogAjaxOverlay'
						, color: '#000'
						, duration: 200
						, opacity: (mm.runtime && mm.runtime.iframe_embed != undefined && mm.runtime.iframe_embed) ? 0 : 0.25
						, zIndex: 9000
					}					

				}); 
				link.store('dialog', ajaxDialog);
				link.addEvent('click',function(e){
					e.preventDefault();
					link.blur();
					// mm.overlayAll.showDialog(href);					
					link.retrieve('dialog').openDialog();
				});
			}
		});
	}	
	, setupTips:function(tips) {
mm.log('setupTips yo');		
		if (tips.length > 0) {
			tips.each(function(el) {	
				
				var t = el.get('data-tip');
				if (t) {
					var cnt = t.split('::');
					el.store('tip:title',cnt[0]).store('tip:text',cnt[1]||'');
				} else {
					el.store('tip:title','').store('tip:text','');					
				}
								
			});
		}
		// if (this.container == document.id(document.body)) {		
			var className = 'mmTipContainer';
			var tips = new Tips(tips, {
				title: 'data-tip'
				, className: className
			});
		// }
	}
	, setupTipsFixed:function(mmTipsFixed) {
        mmTipsFixed.each(function(el) {
            var tag = el.get('tag');
// console.log(tag);            
            var pos = el.get('data-tip-position');
            var edge = el.get('data-tip-edge');            
            var autohide = el.get('data-tip-autohide');
            var delay = el.get('data-tip-delay');
			var arrow = el.get('data-tip-arrow');
			var offset = el.get('data-tip-offset');

            if (!pos) { pos = 'top'; }
            if (!edge) { edge = 'bottom'; }
            if (!autohide) { autohide = true; } else { autohide = autohide.toInt(); }
            if (!delay) { delay = 10; } else { delay = delay.toInt(); }
			if (!arrow) { arrow = true; } else { arrow = arrow.toInt(); }
			if (!offset) {offset = 12; } else { offset = offset.toInt(); }

            var tipEvent = 'mouseenter';
            var tip = ToolTip.instance(el, {
                   position: {
                       position: pos, edge: edge, offset: {x:0, y: 0}                           
                   }
           		, autohide: autohide
           		, offset: offset
           		, hideDelay: delay                       
               }, el.get('data-tip'));
            if (tag != 'input' && tag != 'textarea') {
               el.addEvent(tipEvent, function(e) {
                   tip.show();
               }); 
           } else {
               el.addEvents({
                   'focus' : function(e) {
                       tip.show();
                   }
                   , blur : function(e) {
                       tip.hide();
                   }
               });
           }
			if (!arrow) {
				tip.addEvent('show', function() {
					tip.arrow.hide();
				});
			}
        });		
	}
	, setupFormValidates:function(mmFormValidates) {
		mmFormValidates.each(function(f) {
			fV = new Form.Validator(f, {
				evaluateFieldsOnBlur:false, evaluateFieldsOnChange:false, serial:false
			});
			f.store('formValidator', fV);
			f.store('isValidated', false);				
			f.addEvent('submit', function(e) {
				e.preventDefault();
			});
			var bS = f.getElement('.mmFormSubmit');
			if (bS) {
				bS.addEvent('click', function(e) {
					e.preventDefault();						

					fV.options.evaluateFieldsOnBlur = true;
					fV.options.evaluateFieldsOnChange = true;					
					fV.watchFields(fV.getFields());		
					if (fV.validate()) {
						if (!f.hasClass('mmFormAjax') && !f.hasClass('mmFormRequest')) {
							f.submit();							
						} else {
							f.store('isValidated', true);
						}
					} else {
						f.store('isValidated', false);
					}
				});
			}
		});		
	}
	, setupmmMenus:function(mmMenus) {
		
/*
	// http://localhost/kohana/312/test/mmwebmenu
		window.addEvent('domready', function() {
			var mmwebMenuContainers = document.getElements('.mmweb-menu-container');

			if (mmwebMenuContainers.length > 0) {
				mmwebMenuContainers.each(function(menuContainer) {
					// menuContainer.getChildren('li').setStyle('display','none');
					var timer = (menuContainer.get('data-hovertime') != null) ? menuContainer.get('data-hovertime').toInt() : 500 ;
					var orientation = menuContainer.hasClass('mmweb-menu-vertical') ? 'vertical' : 'horizontal' ;
		mm.log(orientation);
					var mainul = menuContainer.getElement('.mmweb-menu');
					if (mainul) {
						new mmMenu(mainul
							, {
								onOpen: function(el, level){

		mm.log('level:' + level);
									var mtop = (level > 1) ? '-30px' : '3px' ;
									// el.setStyle('margin-top', mtop);							
									el.set('tween', {duration:250})
											            el.fade('in');
											            // el.setStyle('display','block').addClass('hover');
									// el.getParents('li').addClass('hover');
								},
								onClose: function(el){
									el.set('tween', {duration:50})
											            el.fade('out');
											            // el.setStyle('display','none').removeClass('hover');
									// el.getParents('li').removeClass('hover');
								},
								onInitialize: function(el){
											            el.fade('hide').set('tween', {duration:50});
											            // el.setStyle('display','none');
								}	
							}
						);

					}
				});
			}
		});	
		
*/
	
		
	}
	
	
});
