﻿var addons = new Array();
var canvas = document.getElementById("canvas");

function createAddonPatterns()
{
	var canvas = document.getElementById("canvas");

	function AddonPattern(addonType, defaultAusfuehrung)
	{
		var thisObject = this;
		this.addonType = addonType;
		this.ausfuehrung = defaultAusfuehrung;
		
		this.icon = document.createElement("div");
		this.icon.id = "addonPattern" + addonType.substr(5);
		this.icon.className = "AddonPattern Addon" + addonType.substr(5) + " " + defaultAusfuehrung;
		canvas.appendChild(this.icon);

		var select = document.createElement("select");
		select.id = "selectAusfuehrung" + addonType.substr(5);
		select.className = "SelectAusfuehrung";

		for(var ausfuehrung in (addonType != "addonRueckwand2hoch" ? addonArtikel[addonType] : addonArtikel["addonRueckwand2breit"]))
		{
			var option = document.createElement("option");
			option.value = ausfuehrung;
			
			switch(ausfuehrung)
			{
				case "MelaminWeiss":
					option.appendChild(document.createTextNode("Melamin weiß"));
					break;
				case "LackWeiss":
					//option.appendChild(document.createTextNode("Front/Rückwand weiß lackiert"));
					option.appendChild(document.createTextNode("Lack weiß"));
					break;
				// ADD DM
				case "LackWeissEinfach":
					option.appendChild(document.createTextNode("Weiß lackiert"));
					break;
				case "LackAnthrazitEinfach":
					//option.appendChild(document.createTextNode("Anthrazit lackiert"));
					option.appendChild(document.createTextNode("Lack anthrazit"));
					break;
				// END ADD DM
				case "LackGelb":
					option.appendChild(document.createTextNode("Lack gelb"));
					break;
				case "LackRot":
					option.appendChild(document.createTextNode("Lack rot"));
					break;
				case "LackGruen":
					option.appendChild(document.createTextNode("Lack grün"));
					break;
				case "LackAnthrazit":
					option.appendChild(document.createTextNode("Lack anthrazit"));
					break;
				case "LackOrange":
					option.appendChild(document.createTextNode("Lack orange"));
					break;
				case "LackAluminium":
					option.appendChild(document.createTextNode("Lack aluminium"));
					break;
				case "LackBraun":
					option.appendChild(document.createTextNode("Lack kastanienbraun"));
					break;
				case "LackBlau":
					option.appendChild(document.createTextNode("Lack brilliantblau"));
					break;
				case "LackPurpur":
					option.appendChild(document.createTextNode("Lack purpurviolett"));
					break;
				case "Nussbaum":
					option.appendChild(document.createTextNode("Nussbaum massiv"));
					break;
				case "Buche":
					option.appendChild(document.createTextNode("Buche massiv"));
					break;
				case "glastuer1hoch":
					option.appendChild(document.createTextNode("1 Fach hoch"));
					break;
				case "glastuer2hoch":
					option.appendChild(document.createTextNode("2 Fach hoch"));
					break;
				case "glastuer3hoch":
					option.appendChild(document.createTextNode("3 Fach hoch"));
					break;
				default:
					option.appendChild(document.createTextNode(ausfuehrung));
			} // switch(ausfuehrung)
			
			select.appendChild(option);
		} // for(var ausfuehrung in addonArtikel[addonType])
			
		select.onchange = function ()
		{
			thisObject.ausfuehrung = this.value;
			thisObject.icon.className = "AddonPattern Addon" + thisObject.addonType.substr(5) + " " + this.value;
		};
		
		canvas.appendChild(select);
		
		this.icon.onmousedown = function ()
		{
			addons[addons.length] = new createaddons.Addon(thisObject.addonType, thisObject.ausfuehrung)
		};
	}
	
	if (isFreddyPlus)
	{
		new AddonPattern("addonTuerPto", "LackWeiss");
		new AddonPattern("addon2SchuebePto", "LackWeiss");
		new AddonPattern("addon2Schuebe2breitPto", "LackWeiss");
		new AddonPattern("addonSchub2breitPto", "LackWeiss");
		new AddonPattern("addonCdKreuz", "LackWeiss");
		new AddonPattern("addonRueckwand", "LackWeiss");
		new AddonPattern("addonRueckwand2breit", "LackWeiss");
		new AddonPattern("addonRueckwand2hoch", "LackWeiss");
		new AddonPattern("addonGlastuer", "glastuer1hoch");
	}
	else
	{
		new AddonPattern("addon355_Tuer", "LackWeiss"); // MODIF DM
		new AddonPattern("addon355_2Schuebe", "LackWeiss"); // MODIF DM
		new AddonPattern("addon355_CdKreuz", "LackWeiss"); // MODIF DM
		new AddonPattern("addon355_Schubkasten", "Buche"); // MODIF DM
		new AddonPattern("addon355_3Schubkaesten", "Buche"); // MODIF DM
		new AddonPattern("addon355_4Schubkaesten", "Buche"); // MODIF DM
		new AddonPattern("addon735_2Tuere", "LackWeiss"); // MODIF DM
		new AddonPattern("addon735_2Schuebe", "LackWeiss"); // MODIF DM
		new AddonPattern("addon735_Schuebe", "LackWeiss"); // MODIF DM
		new AddonPattern("addon355_Rueckwand", "LackWeiss"); // MODIF DM
		new AddonPattern("addon735_Rueckwand", "LackWeiss"); // MODIF DM
	}
	
	this.addaddon = function(addonType, ausfuehrung){
		return new Addon(addonType, ausfuehrung);
	}
	
	this.Addon = function (addonType, ausfuehrung)
	{
		
		var thisObject = this;
		this.index = addons.length;
		this.addonType = addonType;
		this.ausfuehrung = ausfuehrung;
		
		this.col = 0;
		this.row = 0; // for dragging from pattern position

		if (addonType != "addonRueckwand2hoch")
		{
			addonArtikel[addonType][ausfuehrung].anzahl++;
			addonArtikel[addonType][ausfuehrung].refresh();
		}
		else
		{
			addonArtikel["addonRueckwand2breit"][ausfuehrung].anzahl++;
			addonArtikel["addonRueckwand2breit"][ausfuehrung].refresh();
		}
		addonStueckliste.refresh();

		this.icon = document.createElement("div");
		this.icon.id = "addonPattern" + addonType.substr(5);
		this.icon.className = "AddonPattern Addon" + addonType.substr(5) + " " + ausfuehrung;
		canvas.appendChild(this.icon);

		this.icon.onmousedown = function ()
		{
			if (document.body.className == "SeitePlanung")
				drag(thisObject.icon);
		};

		this.icon.drag = function ()
		{
			if (thisObject.col > 0)
			{
				var x = thisObject.col;
				var y = thisObject.row;
				
				switch (thisObject.addonType)
				{
					case "addonSchub2breit":
					case "addonSchub2breitPto":
					case "addon2Schuebe2breitPto":
					case "addon735_2Tuere": // New DM
					case "addon735_2Schuebe": // MODIF DM
					case "addon735_Schuebe": // New DM
						if (!cols[x].isFreddyPlus)
						{
							boxes[x + 1][y].hasAddonBox = false;
							boxes[x + 1][y].hasAddon = false;
						}
					// fall thru
					case "addonTuer":
					case "addonTuerPto":
					case "addon2Schuebe":
					case "addon2SchuebePto":
					case "addon355_Tuer": // MODIF DM
					case "addon355_2Schuebe": // MODIF DM
					case "addon355_Schubkasten": // MODIF DM
					case "addon355_3Schubkaesten": // MODIF DM
					case "addon355_4Schubkaesten": // MODIF DM
						boxes[x][y].hasAddonBox = false;
						boxes[x][y].hasAddon = false;
						break;

					case "addonCdKreuz":
					case "addon355_CdKreuz": // MODIF DM
						boxes[x][y].hasAddonCdKreuz = false;
						boxes[x][y].hasAddon = (boxes[x][y].hasAddonRueckwand || boxes[x][y].hasAddonGlastuer);
						break;

					case "addonRueckwand2breit":
					case "addon735_Rueckwand": // MODIF DM
						if (!cols[x].isFreddyPlus)
						{
							boxes[x + 1][y].hasAddonRueckwand = false;
							boxes[x + 1][y].hasAddon = (boxes[x + 1][y].hasAddonCdKreuz || boxes[x + 1][y].hasAddonGlastuer);
						}
					// fall thru
					case "addonRueckwand":
					case "addon355_Rueckwand": // MODIF DM
						boxes[x][y].hasAddonRueckwand = false;
						boxes[x][y].hasAddon = (boxes[x][y].hasAddonCdKreuz || boxes[x][y].hasAddonGlastuer);
						break;
						
					case "addonRueckwand2hoch":
						boxes[x][y].hasAddonRueckwand = false;
						boxes[x][y].hasAddon = (boxes[x][y].hasAddonCdKreuz || boxes[x][y].hasAddonGlastuer);
						if (!rows[y].isFreddyPlus)
						{
							boxes[x][y - 1].hasAddonRueckwand = false;
							boxes[x][y - 1].hasAddon = (boxes[x][y - 1].hasAddonCdKreuz || boxes[x][y - 1].hasAddonGlastuer);
						}
						break;
						
					case "addonGlastuer":
						if (thisObject.ausfuehrung == "glastuer1hoch" || (rows[y].isFreddyPlus && thisObject.ausfuehrung == "glastuer2hoch"))
							var h = 1;
						else if (thisObject.ausfuehrung == "glastuer3hoch" && !rows[y].isFreddyPlus && !rows[y - 1].isFreddyPlus)
							var h = 3;
						else
							var h = 2;
						for (var i = 1; i <= h; i++, y--)
						{
							boxes[x][y].hasAddonGlastuer = false;
							boxes[x][y].hasAddon = (boxes[x][y].hasAddonCdKreuz || boxes[x][y].hasAddonRueckwand);
							boxes[x + 1][y].hasAddonGlastuer = false;
							boxes[x + 1][y].hasAddon = (boxes[x + 1][y].hasAddonCdKreuz || boxes[x + 1][y].hasAddonRueckwand);
							if (!cols[x].isFreddyPlus || !cols[x + 1].isFreddyPlus)
							{
								boxes[x + 2][y].hasAddonGlastuer = false;
								boxes[x + 2][y].hasAddon = (boxes[x + 2][y].hasAddonCdKreuz || boxes[x + 2][y].hasAddonRueckwand);
							}
							if (!cols[x].isFreddyPlus && !cols[x + 1].isFreddyPlus && !cols[x + 2].isFreddyPlus)
							{
								boxes[x + 3][y].hasAddonGlastuer = false;
								boxes[x + 3][y].hasAddon = (boxes[x + 3][y].hasAddonCdKreuz || boxes[x + 3][y].hasAddonRueckwand);
							}
						}
						break;
				}
			}
		};
		
		this.icon.setposition = function (x,y){

			dragObject = null;
			document.body.onselectstart = null;

			this.style.left = (x);
			this.style.top = (y);
			

		}
		
		this.icon.drop = function ()
		{
			// fit icon position to grid
			var u = Math.round(parseInt(this.style.left) / 30);
			var v = Math.round(parseInt(this.style.top) / 30);

			this.style.left = (30 * u) + "px";
			this.style.top = (30 * v) + "px";

			// offset according to grid position in viewport
			u -= 3;
			v = -v + 14;
			
			x = u;
			y = v;
			
			if (isFreddyPlus)
			{
				for (var i = 1; i < x; i++)
					if (cols[i].isFreddyPlus)
					{
						x--;
					}
				
				for (var i = 1, check = x; i < x; i++)
					if (cols[i].isFreddyPlus)
					{
						check++;
					}
					
				if (check != u)
					thisObject.moveX(-1);
					
				// calculation for rows to be implemented
			}

			thisObject.col = x;
			thisObject.row = y;
			
		
//			thisObject.icon.title = thisObject.addonType + " " + thisObject.ausfuehrung + " @ " + thisObject.col + ", " + thisObject.row; //@@

			if (x < 1 || x > gridWidth || y < 1 || y > gridHeight)
			{
				thisObject.remove();
//				alert ("out of grid area"); //@@
			}
			else
			{
				switch(thisObject.addonType)
				{
					case "addonTuer":
					case "addonTuerPto":
					case "addon2Schuebe":
					case "addon2SchuebePto":
					case "addon355_Tuer": // MODIF DM
					case "addon355_2Schuebe": // MODIF DM
					case "addon355_Schubkasten": // MODIF DM
					case "addon355_3Schubkaesten": // MODIF DM
					case "addon355_4Schubkaesten": // MODIF DM
						if (!cols[x].isFreddyPlus
// 							&& !rows[y].isFreddyPlus
							&& !boxes[x][y].hasAddon
							&& horizontals[x][y].isRegal
							&& verticals[x][y].isRegal
							&& horizontals[x][y - 1].isRegal
							&& verticals[x - 1][y].isRegal)
						{
							boxes[x][y].hasAddon = true;
							boxes[x][y].hasAddonBox = true;
						}
						else
							thisObject.remove();
						break;

					case "addonSchub2breit":
					case "addonSchub2breitPto":
					case "addon2Schuebe2breitPto":
					case "addon735_2Tuere": // New DM
					case "addon735_2Schuebe": // MODIF DM
					case "addon735_Schuebe": // New DM
						if (!cols[x].isFreddyPlus
							&& x < gridWidth
							&& !cols[x + 1].isFreddyPlus
//							&& !rows[y].isFreddyPlus
							&& !boxes[x][y].hasAddon
							&& !boxes[x + 1][y].hasAddon
							&& horizontals[x][y].isRegal
							&& horizontals[x + 1][y].isRegal
							&& verticals[x + 1][y].isRegal
							&& horizontals[x + 1][y - 1].isRegal
							&& horizontals[x][y - 1].isRegal
							&& verticals[x - 1][y].isRegal
							&& !verticals[x][y].isRegal)
						{
							boxes[x][y].hasAddon = true;
							boxes[x][y].hasAddonBox = true;
							boxes[x + 1][y].hasAddon = true;
							boxes[x + 1][y].hasAddonBox = true;
						}
						else if (cols[x].isFreddyPlus
//							&& !rows[y].isFreddyPlus
							&& !boxes[x][y].hasAddon
							&& horizontals[x][y].isRegal
							&& verticals[x][y].isRegal
							&& horizontals[x][y - 1].isRegal
							&& verticals[x - 1][y].isRegal)
						{
							boxes[x][y].hasAddon = true;
							boxes[x][y].hasAddonBox = true;
						}
						else
							thisObject.remove();
						break;

					case "addonCdKreuz":
					case "addon355_CdKreuz": // MODIF DM
						if (!cols[x].isFreddyPlus
//							&& !rows[y].isFreddyPlus
							&& !boxes[x][y].hasAddonBox
							&& !boxes[x][y].hasAddonCdKreuz
							&& horizontals[x][y].isRegal
							&& verticals[x][y].isRegal
							&& horizontals[x][y - 1].isRegal
							&& verticals[x - 1][y].isRegal)
						{
							boxes[x][y].hasAddon = true;
							boxes[x][y].hasAddonCdKreuz = true;
						}
						else
							thisObject.remove();
						break;

					case "addonRueckwand":
					case "addon355_Rueckwand": // MODIF DM
						if (!cols[x].isFreddyPlus
//							&& !rows[y].isFreddyPlus
							&& !boxes[x][y].hasAddonBox
							&& !boxes[x][y].hasAddonRueckwand
							&& horizontals[x][y].isRegal
							&& verticals[x][y].isRegal
							&& horizontals[x][y - 1].isRegal
							&& verticals[x - 1][y].isRegal)
						{
							boxes[x][y].hasAddon = true;
							boxes[x][y].hasAddonRueckwand = true;
						}
						else
							thisObject.remove();
						break;

					case "addonRueckwand2breit":
					case "addon735_Rueckwand": // MODIF DM
						if (!cols[x].isFreddyPlus
							&& x < gridWidth
							&& !cols[x + 1].isFreddyPlus
//							&& !rows[y].isFreddyPlus
							&& !boxes[x][y].hasAddonBox
							&& !boxes[x + 1][y].hasAddonBox
							&& !boxes[x][y].hasAddonRueckwand
							&& !boxes[x + 1][y].hasAddonRueckwand
							&& horizontals[x][y].isRegal
							&& horizontals[x + 1][y].isRegal
							&& verticals[x + 1][y].isRegal
							&& horizontals[x + 1][y - 1].isRegal
							&& horizontals[x][y - 1].isRegal
							&& verticals[x - 1][y].isRegal
							&& !verticals[x][y].isRegal)
						{
							boxes[x][y].hasAddon = true;
							boxes[x][y].hasAddonRueckwand = true;
							boxes[x + 1][y].hasAddon = true;
							boxes[x + 1][y].hasAddonRueckwand = true;
						}
						else if (cols[x].isFreddyPlus
//							&& !rows[y].isFreddyPlus
							&& !boxes[x][y].hasAddonBox
							&& !boxes[x][y].hasAddonRueckwand
							&& horizontals[x][y].isRegal
							&& verticals[x][y].isRegal
							&& horizontals[x][y - 1].isRegal
							&& verticals[x - 1][y].isRegal)
						{
							boxes[x][y].hasAddon = true;
							boxes[x][y].hasAddonRueckwand = true;
						}
						else
							thisObject.remove();
						break;
						
					case "addonRueckwand2hoch":
						if (!cols[x].isFreddyPlus
							&& y > 1
//							&& !rows[y].isFreddyPlus
//							&& !rows[y - 1].isFreddyPlus
							&& !boxes[x][y].hasAddonBox
							&& !boxes[x][y - 1].hasAddonBox
							&& !boxes[x][y].hasAddonRueckwand
							&& !boxes[x][y - 1].hasAddonRueckwand
							&& horizontals[x][y].isRegal
							&& verticals[x][y].isRegal
							&& verticals[x][y - 1].isRegal
							&& horizontals[x][y - 2].isRegal
							&& verticals[x - 1][y - 1].isRegal
							&& verticals[x - 1][y].isRegal
							&& !horizontals[x][y - 1].isRegal)
						{
							boxes[x][y].hasAddon = true;
							boxes[x][y].hasAddonRueckwand = true;
							boxes[x][y - 1].hasAddon = true;
							boxes[x][y - 1].hasAddonRueckwand = true;
						}
/*
						else if (!cols[x].isFreddyPlus
							&& rows[y].isFreddyPlus
							&& !boxes[x][y].hasAddonBox
							&& !boxes[x][y].hasAddonRueckwand
							&& horizontals[x][y].isRegal
							&& verticals[x][y].isRegal
							&& horizontals[x][y - 1].isRegal
							&& verticals[x - 1][y].isRegal)
						{
							boxes[x][y].hasAddon = true;
							boxes[x][y].hasAddonRueckwand = true;
						}
*/
						else
							thisObject.remove();
						break;

					case "addonGlastuer":
						switch(thisObject.ausfuehrung)
						{
							case "glastuer1hoch":
								if (x + 3 <= gridWidth
									&& !cols[x].isFreddyPlus
									&& !cols[x + 1].isFreddyPlus
									&& !cols[x + 2].isFreddyPlus
									&& !cols[x + 3].isFreddyPlus
//									&& !rows[y].isFreddyPlus
									&& checkGlastuer(x, y, 4, 1))
								{
									boxes[x][y].hasAddon = true;
									boxes[x][y].hasAddonGlastuer = true;
									boxes[x + 1][y].hasAddon = true;
									boxes[x + 1][y].hasAddonGlastuer = true;
									boxes[x + 2][y].hasAddon = true;
									boxes[x + 2][y].hasAddonGlastuer = true;
									boxes[x + 3][y].hasAddon = true;
									boxes[x + 3][y].hasAddonGlastuer = true;
								}
								else if (x + 2 <= gridWidth
									&& ((cols[x].isFreddyPlus && !cols[x + 1].isFreddyPlus && !cols[x + 2].isFreddyPlus)
										|| (!cols[x].isFreddyPlus && cols[x + 1].isFreddyPlus && !cols[x + 2].isFreddyPlus)
										|| (!cols[x].isFreddyPlus && !cols[x + 1].isFreddyPlus && cols[x + 2].isFreddyPlus))
//									&& !rows[y].isFreddyPlus
									&& checkGlastuer(x, y, 3, 1))
								{
									boxes[x][y].hasAddon = true;
									boxes[x][y].hasAddonGlastuer = true;
									boxes[x + 1][y].hasAddon = true;
									boxes[x + 1][y].hasAddonGlastuer = true;
									boxes[x + 2][y].hasAddon = true;
									boxes[x + 2][y].hasAddonGlastuer = true;
								}
								else if (x + 1 <= gridWidth
									&& cols[x].isFreddyPlus
									&& cols[x + 1].isFreddyPlus
//									&& !rows[y].isFreddyPlus
									&& checkGlastuer(x, y, 2, 1))
								{
									boxes[x][y].hasAddon = true;
									boxes[x][y].hasAddonGlastuer = true;
									boxes[x + 1][y].hasAddon = true;
									boxes[x + 1][y].hasAddonGlastuer = true;
								}
								else
									thisObject.remove();
								break;

							case "glastuer2hoch":
								if (x + 3 <= gridWidth
									&& y > 1
									&& !cols[x].isFreddyPlus
									&& !cols[x + 1].isFreddyPlus
									&& !cols[x + 2].isFreddyPlus
									&& !cols[x + 3].isFreddyPlus
//									&& !rows[y].isFreddyPlus
//									&& !rows[y - 1].isFreddyPlus
									&& checkGlastuer(x, y, 4, 2))
								{
									boxes[x][y].hasAddon = true;
									boxes[x][y].hasAddonGlastuer = true;
									boxes[x + 1][y].hasAddon = true;
									boxes[x + 1][y].hasAddonGlastuer = true;
									boxes[x + 2][y].hasAddon = true;
									boxes[x + 2][y].hasAddonGlastuer = true;
									boxes[x + 3][y].hasAddon = true;
									boxes[x + 3][y].hasAddonGlastuer = true;
									boxes[x][y - 1].hasAddon = true;
									boxes[x][y - 1].hasAddonGlastuer = true;
									boxes[x + 1][y - 1].hasAddon = true;
									boxes[x + 1][y - 1].hasAddonGlastuer = true;
									boxes[x + 2][y - 1].hasAddon = true;
									boxes[x + 2][y - 1].hasAddonGlastuer = true;
									boxes[x + 3][y - 1].hasAddon = true;
									boxes[x + 3][y - 1].hasAddonGlastuer = true;
								}
								else if (x + 2 <= gridWidth
									&& y > 1
									&& ((cols[x].isFreddyPlus && !cols[x + 1].isFreddyPlus && !cols[x + 2].isFreddyPlus)
										|| (!cols[x].isFreddyPlus && cols[x + 1].isFreddyPlus && !cols[x + 2].isFreddyPlus)
										|| (!cols[x].isFreddyPlus && !cols[x + 1].isFreddyPlus && cols[x + 2].isFreddyPlus))
//									&& !rows[y].isFreddyPlus
//									&& !rows[y - 1].isFreddyPlus
									&& checkGlastuer(x, y, 3, 2))
								{
									boxes[x][y].hasAddon = true;
									boxes[x][y].hasAddonGlastuer = true;
									boxes[x + 1][y].hasAddon = true;
									boxes[x + 1][y].hasAddonGlastuer = true;
									boxes[x + 2][y].hasAddon = true;
									boxes[x + 2][y].hasAddonGlastuer = true;
									boxes[x][y - 1].hasAddon = true;
									boxes[x][y - 1].hasAddonGlastuer = true;
									boxes[x + 1][y - 1].hasAddon = true;
									boxes[x + 1][y - 1].hasAddonGlastuer = true;
									boxes[x + 2][y - 1].hasAddon = true;
									boxes[x + 2][y - 1].hasAddonGlastuer = true;
								}
								else if (x + 1 <= gridWidth
									&& y > 1
									&& cols[x].isFreddyPlus
									&& cols[x + 1].isFreddyPlus
//									&& !rows[y].isFreddyPlus
//									&& !rows[y - 1].isFreddyPlus
									&& checkGlastuer(x, y, 2, 2))
								{
									boxes[x][y].hasAddon = true;
									boxes[x][y].hasAddonGlastuer = true;
									boxes[x + 1][y].hasAddon = true;
									boxes[x + 1][y].hasAddonGlastuer = true;
									boxes[x][y - 1].hasAddon = true;
									boxes[x][y - 1].hasAddonGlastuer = true;
									boxes[x + 1][y - 1].hasAddon = true;
									boxes[x + 1][y - 1].hasAddonGlastuer = true;
								}
/*
								else if (x + 3 <= gridWidth
									&& !cols[x].isFreddyPlus
									&& !cols[x + 1].isFreddyPlus
									&& !cols[x + 2].isFreddyPlus
									&& !cols[x + 3].isFreddyPlus
									&& rows[y].isFreddyPlus
									&& checkGlastuer(x, y, 4, 1))
								{
									boxes[x][y].hasAddon = true;
									boxes[x][y].hasAddonGlastuer = true;
									boxes[x + 1][y].hasAddon = true;
									boxes[x + 1][y].hasAddonGlastuer = true;
									boxes[x + 2][y].hasAddon = true;
									boxes[x + 2][y].hasAddonGlastuer = true;
									boxes[x + 3][y].hasAddon = true;
									boxes[x + 3][y].hasAddonGlastuer = true;
								}
								else if (x + 2 <= gridWidth
									&& ((cols[x].isFreddyPlus && !cols[x + 1].isFreddyPlus && !cols[x + 2].isFreddyPlus)
										|| (!cols[x].isFreddyPlus && cols[x + 1].isFreddyPlus && !cols[x + 2].isFreddyPlus)
										|| (!cols[x].isFreddyPlus && !cols[x + 1].isFreddyPlus && cols[x + 2].isFreddyPlus))
									&& rows[y].isFreddyPlus
									&& checkGlastuer(x, y, 3, 1))
								{
									boxes[x][y].hasAddon = true;
									boxes[x][y].hasAddonGlastuer = true;
									boxes[x + 1][y].hasAddon = true;
									boxes[x + 1][y].hasAddonGlastuer = true;
									boxes[x + 2][y].hasAddon = true;
									boxes[x + 2][y].hasAddonGlastuer = true;
								}
								else if (x + 1 <= gridWidth
									&& cols[x].isFreddyPlus
									&& cols[x + 1].isFreddyPlus
									&& rows[y].isFreddyPlus
									&& checkGlastuer(x, y, 2, 1))
								{
									boxes[x][y].hasAddon = true;
									boxes[x][y].hasAddonGlastuer = true;
									boxes[x + 1][y].hasAddon = true;
									boxes[x + 1][y].hasAddonGlastuer = true;
								}
*/
								else
									thisObject.remove();
								break;

							case "glastuer3hoch":
								if (x + 3 <= gridWidth
									&& y > 2
									&& !cols[x].isFreddyPlus
									&& !cols[x + 1].isFreddyPlus
									&& !cols[x + 2].isFreddyPlus
									&& !cols[x + 3].isFreddyPlus
//									&& !rows[y].isFreddyPlus
//									&& !rows[y - 1].isFreddyPlus
//									&& !rows[y - 2].isFreddyPlus
									&& checkGlastuer(x, y, 4, 3))
								{
									boxes[x][y].hasAddon = true;
									boxes[x][y].hasAddonGlastuer = true;
									boxes[x + 1][y].hasAddon = true;
									boxes[x + 1][y].hasAddonGlastuer = true;
									boxes[x + 2][y].hasAddon = true;
									boxes[x + 2][y].hasAddonGlastuer = true;
									boxes[x + 3][y].hasAddon = true;
									boxes[x + 3][y].hasAddonGlastuer = true;
									boxes[x][y - 1].hasAddon = true;
									boxes[x][y - 1].hasAddonGlastuer = true;
									boxes[x + 1][y - 1].hasAddon = true;
									boxes[x + 1][y - 1].hasAddonGlastuer = true;
									boxes[x + 2][y - 1].hasAddon = true;
									boxes[x + 2][y - 1].hasAddonGlastuer = true;
									boxes[x + 3][y - 1].hasAddon = true;
									boxes[x + 3][y - 1].hasAddonGlastuer = true;
									boxes[x][y - 2].hasAddon = true;
									boxes[x][y - 2].hasAddonGlastuer = true;
									boxes[x + 1][y - 2].hasAddon = true;
									boxes[x + 1][y - 2].hasAddonGlastuer = true;
									boxes[x + 2][y - 2].hasAddon = true;
									boxes[x + 2][y - 2].hasAddonGlastuer = true;
									boxes[x + 3][y - 2].hasAddon = true;
									boxes[x + 3][y - 2].hasAddonGlastuer = true;
								}
								else if (x + 2 <= gridWidth
									&& y > 2
									&& ((cols[x].isFreddyPlus && !cols[x + 1].isFreddyPlus && !cols[x + 2].isFreddyPlus)
										|| (!cols[x].isFreddyPlus && cols[x + 1].isFreddyPlus && !cols[x + 2].isFreddyPlus)
										|| (!cols[x].isFreddyPlus && !cols[x + 1].isFreddyPlus && cols[x + 2].isFreddyPlus))
//									&& !rows[y].isFreddyPlus
//									&& !rows[y - 1].isFreddyPlus
//									&& !rows[y - 2].isFreddyPlus
									&& checkGlastuer(x, y, 3, 3))
								{
									boxes[x][y].hasAddon = true;
									boxes[x][y].hasAddonGlastuer = true;
									boxes[x + 1][y].hasAddon = true;
									boxes[x + 1][y].hasAddonGlastuer = true;
									boxes[x + 2][y].hasAddon = true;
									boxes[x + 2][y].hasAddonGlastuer = true;
									boxes[x][y - 1].hasAddon = true;
									boxes[x][y - 1].hasAddonGlastuer = true;
									boxes[x + 1][y - 1].hasAddon = true;
									boxes[x + 1][y - 1].hasAddonGlastuer = true;
									boxes[x + 2][y - 1].hasAddon = true;
									boxes[x + 2][y - 1].hasAddonGlastuer = true;
									boxes[x][y - 2].hasAddon = true;
									boxes[x][y - 2].hasAddonGlastuer = true;
									boxes[x + 1][y - 2].hasAddon = true;
									boxes[x + 1][y - 2].hasAddonGlastuer = true;
									boxes[x + 2][y - 2].hasAddon = true;
									boxes[x + 2][y - 2].hasAddonGlastuer = true;
								}
								else if (x + 1 <= gridWidth
									&& y > 1
									&& cols[x].isFreddyPlus
									&& cols[x + 1].isFreddyPlus
//									&& !rows[y].isFreddyPlus
//									&& !rows[y - 1].isFreddyPlus
//									&& !rows[y - 2].isFreddyPlus
									&& checkGlastuer(x, y, 2, 3))
								{
									boxes[x][y].hasAddon = true;
									boxes[x][y].hasAddonGlastuer = true;
									boxes[x + 1][y].hasAddon = true;
									boxes[x + 1][y].hasAddonGlastuer = true;
									boxes[x][y - 1].hasAddon = true;
									boxes[x][y - 1].hasAddonGlastuer = true;
									boxes[x + 1][y - 1].hasAddon = true;
									boxes[x + 1][y - 1].hasAddonGlastuer = true;
									boxes[x][y - 2].hasAddon = true;
									boxes[x][y - 2].hasAddonGlastuer = true;
									boxes[x + 1][y - 2].hasAddon = true;
									boxes[x + 1][y - 2].hasAddonGlastuer = true;
								}
/*
								else if (x + 3 <= gridWidth
									&& y > 1
									&& !cols[x].isFreddyPlus
									&& !cols[x + 1].isFreddyPlus
									&& !cols[x + 2].isFreddyPlus
									&& !cols[x + 3].isFreddyPlus
									&& ((rows[y].isFreddyPlus && !rows[y - 1].isFreddyPlus) || (!rows[y].isFreddyPlus && rows[y - 1].isFreddyPlus))
									&& checkGlastuer(x, y, 4, 2))
								{
									boxes[x][y].hasAddon = true;
									boxes[x][y].hasAddonGlastuer = true;
									boxes[x + 1][y].hasAddon = true;
									boxes[x + 1][y].hasAddonGlastuer = true;
									boxes[x + 2][y].hasAddon = true;
									boxes[x + 2][y].hasAddonGlastuer = true;
									boxes[x + 3][y].hasAddon = true;
									boxes[x + 3][y].hasAddonGlastuer = true;
									boxes[x][y - 1].hasAddon = true;
									boxes[x][y - 1].hasAddonGlastuer = true;
									boxes[x + 1][y - 1].hasAddon = true;
									boxes[x + 1][y - 1].hasAddonGlastuer = true;
									boxes[x + 2][y - 1].hasAddon = true;
									boxes[x + 2][y - 1].hasAddonGlastuer = true;
									boxes[x + 3][y - 1].hasAddon = true;
									boxes[x + 3][y - 1].hasAddonGlastuer = true;
								}
								else if (x + 2 <= gridWidth
									&& y > 1
									&& ((cols[x].isFreddyPlus && !cols[x + 1].isFreddyPlus && !cols[x + 2].isFreddyPlus)
										|| (!cols[x].isFreddyPlus && cols[x + 1].isFreddyPlus && !cols[x + 2].isFreddyPlus)
										|| (!cols[x].isFreddyPlus && !cols[x + 1].isFreddyPlus && cols[x + 2].isFreddyPlus))
									&& ((rows[y].isFreddyPlus && !rows[y - 1].isFreddyPlus) || (!rows[y].isFreddyPlus && rows[y - 1].isFreddyPlus))
									&& checkGlastuer(x, y, 3, 2))
								{
									boxes[x][y].hasAddon = true;
									boxes[x][y].hasAddonGlastuer = true;
									boxes[x + 1][y].hasAddon = true;
									boxes[x + 1][y].hasAddonGlastuer = true;
									boxes[x + 2][y].hasAddon = true;
									boxes[x + 2][y].hasAddonGlastuer = true;
									boxes[x][y - 1].hasAddon = true;
									boxes[x][y - 1].hasAddonGlastuer = true;
									boxes[x + 1][y - 1].hasAddon = true;
									boxes[x + 1][y - 1].hasAddonGlastuer = true;
									boxes[x + 2][y - 1].hasAddon = true;
									boxes[x + 2][y - 1].hasAddonGlastuer = true;
								}
								else if (x + 1 <= gridWidth
									&& y > 1
									&& cols[x].isFreddyPlus
									&& cols[x + 1].isFreddyPlus
									&& ((rows[y].isFreddyPlus && !rows[y - 1].isFreddyPlus) || (!rows[y].isFreddyPlus && rows[y - 1].isFreddyPlus))
									&& checkGlastuer(x, y, 2, 2))
								{
									boxes[x][y].hasAddon = true;
									boxes[x][y].hasAddonGlastuer = true;
									boxes[x + 1][y].hasAddon = true;
									boxes[x + 1][y].hasAddonGlastuer = true;
									boxes[x][y - 1].hasAddon = true;
									boxes[x][y - 1].hasAddonGlastuer = true;
									boxes[x + 1][y - 1].hasAddon = true;
									boxes[x + 1][y - 1].hasAddonGlastuer = true;
								}
*/
								else
									thisObject.remove();
								break;
						} // switch(this.ausfuehrung)
						break;

					default:
						thisObject.remove();
				} // switch(this.addonType)
			}
		}

		drag(this.icon);

		function checkGlastuer(x, y, width, height)
		{
			var check = true;

			if (check)
				for (var u = x; u < x + width; u++)
					if (!horizontals[u][y].isRegal || !horizontals[u][y - height].isRegal)
					{
						check = false;
						u = gridWidth;
					}

			if (check)
				for (var v = y; v > y - height; v--)
					if (!verticals[x - 1][v].isRegal || !verticals[x + width - 1][v].isRegal)
					{
						check = false;
						v = 0;
					}

			if (check)
				for (var u = x; u < x + width; u++)
					for (var v = y; v > y - height; v--)
						if (boxes[u][v].hasAddonBox)
						{
							check = false;
							u = gridWidth;
							v = 0;
						}

			if (check)
				for (var u = Math.max(x - 1, 1); u <= Math.min(x + width, gridWidth); u++)
					for (var v = Math.min(y + 1, gridHeight); v >= Math.max(y - height, 1); v--)
						if (boxes[u][v].hasAddonGlastuer)
						{
							check = false;
							u = gridWidth;
							v = 0;
						}

			return check;
		}

		this.remove = function ()
		{
			canvas.removeChild(this.icon);
			if (this.addonType == "addonRueckwand2hoch")
			{
				addonArtikel["addonRueckwand2breit"][this.ausfuehrung].anzahl--;
				addonArtikel["addonRueckwand2breit"][this.ausfuehrung].refresh();
			}
			else
			{
				addonArtikel[this.addonType][this.ausfuehrung].anzahl--;
				addonArtikel[this.addonType][this.ausfuehrung].refresh();
			}
			addonStueckliste.refresh();
			addons.splice(this.index, 1);
			for (var i = this.index; i < addons.length; i++)
				addons[i].index--;
		};

		this.moveX = function (x)
		{
			var left = parseInt(thisObject.icon.style.left) + 30 * x
			thisObject.icon.style.left = left + "px";
			thisObject.icon.style.visibility = (left > 30 * gridWidth + 111 ? "hidden" : "visible");
		};

/*
		this.moveY = function (y)
		{
			thisObject.icon.style.top = (parseInt(thisObject.icon.style.top) - 30 * y) + "px";
		};
*/
	}
}

function removeAllAddons()
{
	for (var k = addons.length - 1; k >= 0; k--)
	{
		var addon = addons[k];
		var x = addon.col;
		var y = addon.row;
		
		switch (addon.addonType)
		{
			case "addonSchub2breit":
			case "addonSchub2breitPto":
			case "addon2Schuebe2breitPto":
			case "addon735_2Tuere": // New DM
			case "addon735_2Schuebe": // MODIF DM
			case "addon735_Schuebe": // New DM
				if (!cols[x].isFreddyPlus)
				{
					boxes[x + 1][y].hasAddonBox = false;
					boxes[x + 1][y].hasAddon = false;
				}
			// fall thru
			case "addonTuer":
			case "addonTuerPto":
			case "addon2Schuebe":
			case "addon2SchuebePto":
			case "addon355_Tuer": // MODIF DM
			case "addon355_2Schuebe": // MODIF DM
			case "addon355_Schubkasten": // MODIF DM
			case "addon355_3Schubkaesten": // MODIF DM
			case "addon355_4Schubkaesten": // MODIF DM
				boxes[x][y].hasAddonBox = false;
				boxes[x][y].hasAddon = false;
				break;

			case "addonCdKreuz":
			case "addon355_CdKreuz": // MODIF DM
				boxes[x][y].hasAddonCdKreuz = false;
				boxes[x][y].hasAddon = (boxes[x][y].hasAddonRueckwand || boxes[x][y].hasAddonGlastuer);
				break;

			case "addonRueckwand2breit":
			case "addon735_Rueckwand": // MODIF DM
				if (!cols[x].isFreddyPlus)
				{
					boxes[x + 1][y].hasAddonRueckwand = false;
					boxes[x + 1][y].hasAddon = (boxes[x + 1][y].hasAddonCdKreuz || boxes[x + 1][y].hasAddonGlastuer);
				}
			// fall thru
			case "addonRueckwand":
			case "addon355_Rueckwand": // MODIF DM
				boxes[x][y].hasAddonRueckwand = false;
				boxes[x][y].hasAddon = (boxes[x][y].hasAddonCdKreuz || boxes[x][y].hasAddonGlastuer);
				break;

			case "addonRueckwand2hoch":
				boxes[x][y].hasAddonRueckwand = false;
				boxes[x][y].hasAddon = (boxes[x][y].hasAddonCdKreuz || boxes[x][y].hasAddonGlastuer);
				if (!rows[y].isFreddyPlus)
				{
					boxes[x][y - 1].hasAddonRueckwand = false;
					boxes[x][y - 1].hasAddon = (boxes[x][y - 1].hasAddonCdKreuz || boxes[x][y - 1].hasAddonGlastuer);
				}
				break;

			case "addonGlastuer":
				if (addon.ausfuehrung == "glastuer1hoch" || (rows[y].isFreddyPlus && thisObject.ausfuehrung == "glastuer2hoch"))
					var h = 1;
				else if (addon.ausfuehrung == "glastuer3hoch" && !rows[y].isFreddyPlus && !rows[y - 1].isFreddyPlus)
					var h = 3;
				else
					var h = 2;
				for (var i = 1; i <= h; i++, y--)
				{
					boxes[x][y].hasAddonGlastuer = false;
					boxes[x][y].hasAddon = (boxes[x][y].hasAddonCdKreuz || boxes[x][y].hasAddonRueckwand);
					boxes[x + 1][y].hasAddonGlastuer = false;
					boxes[x + 1][y].hasAddon = (boxes[x + 1][y].hasAddonCdKreuz || boxes[x + 1][y].hasAddonRueckwand);
					if (!cols[x].isFreddyPlus || !cols[x + 1].isFreddyPlus)
					{
						boxes[x + 2][y].hasAddonGlastuer = false;
						boxes[x + 2][y].hasAddon = (boxes[x + 2][y].hasAddonCdKreuz || boxes[x + 2][y].hasAddonRueckwand);
					}
					if (!cols[x].isFreddyPlus && !cols[x + 1].isFreddyPlus && !cols[x + 2].isFreddyPlus)
					{
						boxes[x + 3][y].hasAddonGlastuer = false;
						boxes[x + 3][y].hasAddon = (boxes[x + 3][y].hasAddonCdKreuz || boxes[x + 3][y].hasAddonRueckwand);
					}
				}
				break;
		}
		
		addon.remove();
	}
}

