	var imfPrd = null;
	var IMF = YAHOO;
	var Util = IMF.util; //Utilities
	var Event = IMF.util.Event; //Event Manager
	var DDM = IMF.util.DDM; //DragDrop Manager
				
	IMF.namespace("imfPrd.DDPlayer");
	
	IMF.imfPrd.DDPlayer = function(id, sGroup, config) {
		IMF.imfPrd.DDPlayer.superclass.constructor.apply(this, arguments);
		this.initPlayer( id, sGroup, config );
	};
	
	IMF.extend( IMF.imfPrd.DDPlayer, IMF.util.DDProxy, {
		TYPE: "DDPlayer",
		initPlayer: function( id, sGroup, config ) {
			if (!id) { return; }
	        var el = this.getDragEl()
	        IMF.util.Dom.setStyle( el, "border", "none");
	        IMF.util.Dom.setStyle( el, "width",  "300px" );
	        this.setDelta( 150, 150/2 );
	        this.isTarget = false;
	        this.originalStyles = [];
	        this.type = IMF.imfPrd.DDPlayer.TYPE;
	        this.slot = null;
	        this.scroll = false;
	        this.resizeFrame = false;
			IMF.util.DDM.useCache = false;
	        this.startPos = IMF.util.Dom.getXY( this.getEl() );
	        this.on( 'b4StartDragEvent', function(){
				IMF.imfPrd.DDTarget.show();
				IMF.util.DDM.onAvailable();
			} );
	    },
	    startDrag: function(x, y) {
	    	if( IMF.imfPrd.DDTarget.TIMEOUT ){
	    		clearTimeout( IMF.imfPrd.DDTarget.TIMEOUT );
	    		IMF.imfPrd.DDTarget.TIMEOUT = null;
	    		this.timeout_reset = false;
	    	}
	        var Dom = IMF.util.Dom;
	        var dragEl = this.getDragEl();
	        var clickEl = this.getEl();
	        dragEl.innerHTML = clickEl.innerHTML;
	        dragEl.className = clickEl.className;
			dragEl.className = "dd-item";
			this.setDelta( 150, 150/2 );
	        Dom.setStyle( clickEl, "opacity", 0.3 );
	        var targets = IMF.util.DDM.getRelated(this, true);
	        for ( var i=0; i<targets.length; i++ ) { var targetEl = this.getTargetDomRef(targets[i]); }
	    },
	    getTargetDomRef: function( oDD ) {
	    	return ( oDD.player ) ? oDD.player.getEl() : oDD.getEl();
	    },
	    endDrag: function(e) {
	        IMF.util.Dom.setStyle(this.getEl(), "opacity", 1);
	        this.resetTargets();
	    },
	    resetTargets: function( to ) {
	        if( to > 0 ){
	        	this.timeout_reset = true;
	        	if( IMF.imfPrd.DDTarget.TIMEOUT ){
	        		clearTimeout( IMF.imfPrd.DDTarget.TIMEOUT );
	        		IMF.imfPrd.DDTarget.TIMEOUT = null;
	        	}
	        	IMF.imfPrd.DDTarget.TIMEOUT = setTimeout( "IMF.imfPrd.DDTarget.hide()", to*1000 );
	        }else if( !this.timeout_reset ){
	        	this.timeout_reset = false;
	        	IMF.imfPrd.DDTarget.hide();
	        }else{
	        	this.timeout_reset = false;
	        }
	        var targets = IMF.util.DDM.getRelated(this, true);
	        for (var i=0; i<targets.length; i++) {
	            var targetEl = this.getTargetDomRef(targets[i]);
	            targetEl.className = "normal";
	        }
	    },
	    onDragDrop: function(e, id) {
	        var oDD;
	        if ("string" == typeof id) {
	            oDD = IMF.util.DDM.getDDById(id);
	        } else {
	            oDD = IMF.util.DDM.getBestMatch(id);
	        }
	
	        var el = this.getEl();
	        IMF.imfPrd.DDTarget.action( oDD.getEl(), el );
	        this.resetTargets( 2 );
	    },
	    onDragOver: function(e, id) {
	    	var oDD;
	        if ("string" == typeof id) {
	            oDD = IMF.util.DDM.getDDById(id);
	        } else {
	            oDD = IMF.util.DDM.getBestMatch(id);
	        }
	        
	        var el = oDD.getEl();
	    	el.className = "selected";
	    },
	    onDragOut: function(e, id) {
	    	var oDD;
	        if ("string" == typeof id) {
	            oDD = IMF.util.DDM.getDDById(id);
	        } else {
	            oDD = IMF.util.DDM.getBestMatch(id);
	        }
	    	
	    	var el = oDD.getEl();
	    	el.className = "normal";
	    },
	    onDrag: function(e, id) { }
	});