//////////////////////////
// JVR custom functions //
// @author: Laborint OĆ? //
//////////////////////////

var current_effect;

var selectImg = function(elem, menuSelected) {
	if(elem.tagName != "IMG") elem = elem.getElementsByTagName("img")[0];
	
	var selPath = '/images/sel.gif';

	if(!elem.imgSelected) {
		elem.origSrc = elem.src;			

		elem.src = selPath;
		elem.imgSelected = true;
		
		elem.menuSelected = menuSelected;
	}
	
	return elem;
};

var deselectImg = function(elem, clearSelected) {
	if(elem.tagName != "IMG") elem = elem.getElementsByTagName("img")[0];
	
	if(clearSelected)
		elem.menuSelected = false;
	
	if(elem.origSrc && !elem.menuSelected) {
		elem.src = elem.origSrc;
		elem.imgSelected = false;
	}
		
	return elem;
};

var doMenuSelect = function(type, elem) {
	var parent = document.getElementById(type);
	
	if(parent) {
		var imgs = parent.getElementsByTagName("img");
		
		for(var i = 0; i < imgs.length; i++) {
			deselectImg(imgs[i], true);
		}
	}

	if(elem)
		selectImg(elem, true);
}

function onMenuLoad() {	
	var hover_div = $('on_hover_text');//document.getElementById('on_hover_text');
	hover_div.setOpacity(0);

	var setEffect = function(effect) {
		if(current_effect) {
			current_effect.cancel();
		}		
		current_effect = effect;
	}

	$$(".menu-img").each(function(elem) {		
		elem.onmouseover = function() {			
			hover_div.innerHTML = elem.alt;
			setEffect(new Effect.Opacity(hover_div, {to: 1.0, duration: .4}));
			selectImg(this);
		}						
		elem.onmouseout = function() {
			setEffect(new Effect.Opacity(hover_div, {to: 0.0, duration: .8}));
			deselectImg(this);
		}
	});	
	
}


function Mover(mainId, contentId, frameId) {		
	if(!$(mainId)) {
		throw "Mover can not find main div " + mainId;
	}	
	if(!$(contentId)) {
		throw "Mover can not find content div " + contentId;
	}
	if(!$(frameId)) {
		throw "Mover can not find frame div " + contentId;
	}
	
	var pos = 0;
	var scrollAmount = 0;
	var target = 0;
	var timer;
	var tickRate = 20.0;
	var baseSpeed = 18;
	
	var setTimer = function() {		
		if(!timer) {
			timer = setTimeout(function() { 
				timer = null; 
				move();
			}, tickRate);
		}
	}
	
	var maxOffset, mainOffsets;	
	var updateOffsets = function() {		 		 
		maxOffset = $(frameId).offsetWidth - $(mainId).offsetWidth;
	    mainOffsets = Position.cumulativeOffset($(mainId));
	}
	
	updateOffsets();
	
	// animate
	var move = this.move = function() {		
		if(maxOffset > -1) {
			setTimer();				
			pos += scrollAmount;
			
			if(pos >= 0) 
				pos = 0;			
			if(-pos >= maxOffset) {			
				updateOffsets();
			}
			if(-pos >= maxOffset) {			
				pos = -maxOffset;
			}			
			
			var contentDiv = document.getElementById(contentId);		
			if(!contentDiv || typeof contentDiv.style == 'undefined') return;
	
			contentDiv.style.left = pos + "px";			
		}
	};
	
	var easeOut = function() {
		cancel();
	}
		
	var cancel = this.cancel = function() {
		clearTimeout(timer);
		timer = null;
		updateOffsets();
	};
	
	var destroy = this.destroy = function() {
		try {
			clearTimeout(timer);
			timer = null;
			$(mainId).onmousemove = null;
			$(mainId).onmouseout = null;
			maxOffset = 0; 
			mainOffsets = 0;
		} catch(e) { }
	};

	$(mainId).onmousemove = (
	function(event) {				
		if(!event) event = window.event;
		var x = Event.pointerX(event);//, y = Event.pointerY(event);
		var dx = x - mainOffsets[0];
		var ratio = dx / $(mainId).offsetWidth;
		scrollAmount = 0;
		var speedRatio;
		
		if((speedRatio = 0.46 - ratio) > 0)
			scrollAmount = baseSpeed * speedRatio;
		if((speedRatio = 0.54 - ratio) < 0)
			scrollAmount = baseSpeed * speedRatio;
					
		if(scrollAmount != 0) {
			setTimer();
		} else {
			cancel();
		}
	});	
	
	$(mainId).onmouseout = (
	function(event) {		
		if(!event) event = window.event;
		var x = Event.pointerX(event), y = Event.pointerY(event);
		
		if(!Position.within($(mainId), x, y)) {
			easeOut();
			return;
		}
	});
}

function handleEffects() {
	var slider1, slider2;	

	responseHandlers = {					
		_construct_: function(response) {
			// __CONSTRUCT__
			// this handler is called first by the response handler

			$$(".head-img").each(function(element) {
				element.onmouseover = function() { selectImg(this); };
				element.onmouseout = function() { deselectImg(this); };	
			});
			
			var q = window.location.href.split('#')[1];
			if (!q) return;
			var query = q.substr(3).split('/')[0];
			
			$$(".head_menu_link").each(function(element) {
				if (element.id == query) doMenuSelect("menu1", element);
			});	

			var q = window.location.href.split('+3F')[1];
			if (!q) return;
			var query = '?'+q.replace(/\+26/g,'&');
			var ar = query.parseQuery();
			for (var item in ar) {
				if (item == 'project_id') {
					var selected = 'id_'+ar[item];
					doMenuSelect("head_slidermain", $(selected));
				}
			}
		},

		_destruct_: function(response) {
			// __DESTRUCT__
			// this handler is called last by the response handler
			setTimeout(function() {
				var body = $('content_body');
				if (body.style.visibility == 'hidden') 
					body.style.visibility = 'visible';			
			}, 10);
		},
		
		beforeReplace: function(elem, value) {
			elem.setOpacity(0);
			// auto hide empty containers
			if (value.length > 0) {
				elem.style.display = 'block';
			} else {
				elem.style.display = 'none';
			}
		},
	
		replace: function(elem, replacer) {			
			// this handler is called by the response handler after parsing the input
			setTimeout(replacer, 10); // Workaround: content must be replaced after opacity changes FF
			return true;
		},		
		
		afterReplace: function(elem, value) {			
			setTimeout(function() { 
				new Effect.Opacity(elem, {to: 1.0, duration: .5});
			},10);
		},
		
		onMenuload: function() {
			setTimeout(onMenuLoad,10);
		},
		
		slider: function(item, value) {		
			if (slider1) {
				slider1.destroy(),
				slider1 = null
			}
			setTimeout (function() {
				slider1 = new Mover("slidermain", "move", "frame");
			},10);
		},				
		
		head_slider: function(item, value) {
			if (slider2) {
				slider2.destroy();
				slider2 = null;
			}
			setTimeout (function() {
				slider2 = new Mover("head_slidermain", "head_move", "head_frame");							
			},10);
		}
	}
}