Ajax.Request.addMethods({
    abort: function() {
        if(this._complete) return;

        // avoid MSIE/Mozilla calling other event handlers when aborted
        this.transport.onreadystatechange = Prototype.emptyFunction;
        this.transport.abort();
        this._complete = true;
        this.aborted = true;
    
        var response = new Ajax.Response(this);
    
        ['Abort', 'Complete'].each(function(state) {
            try {
                (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON);
                Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON);
            } catch (e) {
                this.dispatchException(e);
            }
        }, this);
    }
});

Array.prototype.in_array = function(p_val) {
	for(var i = 0, l = this.length; i < l; i++) {
		if(this[i] == p_val) {
			return true;
		}
	}
	return false;
}
var swapItems, swapItemsBg, index = null;
function showthis(el){
	if($('swaps')){
		this.swapItems = $$('.swapItem');
		this.swapItemsBg = $$('.swapItemBg');
		this.index = el.className.substr(8); 
		if(!$('swapItem'+index).hasClassName('active')){
			swapItemsBg.each(function(item, count){
				if(!$('swapHome')){
					swapItems[count].setStyle({
							'display':'none'
					});
				}
				swapItems[count].removeClassName('active');
				item.setStyle({
						'display':'none'
				});		
			});
			if($('swapItem'+this.index).getStyle('opacity') == '0.3'){
				new Effect.Appear($('swapItem'+this.index),{
					duration: 0.7,
					  from: 0.3, 
					  to: 1
				});
				$('matrix').selectedIndex = 0;
				//$('technology').selectedIndex = 0;
			}
			$('swapItem'+this.index).setStyle({'display':'block'});
			$('swapNode').update($('swapItemTeaser'+this.index).innerHTML);
			$('swapItem'+this.index).addClassName('active');
			if($('swapHome')){
				el = $('swapItem'+this.index);
				if(Element.positionedOffset(el)[1]+$('swapNode').getHeight()+50 > $('swaps').getHeight()-Element.getHeight(el)){
					Element.setStyle('swapNode',{
					   'top':Element.positionedOffset(el)[1]+Element.getHeight(el)-$('swapNode').getHeight()+el.getHeight()+'px',
					   'margin':'-9px 0 0 0',
					   'display':'block'
					});
				} else {
					Element.setStyle('swapNode',{
					   'top':Element.positionedOffset(el)[1]+Element.getHeight(el)+el.getHeight()+'px',
					   'margin':'-6px 0px 0 0',
					   'display':'block' 
					});
				}
				
			} else {
				$('swapNode').setStyle({'display':'block'});
			}
						
			$('swapItemBg'+this.index).appear({ 
				duration: 0.7, 
				from:0.1, 
				to:1, 
				queue: { 
					position: 'end', 
					scope: 'appearEvent',
					limit: $('swaps').getElementsByClassName('swapItem').length 
				}, 
				beforeStart:function(){
					var queue = Effect.Queues.get('appearEvent');
					if(queue.effects.length >= 1){
						queue.effects[0].cancel();
					}
				} 
			});
		}
	}	
};

function highlightItems(list){
	var items = $$('#swaps li');
	items.each(function(item, count){
		if(list.in_array(count)){
			item.firstDescendant().firstDescendant().setStyle({'color':'#FA7425'});
			/*if(Math.round(Element.getStyle(item,'opacity')) == 0){
				new Effect.Appear(item,{
					duration: 0.5,
					  from: 0.3, 
					  to: 1
				});
			}*/
		} else {
			item.firstDescendant().firstDescendant().setStyle({'color':'#333333'});
			/*if(Element.getStyle(item,'opacity') == '1'){
				new Effect.Fade(item,{
					duration: 0.5,
					  from: 1.0, 
					  to: 0.3
				});
			}*/
		}
	});
}

function matrix(el){
	if(el.id == 'matrix'){
		//$('technology').selectedIndex = 0;
		switch(el.selectedIndex){
			case 0:
				highlightItems([]);
			break;
			case 1:
				highlightItems([3,4,5,7,8,10]);
			break;
			case 2:
				highlightItems([4,6,7,9]);
			break;
			case 3:
				highlightItems([1,2,3,4,5,7,10]);
			break;
			case 4:
				highlightItems([1,2,3,4,5,7,10]);
			break;
			case 5:
				highlightItems([4,5,7,8,10]);
			break;
			case 6:
				highlightItems([4,5,7,10]);
			break;
			case 7:
				highlightItems([4,5,7]);
			break;
			default:
				highlightItems([]);
			break;
		}
	}else{
		$('matrix').selectedIndex = 0;
		switch(el.selectedIndex){
			case 0:
				highlightItems([]);
			break;
			case 1:
				highlightItems([1,2,3,4,5,6,7,9,10]);
			break;
			case 2:
				highlightItems([1,2,4,5,6,7,8,9,10]);
			break;
			case 3:
				highlightItems([3,8]);
			break;
			default:
				highlightItems([]);
			break;
		}
	}
}

/*Crossfader*/
function swapFade(crossFade) {
	var i=0;
	new PeriodicalExecuter(function(pe){
		var crossFadeItems = crossFade.getElementsByClassName('csc-textpic-image');
		Effect.Fade(crossFadeItems[i], { duration:1, from:1.0, to:0.0 });
		i++;
		if (i == crossFadeItems.length) i = 0;
		Effect.Appear(crossFadeItems[i], { duration:1, from:0.0, to:1.0 });
		
	},2.5);
}

// flexible crossfader (templavoila)
function tvCrossfade(crossfader, period) {
	if (!crossfader)
		return false;

	var elements = $('crossfade-content').childElements();
	if (elements && elements.length > 1) {
		// adjust element style and crossfader height
		var crossfaderHeight = 0;
		for (var i=0; i < elements.length; i++) {
			elements[i].addClassName('crossfade-element');
			if (i != 0)
				elements[i].setStyle({display:'none'});

			if (elements[i].getHeight() > crossfaderHeight) {
				crossfaderHeight = elements[i].getHeight();
				crossfader.setStyle({
					height: crossfaderHeight + 'px'
				});
			}
		}
	
		var i=0;
		new PeriodicalExecuter(function(pe){
			Effect.Fade(this.elements[this.index++], { 
				duration:1, 
				from:1.0, 
				to:0.0 
			});
			if (this.index == this.elements.length) 
				this.index = 0;
			Effect.Appear(this.elements[this.index], { 
				duration:1, 
				from:0.0, 
				to:1.0 
			});
		}.bind({
			elements:elements,
			index:i
		}), (period || 2.5));
	}
}

// inline lightbox links
function inlineLightbox(elements) {
	if (elements && elements.length > 0) {
		var count = 1;
		for (var i=0; i < elements.length; i++) {
			if (elements[i].className == "lb-inline-group") {
				elements[i].rel = 'lightbox[lbig]';
			} else {
				elements[i].rel = 'lightbox[lbi' + count++ + ']';
			}

			elements[i].observe('click', function(e) {
				e.stop();
				
				this.lightbox.start(this.el);
			}.bind({
				el:elements[i],
				lightbox:this.myLightbox
			}));
		}
	}
}

Event.observe(window, 'load', function() {
	// process inline lightbox anchors
	inlineLightbox($$('.lb-inline,.lb-inline-group'));

	// content element crossfader (templavoila)
	tvCrossfade($('crossfader'),8);

	// image crossfader (sidebar)
	var crossFader = $$('.crossfade');//document.getElementsByClassName('crossfade');
	if(crossFader.length != 0){
		var crossFaderHeight = 0;
		var i = 0;
		var j = 0;
		for(i=0;i<crossFader.length;i++){
			var crossFadeItems = crossFader[i].getElementsByClassName('csc-textpic-image');
			if(crossFadeItems.length > 1){
				for(j=0;j<crossFadeItems.length;j++){
					if(j!=0){
						crossFadeItems[j].setStyle({
							'position':'absolute',
							'top':'0px',
							'left':'0px',
							'display':'none',
							'float':'left'
						})
					}
					if(crossFadeItems[j].getHeight() > crossFaderHeight){
						crossFaderHeight = crossFadeItems[j].getHeight();
					}
					crossFader[i].setStyle({
						'height':crossFaderHeight+'px'
					});
				}
				swapFade(crossFader[i]);
			}
		}
	}
	
	if($('swaps')) $('swapNode').update($('swapItemTeaser1').innerHTML);
});

function toggleElement(el){
	if(el.getStyle('display')== 'none'){
		var queue = Effect.Queues.get('toggleElement');
		el.appear({
			duration:0.5,
			queue: { 
				position: 'front', 
				scope: 'toggleElement',
				limit: 1 
			}
		});
	} else {
		el.fade({from:1, to:0, duration:0.5,queue: { 
				position: 'front', 
				scope: 'toggleElement',
				limit: 1 
			}
		});
	}
}