/*
	Beispielaufruf:

		var mdxMKey = '1-12626-389844';

		var mdxTopOfferSizes = {
			bg:{     width:798, height:135, src:'/userdata/11111/layout/topscroller/bg-sample.gif' },
			button:{ width:45,  height:63,  src:'/userdata/11111/layout/topscroller/buttons-sample.gif' },
			frame:{  width:137, height:123, src:'/userdata/11111/layout/topscroller/frame-sample.png' },
			img:{    width:121, height:75, x:8, y:8 }
		};
		var mdxTopOfferTitleStyle = 'padding-top:88px; padding-left:10px; text-align:left;';
		var mdxTopOfferPages = 5;

		var mdxTopOfferVehicleFilter = 'sparse_mode=1';
		var mdxTopOfferVehicleLink = 'http://module.modix.de/go.to/modix/3/fahrzeuge.html?chiffre=[chiffre]&referrer=topscroller_ajax';
		var mdxTopOfferVehicleTitle = "'<b>' + mdxStripText(vehicle['manufacturer']['#'] + ' ' + (vehicle['ctype']['#'] == '1' ? vehicle['model']['@value'] : ''), 14, '...') + '</b><br>' + (vehicle['price']['#'] == '0' ? 'Preis auf Anfrage' : mdxFormatNumber(vehicle['price']['#']) + ' &euro;')";

		mdxTopOfferInit();

	Alternativer VehicleLink für Portalseiten:

		var mdxTopOfferVehicleLink = [
			{ dkey:'1-4698-71122', link:'http://www.domain1.de/go.to/modix/3/fahrzeuge.html?chiffre=[chiffre]' },
			{ dkey:'1-4698-71650', link:'http://www.domain2.de/go.to/modix/3/fahrzeuge.html?chiffre=[chiffre]' },
			{ dkey:'1-4698-91917', link:'http://www.domain3.de/go.to/modix/3/fahrzeuge.html?chiffre=[chiffre]' }
		];
*/

function mdxTopOfferInit()
{
	if (typeof mdxTopOfferSizes != 'object') { document.getElementById('topOfferContainer').innerHTML = 'Die Konfiguration ist unvollständig.<br>mdxTopOfferSizes nicht gesetzt.'; return; }

	if (typeof mdxTopOfferSizes.bg != 'object') { document.getElementById('topOfferContainer').innerHTML = 'Die Konfiguration ist unvollständig.<br>mdxTopOfferSizes.bg nicht gesetzt.'; return; }
	if (typeof mdxTopOfferSizes.bg.width != 'number') { document.getElementById('topOfferContainer').innerHTML = 'Die Konfiguration ist unvollständig.<br>mdxTopOfferSizes.bg.width nicht gesetzt.'; return; }
	if (typeof mdxTopOfferSizes.bg.height != 'number') { document.getElementById('topOfferContainer').innerHTML = 'Die Konfiguration ist unvollständig.<br>mdxTopOfferSizes.bg.height nicht gesetzt.'; return; }
	if (typeof mdxTopOfferSizes.bg.src != 'string') { document.getElementById('topOfferContainer').innerHTML = 'Die Konfiguration ist unvollständig.<br>mdxTopOfferSizes.bg.src nicht gesetzt.'; return; }

	if (typeof mdxTopOfferSizes.button != 'object') { document.getElementById('topOfferContainer').innerHTML = 'Die Konfiguration ist unvollständig.<br>mdxTopOfferSizes.button nicht gesetzt.'; return; }
	if (typeof mdxTopOfferSizes.button.width != 'number') { document.getElementById('topOfferContainer').innerHTML = 'Die Konfiguration ist unvollständig.<br>mdxTopOfferSizes.button.width nicht gesetzt.'; return; }
	if (typeof mdxTopOfferSizes.button.height != 'number') { document.getElementById('topOfferContainer').innerHTML = 'Die Konfiguration ist unvollständig.<br>mdxTopOfferSizes.button.height nicht gesetzt.'; return; }
	if (typeof mdxTopOfferSizes.button.src != 'string') { document.getElementById('topOfferContainer').innerHTML = 'Die Konfiguration ist unvollständig.<br>mdxTopOfferSizes.button.src nicht gesetzt.'; return; }

	if (typeof mdxTopOfferSizes.frame != 'object') { document.getElementById('topOfferContainer').innerHTML = 'Die Konfiguration ist unvollständig.<br>mdxTopOfferSizes.frame nicht gesetzt.'; return; }
	if (typeof mdxTopOfferSizes.frame.width != 'number') { document.getElementById('topOfferContainer').innerHTML = 'Die Konfiguration ist unvollständig.<br>mdxTopOfferSizes.frame.width nicht gesetzt.'; return; }
	if (typeof mdxTopOfferSizes.frame.height != 'number') { document.getElementById('topOfferContainer').innerHTML = 'Die Konfiguration ist unvollständig.<br>mdxTopOfferSizes.frame.height nicht gesetzt.'; return; }
	if (typeof mdxTopOfferSizes.frame.src != 'string') { document.getElementById('topOfferContainer').innerHTML = 'Die Konfiguration ist unvollständig.<br>mdxTopOfferSizes.frame.src nicht gesetzt.'; return; }

	if (typeof mdxTopOfferSizes.img != 'object') { document.getElementById('topOfferContainer').innerHTML = 'Die Konfiguration ist unvollständig.<br>mdxTopOfferSizes.img nicht gesetzt.'; return; }
	if (typeof mdxTopOfferSizes.img.width != 'number') { document.getElementById('topOfferContainer').innerHTML = 'Die Konfiguration ist unvollständig.<br>mdxTopOfferSizes.img.width nicht gesetzt.'; return; }
	if (typeof mdxTopOfferSizes.img.height != 'number') { document.getElementById('topOfferContainer').innerHTML = 'Die Konfiguration ist unvollständig.<br>mdxTopOfferSizes.img.height nicht gesetzt.'; return; }
	if (typeof mdxTopOfferSizes.img.x != 'number') { document.getElementById('topOfferContainer').innerHTML = 'Die Konfiguration ist unvollständig.<br>mdxTopOfferSizes.img.x nicht gesetzt.'; return; }
	if (typeof mdxTopOfferSizes.img.y != 'number') { document.getElementById('topOfferContainer').innerHTML = 'Die Konfiguration ist unvollständig.<br>mdxTopOfferSizes.img.y nicht gesetzt.'; return; }

	if (typeof mdxTopOfferTitleStyle != 'string') { document.getElementById('topOfferContainer').innerHTML = 'Die Konfiguration ist unvollständig.<br>mdxTopOfferTitleStyle nicht gesetzt.'; return; }
	if (typeof mdxTopOfferVehicleLink != 'string' && (typeof mdxTopOfferVehicleLink != 'object' || !mdxTopOfferVehicleLink.length)) { document.getElementById('topOfferContainer').innerHTML = 'Die Konfiguration ist unvollständig.<br>mdxTopOfferVehicleLink nicht gesetzt.'; return; }
	if (typeof mdxTopOfferPages != 'number') { mdxTopOfferPages = 5; }

	if (typeof mdxTopOfferVehicleFilter == 'undefined') { mdxTopOfferVehicleFilter = ''; }

	var mdxTopOfferVehiclesPerPage = Math.floor((mdxTopOfferSizes.bg.width - (2 * mdxTopOfferSizes.button.width)) / mdxTopOfferSizes.frame.width);
	var mdxTopOfferFrameSpace = Math.floor(((mdxTopOfferSizes.bg.width - (2 * mdxTopOfferSizes.button.width)) - (mdxTopOfferVehiclesPerPage * mdxTopOfferSizes.frame.width)) / mdxTopOfferVehiclesPerPage);
	var mdxTopOfferPageWidth = (mdxTopOfferSizes.frame.width + mdxTopOfferFrameSpace) * mdxTopOfferVehiclesPerPage;
	var mdxTopOfferCurrentPos = 0.0;
	var mdxTopOfferFinalPos = 0.0;
	var mdxTopOfferScrollInterval = null;

	document.getElementById('topOfferTable').style.width = + mdxTopOfferSizes.bg.width + 'px';
	document.getElementById('topOfferTable').style.height = + mdxTopOfferSizes.bg.height + 'px';

	document.getElementById('topOfferButtonLeft').style.width = (mdxTopOfferSizes.bg.width - mdxTopOfferSizes.button.width - mdxTopOfferPageWidth) + 'px';
	document.getElementById('topOfferButtonLeftElem').style.width = mdxTopOfferSizes.button.width + 'px';
	document.getElementById('topOfferButtonLeftElem').style.height = mdxTopOfferSizes.button.height + 'px';

	document.getElementById('topOfferButtonRight').style.width = mdxTopOfferSizes.button.width + 'px';
	document.getElementById('topOfferButtonRightElem').style.width = mdxTopOfferSizes.button.width + 'px';
	document.getElementById('topOfferButtonRightElem').style.height = mdxTopOfferSizes.button.height + 'px';

	document.getElementById('topOfferButtonLeft').style.background = 'url("' + mdxTopOfferSizes.bg.src + '") no-repeat left 0';
	document.getElementById('topOfferContainer').style.background = 'url("' + mdxTopOfferSizes.bg.src + '") no-repeat center 0';
	document.getElementById('topOfferButtonRight').style.background = 'url("' + mdxTopOfferSizes.bg.src + '") no-repeat right 0';

	document.getElementById('topOfferTable').style.visibility = 'visible';

	httpRequest('/soap/kfz/?gw=search&limit=' + (mdxTopOfferVehiclesPerPage * mdxTopOfferPages) + '&' + (mdxTopOfferVehicleFilter != '' ? mdxTopOfferVehicleFilter : 'sparse_mode=1') + '&has_pic=1&mdx_v1=' + mdxTopOfferSizes.img.width + '&random=1&allow_no_price=1&mkey=' + mdxMKey + '&xsl=/userdata/8623/layout/xhr/xml2json.xsl&preventCache=' + (new Date()).getTime(), function (mdxJSON)
	{
		mdxJSON = mdxJSON['market'];

		if (mdxJSON['found']['#'] == '0')
		{
			document.getElementById('topOfferContainer').innerHTML = 'Zur Zeit stehen keine Fahrzeugangebote zur Verfügung.';
			return;
		}

		var vehicleList = new Array();
		var vehicle, file;
		for (var i = 0; i < jsonArrayLength(mdxJSON['vehicle']); i++)
		{
			vehicle = jsonArray(mdxJSON['vehicle'], i);

			for (var j = 0; j < jsonArrayLength(jsonArray(vehicle['imagelist']['img'], 0)['file']); j++)
			{
				file = jsonArray(jsonArray(vehicle['imagelist']['img'], 0)['file'], j)
				if (file['@size'] == mdxTopOfferSizes.img.width)
				{
					vehicleList.push({
						chiffre:vehicle['@id'],
						title:eval(mdxTopOfferVehicleTitle),
						img:vehicle['imagelist']['@url'] + file['@folder'] + '/' + file['#'],
						dkey:vehicle['client_id']['#']
					});
					break;
				}
			}
		}

		if (vehicleList.length < (mdxTopOfferVehiclesPerPage * mdxTopOfferPages))
		{
			var vehicleListCount = vehicleList.length;
			for (var i = vehicleListCount; i < (mdxTopOfferVehiclesPerPage * mdxTopOfferPages); i++)
			{
				vehicleList.push(vehicleList[i % vehicleListCount]);
			}
		}

		for (var i = 0; i < mdxTopOfferVehiclesPerPage; i++)
		{
			vehicleList.push(vehicleList[i]);
		}

		var frameBackgroundCode = '';
		if (mdxTopOfferSizes.frame.src)
		{
			if (navigator.platform == "Win32" && navigator.appName == "Microsoft Internet Explorer" && typeof document.body.style.filter == "string" && !window.XMLHttpRequest)
			{	/* IE6 */
				frameBackgroundCode = ' filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + mdxTopOfferSizes.frame.src + '\', sizingMethod=\'crop\');';
			}
			else
			{	/* all other browsers */
				frameBackgroundCode = ' background:url(\'' + mdxTopOfferSizes.frame.src + '\') no-repeat 0 0;';
			}
		}

		out = '';
		for (var i = 0; i < vehicleList.length; i++)
		{
			out += '<div style="float:left; width:' + (mdxTopOfferSizes.frame.width + mdxTopOfferFrameSpace) + 'px; height:' + mdxTopOfferSizes.frame.height + 'px; background:url(\'' + vehicleList[i].img + '\') no-repeat ' + (Math.floor(mdxTopOfferFrameSpace / 2) + mdxTopOfferSizes.img.x) + 'px ' + mdxTopOfferSizes.img.y + 'px;">';
			if (typeof mdxTopOfferVehicleLink == 'string')
			{
				out += '   <a href="' + mdxTopOfferVehicleLink.replace('[chiffre]', vehicleList[i].chiffre) + '" style="display:block; cursor:pointer; outline:none; margin-left:' + Math.floor(mdxTopOfferFrameSpace / 2) + 'px; width:' + mdxTopOfferSizes.frame.width + 'px; height:' + mdxTopOfferSizes.frame.height + 'px;' + frameBackgroundCode + '" onmouseover="this.style.backgroundPosition = \'0 -' + mdxTopOfferSizes.frame.height + 'px\';" onmouseout="this.style.backgroundPosition = \'0 0\';">';
			}
			else if (typeof mdxTopOfferVehicleLink == 'object')
			{
				for (var j = 0; j < mdxTopOfferVehicleLink.length; j++)
				{
					if (mdxTopOfferVehicleLink[j].dkey == vehicleList[i].dkey)
					{
						out += '   <a href="' + mdxTopOfferVehicleLink[j].link.replace('[chiffre]', vehicleList[i].chiffre) + '" style="display:block; cursor:pointer; outline:none; margin-left:' + Math.floor(mdxTopOfferFrameSpace / 2) + 'px; width:' + mdxTopOfferSizes.frame.width + 'px; height:' + mdxTopOfferSizes.frame.height + 'px;' + frameBackgroundCode + '" onmouseover="this.style.backgroundPosition = \'0 -' + mdxTopOfferSizes.frame.height + 'px\';" onmouseout="this.style.backgroundPosition = \'0 0\';">';
						break;
					}
				}
				if (j == mdxTopOfferVehicleLink.length)
				{
					out += '   <a style="display:block; cursor:default; outline:none; margin-left:' + Math.floor(mdxTopOfferFrameSpace / 2) + 'px; width:' + mdxTopOfferSizes.frame.width + 'px; height:' + mdxTopOfferSizes.frame.height + 'px;' + frameBackgroundCode + '" onmouseover="this.style.backgroundPosition = \'0 -' + mdxTopOfferSizes.frame.height + 'px\';" onmouseout="this.style.backgroundPosition = \'0 0\';">';
				}
			}
			out += '      <div style="' + mdxTopOfferTitleStyle + '">' + vehicleList[i].title + '</div>';
			out += '   </a>'
			out += '</div>'
		}
		document.getElementById('topOfferContainer').innerHTML = '<div style="width:' + mdxTopOfferPageWidth + 'px; position:relative; overflow:hidden;"><div id="topOfferContent" style="position:relative; width:' + (mdxTopOfferVehiclesPerPage * (mdxTopOfferPages + 1) * (mdxTopOfferSizes.frame.width + mdxTopOfferFrameSpace)) + 'px;">' + out + '<div style="clear:both;"></div></div></div>';

		document.getElementById('topOfferButtonLeftElem').style.background = 'url("' + mdxTopOfferSizes.button.src + '") no-repeat 0 0';
		document.getElementById('topOfferButtonLeftElem').style.cursor = 'pointer';
		addEvent(document.getElementById('topOfferButtonLeftElem'), 'mouseover', function () { this.style.backgroundPosition = '0 -' + mdxTopOfferSizes.button.height + 'px'; });
		addEvent(document.getElementById('topOfferButtonLeftElem'), 'mouseout', function () { this.style.backgroundPosition = '0 0'; });
		addEvent(document.getElementById('topOfferButtonLeftElem'), 'click', function () { mdxTopOfferFinalPos -= mdxTopOfferPageWidth; mdxTopOfferAutoScroller(); });

		document.getElementById('topOfferButtonRightElem').style.background = 'url("' + mdxTopOfferSizes.button.src + '") no-repeat -' + mdxTopOfferSizes.button.width + 'px 0';
		document.getElementById('topOfferButtonRightElem').style.cursor = 'pointer';
		addEvent(document.getElementById('topOfferButtonRightElem'), 'mouseover', function () { this.style.backgroundPosition = '-' + mdxTopOfferSizes.button.width + 'px -' + mdxTopOfferSizes.button.height + 'px'; });
		addEvent(document.getElementById('topOfferButtonRightElem'), 'mouseout', function () { this.style.backgroundPosition = '-' + mdxTopOfferSizes.button.width + 'px 0'; });
		addEvent(document.getElementById('topOfferButtonRightElem'), 'click', function () { mdxTopOfferFinalPos += mdxTopOfferPageWidth; mdxTopOfferAutoScroller(); });

		/* Locale functions */

		function addEvent(obj, type, fn)
		{
			if (obj.attachEvent)
			{
				obj['e' + type + fn] = fn;
				obj[type + fn] = function() { obj['e' + type + fn](window.event); }
				obj.attachEvent('on' + type, obj[type + fn]);
			}
			else
			{
				obj.addEventListener(type, fn, false);
			}
		}

		function mdxStripText(text, len, attach)
		{
			attach = attach || '';
			var retText = text.substr(0, len);
			return retText + (text != retText ? attach : '');
		}

		function mdxFormatNumber(num)
		{
			if (typeof num == 'string') { num = parseFloat(num); }
			
			if (num < 0)
			{
				var sign = '-';
				num = -num;
			}
			else
			{
				var sign = '';
			}

			num = num.toString();

			var decPoint = num.indexOf('.');
			if (decPoint != -1)
			{
				var intPlaces = num.substr(0, decPoint);
				var decPlaces = num.substr(decPoint + 1);
			}
			else
			{
				var intPlaces = num;
				var decPlaces = '';
			}

			if (intPlaces.length > 3)
			{		
				var intPlacesOut = intPlaces.substr(intPlaces.length - 3);
			}
			else
			{
				var intPlacesOut = intPlaces;
			}
			for (var i = intPlaces.length - 6; i >= -2; i -= 3)
			{
				if (i >= 0)
				{
					intPlacesOut = intPlaces.substr(i, 3) + '.' + intPlacesOut;
				}
				else
				{
					intPlacesOut = intPlaces.substr(0, 3 + i) + '.' + intPlacesOut;
					break;
				}
			}
			return sign + intPlacesOut + (decPoint != -1 ? ',' + decPlaces : '');
		}
	},
	function (e)
	{
		document.getElementById('topOfferContainer').innerHTML = 'Beim Abrufen des Fahrzeugangebots ist ein Fehler auftreten.<br>(' + e.sys_msg + ')';
	});

	function mdxTopOfferAutoScroller()
	{
		if (mdxTopOfferScrollInterval == null) { mdxTopOfferScrollInterval = setInterval(mdxTopOfferAutoScroller, 30); }

		var i = (mdxTopOfferFinalPos - mdxTopOfferCurrentPos) / (mdxTopOfferVehiclesPerPage * 2);
		if (
			(mdxTopOfferCurrentPos < mdxTopOfferFinalPos && i < 0.1) ||
			(mdxTopOfferCurrentPos > mdxTopOfferFinalPos && i > -0.1)
		)
		{
			mdxTopOfferCurrentPos = mdxTopOfferFinalPos;
			clearInterval(mdxTopOfferScrollInterval);
			mdxTopOfferScrollInterval = null;
		}
		else
		{
			mdxTopOfferCurrentPos += i;
		}

		var newPos = -((mdxTopOfferCurrentPos + (mdxTopOfferPageWidth * mdxTopOfferPages)) % (mdxTopOfferPageWidth * mdxTopOfferPages));
		if (newPos > 0)
		{
			newPos -= (mdxTopOfferPageWidth * mdxTopOfferPages);
			mdxTopOfferCurrentPos += (mdxTopOfferPageWidth * mdxTopOfferPages);
			mdxTopOfferFinalPos += (mdxTopOfferPageWidth * mdxTopOfferPages);
		}
		document.getElementById('topOfferContent').style.left = Math.round(newPos) + 'px';
	}
}
