/* Author: Queensbridge.se */

$(document).ready( function() { q.load(); });

var q = {
	
	text : {
		error : {
			'1' : 'Oj, du glömde att välja om den vita lögnen<br/>ska skickas via mobil eller mail.',
			'2' : 'Nu blev något lite fel.<br/>Skriv in alla nummer utan mellanslag<br/>i en följd så ska det gå vägen.',
			'3' : 'Nu blev något lite fel.<br/>Skriv in en mailadress i formatet<br/>abc@abc.se så ska det gå vägen.',
			'4' : 'Du glömde att välja om den vita lögnen<br/>ska skickas till en kompis eller till dig själv.',
			'5' : 'Du glömde att välja när den vita lögnen ska<br/>skickas - direkt eller på Klamydiamåndagen.',
			'6' : 'Just nu är det något galet med systemet.<br/>Vi ber om ursäkt för detta och ber<br/>dig testa snart igen.',
			'7' : 'Klockslaget du angett ser lite konstigt ut.<br/>Ange det i formatet 12:34.'			
		}
	},
	
	loaded : false,
	itemsToLoad : null,
	
	load : function() {
	
		// Check for iOS
		if( navigator.platform == 'iPad' || navigator.platform == 'iPhone' || navigator.platform == 'iPod' ) {
			q.iOS.init();
		}   		
		
		// Load images used in animations before playing the animation
		if( typeof(preloads) != 'undefined' ) {
			$('body').append('<div id="page-loader"></div>');
			$('body').append('<div id="preload">'+preloads+'</div>');
			q.itemsToLoad = $('#preload img').length;
			$('#preload img').load(function() {
				--q.itemsToLoad;
				q.checkLoad();
			});
		} else { q.loaded = true; }
		q.checkLoad();
		
		q.form.init();
		q.filmPlayer.init();
		q.scroll.page();
		if( $('#select-list').is('div') ) {
			q.county.init();
		}
		q.subpages.init();
	},
	
	checkLoad : function() {
		if( q.itemsToLoad <= 0 ) { q.loaded = true; }
		if( q.loaded ) {
			$('#preload').remove();
			$('#page-loader').fadeOut(250, function() {$(this).remove(); });
			q.init();
		}
	},
	
	init : function() {
		q.stage.init();
		q.popup.init();				
	},
	
 	/**************************************************************/
 	/*                                                            */
 	/* Functions to fix position fixed on iOS                     */
 	/*                                                            */            
 	/**************************************************************/
 	
 	iOS : {
 	    
 	    is : false,
 	
 	    init : function() {
 	        q.iOS.is = true;
 	        //$('#nav').css('position', 'absolute');
 	        window.scrollTo(0, 1);
 	    }
 	    
 	},	
	
	subpages : {
		init: function() {
			$('#main a.btn-next-subpage').click( function() {
				var p = $(this).parents('div.subpages:first');
				$(p).animate({
					left: - $(p).find('div.subpage:first').width()
				}, 250);
				return false;
			});
		}
	},
	
	county : {
		sList : null,
		scrollPos : 0,
		init : function() {
			$('#select-list').after('<a href="' + $('#select-list li.checked a').attr("href") + '" id="btn-choose-county" target="_blank">Gå vidare</a>');
			$('#select-list ul:first').prepend('<li class="label">' + $('#select-list li.checked a').html() + '</li>');
			
			$('#select-list li.label').click(function() {
				$('#select-list').addClass('active');
				q.county.sList.scrollToY(q.county.scrollPos);
			});
			
			$('#select-list a').click( function() {
					$('#btn-choose-county').attr('href', $(this).attr('href') );
					$('#select-list li.label').html( $(this).html() );
					$('#select-list li.checked').removeClass('checked');
					$(this).parent().addClass('checked');					
					$('#select-list').removeClass('active');
					q.county.scrollPos = q.county.sList.getContentPositionY()
					q.county.sList.scrollToY(0);
				return false;
			});
			
			var element = $('#select-list > div.select-list-wrapper').jScrollPane({
				verticalGutter: 10,
				verticalDragMinHeight: 20,
				verticalDragMaxHeight: 20,
				showArrows: false,
				hideFocus: true
			});
			
			q.county.sList = element.data('jsp');
			$('#select-list').removeClass('active');
			
		}
	},
	
	scroll : {
		popup : function() {
			$('#popup div.scroll').jScrollPane({
				verticalGutter: 20,
				verticalDragMinHeight: 20,
				verticalDragMaxHeight: 20,
				contentWidth: 550,
				hideFocus: true
			});
			$('#popup div.scroll').append('<div class="cover-top"></div><div class="cover-bottom"></div>');
		},
		page : function() {
			$('#main div.scroll').jScrollPane({
				verticalGutter: 20,
				verticalDragMinHeight: 20,
				verticalDragMaxHeight: 20,
				contentWidth: 325,
				showArrows: true,
				hideFocus: true				
			});
		}		
	},
	
	filmPlayer : {
		
		flashPlayer: 'js/libs/jwplayer/player.swf',
		
		init: function() {
			// Find all players and turn it into jwPlayer
			$('#main div.filmplayer').each(function() {			
				jwplayer($(this).attr('id')).setup({
					//flashplayer: q.filmPlayer.flashPlayer,
					file: $(this).data('file'),
					image: $(this).data('image'),
					width: '350',
					height: '236',
					skin: 'js/jwskins/klamydia/klamydia.zip',
					modes: [
						{type: 'flash', src: q.filmPlayer.flashPlayer},
						{type: 'html5'},
						{type: 'download'}
					]
				});
				
			});
		}
	},
	
	form : {
	
		init : function() {
			if( $('#lies-radios').is('div') ) { q.form.initRadios(); }
			if( $('#form-send').is('form') ) { q.form.send.init(); }
		},
		
		initRadios : function() {
			var activeLi = $('#lies-radios input:checked').parent();
			$(activeLi).addClass('active');
			var i = $('#lies-radios li').index(activeLi);
			$('#media-wrapper li:eq('+i+')').addClass('active').css({left: 0});
			$('#main div.lies-texts-wrapper:first img:eq('+i+')').addClass('active');
			$('#lies-radios input').click( q.form.changeMedia );
			
			$('body form:first button[type="submit"]').click(function() {
				var delay = q.stage.animate.hide();
				setTimeout('document.forms[0].submit()', delay);
				return false;
			});
		},
		
		changeMedia : function() {
			if( !$(this).parent().hasClass('active') ) {
				$('#lies-radios li.active').removeClass('active');
				var activeLi = $(this).parent();
				$(activeLi).addClass('active');
				var i = $('#lies-radios li').index(activeLi);
				var oldMedia = $('#media-wrapper li.active');
				var newMedia = $('#media-wrapper li:eq('+i+')');
				
				// Update text
				var obj = $('#main div.lies-texts-wrapper:first')
	  		var easeout = q.stage.animate.options.easeout;
	  		var easein = q.stage.animate.options.easein;	  		
	  		var	delay = 0;
	  		var speed = q.stage.animate.options.speed;				
		  	var endPos = '-' + Math.ceil( q.stage.diff.left + $(obj).outerWidth() + 50 );
				$(obj).delay(delay).animate({
				  left: endPos
				}, 250, function() {
					//var obj = $('#main div.lies-texts-wrapper:first')
					$(obj).find('img:visible').hide();
					$('#lie-text-' + (i+1)).show();
					//startPos 	= '-' + Math.ceil( q.stage.diff.left + $(this).outerWidth() + 50 );
					//$(this).css({ left: startPos + 'px'});
					$(this).delay(delay).animate({
						left: $(this).data('left')
					}, 750, easein);						
				});				
				
				$(newMedia).css({ left: '-350px'});
				$(newMedia).animate({ left: 0}, 500, function() { $(this).addClass('active'); });
				$(oldMedia).removeClass('active')
				$(oldMedia).animate({ left: '350px'}, 500, function() {
					$(this).css({ left: '-350px' }); 
					
					// Do we have a video player that shoud be stopped?
					if( $(this).find('div:first').is('div') ) {
						var mediaID = $(this).find('div:first').attr('id');
						jwplayer( mediaID.substring(0, mediaID.length-8) ).stop();					
					}					
					
				});
			}
		},
		
		disableField : function(obj, disable) {
			if( disable && !$(obj).hasClass('disable') ) {
				$(obj).addClass('disabled');
				$(obj).bind('focus', q.form.triggerDisabled);
			} else {
				$(obj).removeClass('disabled');
				$(obj).unbind('focus', q.form.triggerDisabled);				
			}
		},
		
		triggerDisabled : function(e) { $(this).blur(); },
		
		send : {
			
			targetRadios : null,
			
			init : function() {
				$('#form-send').submit(function() { return false; });
				q.form.send.targetRadios = $('#form-send div.input-target:first input[type="radio"]');
				$(q.form.send.targetRadios).click( q.form.send.changeTarget );
				q.form.disableField('#input-time', true);
				$('#btn-send_mobile,#btn-send_mail').click(q.form.send.submit);
			},
			
			changeTarget : function() {
				if( !$(this).parent().hasClass('active') ) {
					var siblings = $(q.form.send.targetRadios).filter('[name="'+this.name+'"]:not(#'+this.id+')');
					$(siblings).parent().removeClass('active');
					$(this).parent().addClass('active');
					if( this.id == 'when-2' ) {
						q.form.disableField('#input-time', false);
					} else if( this.id == 'when-1' ) {
						q.form.disableField('#input-time', true);
					}
				}
			},
			
			submit : function() {
				
				var data = $('#form-send').serialize();
			
				// General error handling
				// Check for target
				if( !$('#form-send input[name="target"]:checked').is('input') ) {
					q.popup.show('error', q.text.error['4']);
					return false;
					
				// Check for time					
				} else if( !$('#form-send input[name="when"]:checked').is('input') ) {
					q.popup.show('error', q.text.error['5']);
					return false;					
				} else if( $('#when-2:checked').is('input') && $('#input-time').val().search( new RegExp($('#input-time').attr('pattern')) ) == -1) {
					q.popup.show('error', q.text.error['7']);
					return false;
				}
				
				var url = '/flash/phone_post.ashx';
				if( this.id == 'btn-send_mobile' ) {
					// Mobile error handling
					var regEx = new RegExp( $('#input-mobile').attr('pattern') );
					if( $('#input-mobile').val().search( regEx ) == -1 ) {
						q.popup.show('error', q.text.error['2']);
						return false;	
					}
					data+='&type=mobile';
				} else {
					// Mail error handling				
					var regEx = new RegExp( $('#input-mail').attr('pattern') );
					if( $('#input-mail').val().search( regEx ) == -1 ) {
						q.popup.show('error', q.text.error['3']);
						return false;	
					}
					data += '&type=email';
					url = '/flash/email_post.ashx';
				}

				// If no errors we send the form
				$.ajax({
					url: url,
					data : data,
					type: $('#form-send').attr('method'),
					dataType : 'json',
					error : function(jqXHR, textStatus, errorThrown) {
						q.popup.show('error', q.text.error['6']);
					},
					success : function(data) {
						if( data.status == 'ok' ) {
							q.popup.show('confirmation', data.msg);
						} else {
							q.popup.show('error', data.msg);
						}
					}
				})
				return false;
			}
		}
	},
	
	popup : {
		init : function() {
			$('#popup-close').live('click', q.popup.hide );
			$('#main a.ajax').click( q.popup.loadAjax );
		},
		loadAjax : function() {
			$.ajax({
				url: this.href,
				type: 'get',
				dataType: 'HTML',
				success : function(data) {
					q.popup.show('large', data);
				}
			});
			return false;
		},
	  show : function( type, msg) {
	  	if($('#popup').is('div') ) { return false; }
	  	$('body').append('<div id="popup" class="'+type+'"><div class="skippy content">' + msg + '</div><a href="#" id="popup-close">Stäng</a></div>');
	  	if( $('#popup div.scroll').is('div') ) { q.scroll.popup(); }
	  	var goal = $('#popup').position().top;
	  	$('#popup').css({top: '-' + ( $('#popup').outerHeight() + q.stage.diff.top ) + 'px', marginTop: q.stage.diff.top + 'px' }).animate({
	  		top: goal
	  	}, q.stage.animate.options.speed, q.stage.animate.options.easein);
	  	return false;
	  },
	  
	  hide : function() {
	  	$('#popup').animate({top: '-' + ( $('#popup').outerHeight() + q.stage.diff.top ) + 'px' }, q.stage.animate.options.speed, q.stage.animate.options.easeout, function() {
	  		$(this).remove();
	  	});
	  	return false;
	  }
	},
	
	stage : {
		
		height: null,
		width : null,
		mainHeight : null,
		diff : {
			top : null,
			left : null
		},
		adjustCenterHeight : 50,
		adjustCenterWidth : 0,		
		
		init : function() {
			q.stage.center();
			q.stage.animate.init();
			q.stage.addFrames();
			$(window).resize(q.stage.center);			
		},
		
		addFrames : function() {
			$('#media-wrapper').append('<div class="border-top"></div><div class="border-right"></div><div class="border-bottom"></div><div class="border-left"></div>');					
			$('#lies-radios label').append('<span class="img-frame"></span>');
		},
		
		center : function() {
			q.stage.height = $(document).height();
			q.stage.width = $(document).width();
			q.stage.mainHeight = $('#main').height();
			q.stage.mainWidth = $('#main').width();
			
			var heightDiff = q.stage.height - q.stage.mainHeight;
			var widthDiff = q.stage.width - q.stage.mainWidth;
						
			q.stage.diff.top	= Math.ceil( ( heightDiff > q.stage.adjustCenterHeight * 2 ) ? heightDiff/2 - q.stage.adjustCenterHeight : heightDiff/2 );
			q.stage.diff.left	= Math.ceil( ( widthDiff > q.stage.adjustCenterWidth * 2 ) ? widthDiff/2 - q.stage.adjustCenterWidth : widthDiff/2 );
			
			$('#main').css({
				marginTop: q.stage.diff.top + 'px'				
			});
			$('#container').height( q.stage.height );
			if( $('#popup').is('div') ) {
				$('#popup').css({ marginTop: q.stage.diff.top  });
			}			
		},
		
		animate : {
			
			opacitySpeed : null,
			
			options : {
				direction : 'top',
				easein : 'easeOutBack2',
				easeout : 'easeInBack',
				delay : 0,
				speed : 750
			},
			
			init : function() {
				q.stage.animate.opacitySpeed = $.support.opacity ? 250 : 0;
				q.stage.animate.hover();			
				q.stage.animate.show();
				if( $('#animation-mobile').is('span') ) {
					q.stage.animate.blinkingEyesMobile();
					q.stage.animate.blinkingEyesMail();
				}
				
				// Fix IE border on click
				if( !$.support.opacity ) { $('#map-order area').focus( function() { $(this).blur(); }); }
				
				// Make internal links do outro animation before changing page
				$('#main a:not([href^="http://"]):not([href^="#"]):not(.ajax),#map-order area').click(function() {
					var delay = q.stage.animate.hide();
					var url = $(this).attr('href');
					setTimeout('window.location.href="' + url + '"', delay);
					return false;
				});
				
				// Add Spritely animations
				if( $('#elephant-large').is('div') ) {
					$('#elephant-large').sprite({fps: 3, no_of_frames: 4});
				}
				if( $('#elephant-small').is('div') ) {
					$('#elephant-small').sprite({fps: 3, no_of_frames: 4});
				}

			},
			
			blinkingEyesMobile : function() {
				$('#animation-mobile').hide(150, function() { $(this).delay(30).show(); });
				var minVal = 1000;
				var maxVal = 3000;
				var time = minVal+(Math.random()*(maxVal-minVal));
				time = Math.floor(time);
				setTimeout('q.stage.animate.blinkingEyesMobile()', time);
			},
			
			blinkingEyesMail : function() {
				$('#animation-mail').hide(150, function() { $(this).delay(30).show(); });
				var minVal = 1000;
				var maxVal = 3000;
				var time = minVal+(Math.random()*(maxVal-minVal));
				time = Math.floor(time);
				setTimeout('q.stage.animate.blinkingEyesMail()', time);
			},			
			
			show : function() {
				var aniObjs = $('#main .animate');
				var direction = null;
				var easein = null;
				var delay = null;
				var speed = null;
				var startPos = null;
				var highestSpeedAndDelay = 0;
				
				// Hide scroll
				//$('body').css('overflow', 'hidden');
				
				$(aniObjs).each(function() {
					$(this).data('top', $(this).css('top'));
					$(this).data('left', $(this).css('left'));
					
					// Check for options
					direction = ( typeof($(this).data('direction')) != 'undefined' ) ? $(this).data('direction') : q.stage.animate.options.direction;
					easein 		= ( typeof($(this).data('easein')) != 'undefined' ) ? $(this).data('easein') : q.stage.animate.options.easein;
					delay 		= ( typeof($(this).data('delay')) != 'undefined' ) ? $(this).data('delay') : q.stage.animate.options.delay;
					speed 		= ( typeof($(this).data('speed')) != 'undefined' ) ? $(this).data('speed') : q.stage.animate.options.speed;
					
	  			highestSpeedAndDelay = ( (delay+speed) > highestSpeedAndDelay ) ? delay+speed : highestSpeedAndDelay;
	  			
					if( direction == 'right' || direction == 'left' ) {					
						startPos 	= ( direction == 'left' ) ? '-' + Math.ceil( q.stage.diff.left + $(this).outerWidth() + 50 ) : q.stage.width;
						$(this).css({ left: startPos + 'px'});
						$(this).css('visibility', 'visible').delay(delay).animate({
							left: $(this).data('left')
						}, speed, easein);
					} else {
						startPos 	= ( direction == 'top' ) ? '-' + Math.ceil( q.stage.diff.top + $(this).outerHeight() + 50 ) : q.stage.height;
						$(this).css({ top: startPos + 'px'});
						$(this).css('visibility', 'visible').delay(delay).animate({
							top: $(this).data('top')
						}, speed, easein);					
					}
				});
				
				// Show scroll
				//setTimeout(function(){$('body').css('overflow', 'visible'); $('#main').css('overflow', 'hidden')}, highestSpeedAndDelay);
			},
			
			hide : function() {
				var aniObjs = $('#main .animate');
				var direction = null;
				var easeout = null;
				var delay = null;
				var speed = null;
				var endPos = null;
				var highestSpeedAndDelay = 0;
				
				// Hide scroll
				$('body').css('overflow', 'hidden');
				//$('#main').css('overflow', 'visible')	
				
				$(aniObjs).each(function() {
				
					// Check for options
	  			direction = ( typeof($(this).data('direction')) != 'undefined' ) ? $(this).data('direction') : q.stage.animate.options.direction;
	  			easeout		= ( typeof($(this).data('easeout')) != 'undefined' ) ? $(this).data('easeout') : q.stage.animate.options.easeout;
	  			delay 		= ( typeof($(this).data('delay')) != 'undefined' ) ? $(this).data('delay') : q.stage.animate.options.delay;
	  			speed 		= ( typeof($(this).data('speed')) != 'undefined' ) ? $(this).data('speed') : q.stage.animate.options.speed;
	  			
	  			highestSpeedAndDelay = ( (delay+speed) > highestSpeedAndDelay ) ? delay+speed : highestSpeedAndDelay;
					
					
					if( direction == 'right' || direction == 'left' ) {
		  			endPos	= ( direction == 'left' ) ? '-' + Math.ceil( q.stage.diff.left + $(this).outerWidth() + 50 ) : q.stage.width;
						$(this).delay(delay).animate({
							left: endPos
						}, speed, easeout);
					} else {
		  			endPos	= ( direction == 'top' ) ? '-' + Math.ceil( q.stage.diff.top + $(this).outerHeight() + 50 ) : q.stage.height;
						$(this).delay(delay).animate({
							top: endPos
						}, speed, easeout);					
					}
					
					
				});
				
				return highestSpeedAndDelay;
				
			},
			
			hover : function() {
				$('#main .animate-hover').hover(
					function() {
						$('#' + $(this).data('hover') ).stop().fadeTo(q.stage.animate.opacitySpeed, 1, function() {
							if( !$.support.opacity ) {
								this.style.removeAttribute('filter');
							}
						});
					},
					function() {
						$('#' + $(this).data('hover') ).stop().fadeTo(q.stage.animate.opacitySpeed, 0);					
					}					
				);
			}
			
		}	
	}
}


jQuery.extend( jQuery.easing,
{
	easeInBack2: function (x, t, b, c, d, s) {
		if (s == undefined) s = 1.70158;
		return c*(t/=d)*t*((s-2)*t - s) + b;
	},
	easeOutBack2: function (x, t, b, c, d, s) {
		if (s == undefined) s = 1.70158;
		return c*((t=t/d-1)*t*((s+2)*t + s) + 1) + b;
	}
});











