/**
 * Funktionen für die Artikel-Mini-Browser
 */

function mini_browser()
{
	var app = this;
	app.functions = new ly_functions();

	app.initBrowsers = function()
	{
		var elems = document.getElementsByTagName('DIV');
		for (var i = 0; i < elems.length; i++)
		{
			if (app.functions.hasClass('browser', elems[i].className))
			{
				if (app.functions.hasClass('designer', elems[i].className))
					new article_slider().init(elems[i], 'designer');
				else if (app.functions.hasClass('collection', elems[i].className))
					new article_slider().init(elems[i], 'collection');
			}
		}
	}
}

function article_slider()
{
	var slider = this;
	slider.container = null;
	slider.count = 4;
	slider.offset = 0;
	slider.imgsize = 66;
	slider.data = null;
	slider.request = null;
	slider.options = null;
	slider.blocked = false;
	slider.imgleft = '/images/layout/browser_button_previous.gif';
	slider.imgleft_inactive = '/images/layout/browser_button_previous_in.gif';
	slider.imgright = '/images/layout/browser_button_next.gif';
	slider.imgright_inactive = '/images/layout/browser_button_next_in.gif';
	slider.type = 'artist';
	slider.rpcbase = {	'designer' : '/cgi-bin/get_designer_json.php?designer=%s',
								'collection' : '/cgi-bin/get_collection_json.php?collection=%s' };

	/**
	 * Initialisiert einen neuen Slider
	 * Dabei werden ein paar Standardwerte (Offset) gesetzt und der Inhalt initial gefüllt
	 */
	slider.init = function(container, type)
	{
		if (container) {
			slider.container = container;
			var elems = container.getElementsByTagName('strong');
			for (var i = 0; i < elems.length; i++) {
				if (elems[i].className == 'options') slider.options = elems[i].firstChild.nodeValue;
			}
		}
		slider.type = type;
		slider.loadData();
	}

	/**
	 * Setzt die Position des Slider (neu)
	 * Dabei wird automatisch der Inhalt neu geladen / erstellt
	 */
	slider.setOffset = function(newOffset)
	{
		slider.offset = newOffset;
		if (slider.offset >= (slider.data.length -slider.count) *slider.imgsize) {
			slider.offset = (slider.data.length -slider.count) *slider.imgsize;
		}
		if (slider.offset <= 0) {
			slider.offset = 0;
		}
		slider._updateDom();
	}

	slider._checkRightImage = function() {
		if (slider.offset >= (slider.data.length -slider.count) *slider.imgsize) {
			slider._setRightImage(slider.imgright_inactive);
		} else {
			slider._setRightImage(slider.imgright);
		}
	}

	slider._checkLeftImage = function() {
		if (slider.offset <= 0) {
			slider._setLeftImage(slider.imgleft_inactive);
		} else {
			slider._setLeftImage(slider.imgleft);
		}
	}

	slider._setLeftImage = function(imgSrc) {
		var elems = slider.container.getElementsByTagName('img');
		for (var i = 0; i < elems.length; i++) {
			if (elems[i].className == 'leftarrow') {
				elems[i].setAttribute('src', imgSrc);
			}
		}
	}

	slider._setRightImage = function(imgSrc) {
		var elems = slider.container.getElementsByTagName('img');
		for (var i = 0; i < elems.length; i++) {
			if (elems[i].className == 'rightarrow') {
				elems[i].setAttribute('src', imgSrc);
			}
		}
	}

	slider.getOffset = function()
	{
		return(slider.offset);
	}

	slider.clickRight = function()
	{
		if (slider.blocked) return;
		slider.blocked = true;
		slider.scroll(slider.getOffset(), slider.getOffset() +slider.imgsize, 1, 2.5, 50, function() {
			slider._checkRightImage();
			slider._checkLeftImage();
			slider.blocked = false;
		} );
	}

	slider.clickLeft = function()
	{
		if (slider.blocked) return;
		slider.blocked = true;
		slider.scroll(slider.getOffset(), slider.getOffset() -slider.imgsize, 1, 2.5, 50, function() {
			slider._checkLeftImage();
			slider._checkRightImage();
			slider.blocked = false;
		} );
	}

	slider.loadData = function()
	{
		var url = slider.rpcbase[slider.type];
		url = url.replace(/\%s/, slider.options);

		var elem = document.getElementById('artikelnummer');
		if (elem) {
			url += '&artnr=' + String(elem.firstChild.nodeValue);
		}

		slider._getRequestAsync(url, function() {
			if (slider.request.readyState == 4) {
				slider.data = eval(slider.request.responseText);
				var dom = slider._createDom();
				slider.container.parentNode.replaceChild(dom, slider.container);
				slider.container = dom;
				//slider.setOffset(0);
			}
		} );
	}

	slider._updateDom = function()
	{
		var ul = slider.container.getElementsByTagName('UL')[0];
		ul.style['left'] = parseInt(-slider.offset) + 'px';
	}

	slider._createDom = function()
	{
		var dummy, dummy2, dummy3, dummy4, dummy5, frame;
		var div = document.createElement('div');

		// Wurden Artikel gefunden?
		if (slider.data && slider.data.length > 0) {
			// Überschrift
			dummy = document.createElement('h3');
			if (slider.type == 'designer') {
				dummy.appendChild(document.createTextNode('Schmuckstücke von ' + slider.options));
			} else {
				// dummy.appendChild(document.createTextNode('Weiterer Schmuck aus der Kollektion ' + slider.options));
				dummy.innerHTML = 'Weiterer Schmuck aus der Kollektion &bdquo;' + slider.options + '&ldquo;';
			}
			div.appendChild(dummy);

			dummy = document.createElement('div');
			dummy.className = 'browser';

			dummy2 = document.createElement('div');
			dummy2.className = 'top';
			dummy.appendChild(dummy2);

			dummy2 = document.createElement('a');
			dummy2.setAttribute('href', 'javascript:void(0)');
			dummy2.className = 'button';
			dummy2.onclick = function() { slider.clickLeft(); }
			dummy3 = document.createElement('img');
			dummy3.className = 'leftarrow';
			dummy3.setAttribute('src', slider.imgleft_inactive);
			dummy3.setAttribute('width', '28');
			dummy3.setAttribute('height', '60');
			dummy3.setAttribute('alt', 'Vorheriges Produkt');
			dummy3.setAttribute('title', 'Vorheriges Produkt');
			dummy2.appendChild(dummy3);
			dummy.appendChild(dummy2);

			// Images einfügen
			if (slider.data && slider.data.length > 0) {
				frame = document.createElement('div');
				frame.className = 'frame';

				dummy2 = document.createElement('ul');
				for (var i = 0; i < slider.data.length; i++) {
					dummy3 = document.createElement('li');
					dummy4 = document.createElement('a');
					dummy4.setAttribute('href', '/index.php?AID=' + slider.data[i].id + '&PID=a');
					dummy5 = document.createElement('img');
					dummy5.setAttribute('src', '/images/articles/' + slider.data[i].bildklein);
					dummy5.setAttribute('width', '58');
					dummy5.setAttribute('height', '58');
					dummy4.appendChild(dummy5);
					dummy3.appendChild(dummy4);
					dummy2.appendChild(dummy3);
				}
				frame.appendChild(dummy2);
				dummy.appendChild(frame);
			}

			dummy2 = document.createElement('a');
			dummy2.setAttribute('href', 'javascript:void(0)');
			dummy2.className = 'button';
			dummy2.onclick = function() { slider.clickRight(); }
			dummy3 = document.createElement('img');
			dummy3.className = 'rightarrow';
			if (slider.data && slider.data.length > slider.count) {
				dummy3.setAttribute('src', slider.imgright);
			} else {
				dummy3.setAttribute('src', slider.imgright_inactive);
			}
			dummy3.setAttribute('width', '28');
			dummy3.setAttribute('height', '60');
			dummy3.setAttribute('alt', 'Nächstes Produkt');
			dummy3.setAttribute('title', 'Nächstes Produkt');
			dummy2.appendChild(dummy3);
			dummy.appendChild(dummy2);

			dummy2 = document.createElement('div');
			dummy2.className = 'bottom';
			dummy.appendChild(dummy2);

			div.appendChild(dummy);
		}

		return(div);
	}

	/**
	 * Führt einen asynchronen Get-Request durch und führt anschließend optional eine Callback-Funktion aus
	 */
	slider._getRequestAsync = function(url, handler)
	{
		if (slider.request != null)
			if (slider.request.readyState != 4 && slider.request.readyState != 0) slider.request.abort();
		slider.request = slider._newRequest();

		if (slider.request != null)
		{
			slider.request.open('GET', url, true);
			slider.request.setRequestHeader('Content-Type', 'text/html; charset=ISO-8859-1');
			slider.request.onreadystatechange = handler;
			slider.request.send(null);
		}
		return(false);
	}

	/**
	 * Erzeugt ein neues XMLHttpRequest-Object
	 */
	slider._newRequest = function()
	{
		if (window.XMLHttpRequest)
			return(new XMLHttpRequest());
		else if (window.ActiveXObject)
			return(new ActiveXObject("Microsoft.XMLHTTP"));
		else
			return(null);
	}

	slider.scroll = function(start, stop, step, accel, delay, callback)
	{
		start = (typeof start == 'undefined' || start < 0)? start = 0 : parseInt(start);
		stop = (typeof stop == 'undefined' || stop < 0)? stop = 0 : parseInt(stop);
		step = (typeof step == 'undefined')? step = 10 : step = parseInt(step);
		delay = (typeof delay == 'undefined' || delay < 0)? delay = 50 : parseInt(delay);
		accel = (typeof delay == 'undefined')? accel = 1 : parseInt(accel);

		if (delay < 1) delay = 50;
		if (step == 0) step = 1;
		if (start < stop && step < 0) step = -step;
		else if (stop < start && step > 0) step = -step;

		if (Math.abs(step *accel) > 0.1) {
			step = step *accel;
		} else {
			accel = 1;
		}

		// Blendwert ändern
		if ((step > 0 && start <= stop)
			|| (step < 0 && start >= stop))
		{
			start += step;
			if (step > 0 && start > stop) start = stop;
			if (step < 0 && start < stop) start = stop;
		}

		slider.setOffset(start);

		if (start != stop) {
			window.setTimeout(function() { slider.scroll(start, stop, step, accel, delay, callback); } , delay);
		} else if (callback) {
			callback();
		}
	}
}

var miniBrowser;
miniBrowser = new mini_browser();
miniBrowser.functions.addEvent(window, 'load', function() { miniBrowser.initBrowsers(); } );
