var multishop = new Object();

multishop.cms = new Object();
multishop.cms.articles = new Object();

/**
 * @param obj - Das Object in das das Kind erstellt werden soll
 * @param reference - Das Referenz objekt, das kopiert werden soll
 * @param nr - Das Inputfeld, dass die Anzahl der Option enthaelt
 */
multishop.cms.articles.addOption = function(obj,reference,nr){
	var next = nr.value*1 + 1;
	var node = gui.cloneNodeTo(reference,obj);

	nr.value = next;
	
	var inputs = node.getElementsByTagName("input");
	for(var i = 0; i < inputs.length; i++){
		if(inputs[i].type != "button")
			inputs[i].name += "_"+next;
	}
	var selects = node.getElementsByTagName("select");
	for(var i = 0; i < selects.length; i++){
		selects[i].name += "_"+next;
	}
}

/**
 * Makiert ein Element zum Löschen oder entfernt eine vorhandene Makierung
 * @param obj - das Objekt, dass zum Löschen makiert wird
 * @param checkbox - die Checkbox, die de/aktiviert wird
 */
multishop.cms.articles.toggleDelete = function(obj,checkbox){
	checkbox.checked = !checkbox.checked;
	if(checkbox.checked)
		obj.className += " deleted";
	else
		obj.className = obj.className.replace(/deleted/,"");
}
 
 
multishop.shop = new Object();
multishop.shop.articledetails = new Object();
multishop.shop.articledetails.motives = new Object();


multishop.shop.articledetails.motives.search = new Object();
multishop.shop.articledetails.motives.search.lastUpdate = 0;
multishop.shop.articledetails.motives.search.updateNr = 0;
multishop.shop.articledetails.motives.search.requestNr = 0;


multishop.shop.articledetails.motives.search.request = function(search){
	//aimscore.ajax.cmd(module,file,request,data,callback);
	var data = {"article":$("articleId").value,"search":encodeURI(search)};
	var i = aimscore.ajax.cmd("modules","multishop.ajax.php","searchMotives",data,aimscore.ajax.progress);
	aimscore.ajax.request[i].callback = multishop.shop.articledetails.motives.search.update;
	aimscore.ajax.request[i].requestNr = ++multishop.shop.articledetails.motives.search.requestNr;
}

multishop.shop.articledetails.motives.search.update = function(response){
	if(multishop.shop.articledetails.motives.search.updateNr < this.requestNr){
		multishop.shop.articledetails.motives.search.updateNr = this.requestNr;
		$("multiShop_motiveList").innerHTML = response.motives;
	}
}



multishop.shop.articledetails.motives.select = function(){
	var inputs = this.parentNode.getElementsByTagName("input");
	
	var preselected = false;
	
	var catid = 0;
	var cattext = 0;
	var catmax = 0;
	
	for(var i = 0; i < inputs.length; i++){
		//debug(inputs[i].alt + " = " + inputs[i].value);
		
		if(inputs[i].alt == "preselected"){
			preselected = true;
		}
		
		if(inputs[i].alt == "category"){
			catid = inputs[i].value;
		}
		if(inputs[i].alt == "categoryText"){
			cattext = inputs[i].value;
		}
		if(inputs[i].alt == "categoryMax"){
			catmax = inputs[i].value;
		}
		
	}
	
	
	if(!preselected){
		var preSel = $("preselectMotives");
		
		if(preSel.firstChild){
			if(preSel.firstChild.className =="notice"){
				gui.deleteNode(preSel.firstChild);
			}
		}
		
		var node = gui.cloneNodeTo(this.parentNode,preSel);
		//<div class="close">X</div>
		var close = gui.createElementTo("div",node,null,node.firstChild);
		close.className = "close";
		gui.createTextNodeTo("X",close);
		close.onclick = multishop.shop.articledetails.motives.remove;
		
		//var preselinput = gui.createElementTo("input",node); IE issues
		var preselinput = document.createElement("input");
		preselinput.type = "hidden";
		preselinput.alt = "preselected";
		preselinput.value= "true";
		node.appendChild(preselinput);
		multishop.shop.articledetails.motives.select.call(preselinput);
	}else{
		multishop.shop.clearMessages();
		var sel = $("selectedMotives");

		var ok = multishop.shop.articledetails.motives.checkCategory(catid,sel);
		
		if(ok != 1){
			if(ok == 0)
				multishop.shop.message("Maximale Anzahl dieser Kategorie erreicht.\nSie müssen Motive löschen, um andere hinzuzufügen.");
			if(ok == -1)
				multishop.shop.message("Das Motiv ist nicht aus der gleichen Kategorie, wie die bereits gewählten. \nEs kann nur eine Kategorie ausgewählt werden.\nUm eine andere Kategorie zu wählen, löschen Sie bitte zunächst alle Motive.");
			return;
		}
		
		var node = gui.cloneNodeTo(this.parentNode,sel);
		var close = gui.createElementTo("div",node,null,node.firstChild);
		
		var right = gui.createElementTo("div",node,null,node.firstChild);
		right.className = "right";
		gui.createTextNodeTo("->",right);
		right.onclick = multishop.shop.articledetails.motives.right;
		
		var left = gui.createElementTo("div",node,null,node.firstChild);
		left.className = "left";
		gui.createTextNodeTo("<-",left);
		left.onclick = multishop.shop.articledetails.motives.left;
		
		var motives = sel.childNodes;
		var pos = -1;
		for(var i = 0; i < motives.length; i++){
			if(motives[i] == node)
				pos = i;
		}
		
		//var posInput = gui.createElementTo("input",node);
		var posInput = document.createElement("input");
		posInput.type = "hidden";
		posInput.alt = "position";
		posInput.name = "position";
		posInput.value= pos;
		posInput.style.position ="absolute";
		posInput.style.top = "15px";
		node.appendChild(posInput);

		var inputs = node.getElementsByTagName("input");
		for(var i = 0; i < inputs.length; i++){
			inputs[i].name = inputs[i].alt+"_"+pos;
		}
		
		multishop.shop.articledetails.motives.updateCategory(cattext,catid,catmax,sel);
		//$("nextwomotive").style.display="none";
	}
	
	multishop.shop.articledetails.summary.updateSummary();
	
}

multishop.shop.articledetails.motives.remove = function(){
	multishop.shop.clearMessages();
	gui.deleteNode(this.parentNode);

	var node = $("selectedMotives").parentNode;
	if(node.firstChild 
			&& (node.firstChild.className=="motivetitle")
			&& (node.firstChild.nextSibling.childNodes.length == 0)){
		gui.deleteNode(node.firstChild);
		//$("nextwomotive").style.display="inline";
	}
	
	multishop.shop.articledetails.summary.updateSummary();
}


/**
 * Checks if an article of this category may be choosen
 * @return 1, if its okay, 0 if catmax is reached, -1 if its not the same category
 */
multishop.shop.articledetails.motives.checkCategory = function(catid,sel){
	var node = sel.parentNode;
	if(!node.firstChild)
		return 1;
	
	var curid = 0;
	var curmax= 0;
	
	var inputs = node.firstChild.getElementsByTagName("input");
	if(inputs.length < 2)
		return 1;
	curid = inputs[0].value;
	curmax= inputs[1].value;
	
	if(catid != curid)
		return -1;
	
	if(curmax <= sel.childNodes.length)
		return 0;
	
	return 1;
}

 
multishop.shop.articledetails.motives.updateCategory = function(cattext,catid,catmax,sel){
	var node = sel.parentNode;
	if(node.firstChild && 
			((node.firstChild.className=="motivetitle")
			||(node.firstChild.className=="notice"))
					){
		gui.deleteNode(node.firstChild);
	}
	
	//<div class="motivetitle">
	//<span>Kategorie XY</span>
	//<span>ABC Motive m&ouml;glich</span>
	//</div>
	var cat = gui.createElementTo("div",node,null,node.firstChild);
	cat.className = "motivetitle";
	
	var catidInput = document.createElement("input");
	catidInput.type = "hidden";
	catidInput.value= catid;
	cat.appendChild(catidInput);
	
	var catidInput = document.createElement("input");
	catidInput.type = "hidden";
	catidInput.value= catmax;
	cat.appendChild(catidInput);
	
	
	var text = gui.createElementTo("span",cat);
	var maxtext= gui.createElementTo("span",cat);
	
	gui.createTextNodeTo("Gewählte Kategorie : "+cattext,text);
	gui.createTextNodeTo("Maximal zu wählende Motive: "+catmax,maxtext);
	
}

multishop.shop.articledetails.motives.recalcPositions = function(node){
	
	var motives = node.childNodes;
	
	for(var i = 0; i < motives.length; i++){
		var inputs = motives[i].getElementsByTagName("input");
		for(var x = 0; x < inputs.length; x++){
			if(inputs[x].alt == "position")
				inputs[x].value = i;
		}
		for(var x = 0; x < inputs.length; x++){
			inputs[x].name = inputs[x].alt+"_"+i;
		}
	}
	
	multishop.shop.articledetails.summary.updateSummary();
}

multishop.shop.articledetails.motives.left = function(){
	var node = this.parentNode;
	if(node.previousSibling){
		node.parentNode.insertBefore(node,node.previousSibling);
	}
	
	multishop.shop.articledetails.motives.recalcPositions(node.parentNode);
}

multishop.shop.articledetails.motives.right = function(){
	var node = this.parentNode;
	if(node.nextSibling){
		if(node.nextSibling.nextSibling)
			node.parentNode.insertBefore(node,node.nextSibling.nextSibling);
		else
			node.parentNode.appendChild(node);
	}
	
	multishop.shop.articledetails.motives.recalcPositions(node.parentNode);
}

multishop.shop.articledetails.addAccesoirs = function(id){
	obj = $("accesoir_"+id);
	switch (obj.tagName) {
	case "INPUT":
			if(obj.type == "checkbox")
				obj.checked = true;
			else
				obj.value++;
		break;
	case "SELECT":
		obj.selectedIndex = Math.min(obj.selectedIndex+1,obj.length-1);
		break;
	default:
		break;
	}
}

multishop.shop.articledetails.summary = new Object();

multishop.shop.articledetails.summary.updateSummary = function(){
	multishop.shop.articledetails.summary.updateText();
	multishop.shop.articledetails.summary.updateAccesoirs();
	multishop.shop.articledetails.summary.updateMotives();
}

aimscore.onload.add(multishop.shop.articledetails.summary.updateSummary);

multishop.shop.articledetails.summary.updateText = function(){
	if(!$("multishop_article_text")){
		if($('selectedText')) gui.deleteNode($("selectedText").parentNode);
		return;
	}
	$('selectedText').innerHTML = $("multishop_article_text").value ? $("multishop_article_text").value : "Kein Text gewählt"; 
	
	if($('selectedText2'))
		$('selectedText2').innerHTML = $("multishop_article_text").value ? $("multishop_article_text").value : "Kein Text gewählt"; 
}

multishop.shop.articledetails.summary.updateMotives = function(){
	if(!$("selectedMotives")){
		if($("summarySelectedMotives")) gui.deleteNode($("summarySelectedMotives").parentNode);
		return;
	}
	var target = $("summarySelectedMotives");
	multishop.shop.articledetails.summary.updateDisplayMotives(target);
	
	var target = $("summarySelectedMotives2");
	if(target)
		multishop.shop.articledetails.summary.updateDisplayMotives(target);
}

multishop.shop.articledetails.summary.updateDisplayMotives =function(target) {
	while(target.childNodes.length)
		gui.deleteNode(target.lastChild);
	
	var node = $("selectedMotives").parentNode;
	if(node.firstChild 
			&& (node.firstChild.className=="motivetitle")){
		var container = node.firstChild.nextSibling;
		if(container){
			for(var k = 0; k < container.childNodes.length; k++){
				var motive = gui.cloneNodeTo(container.childNodes[k],target);
				//Remove all buttons and inputs
				var inputs = motive.getElementsByTagName("input");
				var divs = motive.getElementsByTagName("div");
				
				while(inputs.length > 0)
					gui.deleteNode(inputs[0]);
				
				var i = divs.length;
				while(i > 0){
					i--;
					if(divs[i].className.match(/(close|left|right)/))
						gui.deleteNode(divs[i]);
				}
			}
		}
	}	
	
	if(target.childNodes.length <= 0){
		gui.createTextNodeTo("Keine Motive gewählt",target);
	}
}

multishop.shop.articledetails.summary.updateAccesoirs = function(){
	var accecoirs = $("multishop_accecoirs");
	var summary = $("multishop_accecoirs_summary");
	
	multishop.shop.articledetails.summary.displayAccesoirs(summary,accecoirs);
	multishop.shop.articledetails.summary.displayAccesoirs($("multishop_accecoirs_summary2"),accecoirs);
}

multishop.shop.articledetails.summary.displayAccesoirs = function(summary,accecoirs){
	if(!summary) return;

	summary.innerHTML = "";
	
	while(summary.parentNode.lastChild.nodeType == 3)
		gui.deleteNode(summary.parentNode.lastChild);
	
	for(var i = 0; i < accecoirs.childNodes.length; i++){
		var li = accecoirs.childNodes[i];
		if((count = multishop.shop.articledetails.accecoirs.getCount(li)) > 0){
			var clone = gui.cloneNodeTo(li,summary);
			multishop.shop.articledetails.summary.stripAccecoir(clone,count);
		}
	}
	
	if(summary.childNodes.length <= 0){
		gui.createTextNodeTo("Kein Zubehör gewählt",summary.parentNode);
	}
}

multishop.shop.articledetails.summary.stripAccecoir = function(listNode,count){
	var inputs = listNode.getElementsByTagName("input");
	var selects = listNode.getElementsByTagName("select");

	for(var i = inputs.length+selects.length -1; i >= 0; i--){
		var element = i < inputs.length ? inputs[i] : selects[i-inputs.length];
		if(element.className.match(/.*multishop_accecoir_count.*/)){
			var val = gui.createElementTo("input",element.parentNode,element);
			val.value = count*1;
			val.style.width = "20px";
			val.style.lineHeight = "18px";
			val.style.textAlign = "center";
			val.readOnly = true;
		}else{
			gui.deleteNode(element);
		}
	}
}

multishop.shop.articledetails.accecoirs = new Object();

multishop.shop.articledetails.accecoirs.getCount = function(listNode){
	var inputs = listNode.getElementsByTagName("input");
	var selects = listNode.getElementsByTagName("select");

	for(var i = 0; i< inputs.length+selects.length;i++){
		var element = i < inputs.length ? inputs[i] : selects[i-inputs.length];
		if(element.className.match(/.*multishop_accecoir_count.*/)){
			return (element.type != "checkbox") ? element.value : element.checked;
		}
	}
}


multishop.shop.articledetails.customize = new Object();

multishop.shop.articledetails.customize.openFields = new Array();
multishop.shop.articledetails.customize.openField = false;
multishop.shop.articledetails.customize.openHead = false;
multishop.shop.articledetails.customize.openComplement = false;

multishop.shop.articledetails.customize.busy = false;

multishop.shop.articledetails.customize.unbusy = function(){
	multishop.shop.articledetails.customize.busy = false;
}
multishop.shop.articledetails.customize.toggleOpen = function(node,head,complement,ignoreBusy){
	if(multishop.shop.articledetails.customize.busy === false || ignoreBusy){
		multishop.shop.articledetails.customize.busy = true;
		window.setTimeout("multishop.shop.articledetails.customize.unbusy()", 500);

		if(typeof head == "undefined") head = false;
		//Effect.toggle(this.nextSibling,'slide', { beforeStart: function(){ $('motiveselection').className = 'motiveselection noauto'; }, afterFinish: function() { $('motiveselection').className = 'motiveselection'; } });

	
		if(multishop.shop.articledetails.customize.openField){ // Etwas ist schon offen
			if(multishop.shop.articledetails.customize.openField == node){ // Dieses ist offen, also schließen
				multishop.shop.articledetails.customize.openField = false;
				multishop.shop.articledetails.customize.openHead = false;
				multishop.shop.articledetails.customize.openComplement = false;
				if(head) head.className = head.className.replace(/open/,"");
			}else{ // Es ist nicht dieses offen, also schließen
				multishop.shop.articledetails.customize.toggleOpen(multishop.shop.articledetails.customize.openField,
							multishop.shop.articledetails.customize.openHead,
							multishop.shop.articledetails.customize.openComplement, true);
				multishop.shop.articledetails.customize.openField = node;
				multishop.shop.articledetails.customize.openHead = head;
				multishop.shop.articledetails.customize.openComplement = complement;
				head.className += ' open';
			}
		}else{
			multishop.shop.articledetails.customize.openField = node;
			multishop.shop.articledetails.customize.openHead = head;
			multishop.shop.articledetails.customize.openComplement = complement;
			head.className += ' open';
		}
	
		if(!node) return;
	

		if(complement)
			new Effect.Parallel(
					[
					 Effect.toggle(node,'blind'),
					 Effect.toggle(complement,'appear')
					 ],
					{ beforeStart: function(){$(node).className += ' noauto'; }, 
						afterFinish: function() { $(node).className = $(node).className.replace(/noauto/,""); } ,
						queue:{ position:'end' , scope:'slides'} }
			);
		else
		Effect.toggle(node,'blind', { beforeStart: function(){$(node).className += ' noauto'; }, 
			afterFinish: function() { $(node).className = $(node).className.replace(/noauto/,""); } ,
			queue:{ position:'end' , scope:'slides'} });
	}
	
}

multishop.shop.articledetails.customize.toggleSummary = function(){
	multishop.shop.articledetails.customize.toggleOpen(false);
	Effect.toggle('articlecustomize','blind',{ 
						beforeStart: function(){ if($('motiveselection')) $('motiveselection').className = 'motiveselection noauto'; }, 
						afterFinish: function() { if($('motiveselection')) $('motiveselection').className = 'motiveselection'; } });
	Effect.toggle('multishop_summary','blind');
	Effect.toggle('multishop_showsummary','appear')
}


multishop.shop.articledetails.customize.tostep = function(node){
	if(!node)
		return;
	var menue = $("multishop_article_customize_menue_items");
	var contents = $("multishop_article_customize_contents");
	
	var childs = node.parentNode.childNodes;
	var pos = 0;
	for(var i = 0; i < childs.length; i++){
		if(childs[i] == node){
			pos = i;
			break;
		}
	}
	
	var menueitems = menue.childNodes;
	var contentitems = contents.childNodes;
	
	var max = (menueitems.length > contentitems.length) ? menueitems.length : contentitems.length;
	for(var i = 0; i < max; i++){
		if(i != pos){
			if(menueitems[i])
				menueitems[i].className = "";
			if(contentitems[i]){
				contentitems[i].style.display = "none";
			}
		}else{
			if(menueitems[i])
				menueitems[i].className = "cur";
			if(contentitems[i]){
				contentitems[i].style.display = "block";
			}
		}
	}
}

multishop.shop.CurrentMessages = new Array();

multishop.shop.message = function(msg){
	var node = $("multishop_messages");
	var message = gui.cloneNodeTo(node.firstChild,node);
	var pre = gui.createElementTo("pre",message);
	gui.createTextNodeTo(msg,pre);
	message.style.display = "block";
	
	var close = message.firstChild;
	var height = message.offsetHeight;
	var margin = (height -close.offsetHeight )/2 -6;
	close.style.margin = margin+"px 0";
	
	multishop.shop.CurrentMessages.push(message);
	return message;
}

multishop.shop.clearMessages = function(){
	while(multishop.shop.CurrentMessages.length > 0)
		gui.deleteNode(multishop.shop.CurrentMessages.pop());
}


multishop.shop.gallery = new Object();

multishop.shop.gallery.pause = false;
multishop.shop.gallery.started = false;
multishop.shop.gallery.obj1 = false;
multishop.shop.gallery.obj1X = 0;
multishop.shop.gallery.obj2 = false;
multishop.shop.gallery.obj2X = false;
multishop.shop.gallery.frame = false;
multishop.shop.gallery.moverate = -1;

multishop.shop.gallery.move = function(x){
	obj = multishop.shop.gallery.obj1;
	obj2 = multishop.shop.gallery.obj2;
	
	if(obj.offsetWidth < multishop.shop.gallery.frame.offsetWidth)
		return;
	
	multishop.shop.gallery.obj1X += x;
	
	if(( multishop.shop.gallery.obj1X <= -obj.offsetWidth)
		|| (multishop.shop.gallery.obj1X >= multishop.shop.gallery.frame.offsetWidth)){
		multishop.shop.gallery.obj1X = 0;
		
		multishop.shop.gallery.obj1 = obj2;
		multishop.shop.gallery.obj2 = obj;
		obj = multishop.shop.gallery.obj1;
		obj2 = multishop.shop.gallery.obj2;
	}
	
	if(((multishop.shop.gallery.obj1X > 0 ) && (x < 0))
	    ||	(multishop.shop.gallery.obj1X < 0 ) && (x > 0)	){
		multishop.shop.gallery.obj1X = parseInt(obj2.style.left);
		
		multishop.shop.gallery.obj1 = obj2;
		multishop.shop.gallery.obj2 = obj;
		obj = multishop.shop.gallery.obj1;
		obj2 = multishop.shop.gallery.obj2;
	}
	
	var offset = x < 0 ? obj.offsetWidth : - obj2.offsetWidth;
	var obj2X = parseInt(multishop.shop.gallery.obj1X ) + offset;
	
	obj.style.left = parseInt(multishop.shop.gallery.obj1X ) + "px";
	obj2.style.left = (parseInt(obj2X)) + "px";
}

multishop.shop.gallery.moveleft = function(x){
	multishop.shop.gallery.move(-x);
}

multishop.shop.gallery.doMove = function(){
	if(multishop.shop.gallery.pause)
		return;

	multishop.shop.gallery.move(multishop.shop.gallery.moverate);
}


multishop.shop.gallery.start = function(){
	
	if(multishop.shop.gallery.started){
		return false;
	}
	
	multishop.shop.gallery.obj1 = $("multishop_gallery_string1");
	multishop.shop.gallery.obj2 = $("multishop_gallery_string2");
	multishop.shop.gallery.frame = $("multishop_gallery_frame");
	multishop.shop.gallery.started = true;

	multishop.shop.gallery.timer = setInterval(multishop.shop.gallery.doMove,30);
}

multishop.shop.gallery.toggleDirection = function(){
	multishop.shop.gallery.moverate = -multishop.shop.gallery.moverate;
}

multishop.shop.gallery.speedMouseAdjust = function(e){
	var e = e || window.event;
	var x = e.clientX;
	var y = e.clientY;
	var obj = this;
	while(obj.offsetParent){
		x -= obj.offsetLeft;
		obj = obj.offsetParent;
	}
	
	
	var rel = x/this.offsetWidth - 0.5;
	rel *= 6;
	
	multishop.shop.gallery.moverate = -2 *(1 - (2 * (rel > 1)));//rel;
}

multishop.shop.displayShippingCosts = function(){
	
	var img = gui.createElementTo("img",$('shippingCostsContainer'));
	img.src = homePath+"layout/images/system/wait.gif";
	img.style.backgroundColor="#ffffff";
	img.style.border="solid 1px black";
	img.style.position="absolute";
	
	new Ajax.Updater($('shippingCostsContainer'),homePath+'system/modules/ajax/multishop.ajax.php',
			  {
			    method:'post', 
			    parameters: {'request': 'getShippingCostsOverlay'},
			    onComplete: function(r){ 

			    	$('shippingCostsContainer').style.display = "none";
			    	$('shippingCostsContainer').style.position = "relative";
			    	$('shippingCostsContainer').style.zIndex= "100";
			    	$('shippingCostsContainer').appear();
			    	//document.body.innerHTML = $('shippingCostsContainer').innerHTML;
			    	},
			    onFailure: function(){ alert("Something went wrong...") }
			  });
}

multishop.shop.displayArticleMaterials = function(material){
	
	var img = gui.createElementTo("img",$('shippingCostsContainer'));
	img.src = homePath+"layout/images/system/wait.gif";
	img.style.backgroundColor="#ffffff";
	img.style.border="solid 1px black";
	img.style.position="absolute";
	
	new Ajax.Updater($('shippingCostsContainer'),homePath+'system/modules/ajax/multishop.ajax.php',
			{
		method:'post', 
		parameters: {'request': 'getArticleMaterialsOverlay','material':material},
		onComplete: function(r){ 
			
			$('shippingCostsContainer').style.display = "none";
			$('shippingCostsContainer').style.position = "relative";
			$('shippingCostsContainer').style.zIndex= "100";
			$('shippingCostsContainer').appear();
			//document.body.innerHTML = $('shippingCostsContainer').innerHTML;
		},
		onFailure: function(){ alert("Something went wrong...") }
			});
}



