/**
 * Returnerer startelementet for hendelsen
 * 
 * @version	20061011
 * @param	e		event
 */
$.getEventTarget = function(e) {
  	e = e || window.event;
  	return e.target || e.srcElement;
};

jQuery.fn.delay = function(millis,callBack){
   var object = $(this);
   $.extend(object,{callBack:callBack});
   return window.setTimeout(function() {
       object.callBack();
       return object;
   }, millis);
}

var $_fx_step_default = $.fx.step._default;
$.fx.step._default = function (fx) {
  if (!fx.elem.customAnimate) return $_fx_step_default(fx);
};

var htmlCleaner = {
	init:function(){
		htmlCleaner.cleanRelations();
	},
	
	cleanRelations:function(){
		$('.relations > div, .relations > p, .relations > span, .relations > strong, .relations > .newslist > div').each(function(){
			if($.trim($(this).html()).length < 1){
				$(this).remove();
			}
		});
		
	}
}

var input = {
	init:function(){
		$('div.text-input input:not(.button), div.text-textarea textarea').focus(function(){
			input.highLight(this);
		});
		$('div.text-input input:not(.button), div.text-textarea textarea').click(function(){
			input.highLight(this);
		});
		$('div.text-input input:not(.button), div.text-textarea textarea').select(function(){
			input.select(this);
		});
		$('div.text-input input:not(.button), div.text-textarea textarea').blur(function(){
			input.blur(this);
		});
		$('div.text-input input:not(.button), div.text-textarea textarea').keyup(function(){
			input.hideMsg(this);
		});
		
		$('input[type="text"],textarea').focus(function(){
			$(this).addClass('focus');
		});
		
		$('input[type="text"],textarea').select(function(){
			$(this).addClass('focus');
		});
		
		$('input[type="text"],textarea').blur(function(){
			$(this).removeClass('focus');
		});
	},
	
	highLight:function(element){
		var type = $(element).get(0).nodeName.toLowerCase();
		$(element).parent().addClass(type+'-focus');
		if($(element).siblings('input.button').length > 0){
			var url = $(element).siblings('input.button').attr('src').replace(/_focus/g,'').replace('.gif','_focus.gif');
			$(element).siblings('input.button').attr('src',url);
		}
		$(element).val('');
		$(element).siblings('strong.msg').hide();
	},
	
	blur:function(element){
		var type = element.nodeName.toLowerCase();
		$(element).parent().removeClass(type+'-focus');
		if ($(element).siblings('input.button').length > 0) {
			var url = $(element).siblings('input.button').attr('src').replace(/_focus/g,'');
			$(element).siblings('input.button').attr('src',url);
		}
	},
	
	select:function(element){
		$(element).parent().addClass('focus');
		if ($(element).siblings('input.button').length > 0) {
			var url = $(element).siblings('input.button').attr('src').replace(/_focus/g,'').replace('.gif','_focus.gif');
			$(element).siblings('input.button').attr('src',url);
		}
	},
	
	hideMsg:function(element){
		$(element).siblings('strong.msg').hide();
	}
}

var menu = {
	keepOpen:false,
	defaultHtml:'',
	init:function(){
		if (!$('ul.sub').hasClass('visible')) {
			$('div.menu ul.main > li > ul').each(function(){
				$(this).prev('a').hover(menu.mouseOver, menu.mouseOut);
			});
		}
		
		if($('ul.sub').hasClass('visible')){
			menu.keepOpen = true;
			menu.defaultHtml = $('ul.sub').html();
		}
	},
	
	mouseOver:function(e){
		var subHTML = $(this).next('ul').html();
		jQuery.fxQueues.stop('close');
		jQuery.fxQueues.clear('close');
		$('ul.sub').html(subHTML);
		$('ul.sub').hover(
			function(){
				jQuery.fxQueues.stop('close');
			},
			function(){
				jQuery.fxQueues.start('close');
			}
		);
		
		jQuery.fxQueues.stop('open');
		jQuery.fxQueues.clear('open');
		$('ul.sub').animate(
			{top:'3em'},
			{
				speed:400,
				queue:'open'
			}
		);
	},
	
	mouseOut:function(e){
		if(!menu.keepOpen){
			jQuery.fxQueues.stop('open');
			jQuery.fxQueues.clear('open');
			$('ul.sub').animate(
				{top:'0'},
				{
					speed:300,
					wait:400,
					queue:'close'
				}
			);
		}else{
			$('ul.sub').html(menu.defaultHtml);
		}
	}
}

var newsletter = {
	init:function(){
		$('.newsletter input.send').click(newsletter.handleClick);
	},
	
	handleClick:function(e){
		e.preventDefault();
		var pane = $(this).parents('fieldset');
		var data = $(pane).find('input:not(type="submit")').serializeArray();
		
		$.ajax(
			{
				type:'POST',
				url:'templates/ajax/newsletter.php?'+Math.random(),
				data:data,
				dataType:'json',
				success:function(result){
					message.manageResult(pane,result);
				},
				error:function(result){
					message.manageResult(pane,result);
				}
			}
		);
	}
}

var message = {
	pane:null,
	manageResult:function(pane,result){
		message.pane = pane;
		if(result.error){
			$(result.fields).each(function(){
				message.showFieldMsg(this);
			});
		}else{
			message.showMainMsg(result.msg);
		}
	},
	
	showMainMsg:function(text){
		$(message.pane)
			.animate(
				{opacity:'0'},
				{
					speed:300,
					callback:function(){
						$(message.pane).find('.js-msg').text(text);
						$(message.pane).children(':not(.js-msg)').css({visibility:'hidden'});
						$(message.pane).animate(
							{opacity:'1'},
							'fast'
						);
					}
				}
			);
	},
	
	showFieldMsg:function(object){
		var field = $(message.pane).find('input[name="'+object.field+'"]');
		var msg = field.siblings('strong.msg');
		
		input.highLight(field);
		$(msg).text(object.msg);
		$(msg).effect("pulsate", { times: 1 }, 400);
	},
	
	showMessageInPane:function(pane,object){
		pane.html('');
		if($.trim(object.msg).length > 0){
			pane.append('<strong>'+$.trim(object.msg)+'</strong>');
		}
		$(object.fields).each(function(){
			pane.append('<strong>'+this.msg+'</strong>');
			var field = $(pane).parents('fieldset').find('input[name="'+this.field+'"], textarea[name="'+this.field+'"]');
			input.highLight(field.get(0));
		});
	},
	
	select:function(object){
		var field = $(message.pane).find('input[name="'+object.field+'"]');
		field.select();
	}
}

var dealers = {
	init:function(){
		$('fieldset.dealers-login input.button').click(dealers.login);
	},
	
	login:function(e){
		e.preventDefault();
		var pane = $(this).parents('fieldset');
		var data = $(pane).find('input:not(type="submit")').serializeArray();
		$.ajax(
			{
				type:'POST',
				url:'templates/ajax/dealerlogin.php?'+Math.random(),
				data:data,
				dataType:'json',
				success:function(result){
					if(result.error){
						message.manageResult(pane,result);
					}else{
						pane.parents('form').submit();
					}
				},
				error:function(result){
					message.manageResult(pane,result);
				}
			}
		);
	}
}

var recommend = {
	init:function(){
		$('.product .form input.send').click(recommend.handleClick);
	},
	
	handleClick:function(e){
		e.preventDefault();
		var pane = $(this).parents('fieldset');
		var data = $(pane).find('input:not(type="submit")').serializeArray();
		var errorPane = pane.find('.message');
		
		$.ajax(
			{
				type:'POST',
				url:'templates/ajax/recommend.php?'+Math.random(),
				data:data,
				dataType:'json',
				success:function(result){
					message.showMessageInPane(errorPane,result);
				},
				error:function(result){
					message.showMessageInPane(errorPane,result);
				}
			}
		);
	}
}

jQuery.fn.hasLabel = function(rel){
	var array = $.makeArray($(this).attr('rel').split(' '));
	return ($.inArray(rel, array) > -1 );
}

var section = {
	init:function(){
		$('.section-menu a').click(section.handleClick);
	},
	
	handleClick: function(e){
		e.preventDefault();
		var filter = $(this).attr('rel');
		var speed = 'slow';
		
		$(this)
			.parents('.section-menu')
			.children('li')
			.removeClass('active');
			
		$(this)
			.parents('li')
			.addClass('active');	
			
			
		$('.section li').removeClass('hide');	
			
		$('.section-menu li.active').each(function(){
			var filter = $(this).children('a').attr('rel');
			if(filter != 'all'){
				$('.section li').each(function(){
					if(!$(this).children('a').hasLabel(filter)){
						$(this).addClass('hide');
					}
				});
			}
		});
		
		$('.section li.hide:visible')
			.fadeOut(speed);
			
		$('.section li:hidden:not(.hide)')
			.fadeIn(speed);
	}
}

var flash = {
	active:null,
	defaultImage:'',
	loop:true,
	init:function(){
		flash.active = $('.main-flash a.active');
		if($('#content').hasClass('frontpage')){
			flash.play();
			flash.defaultImage = $('.canvas img').clone();
			$('.main-flash a').each(function(i){
				
				$(this).hover(
					function(e){
						flash.active = $(this);
						flash.expand($(this),i);
					},
					
					function(e){
						flash.active = null;
						flash.contract($(this),i);
					}
				);
			});
		}
	},
	
	play:function(){
		if(flash.loop){
			$('.main-flash .canvas img').animate(
				{
					opacity:'1'
				},
				{
					
					wait:4000,
					speed:1,
					queue:'play',
					callback:function(){
						var next = $('.main-flash a.active').parent().next().children('a');
						
						if(next.length == 0){
							next = $('.main-flash a:first');
						}
						
						flash.active = $(next);
						
						var image = next.children('img').clone();
						$('.main-flash a').removeClass('active');
						next.addClass('active');
						
						flash.showImage(image,flash.play);
					}
				}
			);
		}
	},
	
	showImage:function(image, callback){
		if(callback == undefined){
			callback = function(){}
		}
		
		image.css({left:'599px'});
		
		if(image.attr('src') != $('.main-flash .canvas img').attr('src')){
			$('.main-flash .canvas').append(image);
			
			var previous = $('.main-flash .canvas img:not(:last)');
			
			previous.animate(
				{
					left:'-599px'
				},
				{
					speed:500,
					scope:'image',
					queue:'global'
				}
			);
			
			image.animate(
				{
					left:'0'
				},
				{
					speed:500,
					scope:'image',
					queue:'global',
					callback:function(){
						previous.remove();
						callback.call();
					}
				}
			);
		}
	},
	
	expand:function(anchor,i){
		var background = anchor.children('span.background');
		var image = anchor.children('img').clone();
		
		flash.loop = false;
		flash.clearAnimations(i);
		
		background.css({opacity:'0'}).show();
		background.animate(
			{
				opacity:'1'
			},
			{
				speed:400,
				scope:'expand',
				queue:'menu'+i
			}
		);
		
		anchor.children('span.text').animate(
			{
				paddingLeft:'2.7em'
			},
			{
				speed:200,
				scope:'expand',
				queue:'menu'+i
			}
		);
		
		$('.main-flash a').removeClass('active');
		anchor.addClass('active');
		anchor.animate(
			{
				width:'67em'
			},
			{
				speed:200,
				scope:'expand',
				queue:'menu'+i,
				callback:function(){
					anchor.addClass('hover');
					flash.showImage(image);
				}
			}
		);
	},
	
	contract:function(anchor,i){
		var background = anchor.children('span.background');
		
		flash.clearAnimations(i);
		flash.loop = true;
		
		background.animate(
			{
				opacity:'0'
			},
			{
				speed:500,
				scope:'contract',
				queue:'menu'+i
			}
		);
		
		anchor.children('span.text').animate(
			{
				paddingLeft:'0'
			},
			{
				speed:100,
				scope:'contract',
				queue:'menu'+i
			}
		);
		
		anchor.removeClass('hover');
		anchor.removeClass('active');
		anchor.animate(
			{width:'30.1em'},
			{
				speed:200,
				scope:'contract',
				queue:'menu'+i,
				callback:function(){
					flash.play();
				}
			}
		);
	},
	
	clearAnimations:function(i){
		jQuery.fxQueues.stop('menu'+i);
		jQuery.fxQueues.clear('menu'+i);
		jQuery.fxQueues.stop('play');
		jQuery.fxQueues.clear('play');
	}
}

var product = {
	showing:null,
	init:function(){
		if($('#content').hasClass('product')){
			product.setDefault();
			$('.flash .color-pick a').click(product.pickColor);
			$('.flash .tools li.spinn').click(product.showSpinn);
			$('.flash .tools li.zoom-in').click(product.zoomIn);
			$('.flash .tools li.zoom-out').click(product.zoomOut);
			$('.flash .tools li.in-out').click(product.turnInOut);
			$('.flash .tools li.backside').click(product.showBackside);
			$('.flash div.canvas a').hover(
				function(){
					$(this).animate(
						{opacity:'1'},
						{speed:200}
					);
				},
				function(){
					$(this).animate(
						{opacity:'0.5'},
						{speed:200}
					);
				}
			);
			$('div.flash div.tools li a').hover(product.hoverTools,product.blurTools);
		}
	},
	
	hoverTools:function(){
		$(this).prepend('<span class="active">zoom in</span>');	
		var inactive = $(this).children('span.inactive');
		inactive.animate(
			{opacity:'0'},
			{
				speed:200,
				callback:function(){
					inactive.remove();
				}
			}
		);
	},
	
	blurTools:function(){
		$(this).prepend('<span class="inactive">zoom in</span>');
		var inactive = $(this).children('span.active');
		inactive.animate(
			{opacity:'0'},
			{
				speed:200,
				callback:function(){
					inactive.remove();
				}
			}
		);
	},
	
	setDefault:function(){
		product.showing = eval('('+$('div.product div.flash ul li:first a').attr('rel')+')');
		if(product.showing.spinn.length > 0){
			var flash = $('<div class="flash-spinn"><div id="flash-spinn"></div></div>');
			$('.flash div.canvas').prepend(flash);
			swfobject.embedSWF(product.showing.spinn, "flash-spinn", "500", "500", "9.0.0","expressInstall.swf","","",{wmode:'opaque'});
		}else{
			var main = $('<img src="'+product.showing.main+'" width="500" height="500" alt="" />');
			$('.flash div.canvas').append(main);
		}
		
		product.setTools(product.showing);
		product.setColorID(product.showing);
	},
	
	pickColor:function(e){
		e.preventDefault();
		var image = eval('('+$(this).attr('rel')+')');
		
		product.setTools(image);
		product.setColorID(image);
		$('div.flash div.tools li.in-out a').removeClass('active');
		
		if(image.spinn.length > 0){
			product.showing = image;
			product.showSpinn(e);
		}else{
			product.showImage(image,'main');
		}
	},
	
	setColorID:function(image){
		if($('#id-color').length > 0){
			$('#id-color').text(image.colorID);	
		}
	},
	
	showImage:function(image,type){
		var settings = {src:'',width:'',height:''};
		var className = "";
		
		switch(type){
			case 'main':
				product.showing = image;
				settings = {src:image.main,width:'500',height:'500'};
				break;
			case 'zoom':
				$('.flash div.tools li.zoom-in').addClass('hidden');
				$('.flash div.tools li.zoom-out').removeClass('hidden');
				className = ' class="zoom"';
				settings = {src:image.zoom,width:'1200',height:'1600'};
				break;
			case 'in-out':
				settings = {src:image.inOut,width:'500',height:'500'};
				break;
			case 'backside':
				settings = {src:image.backside,width:'500',height:'500'};
				break;
		}
		
		var html = $('<img'+className+' src="'+settings.src+'" width="'+settings.width+'" height="'+settings.height+'" alt="" />');
		$('.flash div.canvas').prepend(html);
		
		if(type == 'zoom'){
			$('.flash div.canvas').addClass('zoom');
			html.draggable();
			
		}
		
		product.swapImage(type);
	},
	
	setTools:function(image){
		$('.flash div.tools li.zoom-out').addClass('hidden');
		
		if(image.zoom.length > 0){
			$('.flash div.tools li.zoom-in').removeClass('hidden');
		}else{
			$('.flash div.tools li.zoom-in').addClass('hidden');
		}
		
		if(image.spinn.length > 0){
			$('.flash div.tools li.spinn').removeClass('hidden');
		}else{
			$('.flash div.tools li.spinn').addClass('hidden');
		}
		
		if(image.inOut.length > 0){
			$('.flash div.tools li.in-out').removeClass('hidden');
		}else{
			$('.flash div.tools li.in-out').addClass('hidden');
		}
		
		if(image.backside.length > 0){
			$('.flash div.tools li.backside').removeClass('hidden');
		}else{
			$('.flash div.tools li.backside').addClass('hidden');
		}
	},
	
	swapImage:function(type){
		var lastElement = $('.flash div.canvas img:last');
		if($('.flash div.canvas div.flash-spinn').length > 0){
			lastElement = $('.flash div.canvas .flash-spinn');
		}
		
		lastElement.animate(
			{opacity:'0'},
			{
				wait:200,
				speed:500,
				queue:'global',
				callback:function(){
					lastElement.remove();
					if(type != 'zoom'){
						$('.flash div.canvas').removeClass('zoom');
					}
				}
			}
		);
	},
	
	showSpinn:function(e){
		e.preventDefault();
		
		var lastElement = $('.flash div.canvas img:last');
		if($('.flash div.canvas div.flash-spinn').length > 0){
			lastElement = $('.flash div.canvas .flash-spinn');
		}
		
		var flash = $('<div class="flash-spinn"><div id="flash-spinn"></div></div>');
		$('.flash div.canvas').prepend(flash);
		swfobject.embedSWF(product.showing.spinn, "flash-spinn", "500", "500", "9.0.0","expressInstall.swf","","",{wmode:'opaque'});
		$('.flash div.tools li.zoom-in').removeClass('hidden');
		$('.flash div.tools li.zoom-out').addClass('hidden');
		
		
		
		lastElement.animate(
			{opacity:'0'},
			{
				speed:500,
				queue:'global',
				callback:function(){
					$('.flash div.canvas').removeClass('zoom');
					lastElement.remove();
				}
			}
		);
	},
	
	zoomIn:function(e){
		e.preventDefault();
		product.setTools(product.showing);
		$('div.flash div.tools li.in-out a').removeClass('active');
		$('div.flash div.tools li.backside a').removeClass('active');
		product.showImage(product.showing,'zoom');
	},
	
	zoomOut: function(e){
		e.preventDefault();
		product.setTools(product.showing);
		$('div.flash div.tools li.in-out a').removeClass('active');
		$('div.flash div.tools li.in-out a').removeClass('active');
		if(product.showing.spinn.length > 0){
			product.showSpinn(e);
		}else{
			product.showImage(product.showing,'main');
		}
		
	},
	
	turnInOut:function(e){
		e.preventDefault();
		product.setTools(product.showing);
		$('div.flash div.tools li.backside a').removeClass('active');
		if($('div.flash div.tools li.in-out a').hasClass('active')){
			if(product.showing.spinn.length > 0){
				product.showSpinn(e);
			}else{
				product.showImage(product.showing,'main');
			}
			$('div.flash div.tools li.in-out a').removeClass('active');
		}else{
			product.showImage(product.showing,'in-out');
			$('div.flash div.tools li.in-out a').addClass('active');
		}
	},
	
	showBackside:function(e){
		e.preventDefault();
		product.setTools(product.showing);
		$('div.flash div.tools li.in-out a').removeClass('active');
		if($('div.flash div.tools li.backside a').hasClass('active')){
			if(product.showing.spinn.length > 0){
				product.showSpinn(e);
			}else{
				product.showImage(product.showing,'main');
			}
			$('div.flash div.tools li.backside a').removeClass('active');
		}else{
			product.showImage(product.showing,'backside');
			$('div.flash div.tools li.backside a').addClass('active');
		}
	}
}


