$.fn.delayedHover = function (over, out, delay) {
	var timerIn = false;
	var timerOut = false;
	
	if ( ! delay) {
		var delay = 500;
	}
	
	return this.hover(function(e) {
		clearTimeout(timerIn);
		clearTimeout(timerOut);
		var el = this;
		if ($.isFunction(over)) {
			timerIn = setTimeout(function(){ over.apply(el, new Array(e, e)) }, delay);
		}
	}, function(e){
		clearTimeout(timerIn);
		clearTimeout(timerOut);
		var el = this;
		if ($.isFunction(out)) {
			timerOut = setTimeout(function(){ out.apply(el, new Array(e, e)) }, delay);
		}
	})
}
function pngHack() {
	var ie6 = $.browser.msie && /MSIE (6).+Win/.test(navigator.userAgent) && !/MSIE (7|8|9).+Win/.test(navigator.userAgent);
	if ($.browser.msie) {
		$('.png').each(fixPNG);
		if (ie6) {
			$('.fixpng6').each(fixPNG);
		}
	}
}

function resize_email(obj) {
	obj.css('font-size', (parseInt(obj.attr('offsetWidth')/7.8)-2)+'px');
}


function InstallIndexSlider()
{
	var $slider = $('#index-slider').removeClass('js-off');
	var scrolling = $slider.find('.wrapper').get(0);
	var $items = $slider.find('img');
	var max_width = 244, min_width = 100;
	var duration = 500, zoom_timer = false;
	var pageX, scroll_threshold = 0.4, scroll_timer = false;
		
	$slider.bind('mouseenter mouseleave', function(e){
		if ($.browser.mozilla && parseFloat($.browser.version) < 1.9) {
			return;
		}
		var start = (new Date).getTime();
		var start_width = $items.width();
		var start_scroll_width = scrolling.scrollWidth;
		var start_scroll_left = scrolling.scrollLeft;
		var sliderX = (e.pageX + start_scroll_left) / start_scroll_width;
		var prevent_flicks = 0;
		
		if (e.type == 'mouseleave') {
			$slider.removeClass('full-width');
			
			prevent_flicks = Math.max(e.pageX - start_scroll_width * sliderX / $items.width() * min_width, 0);
			
			if ( ! prevent_flicks) {
				prevent_flicks = Math.min(start_scroll_width * (1 - sliderX) / $items.width() * min_width - ($('body').width() - e.pageX), 0);
			}
		}
		
		if (zoom_timer) {
			clearInterval(zoom_timer);
			zoom_timer = false;
		}
		
		zoom_timer = setInterval(function(){
			var elapsed = (new Date).getTime() - start;
			if (elapsed >= duration) {
				clearInterval(zoom_timer);
				zoom_timer = false;
				elapsed = duration;
				if (e.type == 'mouseenter') {
					$slider.addClass('full-width');
				}
			}
			x = elapsed / duration;
			x = (-Math.cos(x*Math.PI)/2) + 0.5;
			
			if (e.type == 'mouseenter') {
				$items.width(Math.round(start_width + (max_width - start_width) * x));
			} else {
				$items.width(Math.round(start_width - (start_width - min_width) * x));
			}
			
			scrolling.scrollLeft = start_scroll_left + prevent_flicks * x + (scrolling.scrollWidth - start_scroll_width) * sliderX;
		}, 10);
	}).mousemove(function(e){
		pageX = e.pageX / $('body').width();
		if ( ! scroll_timer && Math.abs(pageX - 0.5) >= scroll_threshold) {
			scroll_timer = setTimeout(scroll_step, 10);
		}
	}).mouseleave(function(e){
		pageX = 0.5;
		scroll_timer = false;
	});
	
	function scroll_step()
	{
		var power = Math.abs(pageX - 0.5);
		
		if (power >= scroll_threshold) {
		
			if ( ! zoom_timer) {
				scrolling.scrollLeft += (power - scroll_threshold) / (0.5 - scroll_threshold) * (pageX > 0.5 ? 30 : -30);
			}
		
			scroll_timer = setTimeout(scroll_step, 10);
		} else {
			scroll_timer = false;
		}
	}
	
	$slider.triggerHandler('mouseleave');
	
	if ($.browser.msie) {
		$slider.find('a').mouseenter(function(){
			if ($slider.hasClass('full-width')) {
				$(this).find('.text').show();
			}
		}).mouseleave(function(){
			$(this).find('.text').hide();
		});
	}
	if ($.browser.opera && $.browser.version < 9.5) {
		$slider.find('a, .max').css('display', 'inline');
	}
}

function InstallProjects()
{
	var $links = $('#main-center .projects p');
	
	$links.hover(function() {
		$this = $(this);
		$this.parent().parent().find('.image')
			.css({marginTop: -100, opacity: 0}).stop()
			.show().animate({marginTop: -120, opacity: 1}, 200);
	}, function() {
		$this = $(this);
		$this.parent().parent().find('.image')
			.stop()
			.animate({marginTop: -100, opacity: 0}, 200, function(){
				$(this).hide();
			});
	}).css('cursor','pointer').click(function(){
		window.location = $(this).find('a').attr('href');
	});
}

function InstallServices()
{
	var service = $('#service');
	var sr_link = $('#service .dl');
	var popup = $('#popup');
	
	function move_popup(e) {
		var popup = $('#popup');
		var sh_left = 0;
		
		if(($('body').attr('offsetWidth')/e.clientX) < 2) {
			popup.find('ins.left').addClass('hidden'); popup.find('ins.right').removeClass('hidden');
			sh_left = e.pageX-480;
		}
		else {
			popup.find('ins.left').removeClass('hidden'); popup.find('ins.right').addClass('hidden');
			sh_left = e.pageX+80;
		}
		popup.css('top', (e.pageY-parseInt(popup.attr('offsetHeight') / 2) - 16)+'px')
		popup.css('left', sh_left+'px');
		
	}
	
	sr_link.each(function() {
		$(this).delayedHover(function(e) {
			$this = $(this);
			popup.find('.content').html($this.parent().find('.content').html());
			popup.removeClass('hidden');
			move_popup(e);
			popup.animate({'opacity': 1}, 300);
		},
		function(e) {
			$this = $(this);
			popup.addClass('hidden');
			popup.css('opacity', 0);
		}, 100);
	});
	sr_link.mousemove(function(e) {
		move_popup(e);
	});
}

function InstallIEFix()
{
	if ($.browser.msie) {
		$('#main-menu > li:last-child').addClass('last-child');
		$('.portfolio a .image').each(function() {
			var url = $(this).parent().attr('href');
			$(this).css('cursor','pointer').click(function() {window.location=url;});
		});
	}
}

$(function() {
	var email = $('#email');

	resize_email(email);
	$(window).resize(function() {
		resize_email(email);
	});
	
	
	InstallIEFix();
	InstallIndexSlider();
	InstallProjects();
	InstallServices();
});
