var AG =
{
	$: function(sObject)
	{
		return document.getElementById(sObject) || null;
	},
	tabnav:
	{
		over: function(_this)
		{
			AG.dom.setClass(_this, "navbar-over");
			AG.dom.setClass(_this.parentNode, "navbar-over");
			_this.parentNode.style.borderBottom = "1px solid #1982BB";
			_this.style.borderBottom = "1px solid #CCCCCC";
			AG.dom.setClass(_this, "active");


			var aLi = _this.getElementsByTagName("li");
			var aA = _this.getElementsByTagName("a");

			for(var i=0;i<aA.length;i++)
			{
				aA[i].style.color = (i==0 ? "#1982BB" : "#000000");
			}

			var aLi = _this.getElementsByTagName("li");

			for(var i=0;i<aLi.length;i++)
			{
				aLi[i].style.display = "block";
				AG.tabnav.registerClasses(aLi[i]);
			}
		},
		out: function(_this)
		{
			_this.getElementsByTagName("a")[0].style.color = "#000000";
			AG.dom.setClass(_this, "");
			_this.parentNode.style.borderBottom = "0px";
			_this.style.borderBottom = "0px";

			var aLi = _this.getElementsByTagName("li");

			// erster bleibt eingeblendet
			for(var i=1;i<aLi.length;i++)
			{
				aLi[i].style.display = "none";
			}
		},
		registerClasses: function(_this)
		{
			sClassOld = AG.dom.getClass(_this);
			_this.onmouseover = function() { AG.dom.setClass(_this, "over"); };
			_this.onmouseout = function() { AG.dom.setClass(_this); };
			_this.onclick = function() { window.location.href = _this.getElementsByTagName("a")[0].href; };
		}
	},
	isIE: navigator.userAgent.indexOf("MSIE") != -1,
	onReady: function(fCallBack)
	{
		var oWindowOnLoad = window.onload;

		if (typeof window.onload != 'function')
		{
			window.onload = fCallBack;
		}
		else
		{
			window.onload = function()
			{
				if (oWindowOnLoad)
				{
					oWindowOnLoad();
				}

				fCallBack();
			}
		}
	},
	dom:
	{
		browserRelated: function(ff,ie)
		{
			var n = navigator.userAgent.toLowerCase();

			if ((n.indexOf("msie") != -1) && (n.indexOf("opera") == -1))
			{
				return ie;
			}

			return ff;
		},
		getClass: function(_this)
		{
			return _this.getAttribute(browserRelated("class", "className"));
		},
		setClass: function(_this, sClass)
		{
			return _this.setAttribute(browserRelated("class", "className"), sClass);
		},
		createTagWithContent: function(sTag, sValue)
		{
			var oElement = AG.dom.createTag(sTag);
				oElement.innerHTML = sValue;

			return oElement;
		},
		createAttribute: function(sType, sValue, oElement)
		{
			try
			{
				var oAttribute = document.createAttribute(sType);
					oAttribute.nodeValue = sValue;

					oElement.setAttributeNode(oAttribute);
			}
			catch(e)
			{
				Debug.object(e);
			}
		},
		addOption: function(oObject, sValue, sContent, bSelected)
		{
			var oOption = AG.dom.createTagWithContent("option", sContent);

			AG.dom.createAttribute("value", sValue, oOption);

			if(bSelected == 1)
			{
				AG.dom.createAttribute("selected", "selected", oOption);
			}

			oObject.appendChild(oOption);
		},
		createTag: function(sTag)
		{
			return document.createElement(sTag);
		}
	},
	misc:
	{
		enable: function(aFields)
		{
			for(var i=0;i<aFields.length;i++)
			{
				aFields[i].disabled = false;
			}
		},
		disable: function(aFields)
		{
			for(var i=0;i<aFields.length;i++)
			{
				aFields[i].disabled = true;
			}
		},
		relocate: function(sLink)
		{
			window.location.href = sLink;
		},
		search: function(sSearch)
		{
			this.relocate(PATH_HTTP+'suche/'+sSearch+'.html');
		},
		hide: function(sObject)
		{
			sObject.style.display = "none";
		},
		openPopup: function(sLink)
		{
			window.open(sLink);
		},
		displayAll: function(_this)
		{
			var _oContainer = _this;

			// finde das oberste element der Box
			do
			{
				if(_this.parentNode)
				{
					_this = _this.parentNode;
				}
				else
				{
					return false;
				}
			}
			while(_this.id != "box-float" && _this.id != "box");

			var aDivs = _this.getElementsByTagName("div");

			for(var i=0;i<aDivs.length;i++)
			{
				if(aDivs[i].id == "invisus")
				{
					aDivs[i].id = null;
				}
			}

			_oContainer.parentNode.parentNode.removeChild(_oContainer.parentNode);
		},
		selectLinkForward: function(_this, sLink)
		{
			AG.misc._selectLinkForward(_this, sLink, ["#direction#", "#amount#", "#option#"], ["aufsteigend", 25, "neueangebote"], null, null);
		},
		selectLinkForwardFilter: function(_this, sLink)
		{
			AG.misc._selectLinkForward(_this, sLink, ["#price_min#", "#price_max#", "#radius#", "#ps_min#", "#ps_max#"], null, ["#zipcode#"], ["alle"]);
		},
		selectLinkForwardTires: function(_this, sLink)
		{
			AG.misc._selectLinkForward(_this, sLink, ["#direction#", "#producer#", "#option#", "#limit#"], null, null, null);
		},
		selectLinkForwardTiresFilter: function(_this, sLink)
		{
			AG.misc._selectLinkForward(_this, sLink, ["#type#", "#width#", "#ratio#", "#diameter#", "#velocity#", "#producer#"], null, null, null);
		},
		_selectLinkForward: function(_this, sLink, aFields, aFirst, aInputs, aStandardOnEmpty)
		{
			sLink = decodeURI(sLink);
			sLink = str_replace("%2F", "/", sLink);
			sLink = str_replace("%23", "#", sLink);
			sLink = str_replace("%2C", ",", sLink);

			var aSelect = _this.parentNode.parentNode.getElementsByTagName("select");
			var aInput = _this.parentNode.parentNode.getElementsByTagName("input");
			var sLinkCheck = sLink;

			if(aFirst != null)
			{
				for(var i=0;i<aSelect.length;i++)
				{
					sLinkCheck = str_replace(aFields[i], ((aSelect[i].options[aSelect[i].selectedIndex].value == aFirst[i]) ? "1" : "0"), sLinkCheck);
				}
			}

			if(aFirst != null && sLinkCheck.substr(sLinkCheck.length-13) == ",1,1,1,1.html")
			{
				sLink = sLinkCheck.substr(0, sLinkCheck.length-13)+".html";
			}
			else
			{
				for(var i=0;i<aSelect.length;i++)
				{
					sLink = str_replace(aFields[i], aSelect[i].options[aSelect[i].selectedIndex].value, sLink);
				}

				for(var i=0;i<aInput.length;i++)
				{
					sLink = str_replace(aInputs[i], (aInput[i].value.length > 0 ? aInput[i].value : aStandardOnEmpty[i]), sLink);
				}
			}

			window.location.href = PATH_HTTP+sLink;
		},
		showCutterText: function(sID)
		{
			var aDom = $('text-'+sID).getElementsByTagName('div');
				aDom[aDom.length-2].style.display = 'block';
				$('text-'+sID).removeChild(aDom[aDom.length-1]);
		},
		gmaps:
		{
			init:  function(aMarker)
			{
				if (GBrowserIsCompatible())
				{
					var map = new GMap2($("map_canvas"));
						map.setCenter(new GLatLng(51.25,10.45), 5);
						map.addControl(new GSmallMapControl());
						map.enableScrollWheelZoom();

					for(var i=0;i<aMarker.length;i++)
					{
						AG.misc.gmaps.createMarker(map, aMarker[i]);
					}
				}
			},
			createMarker: function(map, aMarkerData)
			{
        		var oIcon = new GIcon(G_DEFAULT_ICON);
					oIcon.image = PATH_IMG+"gmaps-marker.png";
					oIcon.shadow = PATH_IMG+"gmaps-marker-shadow.png";

				var oMarker = new GMarker(new GLatLng(aMarkerData["location"]["lat"], aMarkerData["location"]["lng"]), {icon: oIcon});
					GEvent.addListener(oMarker, "click", function()
					{
						var sContent = '<div id="ag-gmap-marker"><div class="name">'+aMarkerData["data"]["name"]+'</div>'+
										'<img class="thumbnail" src="'+aMarkerData["data"]["thumbnail"]+'" />'+
										'<div class="price">'+aMarkerData["data"]["price_public"]+'</div>'+
										'<div class="mileage">'+aMarkerData["data"]["mileage"]+'</div>'+
										'<div class="power">'+aMarkerData["data"]["power"]+'</div>'+
										'<div class="first_registration">'+aMarkerData["data"]["first_registration"]+'</div>'+
										'<div class="link"><a rel="nofollow" target="_blank" href="'+aMarkerData["data"]["url"]+'"><img src="http://sonne:8080/stefan/seo.autogenau.de/images/btn-details.png" /></a></div></div>';
						map.openInfoWindowHtml(oLatLng, sContent);
					});

				map.addOverlay(oMarker);
			},
			size: function (aMarker)
			{
				// 1 => größer
				// 0 => kleiner
				var bResize =  AG.dom.getClass($("id-gmap-canvas")) == "ag-gmap-small";
				AG.dom.setClass($("id-gmap-canvas"), bResize ? "ag-gmap-big" : "ag-gmap-small");

				$("id-gmap-additional").getElementsByTagName("a")[0].innerHTML = bResize ?  "Karte verkleinern" : "Karte vergr&ouml;&szlig;ern";

				AG.misc.gmaps.init(aMarker);
			}
		},
		vote:
		{
			set: function(bModus, uiStars)
			{
				var sModus = (bModus ? "" : "-hover");
				AG.dom.setClass($("ag-stars"), "ag-stars-"+uiStars+sModus);
			},
			perform: function(uiStars, sURI)
			{
				var sURL = PATH_HTTP+"form/seite-bewerten.html";
				$("ag-stars").innerHTML = "";

				var aData = new Array();
				var aParam = new Object();
					aParam["uri"] = sURI;
					aParam["vote"] = uiStars;

				for(fPropery in aParam)
				{
					aData[aData.length] = fPropery+"="+encodeURI(aParam[fPropery]);
				}

				new Ajax.Request(sURL,
				{
					method: "post",
					parameters: aData.join("&"),
					onSuccess: function(oTransport)
					{
						var oJSON = oTransport.responseText.evalJSON();
						var uiEC = oJSON["ec"];

						if(uiEC == 0)
						{
							var oData = oJSON["data"];
							$("ag-stars-rating").innerHTML = oData["votings"]+" Bewertungen: &Oslash; "+oData["avg_rate"];
							AG.misc.vote.set(1, oData["stars"]);
						}
						else
						{
							alert("Sie haben diese Seite schonmal bewertet.");
						}
					}
				});
			}
		},
		as:
		{
			load: function()
			{
				var sURL = PATH_HTTP+"form/lade-daten.html";

				var aTmp = window.location.href.split("#");
				var sMain = aTmp[0];

				var aData = new Array();
				var aParam = new Object();
					aParam["url"] = sMain;
					aParam["type"] = "as";

				for(fPropery in aParam)
				{
					aData[aData.length] = fPropery+"="+encodeURI(aParam[fPropery]);
				}

				new Ajax.Request(sURL,
				{
					method: "post",
					parameters: aData.join("&"),
					onSuccess: function(oTransport)
					{
						var oJSON = oTransport.responseText.evalJSON();
						var uiEC = oJSON["ec"];

						if(uiEC == 0)
						{
							var oData = oJSON["data"];

							if(oData != "")
							{
								$('box-car-details').innerHTML = oData+str_replace('id="first"', "", $('box-car-details').innerHTML);
							}

							AG.init.boxDetails();

							if(window.location.hash != "" && !AG.isIE)
							{
								window.location.hash = window.location.hash;
							}
						}
					}
				});
			}
		},
		toUpper: function(_this)
		{
			_this.value = _this.value.toUpperCase();
		}
	},
	init:
	{
		autogenau: function()
		{
			var aDivs = document.getElementsByTagName("div");

			for(var i=0;i<aDivs.length;i++)
			{
				if(aDivs[i].childNodes.length > 0 && !empty(aDivs[i].childNodes[0].href))
				{
					var uiStatus = _checkBox(aDivs[i], 4, aDivs[i]);
					if(uiStatus > 0)
					{
						_init(aDivs[i], uiStatus);
					}
				}
			}

			// new version of the navigation should be also handled
			var aLi = document.getElementsByTagName("li");

			for(var i=0;i<aLi.length;i++)
			{
				if(aLi[i].childNodes.length > 0 && !empty(aLi[i].childNodes[0].href))
				{
					var uiStatus = _checkList(aLi[i], 4, aLi[i]);

					if(uiStatus > 0)
					{
						_init(aLi[i], uiStatus);
					}
				}
			}

			function _init(_this, uiStatus)
			{
				var oOldClass = AG.dom.getClass(_this);
					oOldClass = is_null(oOldClass) ? "" : oOldClass;

				var oA = _this.getElementsByTagName("a")[0];

				switch(uiStatus)
				{
					case 1:
						_this.onmouseover = function() { AG.dom.setClass(_this, "over "+oOldClass); };
						_this.onmouseout = function() { AG.dom.setClass(_this, "out "+oOldClass); };
						_this.onclick = function() { AG.misc.relocate(oA.href); };
						break;

					case 2:
						// das Fenster soll nur 1x geöffnet werden!
						_this.onmouseover = function() { AG.dom.setClass(_this, "over "+oOldClass); };
						_this.onmouseout = function() { AG.dom.setClass(_this, "out "+oOldClass); };
						oA.onclick = function() { return false; };
						_this.onclick = function() { AG.misc.openPopup(oA.href) };
						break;
					case 3:
						_this.parentNode.onmouseover = function() { AG.dom.setClass(_this.parentNode, "over "+oOldClass); };
						_this.parentNode.onmouseout = function() { AG.dom.setClass(_this.parentNode, "out "+oOldClass); };
						_this.parentNode.onclick = function() { AG.misc.relocate(oA.href); };
						// das onclick event wird auf den parent gesetzt!, ebenfalls das hover
				}
			}

			function _checkBox(oObject, uiMaxParent, oDiv)
			{
				if(oObject.id == "box" || oObject.id == "box-float" || oObject.id == "box-articles" || oObject.id == "box-similar" || (oObject.id == "box-normal" && oDiv.id == "doublearrow-link"))
				{
					if(AG.dom.getClass(oObject) == "popup")
					{
						return 2;
					}
					else
					{
						return 1;
					}
				}
				else if(oObject.id == "box-hover-entry")
				{
					return 3;
				}
				else if(uiMaxParent > 0)
				{
					return _checkBox(oObject.parentNode, uiMaxParent-1, oDiv);
				}

				return 0;
			}

			function _checkList(oObject, uiMaxParent)
			{
				if(oObject.id == "ag-nav" || oObject.id == "ag-nav-sub" || oObject.id == "ag-list" || oObject.id == "box-float")
				{
					if(AG.dom.getClass(oObject) == "popup")
					{
						return 2;
					}
					else
					{
						return 1;
					}
				}
				else if(oObject.id == "box-hover-entry")
				{
					return 3;
				}
				else if(uiMaxParent > 0)
				{
					return _checkList(oObject.parentNode, uiMaxParent-1);
				}

				return 0;
			}
		},
		boxDetails: function()
		{
			var aDivs = $('box-car-details').childNodes;

			for(var i=0;i<aDivs.length;i++)
			{
				if(aDivs[i].childNodes.length > 3)
				{
					_init(aDivs[i]);
				}
			}

			function _init(_this)
			{
				var oA = _this.getElementsByTagName("a");

				// das Fenster soll nur 1x geöffnet werden!
				oA[0].onclick = function() { return false; };

				// registriere alle handler
				_this.onmouseover = function() { _this.style.backgroundColor = "#EEEEEE"; };
				_this.onmouseout = function() { _this.style.backgroundColor = "#FFFFFF"; };
				_this.onclick = function() { AG.misc.openPopup(oA[0].href) };
			}
		},
		tireDetails: function()
		{
			var aDivs = $('ag-tire').childNodes;

			for(var i=0;i<aDivs.length;i++)
			{
				if(aDivs[i].childNodes.length > 3)
				{
					_init(aDivs[i]);
				}
			}

			function _init(_this)
			{
				var oA = _this.getElementsByTagName("a");

				// das Fenster soll nur 1x geöffnet werden!
				oA[0].onclick = function() { return false; };

				// registriere alle handler
				_this.onmouseover = function() { _this.style.backgroundColor = "#EEEEEE"; };
				_this.onmouseout = function() { _this.style.backgroundColor = "#FFFFFF"; };
				_this.onclick = function() { AG.misc.openPopup(oA[0].href); };
			}
		},
		textCutter: function(sID)
		{
			var aDom = $('text-'+sID).getElementsByTagName('div');

			aDom[aDom.length-1].onclick = function()
			{
				AG.misc.showCutterText(sID);
			};
		},
		gallery: function(aFields)
		{
			for(var i=0;i<aFields.length;i++)
			{
				_init(aFields[i]);
			}

			function _init(_this)
			{
				var oA = _this.getElementsByTagName("a");
				if(oA.length > 0)
				{
					// das Fenster soll nur 1x geöffnet werden!
					oA[0].onclick = function() { return false; };

					// registriere alle handler
					_this.style.cursor = "pointer";
					_this.onclick = function() { AG.misc.relocate(oA[0].href); };
				}
			}
		},
		chart: function()
		{
			var aFields = ["gebrauchtwagen", "neuwagen", "vorfuehrwagen", "jahreswagen", "tageszulassung"];
			var aTabbar = $("id-chart-tabbar").getElementsByTagName("div");

			for(var i=0;i<aTabbar.length;i++)
			{
				_registerOnClick(aTabbar[i], aTabbar, aFields, i);
			}

			function _registerOnClick(_this, aTabBar, aFields, uiIndex)
			{
				_this.onclick = function() { _onclick(aTabbar, aFields, uiIndex); };
			}

			function _onclick(aTabBar, aFields, uiIndex)
			{
				for(var i=0;i<aTabbar.length;i++)
				{
					$("id-chart-price-"+aFields[i]).style.display = (uiIndex == i) ? "block" : "none";
					AG.dom.setClass(aTabBar[i], (uiIndex == i) ? "ag-active" : "ag-inactive");
				}
			}
		},
		comment: function(aStandard)
		{
			var aFields = ["ag-comment-name", "ag-comment-email", "ag-comment-message", "ag-comment-captcha"];

			for(var i=0;i<aFields.length;i++)
			{
				var oField = $(aFields[i]);
				var sStandard = aStandard[i];

				if(AG.dom.getClass(oField) != "ag-input-error")
				{
					if(oField.value == "" || oField.value == sStandard)
					{
						oField.value = sStandard;
						AG.dom.setClass(oField, "ag-input-off");
					}
					else
					{
						AG.dom.setClass(oField, "ag-input-on");
					}
				}

				function _onfocus(_this, sStandard)
				{
					_this.onfocus = function()
					{
						if(_this.value == sStandard)
						{
							_this.value = "";
						}

						AG.dom.setClass(_this, "ag-input-on");
					};
				}

				function _onblur(_this, sStandard)
				{
					_this.onblur = function()
					{
						if(_this.value == "")
						{
							_this.value = sStandard;
							AG.dom.setClass(_this, "ag-input-off");
						}
					};
				}

				_onfocus(oField, sStandard);
				_onblur(oField, sStandard);
			}
		},
		tables: function()
		{
			var aTRs = document.getElementsByTagName("tr");

			for(var i=0;i<aTRs.length;i++)
			{
				if(AG.dom.getClass(aTRs[i]) != "headline" && (aTRs[i].parentNode.id == "ag-similar-entries" || aTRs[i].parentNode.parentNode.id == "ag-similar-entries"))
				{
					_init(aTRs[i]);
				}
			}

			function _init(_this)
			{
				var oOldClass = AG.dom.getClass(_this);
					oOldClass = is_null(oOldClass) ? "" : oOldClass;

				var oA = _this.getElementsByTagName("a")[0];

				_this.onmouseover = function() { AG.dom.setClass(_this, "over "+oOldClass); };
				_this.onmouseout = function() { AG.dom.setClass(_this, "out "+oOldClass); };
				_this.onclick = function() { AG.misc.relocate(oA.href); };
			}
		},
		kfzcalculator: function()
		{
			var aLI = $('kfz-calculator').getElementsByTagName("li");

			function _add_handler_kfzcalculator(_li)
			{
				_li.getElementsByTagName("span")[0].style.display = "none";

				_li.getElementsByTagName("div")[0].onclick = function()
				{
					_li.getElementsByTagName("span")[0].style.display = _li.getElementsByTagName("span")[0].style.display == "none" ? "block" : "none";
				}
			}

			for(var i=0;i<aLI.length;i++)
			{
				_add_handler_kfzcalculator(aLI[i]);
			}
		},
		rentacar: function()
		{
			AG.onReady(function()
			{
				Calendar.setup(
				{
					inputField     :    "id-start-date-input",
					displayArea    :    "id-start-date-span",
					button         :    "id-start-date-img",
					showsTime      :    false,
					singleClick    :    true,
					firstDay       :    1,
					step           :    1
				});

				Calendar.setup(
				{
					inputField     :    "id-end-date-input",
					displayArea    :    "id-end-date-span",
					button         :    "id-end-date-img",
					showsTime      :    false,
					singleClick    :    true,
					firstDay       :    1,
					step           :    1
				});
			});
		}
	},
	rentacar:
	{
		_uiCity: 0,
		init: function(uiCity)
		{
			AG.rentacar._uiCity = uiCity;

			AG.onReady(function()
			{
				AG.rentacar.getCities();
			});
		},
		getCities: function()
		{
			AG.misc.disable([$('id-city'), $('id-location')]);
			var aData = new Array();
			var aParam = new Object();
				aParam["function"] = "cities";
				aParam["country_id"] = $('id-country').options[$('id-country').selectedIndex].value;

			for(fPropery in aParam)
			{
				aData[aData.length] = fPropery+"="+encodeURI(aParam[fPropery]);
			}

			new Ajax.Request(PATH_HTTP+"form/ajax-mietwagen.html",
			{
				method: "post",
				parameters: aData.join("&"),
				onSuccess: function(oTransport)
				{
					var oJSON = decodeURI(oTransport.responseText).evalJSON();

					AG.rentacar._fillSelectMenu($('id-city'), oJSON, "cityID", "cityName", "Anmietort", AG.rentacar._uiCity);
					AG.rentacar._fillSelectMenu($('id-location'), [], null, null, "Anmietstation", 0);
					AG.misc.enable([$('id-city')]);

					if(AG.rentacar._uiCity > 0)
					{
						AG.rentacar._uiCity = 0;
						AG.rentacar.getLocations();
					}
					else if($('id-city').childNodes.length == 2)
					{
						$('id-city').selectedIndex = 1;
						AG.rentacar.getLocations();
					}
				}
			});
		},
		getLocations: function()
		{
			var aData = new Array();
			var aParam = new Object();
				aParam["function"] = "location";
				aParam["city_id"] = $('id-city').options[$('id-city').selectedIndex].value;

			for(fPropery in aParam)
			{
				aData[aData.length] = fPropery+"="+encodeURI(aParam[fPropery]);
			}

			new Ajax.Request(PATH_HTTP+"form/ajax-mietwagen.html",
			{
				method: "post",
				parameters: aData.join("&"),
				onSuccess: function(oTransport)
				{
					var oJSON = oTransport.responseText.evalJSON();

					AG.rentacar._fillSelectMenu($('id-location'), oJSON, "locationID", "locationName", "Anmietstation");
					AG.misc.enable([$('id-location')]);

					if($('id-location').childNodes.length == 2)
					{
						$('id-location').selectedIndex = 1;
					}
				}
			});
		},
		_fillSelectMenu: function(oMenu, aValues, sValue, sContent, sType, uiSelected)
		{
			// clear selectionmenu
			while(oMenu.hasChildNodes())
			{
				oMenu.removeChild(oMenu.childNodes[0]);
			}

			AG.dom.addOption(oMenu, "0", "Bitte "+sType+" ausw&auml;hlen");

			for(fPropery in aValues)
			{
				AG.dom.addOption(oMenu, aValues[fPropery][sValue], aValues[fPropery][sContent], (uiSelected == aValues[fPropery][sValue]));
			}
		}
	}
};

AG.onReady(function()
{
	AG.init.autogenau();
	AG.init.tables();
});
