/*	ONLOAD
	Allgemeine Operationen beim DOMREADY-Event */
	$(document).ready(function() {
		sos_prepareCartBox();
		sos_prepareSidebarBoxes();
		sos_equaliseColumns();

		// Kategorienbaum im Sidebar-Panel aufbereiten
		sos_treeview();
		// Tabboxen aufbereiten
		sos_prepareTabbox();
	});

//	FIRST ELEMENT CHILD
	function sos_firstElementChild(element) {
		element = element.firstChild;
		do {
			element = element.nextSibling;
		} while (element && element.nodeType != 1);
		return element;
	}

//	NEXT ELEMENT SIBLING
	function sos_nextElementSibling(element) {
		do {
			element = element.nextSibling;
		} while (element && element.nodeType != 1);
		return element;
	}

/*	GET URL PARAMETER
	Adaptiert nach http://stackoverflow.com/questions/901115/get-querystring-values-in-javascript/901144#901144 */
	function sos_getParameterByName(name, url) {
		name		= name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]").toLowerCase();
		var regexS	= "[\\?&]" + name + "=([^&#]*)";
		var regex	= new RegExp(regexS);
		var results	= regex.exec(url.toLowerCase());

		if (results == null)
			return false;
		else
			return decodeURIComponent(results[1].replace(/\+/g, " "));
	}

//	PREPARE TABBOX
	function sos_prepareTabbox() {
		var dom_TabboxTabs = $(".sos_tabbox-tabs");
		var dom_TabboxContent = $(".sos_tabbox-content");
		var str_UriAnchor = window.location.hash;

		for (i = 0; i < dom_TabboxTabs.length; i++) {
			var dom_TabboxTabsItems = dom_TabboxTabs[i].children;
			var dom_TabboxContentItems = dom_TabboxContent[i].children;

			for (j = 0; j < dom_TabboxTabsItems.length; j++) {
				dom_TabboxTabsItems[j].children[0].removeAttribute("href");
			}

			// Ankerinformation auswerten und aktiven Tab markieren
			var int_TabPointer = 0;
			if (dom_TabboxTabs[i].id == "sos_tabbox-productinfo") {
				var dom_TabboxTabsItems = $(dom_TabboxTabs).children("li");
				for (j = dom_TabboxTabsItems.length-1; j >= 0; j--) {
					if (dom_TabboxTabsItems[j].id == str_UriAnchor.substr(1).toLowerCase()) int_TabPointer = j;
				}
			}
			window.scrollTo(0, 0);
			dom_TabboxTabsItems[int_TabPointer].className = "sos_selected";

			// Inaktive Tabinhalte ausblenden
			for (j = 0; j < dom_TabboxContentItems.length; j++) {
				if (j != int_TabPointer) dom_TabboxContentItems[j].className = "sos_render-n";

				var dom_TabboxContentHeads = dom_TabboxContentItems[j].getElementsByTagName("label");
				for (k = 0; k < dom_TabboxContentHeads.length; k++) {
					if (dom_TabboxContentHeads[k].className == "sos_tabbox-contenthead")
						dom_TabboxContentItems[j].removeChild(dom_TabboxContentHeads[k]);
				}
			}
		}
	}

//	SELECT TAB
	function sos_selectTab(content, tabIndex, tabHash) {
		if (sos_selectTab.arguments.length < 2) {
			if (content != location.href)
				location.href = content;
		} else {
			if (sos_nextElementSibling(content).className == "sos_tabbox-content") {
				var dom_TabboxTabsItems = content.children;
				var dom_TabboxContentItems = sos_nextElementSibling(content).children;
	
				for (i = 0; i < dom_TabboxTabsItems.length; i++) {
					dom_TabboxTabsItems[i].className = "";
					dom_TabboxContentItems[i].className = "sos_render-n";
				}
				dom_TabboxTabsItems[tabIndex].className = "sos_selected";
				dom_TabboxContentItems[tabIndex].className = "";

				// Merke Scrollposition
				var scrollPosX = document.body.scrollLeft;
				var scrollPosY = document.body.scrollTop;

				window.location.hash = tabHash;
				window.scrollTo(scrollPosX, scrollPosY);

				sos_equaliseColumns();
			}
		}
	}

//	FOLD
	function sos_fold(target) {
		if (typeof(target) == 'string') {
			var dom_Target = document.getElementById(target);
			dom_Target.className = (dom_Target.className=="sos_render-n") ? "sos_render-a" : "sos_render-n";
		} else {
			target.className = (target.className=="sos_render-n") ? "sos_render-a" : "sos_render-n";
		}
		sos_equaliseColumns();
	}

//	TREEVIEW
	function sos_treeview(target, listIndex) {
		if (sos_treeview.arguments.length < 2) {

			var str_CurrentPath = sos_getParameterByName("cPath", window.location.href);

			var dom_Instances = $(".sos_list-i");
			for (i = 0; i < dom_Instances.length; i++) {

				var dom_ListItems = dom_Instances[i].children;
				for (k = 0; k < dom_ListItems.length; k++) {

					var dom_SubList = dom_ListItems[k].getElementsByTagName("ul");
					if (dom_SubList) {
						dom_ListItems[k].className = "sos_list-p";
						dom_ListItems[k].children[0].removeAttribute("href");

						var dom_SubItems = dom_SubList[0].getElementsByTagName("a");
						for (l = 0; l < dom_SubItems.length; l++) {
							if (sos_getParameterByName("cPath", dom_SubItems[l].href) == str_CurrentPath) {
								var dom_Inflate = dom_SubList[0];
								break;
							}
						}
					}
				}
				if (str_CurrentPath && dom_Inflate)
					dom_Inflate.className = "";
			}
		} else {
			dom_List = document.getElementById(target);
			dom_ListItem = dom_List.children[listIndex];
			dom_ListSub = dom_ListItem.getElementsByTagName("ul")[0];

			dom_ListItem.className == "sos_list-p" ? dom_ListItem.className = "sos_list-m" : dom_ListItem.className = "sos_list-p";
			dom_ListSub.className == "sos_render-n" ? dom_ListSub.className = "" : dom_ListSub.className = "sos_render-n";
		}
	}

/*	ALIGN HEIGHTS PER ROW
	Zeilenweise Höhenangleichung von Elementen der Galerieansicht */
	function sos_alignHeightsPerRow() {
		var dom_ListItems = $(".sos_listing-m > li");
		var dom_InfoItems = $(".sos_listing-m .sos_listing-info");

		var arr_Row = new Array();
		var bol_Eol = false;

		for (i = 0; i < dom_ListItems.length; i++) {
			(dom_ListItems[i].className == "sos_eol" || i == dom_ListItems.length - 1) ? bol_Eol = true : bol_Eol = false;

			arr_Row.push(dom_InfoItems[i]);

			if (bol_Eol) {
				$(arr_Row).each(function() {
					$(this).height($(arr_Row).tallestSize());
				});
				arr_Row.length = 0;
			}
		}
	}

/*	ALIGN VERTICAL
	Vertikale Zentrierung von Blockelementen innerhalb ihres Elternelements */
	function sos_alignVertical(frame, subject) {
		$(frame).each(function(index) {
			var int_HeightSubject	= $(this).find(subject).outerHeight(true);
			var int_HeightFrame		= $(this).height();
			var int_Offset			= Math.floor((int_HeightFrame - int_HeightSubject) / 2);

			$(this).find(subject).css("margin-top", int_Offset);
		});
	}

/*	PREPARE SIDEBAR BOXES
	Sidebarboxen für Klappfunktionalität vorbereiten */
	function sos_prepareSidebarBoxes() {
		var dom_SidebarBoxes		= $("#sos_sidebar > .sos_panel").has("h2");
		var dom_SidebarBoxTitles	= $(dom_SidebarBoxes).find("h2");
		var str_IsExploded			= '<span class="sos_icon sos_up sos_height-16 sos_width-24"></span>';

		$(dom_SidebarBoxTitles).addClass("sos_hover");
		$(dom_SidebarBoxTitles).append(str_IsExploded);

		$(dom_SidebarBoxes).each(function(index) {
			if ($(this).find("input[name='sos_collapsed'][value='true']").length > 0) {
				$(this).find("h2").next().hide();
				$(this).find("h2 span").toggleClass("sos_down");
				$(this).find("h2 span").toggleClass("sos_up");
			};
		});

		dom_SidebarBoxTitles.click(function() {
			sos_toggleBox($(this).next(), $(this).children("span.sos_icon"));
		});
	}

/*	PREPARE CART BOX
	Warenkorbbox für Klappfunktionalität vorbereiten */
	function sos_prepareCartBox() {
		var dom_CartBox			= $('#sos_cart');
		var dom_CartBoxLink		= dom_CartBox.find('a');
		var dom_CartBoxContent	= dom_CartBox.next();
		var str_IsCollapsed		= '<span class="sos_icon sos_down"></span>';

		$(dom_CartBoxContent).hide();
		$(dom_CartBoxLink).removeAttr("href");
		$(dom_CartBoxLink).append(str_IsCollapsed);

		dom_CartBox.click(function() {
			sos_toggleBox($(this).next(), $(this).find('span.sos_icon'));
		});
	}

/*	TOGGLEBOX
	Ein- und Ausklappen von Boxen */
	function sos_toggleBox(target, trigger) {
		$.fn.slideFadeToggle = function(speed, easing, callback) {
			return this.animate({opacity: "toggle", height: "toggle"}, speed, easing, callback);
		};

		$(target).slideFadeToggle('fast');

		if (trigger) {
			$(trigger).toggleClass("sos_down");
			$(trigger).toggleClass("sos_up");
		}
		sos_equaliseColumns();
	}

/*	SIZESIDEBAR
	Sidebarhöhe an Contentspalte anpassen */
	function sos_equaliseColumns() {
		$('#sos_container').children().sameHeights(true);
	}

