var amp='&';
var gt='>';
var lt='<';

var XPE ={};

var Dom = YAHOO.util.Dom;
var Event = YAHOO.util.Event;
var DDM = YAHOO.util.DragDropMgr;


XPE.bus=function() {
   var events={};

  return {
    subscribe: function(type, callBack ) {
        if (callBack==null||typeof(callBack)!='function') {
            YAHOO.log('Fatal: supplied callback is not a valid function for event type '+type);
            return;
        }
        var ev=events[type];
        if (!ev) {
            events[type]=[];
        }
        events[type].push(callBack);
    }
    ,
    occurred : function(type, param) {
        var ev=events[type];
        if (ev) {
            for (var cb in events[type]) {
                events[type][cb](type,param);
            }
        }
    }
  }
}();

XPE.http=function(type, param) {
  var callback =
	{
	  success: function(o) {
            XPE.bus.occurred(param.success, {response:o, param:param});
          },
	  failure: function(o) {
            YAHOO.log("Get error");
            XPE.bus.occurred(param.error, {response:o, param:param});
          },
	  timeout: 5000,
	  argument: param
	};

  if (param.uri) {
        YAHOO.util.Connect.resetFormState();
    YAHOO.util.Connect.asyncRequest('GET', param.uri, callback);
  }
   	
}

XPE.bus.subscribe('GET',XPE.http);


function select_innerHTML(objeto,innerHTML){
/******
* select_innerHTML - innerHTML to add option(s) to select(s)
* Problem: http://support.microsoft.com/default.aspx?scid=kb;en-us;276228
* Creative Commons license
* Vers‹o: 1.0 - 06/04/2006
* Author: Micox - N‡iron J.C.G - micoxjcg@yahoo.com.br - elmicoxcodes.blogspot.com
* Parametros:
* objeto(tipo object): the select
* innerHTML(tipo string): the new innerHTML
*******/
    objeto.innerHTML = ""
    //creating phantom element to receive temp innerHTML
    var selTemp = document.createElement("micoxselect")
    var opt;
    selTemp.id="micoxselect1";
    document.body.appendChild(selTemp);
    selTemp = document.getElementById("micoxselect1");
    selTemp.style.display="none";
    if(innerHTML.toLowerCase().indexOf("<option")<0){//if not option, convert do option
        innerHTML = "<option>" + innerHTML + "</option>";
    }
    innerHTML = innerHTML.replace(/<option/g,"<span").replace(/<\/option/g,"</span");
    selTemp.innerHTML = innerHTML;
    //transfering childs of phantom element to options
    for(var i=0;i<selTemp.childNodes.length;i++){
        if(selTemp.childNodes[i].tagName){
            opt = document.createElement("OPTION");
            for(var j=0;j<selTemp.childNodes[i].attributes.length;j++){
                opt.setAttributeNode(selTemp.childNodes[i].attributes[j].cloneNode(true));
            }
            opt.value=""+selTemp.childNodes[i].getAttribute("value");
            if (YAHOO.env.ua.ie > 0 && opt.value=="") {
               opt.value=" ";
            } 
            opt.text = selTemp.childNodes[i].innerHTML;
            if(document.all){ //IEca
                objeto.add(opt);
            }else{
                objeto.appendChild(opt);
            }                    
        }    
    }
    //clear phantom
    document.body.removeChild(selTemp);
    selTemp = null;
}



XPE.DD = function(id, sGroup, config) {
        

        var clickEl;
        
        XPE.DD.superclass.constructor.call(this, id, sGroup, config);
        
        var el = this.getDragEl();
        Dom.setStyle(el, "opacity", 0.67);  
        
        this.goingUp = false;
        this.lastY = 0;
};
        
YAHOO.extend(XPE.DD, YAHOO.util.DDProxy, {
        
        
        startDrag: function(x, y) {
        
        var dragEl = this.getDragEl();
        clickEl = this.getEl();
        //        Dom.setStyle(clickEl, "visibility", "hidden");
        //        Dom.setStyle(clickEl, "opacity", 0.67);
        
        dragEl.innerHTML = clickEl.innerHTML;
        
        Dom.setStyle(dragEl, "color", Dom.getStyle(clickEl, "color"));
        Dom.setStyle(dragEl, "backgroundColor", Dom.getStyle(clickEl, "backgroundColor"));
        Dom.setStyle(dragEl, "border", "1px solid gray");
        },
        
        destEl: null,
        
        endDrag: function(e) {
        
        
        var srcEl = this.destEl||this.getEl();
        
        var proxy = this.getDragEl();
        
        Dom.setStyle(proxy, "visibility", "");
        var a = new YAHOO.util.Motion( 
        proxy, { 
        points: { 
        to: Dom.getXY(srcEl)
        }
        }, 
        0.2, 
        YAHOO.util.Easing.easeOut 
        )
        var proxyid = proxy.id;
        var thisid = this.id;
        
        // Hide the proxy and show the source element when finished with the animation
        a.onComplete.subscribe(function() {
        Dom.setStyle(proxyid, "visibility", "hidden");
        Dom.setStyle(thisid, "visibility", "");
        });
        a.animate();
        },
        
        onDragDrop: function(e, id) {
        
        // 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 (DDM.interactionInfo.drop.length === 1) {
        
        // The position of the cursor at the time of the drop (YAHOO.util.Point)
        var pt = DDM.interactionInfo.point; 
        
        // The region occupied by the source element at the time of the drop
        var region = DDM.interactionInfo.sourceRegion; 
                
         
        if (!region.intersect(pt)) {
         this.destEl = Dom.get(id);
         if (this.destEl) {
           XPE.bus.occurred("dropped",{id:id, src:clickEl });
         }
        }
        
        }
        },
        
        
        
        onDrag: function(e) {
        
        // Keep track of the direction of the drag for use during onDragOver
        var y = 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) {
        
        }
        });







