//<![CDATA[
/*
 Copyright (c) 2007 Caridy Patino. All rights reserved.
 version 0.1.0
 Author: Caridy Patino (caridy at gmail.com)
*/
YAHOO.namespace("App");
(function() {

  var $B = YAHOO.Bubbling,
  	  $L = YAHOO.util.Lang,
	  $E = YAHOO.util.Event,
	  $D = YAHOO.util.Dom,
	  $ =  YAHOO.util.Dom.get;

	YAHOO.App.Core = function () {
	    var obj = {},
	        _mainContent = 'tms-story',
			_container = 'yui-cms-floating-wizard';
		try {
			obj.flags = DEFAULT_VARS;
		} catch(e) {
			obj.flags = {};
		}
        // Private Methods
		var actions = {
			navRecommendPage: function (layer, args) {
				  var el = args[1].anchor,
				      r = document.location+'';
				  if (el) {
				    var page  = base64encode(utf16to8(r)),
				    	title = document.title,
						uri = el.href,  
						m = $(_mainContent);
					uri = YAHOO.plugin.Dispatcher.augmentURI ( uri, {'_title':title, '_url':page} );
					YAHOO.plugin.WizardManager.reload(m, uri);
				    return true;
				  }
			},
			navPopUp: function (Layer, args) {
			  var el = args[1].anchor,
			      _handle = 'handleOverlay';
              if (el)
                if ($L.isObject(obj.handleOverlay)) {
    			   obj.handleOverlay.destroy();
    			}
    			// Build overlay based on markup
    			obj.handleOverlay = new YAHOO.widget.Panel(_handle, {
    			  visible:true,
    			  constraintoviewport:true,
    			  fixedcenter: true,
    			  underlay: 'shadow',
    			  preventoverlap: true,
    			  width: '640px',
    			  close: true,
    			  dragable: true
    			});
    			obj.handleOverlay.setHeader ( ' &nbsp; ' );
    			obj.handleOverlay.setBody ('<div id="'+_container+'">&nbsp;</div>');
    			if ($D.inDocument(_handle)) { // is the panel is already in the DOM
    	            obj.handleOverlay.render();
    	        } else {
    	            obj.handleOverlay.render(document.body);
    	        }

    			// loading the content...
    			var recompileDialog = function() {
			        var t = $(_container).getElementsByTagName( 'h1' )[0] || $(_container).getElementsByTagName( 'h2' )[0];
            	    if (t) {
            	        obj.handleOverlay.setHeader ( t.innerHTML );
            	        t.parentNode.removeChild (t);
            	    }
			    };
    			YAHOO.util.WizardManager.add( _container, {
    				uri: el.getAttribute('href'),
                    onReady: recompileDialog,
                    onFinish: recompileDialog,
    				dataMask: {'tpl':'tpls/none'},
					dynamic: true
        		});
    			return true;
			},
			actionFormFieldFocus: function (layer, args) {
				  var el = $B.getAncestorByTagName( args[1].target, 'A' );
				  if (el && el.id && (el.id.indexOf('setfocus') === 0)) {
				  	// calculating the form field ID
				  	var field = $(el.id.slice (8, el.id.length));
					if (field) {
					  field.focus();
					}
				  }
			},
			soundOnPlay: function(layer, args) {
				YAHOO.plugin.SoundManager.play(1);
			},
			soundOnMute: function(layer, args) {
				YAHOO.plugin.SoundManager.stop(1);
			}
		};
	    $B.on('navigate', function (layer, args) {
		  $B.processingAction (layer, args, actions);
	    });
	    $B.on('property', function (layer, args) {
		  args[1].stop = true;
		  args[1].decrepitate = true;
	    });
	    var fixcolumns = function (layer, args) {
			  // adjusting the body height
		    $D.setStyle(document.body, 'min-height', $D.getViewportHeight ()+'px');
	    };
	    $B.on('repaint', fixcolumns);

    	// Public Vars
		obj.navHistory = [];
		obj.handleOverlay = null;

		// Turning on the monitors (by default, the bubbling core only monitors the browser window size)
		$B.initMonitors();

		// using the GOD layer to check common links
    	$B.on('god', function (layer, args) {
    		  var el = args[1].anchor,
			      m = $(_mainContent);
    		  if (el && !$B.getAncestorByClassName(el, 'external')) {
    			  var h = el.getAttribute("href",2)+'#',
    			  	  r = el.getAttribute("rel"),
    			  	  t = el.getAttribute("target"),
    				  l = document.location+'#';
				  h = h.substr (0, h.indexOf('#'));
				  l = l.substr (0, l.indexOf('#'));
    		  	  if ((h && ((h.indexOf('#') === 0) || (h.indexOf('javascript:') === 0) || ((h.indexOf('#') > 0) && (l.indexOf(h) === 0)))) ||
    			      (r == 'external') || (r == 'internal') || (t && t != '') || (h == '') || (h == l)) {
    				   return;
    		      }
				  // gettting the owner, by default the general container
				  var owner = $B.getAncestorByClassName( el, 'dynamic' ) || m;
				  if ($L.isObject(owner) &&  $D.hasClass(owner, 'yui-cms-wizard')) {
					  YAHOO.plugin.WizardManager.reload(owner, h);
				  }
				  else {
					  YAHOO.util.Dispatcher.fetch(owner, h);
				  }
    		      args[1].stop = true;
    		      args[1].decrepitate = true;
    		  }
    	});
        // Public Methods
		obj.init = function () {
		  this.navHistory.push ( window.location.href );
		  this.initHints();
		  fixcolumns();
		  // redefining the effect for the mask
		  YAHOO.widget.Loading.config({
		    effect: true
		  });
		  YAHOO.plugin.WizardManager.adopt( _mainContent, {
			uri: '/',
			dataMask: {'tpl':'tpls/none'},
			dynamic: true
		  });
		};
		obj.initHints = function () {
            YAHOO.widget.TooltipManager.init();
            YAHOO.widget.TooltipManager.config ({
                width: '250px'
            });
			YAHOO.widget.TooltipManager.forbbiden = ['yui-skin-sam'];
            YAHOO.widget.TooltipManager.onCompile = function ( el, o ) {
            	this.body = this.backup.title || '';
              	return true;
            };
		};
		obj.initMenuBar = function () {
		  var oMenuBar = new YAHOO.widget.MenuBar('quickaccess', { autosubmenudisplay: true, hidedelay: 750, lazyload: true });
          oMenuBar.render();
		};
		obj.closing = function (items) {
		  if (items.length > 0) {
		    for(k = 0; k < items.length; k++) {
		        YAHOO.util.Dispatcher.jsLoader ( items[k].file, {after: items[k].method} );
		    }
		  }
		};
		obj.initHints();
  	    return obj;
	}();

	// Initialize and render dynamic elements using onContentReady event for each webpart
	$E.onDOMReady(YAHOO.App.Core.init, YAHOO.App.Core, true);
	$E.onContentReady('quickaccess', YAHOO.App.Core.initMenuBar, YAHOO.App.Core, true);
})();
//]]>