function loadCategory(x, active) {
	new Ajax.Updater('productList', 'ajax/products', {parameters: {id: x}, evalScripts:true});
	$(active).up(1).childElements().each(function(el) {el.removeClassName('active');});
	$(active).up(0).addClassName('active');
}

function loadBrand(x, active) {
	new Ajax.Updater('productList', 'ajax/products', {parameters: {brand: x}, evalScripts:true});
	$(active).up(1).childElements().each(function(el) {el.removeClassName('active');});
	$(active).up(0).addClassName('active');
}

function openLayer(link) {
	if ($('lightbox')==undefined) addLightboxMarkup();


	var a = Builder.node('a', {href: link}, ' ');
	var lb = new lightbox(a); 
	lb.activate();

	if (link.match('ajax')) {
		self.location.href=self.location.href.split('#')[0]+'#/layer'+link.split('ajax')[1];
		window.opennewlayer = false;
	}
	
}

function closeLayer() {
	var a = Builder.node('a', {href: '#'}, ' ');
	var lb = new lightbox(a); 
	lb.deactivate();
}

function loadProduct(x) {
	openLayer('ajax/product/'+x);
}

function loadContestor(x) {
	openLayer('ajax/contestor/'+x);
}

function checkEmail(email) {
	var filter = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
	return filter.test(email);
}

function closeNews() {
	$('newsArtikel').update();
	$('newsArtikel').hide();	
}

function createNews(news) {
	$('newsArtikel').update();
	if (news.image) $('newsArtikel').appendChild(Builder.node('img', {src: 'image/news/'+news.id, id: 'newsArtikelImage'}));
	$('newsArtikel').appendChild(Builder.node('h2', news.title));
	var text = Builder.node('p', news.text);
	text.update(superTextile(news.text));
	$('newsArtikel').appendChild(text);
	if (news.gallery>0) {
		var galdiv = Builder.node('div', {id: 'newsgallery_'+news.id, className: 'gallery'}, Builder.node('img', {src: 'images/blank.gif', id: 'placeholder_'+news.id}));
		$('newsArtikel').appendChild(galdiv);
		loadGallery(news.gallery, galdiv.identify(), 'placeholder_'+news.id);
	}
}

function updateNews(id) {
	new Ajax.Request('json/news', {parameters: {'news': id}, requestHeaders: {Accept: 'application/json'}, onSuccess: function(transport) {
		var json = transport.responseText.evalJSON();
		createNews(json);
		if ($('newsImage')) $('newsImage').hide();
		$('newsArtikel').show();
		if (/MSIE 6/i.test(navigator.userAgent)) window.DD_belatedPNG.fix('img');
	}});
}

function loadGallery(id, container, oldcontent) {
	new Ajax.Request('json/gallery', {parameters: {'gallery': id}, requestHeaders: {Accept: 'application/json'}, onSuccess: function(transport) {
		var json = transport.responseText.evalJSON();
		createGallery(json, container, oldcontent);
	}});
}

function createGallery(gallery, container, oldcontent) {
	var gal = Builder.node('ul', {className: 'gallery'});
	var i = 0;
	var id = Math.random();
	gallery.each(function(pic) {
		var p = Builder.node('li', Builder.node('a', {href: 'image/gallery/'+pic, rel: 'lightbox['+id+']'}, Builder.node('img', {src: 'image/gallery/thumbnail/'+pic})));
		gal.appendChild(p);
	});

	$(container).insert(gal);
}

function loadSlideshow(id, container, oldcontent) {
	new Ajax.Request('json/gallery', {parameters: {'gallery': id}, requestHeaders: {Accept: 'application/json'}, onSuccess: function(transport) {
		var json = transport.responseText.evalJSON();
		createSlideshow(json, container, oldcontent);
	}});
}

function createSlideshow(gallery, container, oldcontent) {
	var gal = Builder.node('ul', {id: 'slideshowList'});
	var i = 0;
	gallery.each(function(pic) {
		var p = Builder.node('li', Builder.node('img', {src: 'image/gallery/'+pic}));
		if (i++>0) p.hide();
		gal.appendChild(p);
	});

	$(container).insert(gal);

	$$('#'+container+' #slideshowList img').each(function(el) {
		Event.observe(el, 'load', function() {
			if (el.getHeight()>$(container).getHeight()) $(container).style.height = el.getHeight()+'px';
		});
	});	

	startSlideshow(container, oldcontent);
}

function startSlideshow(container, oldcontent) {
	if ($(oldcontent)) Effect.Fade($(oldcontent), {duration: 0.5});
	var periodic = new PeriodicalExecuter(function(pe) {
		var br = false;
		$$('#'+container+' li').each(function(el) {
			if (el.style.display != 'none' && !br) {
				Effect.Fade(el, {duration: 0.5, queue: {scope: 'slideChange'+container}});
				if (el.next('li', 0)) Effect.Appear(el.next('li', 0), {duration: 0.5, queue: {scope: 'slideChange'+container}});
				else Effect.Appear($$('#'+container+' li')[0], {duration: 0.5, queue: {scope: 'slideChange'+container}});
				br = true;
				var maxHeight = 0;
				$$('#'+container+' #slideshowList img').each(function(el) {if (el.getHeight()>maxHeight) maxHeight = el.getHeight()});	
				$(container).style.height = maxHeight+'px';
			}
		});
	}, 5);
	Event.observe(container, 'DOMNodeRemovedFromDocument', function() {periodic.stop();});
}

function loadCarousel(id, container, oldcontent) {
	new Ajax.Request('json/gallery', {parameters: {'gallery': id}, requestHeaders: {Accept: 'application/json'}, onSuccess: function(transport) {
		var json = transport.responseText.evalJSON();
		createCarousel(json, container, oldcontent);
	}});
}

function createCarousel(gallery, container, oldcontent) {
	var gal = Builder.node('ul', {id: 'carouselList'});
	var i = 0;
	gallery.each(function(pic) {
		var p = Builder.node('li', Builder.node('img', {src: 'image/gallery/'+pic}));
		gal.appendChild(p);
	});
	$(container).insert(gal);
	
	$$('#'+container+' #carouselList img').each(function(el) {
		Event.observe(el, 'load', function() {
			$$('#carouselList').each(function(carousel) { carousel.style.width = (carousel.getWidth()+el.getWidth())+'px'; });
		});
	});	
	
	
	startCarousel(container, oldcontent);
}

function startCarousel(container, oldcontent) {
	if ($(oldcontent)) Effect.Fade($(oldcontent), {duration: 0.5});
	
	var periodic = new PeriodicalExecuter(function(pe) {
		$$('#'+container+' #carouselList').each(function(el) {
			new Effect.Move(el, {x: -50, duration: 1, mode: 'relative', transition: Effect.Transitions.linear});
			var elements = $$('#'+container+' #carouselList li');
			var firstEl = elements[elements.length-2];
			var pos = firstEl.viewportOffset();
			if (pos.left<getWindowWidth()) {
				el.style.width = el.getWidth()*2+'px';
				elements.each(function (img) {el.insert({bottom: img.cloneNode(true)});});
			}
		});
	}, 1);
	Event.observe(container, 'DOMNodeRemovedFromDocument', function() {periodic.stop();});
}

function superTextile(s) {
    var r = s;
    // quick tags first
    qtags = [['\\*', 'strong'],
             ['\\?\\?', 'cite'],
             ['\\+', 'ins'],  //fixed
             ['~', 'sub'],   
             ['\\^', 'sup'], // me
             ['@', 'code']];
    for (var i=0;i<qtags.length;i++) {
        ttag = qtags[i][0]; htag = qtags[i][1];
        re = new RegExp(ttag+'\\b(.+?)\\b'+ttag,'g');
        r = r.replace(re,'<'+htag+'>'+'$1'+'</'+htag+'>');
    }
    // underscores count as part of a word, so do them separately
    re = new RegExp('\\b_(.+?)_\\b','g');
    r = r.replace(re,'<em>$1</em>');
	
	//jeff: so do dashes
    re = new RegExp('[\s\n]-(.+?)-[\s\n]','g');
    r = r.replace(re,'<del>$1</del>');

    // links
    re = new RegExp('"\\b(.+?)\\(\\b(.+?)\\b\\)":([^\\s]+)','g');
    r = r.replace(re,'<a href="$3" title="$2">$1</a>');
    re = new RegExp('"\\b(.+?)\\b":([^\\s]+)','g');
    r = r.replace(re,'<a href="$2">$1</a>');

    // images
    re = new RegExp('!\\b(.+?)\\(\\b(.+?)\\b\\)!','g');
    r = r.replace(re,'<img src="$1" alt="$2">');
    re = new RegExp('!\\b(.+?)\\b!','g');
    r = r.replace(re,'<img src="$1">');
    
    // block level formatting
	
		// Jeff's hack to show single line breaks as they should.
		// insert breaks - but you get some....stupid ones
	    re = new RegExp('(.*)\n([^#\*\n].*)','g');
	    r = r.replace(re,'$1<br />$2');
		// remove the stupid breaks.
	    re = new RegExp('\n<br />','g');
	    r = r.replace(re,'\n');

	    re = new RegExp('<br />','g');
	    r = r.replace(re,'\n');
	
    lines = r.split('\n');
    nr = '';
    intable = false;
    for (var i=0;i<lines.length;i++) {
        var line = lines[i].replace(/\s*$/,'');
        changed = 0;
        if (line.search(/^\s*bq\.\s+/) != -1) { line = line.replace(/^\s*bq\.\s+/,'<blockquote>')+'</blockquote>'; changed = 1; }
		
		// jeff adds h#.
        if (line.search(/^\s*h[1-6]\.\s+/) != -1) { 
	    	re = new RegExp('h([1-6])\.(.+)','g');
	    	line = line.replace(re,'<h$1>$2</h$1>');
			changed = 1; 
		}
		
		if (line.search(/^\s*\*\s+/) != -1) { 
			line = line.replace(/^\s*\*\s+/,'<liu>') + '</liu>'; 
			changed = 1;
		} // * for bullet list; make up an liu tag to be fixed later
        if (line.search(/^\s*#\s+/) != -1) { line = line.replace(/^\s*#\s+/,'<lio>') + '</lio>'; changed = 1; } // # for numeric list; make up an lio tag to be fixed later
        if (line.search(/^\s*\|/) != -1) { 
//        	alert(line);
//        	line = line.trim();
        	line = line.substring(1, (line.length-1));
        	line = '<tr><td>' + line.replace(/\|/g, '</td><td>') + '</td></tr>'; change = 1;
			if (!intable) line = '<table>' + line;
        	intable = true;
			changed = 1; 
        } else {
			if (intable) line = '</table>' + line;
        	intable = false;	
        }
//        if (!changed && (line.replace(/\s/g,'').length > 0)) line = '<p>'+line+'</p>';
        if (!changed) line = line + '<br/>';
        lines[i] = line + '\n';
    }
    // Second pass to do lists
    inlist = 0; 
	listtype = '';
    for (var i=0;i<lines.length;i++) {
        line = lines[i];
        if (inlist && listtype == 'ul' && !line.match(/^<liu/)) { line = '</ul>\n' + line; inlist = 0; }
        if (inlist && listtype == 'ol' && !line.match(/^<lio/)) { line = '</ol>\n' + line; inlist = 0; }
        if (!inlist && line.match(/^<liu/)) { line = '<ul>' + line; inlist = 1; listtype = 'ul'; }
        if (!inlist && line.match(/^<lio/)) { line = '<ol>' + line; inlist = 1; listtype = 'ol'; }
        lines[i] = line;
    }

    r = lines.join('\n');
	// jeff added : will correctly replace <li(o|u)> AND </li(o|u)>
    r = r.replace(/li[o|u]>/g,'li>');
    return r;
}

function cycleNews(container) {
	var oldNews;
	var currentNews;
	
	$$('#'+container+' a').each(function(el){ 
		if (el.style.display!='none') {
			currentNews = el.identify();
		}

		if (currentNews && oldNews==currentNews) {
			new Effect.Fade($(currentNews));
			new Effect.Appear(el);
		}
		oldNews = el.identify();
	});

	if (currentNews && currentNews==oldNews) {
			new Effect.Fade($(currentNews));
			new Effect.Appear($$('#'+container+' a')[0]);
	}
}

function startCycleNews(container) {
	new PeriodicalExecuter(function() {
		cycleNews(container);
	}, 7);
}


var opennewlayer=true;
