//var Dom = YAHOO.util.Dom;
//var Event = YAHOO.util.Event;
//var DDM = YAHOO.util.DragDropMgr;

var eZFlowWidgets = {
	
	// Decides if blocks should be user customizable
	personalized: false,
	endDragHooks: new Array,
	
	DomCacheArray: {},
	
	addEndDragHook: function( f )
	{
		eZFlowWidgets.endDragHooks[ eZFlowWidgets.endDragHooks.length ] = f;
	},
	
	pause: function(millis)
	{
		var date = new Date();
		var curDate = null;
		
		do { curDate = new Date(); 
		} while(curDate-date < millis);
		
		return null;
	},
	
	addStyleSheet: function( cssfile )
	{
		var head = document.getElementsByTagName('head');

		if( head.length == 1 && head[0] )
		{
			var link = document.createElement('link');
			link.rel = "stylesheet";
			link.type = "text/css";
			link.href = cssfile;
			
			head[0].appendChild( link );
		}
	},
	
	registerZone: function( id )
	{
		if( !eZFlowWidgets.personalized )
			return false;
			
		var zone = document.getElementById(id);
		eZFlowWidgets.DomCacheRegister( zone );
		new YAHOO.util.DDTarget( zone.id );
	},
	
	registerBlock: function( id )
	{
		if( !eZFlowWidgets.personalized )
			return false;
			
    	var block = document.getElementById(id);
    	
    	eZFlowWidgets.DomCacheRegister( block );
    	
    	dd = new eZFlowWidgets.DDList( block.id );
    	
    	drag_handlers = YAHOO.util.Dom.getElementsByClassName( 'block-drag-handle', 'div', eZFlowWidgets.DomCacheGet(block.id) );
    	
    	for( j = 0; j < drag_handlers.length; j++ )
    	{
    		dd.setHandleElId( drag_handlers[j].id );
    	}
    	
    	eZFlowWidgets.cacheBlockDom( eZFlowWidgets.DomCacheGet(block.id) );
	},
		
	init: function()
	{
		if( !eZFlowWidgets.personalized )
			return false;
		
		var zonesDiv = document.getElementById('ezpage-zones');
		
		var blocks = YAHOO.util.Dom.getElementsByClassName( 'ezflow-block-address', 'div', zonesDiv );
		var columns = YAHOO.util.Dom.getElementsByClassName( 'ezflow-zone-column', 'div', zonesDiv );
		var i, dd;
		
		for( i = 0; i < columns.length; i++ )
		{
			eZFlowWidgets.registerZone( columns[i].id );
		}

		// DomCache
		eZFlowWidgets.DomCacheRegister( YAHOO.util.Dom.get('ezflow-ajax-loader-markup') );
		
		var drag_handlers, config_panels, config_panel_ajax, blockIdData, block_id, instance_id, jsString;
		
		for( i = 0, j = 0; i < blocks.length; i++ )
		{
			eZFlowWidgets.registerBlock( blocks[i].id );
		}
		
		var toggleDiv = YAHOO.util.Dom.get('ezpage-blocks-browse-toggle');
		
		if( toggleDiv )
			toggleDiv.onclick = eZFlowWidgets.toggleBrowseMode;
	},
	
	getEl: function(id)
	{
		return YAHOO.util.Dom.get( id );
	},
	
	toggleBrowseMode: function() {
		var el = YAHOO.util.Dom.get('ezpage-blocks-browse');	
		var className = el.className;

		if( className == 'hidden' )
		{
			el.className = '';
		}
		else {
			el.className = 'hidden';
		}
	},
	
	DomCacheRegister: function(el)
	{
		var key = el.id.replace('-', '_');
		eZFlowWidgets.DomCacheArray[key] = el;
	},
	
	DomCacheGet: function(id)
	{
		var key = id.replace('-', '_');
		
		if( eZFlowWidgets.DomCacheArray[key] == undefined )
			return YAHOO.util.Dom.get( id );
		
		return eZFlowWidgets.DomCacheArray[key];
	},
	
	ajaxLoadingMarkup: function( block_id, instance_id, zone_id )
	{
		var container = eZFlowWidgets.DomCacheGet('address-' + zone_id + '-' + block_id + '-' + instance_id);
		
		var htmldiv = YAHOO.util.Dom.getElementsByClassName( 'block-content-toggle', 'div', container )[0];
		
		var loadingDiv = eZFlowWidgets.DomCacheGet('ezflow-ajax-loader-markup');
		
		htmldiv.innerHTML = loadingDiv.innerHTML;
	},

	toggleContent: function( zone_id, block_id, instance_id )
	{
		var toggler = eZFlowWidgets.DomCacheGet('toggler-' + block_id + '-' + instance_id);
		
		if( toggler )
		{
			if( toggler.src )
			{
				if( toggler.src.indexOf('block_up.gif') == -1 )
				{
					toggler.src = toggler.src.replace('block_down.gif', 'block_up.gif');
				}
				else
				{
					toggler.src = toggler.src.replace('block_up.gif', 'block_down.gif');
				}
			}
			else
			{
				if( toggler.className.indexOf('expand') == -1 )
				{
					toggler.className = toggler.className.replace('collapse', 'expand');
				}
				else
				{
					
					toggler.className = toggler.className.replace('expand', 'collapse');
				}
			}
		}
		
		var container = eZFlowWidgets.DomCacheGet('address-' + zone_id + '-' + block_id + '-' + instance_id);
		
		var contents = YAHOO.util.Dom.getElementsByClassName( 'block-content-toggle', 'div', container );
		
		for( var i = 0; i < contents.length; i++ )
		{
			if( contents[i].style.display == 'none' )
				contents[i].style.display = 'block';
			else
				contents[i].style.display = 'none';
		}
		
		var uri = YAHOO.util.Dom.get('ezflow_toggleContentURI').value + '/' + zone_id + '/' + block_id + '/' + instance_id;

		YAHOO.util.Connect.asyncRequest( 'post', uri, { success: eZFlowWidgets.toggleContentCallbacks.success, failure: eZFlowWidgets.toggleContentCallbacks.failure }, "" );

	},
	
	toggleConfig: function( zone_id, block_id, instance_id )
	{
		var configDiv = eZFlowWidgets.DomCacheGet('block-configuration-' + block_id + '-' + instance_id);
		
		if( configDiv )
		{
			if(configDiv.className.indexOf('block-style-hidden') >= 0)
			{
				YAHOO.util.Dom.removeClass( configDiv, "block-style-hidden" );
				//configDiv.className = configDiv.className.replace('block-style-hidden', '');
			}
			else
			{
				YAHOO.util.Dom.addClass( configDiv, "block-style-hidden" );
				//configDiv.className = configDiv.className + ' block-style-hidden';
			}
		}
	},
	
	toggleUWAConfig: function( block_id, instance_id )
	{
		var configDiv = eZFlowWidgets.DomCacheGet('uwa-config-' + block_id + '-' + instance_id);
		
		if( configDiv ) 
		{
			if(configDiv.className.indexOf('block-style-hidden') >= 0)
			{
				YAHOO.util.Dom.removeClass( configDiv, "block-style-hidden" );
				//configDiv.className = configDiv.className.replace('block-style-hidden', '');
			}
			else
			{
				YAHOO.util.Dom.addClass( configDiv, "block-style-hidden" );
				//configDiv.className = configDiv.className + ' block-style-hidden';
			}
		}

	},	
	
	updateBlockTitle: function( block_id, instance_id, title )
	{
		var titleDiv = eZFlowWidgets.DomCacheGet('headertitle-' + block_id + '-' + instance_id);
		
		if( titleDiv )
		{
			titleDiv.innerHTML = title;
		}
	},
	
	storeConfig: function( zone_id, block_id, instance_id, mode )
	{
		var container = eZFlowWidgets.DomCacheGet('address-' + zone_id + '-' + block_id + '-' + instance_id);
		
		var configClassName = 'block-user-config-item';
		
		if( mode == 'uwa' )
			configClassName = 'block-user-config-item-uwa';
		
		var inputs = YAHOO.util.Dom.getElementsByClassName( configClassName, 'input', container );
		var selects = YAHOO.util.Dom.getElementsByClassName( configClassName, 'select', container );

		var i, l;
		
		var ConfigNames = new Array;
		var ConfigValues = new Array;
		
		var configString = 'mode=store';
		
		for( i = 0, l = inputs.length; i < l; i++ )
		{
			if( inputs[i].type == 'checkbox' )
			{
				if( inputs[i].checked )
					inputs[i].value = "1";
				else
					inputs[i].value = "0";
			}
			
			configString += '&' + 'blockconfig[' + inputs[i].name + ']' + '=' + inputs[i].value;
			
			if( inputs[i].name == 'title' )
				eZFlowWidgets.updateBlockTitle( block_id, instance_id, inputs[i].value );
		} 

		for( i = 0, l = selects.length; i < l; i++ )
		{
			configString += '&' + 'blockconfig[' + selects[i].name + ']' + '=' + selects[i].options[selects[i].selectedIndex].value;
		} 
		
		var uri = YAHOO.util.Dom.get('ezflow_storeConfigURI').value + '/' + zone_id + '/' + block_id + '/' + instance_id;

		var storeConfigLoader = eZFlowWidgets.DomCacheGet('block-config-store-loading-' + block_id + '-' + instance_id);
		
		storeConfigLoader.style.display = "";
		
		YAHOO.util.Connect.asyncRequest( 'post', uri, { success: eZFlowWidgets.storeConfigCallbacks.success, failure: eZFlowWidgets.storeConfigCallbacks.failure }, configString );
	
		eZFlowWidgets.toggleConfig( zone_id, block_id, instance_id );
	},
	
	updateBlockIndex: function(id, drop_zone, start, end)
	{
		var info = id.split("-");
		var zone_id = info[1];
		var block_id = info[2];
		var instance_id = info[3];
		
		var zone_info = drop_zone.split('-');
		var new_zone_id = zone_info[1];

		if( new_zone_id == 'undefined' || new_zone_id == undefined || typeof new_zone_id == undefined )
			return false;
		
		var uri = YAHOO.util.Dom.get('ezflow_updateBlockIndex').value;
		
		uri = uri + '/' + new_zone_id + '/' + block_id + '/' + instance_id + '/' + start + '/' + end;
		
		YAHOO.util.Connect.asyncRequest( 'post', uri, { success: eZFlowWidgets.updateBlockCallbacks.success, failure: eZFlowWidgets.updateBlockCallbacks.failure }, '' );
	},
	
	refreshBlock: function( zone_id, block_id, instance_id, offset )
	{
		offset = parseInt( offset );
		
		eZFlowWidgets.ajaxLoadingMarkup( block_id, instance_id, zone_id );
		
		var uri = YAHOO.util.Dom.get('ezflow_refreshURI').value + '/' + block_id + '/' + instance_id + '/json';
		
		YAHOO.util.Connect.asyncRequest( 'post', uri, { success: eZFlowWidgets.refreshCallbacks.success, failure: eZFlowWidgets.refreshCallbacks.failure }, 'block_offset=' + offset );
	},
	
	removeBlock: function( question, zone_id, block_id, instance_id )
	{
		if( confirm( question ) )
		{
			var container = eZFlowWidgets.DomCacheGet('address-' + zone_id + '-' + block_id + '-' + instance_id);
			var p = container.parentNode;
			p.removeChild( container );
			
			var uri = YAHOO.util.Dom.get('ezflow_removeBlockURI').value + '/' + block_id + '/' + instance_id;
			YAHOO.util.Connect.asyncRequest( 'post', uri, { success: eZFlowWidgets.removeCallbacks.success, failure: eZFlowWidgets.removeCallbacks.failure }, '' );
		}
	},
	
	addBlock: function( block_id, question )
	{
		// Get zones
		var zones = YAHOO.util.Dom.getElementsByClassName('ezflow-zone-column', 'div', document.body);
		
		var zoneArray = new Array, temp;
		var zoneCount = zones.length;

		for( var i = 0; i < zoneCount; i++ )
		{
			temp = zones[i].id.split('-');
			zoneArray[i] = temp[1];
		}
		
		question = question + ' (1-' + zoneCount + ')';
		
		var zoneNumber = 1;
		
		/*
		while( parseInt(zoneNumber) < 1 || parseInt(zoneNumber) > zoneCount )
		{
			zoneNumber = prompt( question, "1" );
		}
		*/
		
		if( zoneNumber == undefined )
			return null;
		
		var zoneIndex = parseInt(zoneNumber)-1;
		var zone_id = zoneArray[zoneIndex];
		var elementId = 'ezpagezone-' + zone_id;
		
		var uri = YAHOO.util.Dom.get('ezflow_addBlockURI').value + '/' + block_id + '/' + zone_id;
		YAHOO.util.Connect.asyncRequest( 'post', uri, { success: eZFlowWidgets.addBlockCallbacks.success, failure: eZFlowWidgets.addBlockCallbacks.failure }, '' );
	},
	
	blockIcon: function(block_id, instance_id, src)
	{
		var blockicon = eZFlowWidgets.DomCacheGet('block-icon-' + block_id + '-' + instance_id);
		
		if( blockicon )
		{
			blockicon.src = src;
			blockicon.style.display = "";
		}
	},
	
	cacheBlockDom: function(container)
	{
    	var j;
    	var config_panels = YAHOO.util.Dom.getElementsByClassName( 'block-configuration-panel', 'div', container );

    	for( j = 0; j < config_panels.length; j++ )
    	{
    		eZFlowWidgets.DomCacheRegister( config_panels[j] );
    	}

    	var config_panels_uwa = YAHOO.util.Dom.getElementsByClassName( 'block-uwa-configuration-panel', 'div', container );

    	for( j = 0; j < config_panels_uwa.length; j++ )
    	{
    		eZFlowWidgets.DomCacheRegister( config_panels_uwa[j] );
    	}

    	var config_panel_ajax = YAHOO.util.Dom.getElementsByClassName( 'block-config-store-loading', 'div', container );
    	
    	for( j = 0; j < config_panel_ajax.length; j++ )
    	{
    		eZFlowWidgets.DomCacheRegister( config_panel_ajax[j] );
    	}
    	
    	var content_toggle = YAHOO.util.Dom.getElementsByClassName( 'block-content-toggle', 'div', container );

    	for( j = 0; j < content_toggle.length; j++ )
    	{
    		eZFlowWidgets.DomCacheRegister( content_toggle[j] );
    	}

    	var content_toggle_button = YAHOO.util.Dom.getElementsByClassName( 'button-content-toggler', 'input', container );
    	
    	for( j = 0; j < content_toggle_button.length; j++ )
    	{
    		eZFlowWidgets.DomCacheRegister( content_toggle_button[j] );
    	}

    	var dyntabs = YAHOO.util.Dom.getElementsByClassName( 'block-dyntabs', 'div', container );
    	
    	for( j = 0; j < dyntabs.length; j++ )
    	{
    		eZFlowWidgets.DomCacheRegister( dyntabs[j] );
    	}
    	
    	var title = YAHOO.util.Dom.getElementsByClassName( 'block-header-title', 'div', container );
    	
    	if( title.length == 1 )
    		eZFlowWidgets.DomCacheRegister( title[0] );

    	var blockicon = YAHOO.util.Dom.getElementsByClassName( 'block-icon', 'img', container );
    	
    	if( blockicon.length == 1 )
    		eZFlowWidgets.DomCacheRegister( blockicon[0] );

    	eZFlowWidgets.DomCacheRegister( container );
	}
	
};

eZFlowWidgets.refreshCallbacks = {
	success: function(o)
	{
		var json = eval( '(' + o.responseText + ')' );
		
		if( json )
		{
			var block_id = json.id;
			var zone_id = json.zone_id;
			var instance_id = json.instance_id;
			var html = json.html;
			
			var container = eZFlowWidgets.DomCacheGet('address-' + zone_id + '-' + block_id + '-' + instance_id);
			//var htmldiv = YAHOO.util.Dom.getElementsByClassName( 'block-content-toggle', 'div', container )[0];
			var htmldiv = eZFlowWidgets.DomCacheGet('main-content-' + block_id + '-' + instance_id);
			
			htmldiv.innerHTML = html;
			
			eZFlowWidgets.cacheBlockDom( htmldiv );
			
			eZFlowWidgets.pause(100);

			if( json.javascripts.length > 0 )
			{
				for( var i = 0; i < json.javascripts.length; i++ )
				{
					jscript = eval( '(' + json.javascripts[i] + ')();' );
					
					//if( typeof jscript == 'function' )
					//	jscript();
				}
			}
		}
		
	},
	failure: function(o)
	{
	}
};

eZFlowWidgets.storeConfigCallbacks = {
	success: function(o)
	{
		if(o.responseText !== undefined){
			var info = o.responseText.split('-');
			var block_id = info[0];
			var instance_id = info[1];
			var zone_id = info[2];
			
			var storeConfigLoader = eZFlowWidgets.DomCacheGet('block-config-store-loading-' + block_id + '-' + instance_id);
			
			storeConfigLoader.style.display = "none";

			eZFlowWidgets.refreshBlock( zone_id, block_id, instance_id, 0 );
		}
	},
	failure: function(o)
	{
	}
};

eZFlowWidgets.addBlockCallbacks = {
	success: function(o)
	{
		var json = eval( '(' + o.responseText + ')' );
		
		if( json )
		{
			if(json.success == "true")
			{
				var zone = YAHOO.util.Dom.get('ezpagezone-' + json.zone_id), jscript;
				
				if( zone )
				{
					zone.innerHTML = json.html + zone.innerHTML;
					eZFlowWidgets.pause(100);
					
					eZFlowWidgets.init();

					if( json.javascripts.length > 0 )
					{
						for( var i = 0; i < json.javascripts.length; i++ )
						{
							jscript = eval( '(' + json.javascripts[i] + ')();' );
		
							//if( typeof jscript == 'function' )
							//	jscript();
						}
					}
					
				}
			}
		}
	},
	failure: function(o)
	{
	}
};

eZFlowWidgets.updateBlockCallbacks = {
	success: function(o)
	{
	},
	failure: function(o)
	{
	}
};

eZFlowWidgets.toggleContentCallbacks = {
	success: function(o)
	{
	},
	failure: function(o)
	{
	}
};

eZFlowWidgets.removeCallbacks = {
	success: function(o)
	{
	},
	failure: function(o)
	{
	}
};

eZFlowWidgets.DDList = function(id, sGroup, config) {

    eZFlowWidgets.DDList.superclass.constructor.call(this, id, sGroup, config);

    this.logger = this.logger || YAHOO;
    var el = this.getDragEl();
    YAHOO.util.Dom.setStyle(el, "opacity", 0.88); // The proxy is slightly transparent

    this.goingUp = false;
    this.lastY = 0;
};

var dragStartIndex = false;
var dragEndIndex = false;

YAHOO.extend(eZFlowWidgets.DDList, YAHOO.util.DDProxy, {

    lastEl: '',
    startParent: false,
    startX: 0,
    startY: 0,
    
    getIndex: function(srcEl, parent)
    {
    	var blocks = YAHOO.util.Dom.getElementsByClassName( 'ezflow-block', 'div', parent );

    	for( var i = 0, l = blocks.length; i < l; i++ )
    	{
    		if( blocks[i].id == srcEl.id )
    			return (i+1);
   			
    	}
    },
    
    startDrag: function(x, y) {
        this.logger.log(this.id + " startDrag");
        this.startX = x;
        this.startY = y;
		
        // make the proxy look like the source element
        var dragEl = this.getDragEl();
        var clickEl = this.getEl();
        
        if( dragStartIndex == false )
        	dragStartIndex = this.getIndex(clickEl, clickEl.parentNode);
        
		//clickEl.className += " ezflow-block-address-hidden";
		YAHOO.util.Dom.addClass( clickEl, "ezflow-block-address-hidden" );
		
        dragEl.innerHTML = clickEl.innerHTML;
        //dragEl.innerHTML = "";
        //dragEl.appendChild(clickEl);
        
        //YAHOO.util.Dom.setStyle(dragEl, "width", YAHOO.util.Dom.getStyle(clickEl, "width"));
        YAHOO.util.Dom.setStyle(dragEl, "color", YAHOO.util.Dom.getStyle(clickEl, "color"));
        YAHOO.util.Dom.setStyle(dragEl, "backgroundColor", YAHOO.util.Dom.getStyle(clickEl, "backgroundColor"));
        YAHOO.util.Dom.setStyle(dragEl, "border", "2px solid gray");
        
        YAHOO.util.Dom.addClass( dragEl, "ezflow-drag-ghost" );
    },

    endDrag: function(e) {

        var srcEl = this.getEl();
        var proxy = this.getDragEl();
		
        // Show the proxy element and animate it to the src element's location
        YAHOO.util.Dom.setStyle(proxy, "visibility", "");
        
        var a = new YAHOO.util.Motion( 
            proxy, { 
                points: { 
                    to: YAHOO.util.Dom.getXY(srcEl)
                }
            }, 
            0.03, 
            YAHOO.util.Easing.easeOut 
        )
        var proxyid = proxy.id;
        var thisid = srcEl.id;

        // Hide the proxy and show the source element when finished with the animation
        a.onComplete.subscribe(function() {
                YAHOO.util.Dom.setStyle(proxyid, "visibility", "hidden");
                YAHOO.util.Dom.setStyle(thisid, "visibility", "");
                YAHOO.util.Dom.removeClass( srcEl, "ezflow-block-address-hidden" );
                //srcEl.className = srcEl.className.replace(' ezflow-block-address-hidden', '');
            });
        a.animate(); 
		
		dragEndIndex = this.getIndex(srcEl, srcEl.parentNode);
		eZFlowWidgets.updateBlockIndex(srcEl.id, srcEl.parentNode.id, dragStartIndex, dragEndIndex);
		
		for( var i = 0; i < eZFlowWidgets.endDragHooks.length; i++ )
		{
			if( typeof eZFlowWidgets.endDragHooks[i] == 'function' )
				eZFlowWidgets.endDragHooks[i]( srcEl );
		}
    },

    onDragDrop: function(e, id) {
		var y = YAHOO.util.Event.getPageY(e);
		var x = YAHOO.util.Event.getPageX(e);
		var th = 50;
		var tw = 30;
		
		var diff = this.startY - y;
		var diffX = this.startX - x;
		
		if( (diffX >= 0 && diffX <= tw) && (diffX < 0 && diffX >= (tw*-1)) )
		{
			if( diff >= 0 && diff <= th )
				return false;
				
			if( diff < 0 && diff >= (th*-1) )
				return false;
		}
		
        // If there is one drop interaction, the li was dropped either on the list,
        // or it was dropped on the current location of the source element.
        if (YAHOO.util.DragDropMgr.interactionInfo.drop.length === 1) {

            // The position of the cursor at the time of the drop (YAHOO.util.Point)
            var pt = YAHOO.util.DragDropMgr.interactionInfo.point; 

            // The region occupied by the source element at the time of the drop
            var region = YAHOO.util.DragDropMgr.interactionInfo.sourceRegion; 
			
            // Check to see if we are over the source element's location.  We will
            // append to the bottom of the list once we are sure it was a drop in
            // the negative space (the area of the list without any list items)
            if (region.intersect(pt)) {
                //var destEl = YAHOO.util.Dom.get(id);
                var destEl = eZFlowWidgets.DomCacheGet( id );
                var destDD = YAHOO.util.DragDropMgr.getDDById(id);
                destEl.appendChild(this.getEl());
                destDD.isEmpty = false;
                YAHOO.util.DragDropMgr.refreshCache();
            }

        }
    },

    onDrag: function(e) {

        // Keep track of the direction of the drag for use during onDragOver
        var y = YAHOO.util.Event.getPageY(e);

        if (y < this.lastY) {
            this.goingUp = true;
        } else if (y > this.lastY) {
            this.goingUp = false;
        }

        this.lastY = y;
    },

    onDragOver: function(e, id) {
		var y = YAHOO.util.Event.getPageY(e);
		var x = YAHOO.util.Event.getPageX(e);
		var th = 50;
		var tw = 30;
		
		var diff = this.startY - y;
		var diffX = this.startX - x;
		
		if( (diffX >= 0 && diffX <= tw) && (diffX < 0 && diffX >= (tw*-1)) )
		{
			if( diff >= 0 && diff <= th )
				return false;
				
			if( diff < 0 && diff >= (th*-1) )
				return false;
		}
			
        var srcEl = this.getEl();
        //var destEl = YAHOO.util.Dom.get(id);
		var destEl = eZFlowWidgets.DomCacheGet( id );
		
        if(destEl.nodeName.toLowerCase() == "div" && destEl.className.indexOf("ezflow-zone-column") >= 0 && this.lastEl != destEl)
        {
        	if( YAHOO.util.Dom.getElementsByClassName( 'ezflow-block-address', 'div', destEl ).length == 0 )
        	{
	        	destEl.insertBefore(srcEl, destEl.firstChild);
	        	//p.appendChild(srcEl); // insert above
	        	
	        }
	        else
	        {
	        	destEl.appendChild(srcEl); // insert above
	        }
	        
	        this.lastEl = destEl;
        }
		else if (destEl.nodeName.toLowerCase() == "div" && destEl.className.indexOf("ezflow-block-address") >= 0) {
            if (this.goingUp) {
                destEl.parentNode.insertBefore(srcEl, destEl); // insert above
            } else {
                destEl.parentNode.insertBefore(srcEl, destEl.nextSibling); // insert below
            }
        }
    }
});


YAHOO.util.Event.onDOMReady(eZFlowWidgets.init); 

