/**
 * @class a YAHOO.util.DDProxy implementation. During the drag over event, the
 * dragged element is inserted before the dragged-over element.
 *
 * @extends YAHOO.util.DDProxy
 * @constructor
 * @param {String} id the id of the linked element
 * @param {String} sGroup the group of related DragDrop objects
 * @version 2008-09-26 DD
 */
/*
 * Achtung,
 * je nach Modus (POINT/INTERSECT) Uebergeben die Events die id(string) des Drags oder ein Objekt(Array)!
 */

if (!YAHOO.hmmh) YAHOO.namespace("hmmh");


if (location.hostname == "localhost" && !document.uniqueID) {
	//$log = ; 
}

YAHOO.hmmh.DDBilderliste = function() {
	
	sortBoxes = new Array();
	dropTargetObject = null;
	return {
	dragElms : new Array(),
	
  	init : function() {
  		
	  YAHOO.util.DDM.mode = YAHOO.util.DDM.INTERSECT;  
	  YAHOO.hmmh.DDBilderliste.initDragElements();
	  
	  // Setting Drop target on surrounding container 2008-11-06
	  // moved from initTargets
	  new YAHOO.util.DDTarget("slFixierung");
	  // resize DropTarget for large lists (not for IE)(
	  if(!(YAHOO.env.ua.ie >0)) {
	  	$D.get("slFixierung").style.height = "50000px";
	  }
	  //YAHOO.hmmh.DDBilderliste.initTargets();
    },
	// initTargets: Targets von aussen triggern, erforderlich, wenn neue Merkzettel mit JS hinzugefuegt wurden.
	// is this really necessary to be called again and again?
	initTargets : function() {
		var acdnBodies = $D.get("accordion").getElementsByTagName("dd");
		var acdnHeads = $D.get("accordion").getElementsByTagName("dt");
		$D.generateId( acdnBodies, 'dropSlot-')
		
		for (var i = 0; i < acdnHeads.length; i++) {
		    if (!acdnHeads[i].id || acdnHeads[i].id != "warenkorb") { // Merkzettel-Header bekommen generierte ID  
				$D.generateId(acdnHeads[i], 'dropHead-');
			} 
		}
	  
		//TODO: Existiert die erweiterte Merkliste, werden die Drop-Targets
		if($D.get("extendedNotepad") && $D.hasClass('liste','user') && ($U.findUrlValue('link') == "false")){
			if(!YAHOO.hmmh.DDBilderliste.sortBoxes) {
			  	YAHOO.hmmh.DDBilderliste.sortBoxes = new Array();
				var sortables = YAHOO.util.Selector.query('.merkzettel .sortBox');
				
				for(i=0;sortable=sortables[i];i++) {
					YAHOO.hmmh.DDBilderliste.sortBoxes.push($D.generateId(sortable, 'sortBox-'));
			  		sort = new YAHOO.util.DDTarget(sortable.id);
			  	}
			}	
		}
	},
	initDragElements : function(selectedDragElements) {
		if (selectedDragElements != undefined){
			var DDItems = $D.getElementsByClassName(selectedDragElements, "*");
		} else{
			var DDItems = $D.getElementsByClassName("thumb", "*");
		}
		
		for (var i=0, j=DDItems.length; i<j; i++) {
			$D.generateId(DDItems[i], 'ddItem-');
		   	new YAHOO.hmmh.DDList(DDItems[i].id);
		}
	}
	
  };
}();

YAHOO.hmmh.DDList = function(id, sGroup, config) {
	if (id) {
	  	this.init(id, sGroup, config);
	    this.initFrame();
	  	this.isTarget = false;
	  	this.resizeFrame = false;
	}
	/*
	if(findClass(this.getEl(), 'sortBox')) {
		this.parentOrig = findClass(this.getEl(), 'sortBox');
	}	
	*/
	throbberElem = $D.get("leftThrobber");
	this.dragEl = this.getDragEl();
	this.origEl = this.getEl();
	this.targetWrap = $D.get("slFixierung");
	this.dragStyle = this.dragEl.style;
	this.dragStyle.opacity = 0.76;
	this.dragStyle.filter = "alpha(opacity=76)";
	//	firstDragComplete = 0;
	// heuteSchonGedragged = 0; // not in use
	this.origBgCol = "#f0f0f0";	
	this.fadeToBgCol = "#CCC";	
	this.dragBorder = this.dragEl.style.border; // Correcting border in IE
};

YAHOO.extend(YAHOO.hmmh.DDList, YAHOO.util.DDProxy);

YAHOO.hmmh.DDList.prototype.startDrag = function(x, y) {

	var acdnBodies = $D.get("accordion").getElementsByTagName("dd");
	
	if($D.hasClass(this.origEl, "relIMG")) {
		info = YAHOO.hmmh.Accordion.findInfo(this.origEl);
		this.origEl.src = info.imgURL;
	}
	var origCopyImg = this.origEl.cloneNode(true);
	
	if (this.origEl.src) {
		origCopyImg.style.display = "block";	
	} 
	
	origCopyImg.src = this.origEl.src;
	
	//this.dragStyle.background = "url(" + this.origEl.src + ")";
	if(YAHOO.env.ua.ie >0) {
		origCopyImg.width = this.origEl.width;
		origCopyImg.height= this.origEl.height;
		
		// Deactivate Tooltips
		if(YAHOO.tooltip) {
			YAHOO.tooltip.active = false;
		}
		this.dragEl.style.border = "none";
		var borderElement = document.createElement("DIV");
		borderElement.style.border = this.dragBorder;
		borderElement.appendChild(origCopyImg);
		this.dragEl.appendChild(borderElement);
 
	}
	else{
		this.dragEl.appendChild(origCopyImg); 	
	}
	
	if(this.dragEl.childNodes[1]) {
		this.dragEl.removeChild(this.dragEl.firstChild);
	}

	origCopyImg.className = "startDrag";
	
	if(YAHOO.env.ua.ie >0) {
		$D.setStyle(this.dragEl, "width", "1px");
	}
	else {
		$D.setStyle(this.dragEl, "width", "auto");
	}
	$D.setStyle(this.dragEl, "height", "auto");
	
	if(findClass(this.origEl, 'sortBox')) {
		var parentOrig = findClass(this.origEl, 'sortBox');
		if ($D.hasClass('extendedNotepad', 'user') && ($U.findUrlValue('link') == "false")) {
			$D.get('liste').removeChild($D.getPreviousSibling(parentOrig));
			$D.setStyle(parentOrig, "border-left", "solid 9px #f0f0f0");
			$D.setStyle(parentOrig, "visibility", "hidden");
		}
		return true;
	} 
	
};

YAHOO.hmmh.DDList.prototype.endDrag = function(e) {
	if(this.dragEl.firstChild) {
		this.dragEl.firstChild.className = "endDrag";
	}
	this.dragEl.innerHTML = "";
	if(YAHOO.env.ua.ie > 0) {
		// Reactivate Tooltips (IE6/7)
		if(YAHOO.tooltip) {
			YAHOO.tooltip.active = true; 
		}
		// Reset cursor for IE 6
		if(YAHOO.env.ua.ie < 7) {
			try {
				var ac = $D.get("actionselect1");
				ac.focus();
			}
			catch(error) {
				// dont focus on anything
			}
		}
	}
	// YAHOO.hmmh.Accordion.initEvents();
    // disable moving the linked element
};

YAHOO.hmmh.DDList.prototype.onDrag = function(e, ddElems) {
	//PERFORMANCE	this.dragEl.className = "onDrag";
};


YAHOO.hmmh.DDList.prototype.onDragOver = function(e, ddElems) {
	// TODO: erweiterte Merkliste: Drag-Element wird hier hinter das Drop-Element eingefuegt 
	if(ddElems && ddElems[0] && findClass(ddElems[0].getEl(), 'sortBox')) {
		var sourceEl = findClass(this.origEl, 'sortBox');
		var destEl = findClass(ddElems[0].getEl(), 'sortBox');
		$D.insertAfter(sourceEl, destEl);
		$D.removeClass(ddElems[0].getEl(), 'dropable');
	}
};

YAHOO.hmmh.DDList.prototype.onDragEnter = function(e, ddElems) {
	if (ddElems) {
  		this.updateElem = ddElems[0];
	}
	
	// TODO: Verhalten bei drag over in der erweiterten Merkliste
	if(findClass(this.updateElem.getEl(), 'sortBox')) {
		//$D.addClass(this.updateElem.getEl(), 'dropable');
		return true;
	}
	
	if(YAHOO.util.Selector.query(".editable form.eipform input") != "") {
		YAHOO.hmmh.Accordion.editHeadBlur(e, YAHOO.util.Selector.query(".editable form.eipform input")[0]);
	}
	
	if(this.dragEl.firstChild.tagName=="IMG") { // Moz.
		this.dragEl.firstChild.className = "onDragEnter";
	}
	else { // IE: removing invisible Drag-DIV
		if(this.dragEl.firstChild.firstChild) {
			this.dragEl.firstChild.firstChild.className = "onDragEnter";
		}
		else {
			this.dragEl.removeChild(this.dragEl.firstChild);
			if(this.dragEl.firstChild.firstChild) {
				this.dragEl.firstChild.firstChild.className = "onDragEnter";
			}
		}
	}
	var imgElement = document.createElement("IMG");
	imgElement.id = "validDrag";
	
	// with IE add Icon at the top of container
	if(YAHOO.env.ua.ie >0) {
		imgElement.src = "img/copy.gif";
		if(this.dragEl.firstChild) {
			this.dragEl.insertBefore(imgElement,this.dragEl.firstChild);
		}
		else {
			this.dragEl.appendChild(imgElement);
		}
		this.dragEl.style.paddingLeft="10px";
	}
	// otherwise add at the bottom
	else {
		imgElement.src = "img/copy.png";
		this.dragEl.appendChild(imgElement);
	}

	if(YAHOO.util.Selector.query("body.slGeschlossen"))
		YAHOO.hmmh.Accordion.acdnAufZiehen1();

	if(findClass(this.origEl, "neverDragOut"))
		return true;
	
	if ($DDM.getBestMatch(ddElems).id == "slot-0") {
		// Drop-Element ist Warenkorb-Body
    	this.updateElem = $D.getElementsByClassName("rollbar", "div", "slot-0")[0];
	} else {
	  	//this.updateElem = $D.get($DDM.getBestMatch(ddElems).getEl().getElementsByTagName("ul")[0]);
	  	this.updateElem = YAHOO.util.Selector.query("#accordion dd.open .dropList, #accordion dd.toOpen .dropList", null, true)[0];	
	}
	
	if(findClass(this.updateElem, 'warenkorb')) return true;
	
	this.targetHighlite = new YAHOO.util.ColorAnim(this.updateElem, { backgroundColor: {from: this.origBgCol,   to: this.fadeToBgCol } }, 0.5);	
	this.targetBacklite = new YAHOO.util.ColorAnim(this.updateElem, { backgroundColor: { from: this.fadeToBgCol,  to: this.origBgCol } }, 0.5);	
	
 	this.targetHighlite.animate(); 
};

YAHOO.hmmh.DDList.prototype.onDragOut = function(e, ddElems) {
	if(ddElems&&ddElems[0] && findClass(ddElems[0].getEl(), 'sortBox')) {
		//$D.removeClass(ddElems[0].getEl(), 'dropable');
		return true;
	}

	this.dragEl.firstChild.className = "onDragEnter";
	
  	if($D.get("validDrag")){
		this.dragEl.removeChild($D.get("validDrag"))
  	}
  	
	if(this.targetBacklite) {
		this.targetBacklite.animate(); 
	}
	
};

YAHOO.hmmh.DDList.prototype.onDragDrop = function(e, ddElems) {
	var element = YAHOO.util.Selector.query("#accordion .active .editable .eipform input")[0];
	if(element != null) {
  		YAHOO.hmmh.Accordion.editHeadBlur(e, element);
	}
	
	// TODO: Element der erweiterten Merkliste wird wieder eingeblendet
	if(ddElems && ddElems[0] && findClass(ddElems[0].getEl(), 'sortBox')) {
		//$D.setStyle(findClass(this.origEl, 'sortBox'), "border-left", "none");
		$D.setStyle(findClass(this.origEl, 'sortBox'), "visibility", "visible");
		var elementList = YAHOO.util.Selector.query("#liste img.imageNote");
		var sortList =[];
		for (var i = 0;i < elementList.length; i++){
			sortList.push(elementList[i].getAttribute("alt"));
		}
		YAHOO.util.Connect.asyncRequest("POST", "/add_positions.htm", {success: function() { 
				window.setTimeout(function(){
					executeGetUrlValues('notepad.htm', $U.findUrlValue('referredFromPage'),'user',$U.findUrlValue('resultsSize'), YAHOO.util.Selector.query("#extendedNotepad strong")[0].className,$U.findUrlValue('link'));
					}, 900);
		}} , "positions=" + escape(sortList));
		return true;
	
	}

	if(findClass(this.origEl, "neverDragOut")) {
		return true;
	}
	// TODO: Element der erweiterten Merkliste wird wieder eingeblendet
	$D.setStyle(findClass(this.origEl, 'sortBox'), "visibility", "visible");
		
	this.updateElem = null; // auto choose clipboard or cart
	var retVal = YAHOO.hmmh.Accordion.addToAccordion(this, this.origEl);
	$E.stopEvent(e);
};

YAHOO.hmmh.DDList.prototype.onInvalidDrop = function(e) {
	$D.setStyle(findClass(this.origEl, 'sortBox'), "visibility", "visible");
};

findClass = function (el, sClass) {
		if($D.hasClass(el, sClass))
			return el;
			
		if(!el || !el.parentNode)
			return false;
		else
			return findClass(el.parentNode, sClass);
};

findTag = function (el, tag) {
		if(el.tagName && el.tagName.toLowerCase() == tag.toLowerCase())
			return el;
			
		if(!el || !el.parentNode)
			return false;
		else
			return findTag(el.parentNode, tag);
};

findStyle = function (el, styletype) {
		if($D.getStyle(el, styletype) && $D.getStyle(el, styletype) != 'transparent') {
			("found style " + styletype + " @ ", el);
			return $D.getStyle(el, styletype);
		}
			
		if(!el || !el.parentNode)
			return false;
		else
			return findStyle(el.parentNode, styletype);
};


YAHOO.hmmh.DDList.prototype.toString = function() {
   return "DDList " + this.id;
};


$E.onDOMReady(YAHOO.hmmh.DDBilderliste.init);

