function redirectResponse(response) {
	if(response.match(/^redirect_to:/)) {
		var redirectUrl = response.replace(/^redirect_to:\s?/g, '');
		document.location = redirectUrl;
		return true;
	} else {
		Modal.show(response);
		return false;
	}
}

$('input, input[type=button], input.button').onDetect(function(){
	$(this).wrapInner('<span class="buttonInner"></span>');
});

$('.claim_company form.new_user_role').onDetect(function(){
	$(this).submit(function(){
		if($(this).find('input[name=terms]:checked').val()){
			return true;
		} else {
			alert('Du må krysse av for "Jeg bekrefter at jeg representerer.."');
			return false;
		}
	});
});

$('.competition_rules').onDetect(function(){
	var rules = this;
	$(rules).hide();
	$('a.show_competition_rules').click(function(){
		$(rules).toggle();
		return false;
	});
});


// Linked search results
// $('.searched_companies .company_link').onDetect(function(){
// 	$(this).click(function(){
// 		var postData = {ll: $('.search_bar #ll').val()};
// 		if($('.search_bar #query').val() && !$('.search_bar #query').hasClass('hint')){
// 			postData.q = $('.search_bar #query').val();
// 		}
// 		var form = '<form method="post" action="'+this.href+'">';
// 		form += '<input type="hidden" name="authenticity_token" value="'+AUTH_TOKEN+'" />';
// 		form += '<input type="hidden" name="q" value="'+postData.q+'" />';
// 		form += '<input type="hidden" name="ll" value="'+postData.ll+'" />';
// 		form += '</form>';
// 		$(form).appendTo('body').submit();
// 		return false;
// 	});
// });

// Edit company decription hint
$('.edit_company').onDetect(function(){
	var editCompany = this;
	var hint = "Her kan jeg skrive noen ord om hvem vi er, hva vi er gode på, og hvorfor kundene bør bruke oss. Eks. store og små oppdrag, gode på presis leveranse, best på pris, lang erfaring, rydder opp etter oss..osv.";
	if($(editCompany).find('#company_description').length > 0){
		var description = $(editCompany).find('#company_description').get(0);
		var addHint = function(){
			if(!$(description).val()){
				$(description).addClass('hint').val(hint);
			}
		}
		$(description).focus(function(){
			if($(description).hasClass('hint')){
				$(description).removeClass('hint').val('');
			}
		});
		$(description).blur(addHint);
		addHint();
		$(editCompany).find('form').submit(function(){
			if($(description).hasClass('hint')){
				$(description).removeClass('hint').val('');
			}
		});
	}
});

// Review body hint
$('.review_form').onDetect(function(){
	var reviewForm = this;
	var hint = "Møtte opp i tide, ferdig som avtalt, god kvalitet, holdt seg innenfor budsjett, ryddet etter seg, god service…etc.";
	if($(reviewForm).find('#review_body').length > 0){
		var description = $(reviewForm).find('#review_body').get(0);
		var addHint = function(){
			if(!$(description).val()){
				$(description).addClass('hint').val(hint);
			}
		}
		$(description).focus(function(){
			if($(description).hasClass('hint')){
				$(description).removeClass('hint').val('');
			}
		});
		$(description).blur(addHint);
		addHint();
		$(reviewForm).submit(function(){
			if($(description).hasClass('hint')){
				$(description).removeClass('hint').val('');
			}
		});
	}
});


// Edit company map
$('.edit_company').onDetect(function(){
	var profileContainer = this;
	$(profileContainer).find('.company_map').each(function(){
		var mapContainer = this;
		var lat = $(profileContainer).find('.latitude').val();
		var lng = $(profileContainer).find('.longitude').val();
		var location = new google.maps.LatLng(62, 9);
		var zoomLevel = 5;

		var updatePosition = function(position){
			$(profileContainer).find('.has_location').val('1');
			$(profileContainer).find('.latitude').val(position.lat());
			$(profileContainer).find('.longitude').val(position.lng());
		}

		if(lat && lng){
			location = new google.maps.LatLng(parseFloat(lat), parseFloat(lng));
			zoomLevel = 14;
		}

		var map = new google.maps.Map(mapContainer, {
			center: location, 
			zoom: zoomLevel,
			mapTypeId: google.maps.MapTypeId.ROADMAP
		});

		var marker = false;
		var createMarker = function(markerLocation){
			var marker = new google.maps.Marker({
				position: markerLocation, map: map, draggable: true
			});
			google.maps.event.addListener(marker, 'click', function() {
				map.set_center(marker.position);
			});
			google.maps.event.addListener(marker, 'dragend', function() {
				updatePosition(marker.position);
			});
			return marker;
		}

		if(lat && lng){
			marker = createMarker(location);
		}

		google.maps.event.addListener(map, 'click', function(args) {
			var position = args.latLng;
			if(!marker){
				marker = createMarker(position);
				updatePosition(marker.position);
			}
			//map.set_center(position);
		});

	});
});

// Upload showcase image
$('.upload_showcase_image').onDetect(function(){
	var uploader = this;
	$(uploader).find('.upload_form').hide();
	$(uploader).find('.show_upload_button button').click(function(){
		$(uploader).find('.upload_form').show();
		$(uploader).find('.show_upload_button').hide();
	});
});

// Company profile map
$('.company_profile .map').onDetect(function(){
	var profileContainer = $(this).closest('.company_profile').get(0);
	var mapContainer = this;

	var lat = $(profileContainer).find('.latitude').val();
	var lng = $(profileContainer).find('.longitude').val();

	var location = new google.maps.LatLng(parseFloat(lat), parseFloat(lng));
	var map = new google.maps.Map(mapContainer, {
		center: location, 
		zoom: 14,
		mapTypeId: google.maps.MapTypeId.ROADMAP
	});

	var marker = new google.maps.Marker({
		position: location, map: map
	});

	$(this).bind('zoom', function(){
		Modal.showMap('<div class="zoomed_map"></div>');
	});
});

// Zoomed company profile map
$('.zoomed_map').onDetect(function(){
	var lat = $('.company_profile .latitude').val();
	var lng = $('.company_profile .longitude').val();
	var location = new google.maps.LatLng(parseFloat(lat), parseFloat(lng));

	var zoomedMap = new google.maps.Map(this, {
		center: location, 
		zoom: 14,
		mapTypeId: google.maps.MapTypeId.ROADMAP
	});
	var zoomedMarker = new google.maps.Marker({
		position: location, map: zoomedMap
	});
});

// New rating submission
$('.company_review .new_review').onDetect(function(){
	var reviewForm = this;
	$(reviewForm).find('.save_rating').hide();
	$(reviewForm).find('.add_review').hide();
	$('.company_review').bind('rating_changed', function(){
		$(reviewForm).find('.add_review').show();
	});
	/*
	$(ratingForm).find('.add_review_button').click(function(){
		$(ratingForm).find('.save_rating').hide();
		$(ratingForm).find('.add_review').show();
	});
	*/
});


// Mobile verification
$('.mobile_verification').onDetect(function(){
	var verification = this;
	$(verification).find('.enter_mobile .invalid_number').hide();
	$(verification).find('.enter_token').hide();
	$(verification).find('.username_and_password').hide();
	var submitMobile = function(){
		var mobile = $(verification).find('.enter_mobile .mobile').val().replace(/[^\d]/g, '');
		var data = {'mobile_token[mobile]': mobile, authenticity_token: AUTH_TOKEN};
		if(mobile.match(/^[49][\d]{7}$/)){
			$.post('/mobile_tokens', data, function(json){
				$(verification).find('.enter_mobile').slideUp('fast');
				$(verification).find('.enter_token').slideDown('fast');
				$(document).trigger('tokenEntered');
			});
		} else {
			$(verification).find('.enter_mobile .invalid_number').html('Dette er ikke et gyldig mobilnummer!').show();
		}
		return false;
	}
	$(verification).find('.enter_mobile form.submit_mobile_form').submit(submitMobile);
	$(verification).find('.enter_mobile .submit_mobile').click(submitMobile);
	
	// Username and password login
	$(verification).find('a.show_username_and_password').click(function(){
		$(verification).find('.enter_mobile').hide();
		$(verification).find('.enter_token').hide();
		$(verification).find('.username_and_password').show();
		return false;
	});
});

// Ajax modal forms
$('#modal_container .mobile_verification .enter_token form, #new_review, #modal_container .confirm_email form').onDetect(function(){
	$(this).submit(function(){
		$(this).ajaxSubmit(function(response){
			if(!redirectResponse(response)){
				Modal.show(response);
			}
		});
		return false;
	});
});

// Ajax modal links
$('a.login, a.report, a.must_login, a.login_popup').onDetect(function(){
	$(this).click(function(){
		$.get(this.href, {}, function(response){
			if(!redirectResponse(response)){
				Modal.show(response);
			}
		});
		return false;
	});
});

// Handle login redirections
$('.redirect_to').onDetect(function(){
	var url = document.location.toString();
	$(this).val(url);
});

/*
$('#new_rating').onDetect(function(){
	$(this).submit(function(){
		$(this).ajaxSubmit(function(response){
			if(!redirectResponse(response)){
				Modal.show(response);
			}
		});
		return false;
	});
});


$('.modal_container .confirm_email form').onDetect(function(){
	$(this).submit(function(){
		$(this).ajaxSubmit(function(response){
			if(!redirectResponse(response)){
				Modal.show(response);
			}
		});
		return false;
	});
});
*/


// Change password form
$('.edit_user').onDetect(function(){
	var userForm = this;
	$(userForm).find('.new_password').hide();
	$(userForm).find('.show_new_password a').click(function(){
		$(userForm).find('.show_new_password').hide();
		$(userForm).find('.new_password').show();
		return false;
	});
});

$('button.update_official_name').onDetect(function(){
	$(this).click(function(){
		var button = this;
		var organization_number = $(button).closest('form').find('#company_organization_number').val();
		var field = $(button).closest('form').find('#company_official_name').get(0);
		$(button).html('Laster..');
		$.getJSON("/firma/brreg.json?organization_number="+organization_number, function(json) {
			var newName = json['company']['official_name'];
			$(field).val(newName);
			$(field).closest('form').find('#official_name_display').val(newName);
			$(button).html('Hent');
		});
	});
});

// Edit review
/*
$('.review .actions .edit').onDetect(function(){
	$(this).click(function(){
		alert('Denne funksjonaliteten kommer');
		return false;
	});
});
*/

// Add recommendation
$('.review .actions .recommend').onDetect(function(){
	$(this).click(function(){
		var link = this;
		$.get(this.href, {}, function(){
			$(link).replaceWith('<strong class="recommend">Bra!</strong>');
		});
		return false;
	});
});

// Share on Facebook
$('a.facebook').onDetect(function(){
	$(this).click(function(){
		window.open('http://www.facebook.com/sharer.php?u='+encodeURIComponent(this.href)+'&t='+encodeURIComponent(document.title),'sharer','toolbar=0,status=0,width=626,height=436');
		return false;
	});
});

// Share on Twitter
$('a.twitter').onDetect(function(){
	$(this).click(function(){
		document.location = "http://twitter.com/home?status="+encodeURIComponent(document.title)+': '+encodeURIComponent(this.href);
		return false;
	});
});

// Load more comments
$('.comments .commentsBlock').onDetect(function(){
	var commentsDiv = this;
	var loadMoreComments = function(){
		$.get(this.href, {}, function(results){
			$(commentsDiv).html('').prepend(results).hide().fadeIn();
		});
		return false;
	}
	if($(this).find('.loadMoreComments a').length > 0) {
		$(this).find('.loadMoreComments a').click(loadMoreComments);
	} else {
		$(this).closest('.answer').find('.load_more_comments_link').click(loadMoreComments);
	}
});

// Comments form for reviews and answers
$('.comments form').onDetect(function(){
	var form = this;
	var commentHint = "Skriv kommentar...";

	$(this).find('.commentTrigger input').addClass('hint').val(commentHint);

	// Hint on blur
	$(form).find('.commentInput textarea').focus(function(){
		if($(this).hasClass('hint')){
			$(this).removeClass('hint').val('');
		}
	});
	$(form).find('.commentInput textarea').blur(function(){
		if(!$(this).val()){
			$(this).addClass('hint').val(commentHint);
		}
	});

	$(form).find('.commentInput').hide();
	var showInputs = function(){
		$(form).find('.commentTrigger').html('').hide();
		$(form).find('.commentInput').show();
		$(form).find('.commentInput textarea').focus();
		$(form).closest('.answer').addClass('with_comments');
		/*
		if($(this).hasClass('replace')){
			$(this).parent().hide();
		}
		*/
		return false;
	}

	// TODO: make work
	$(form).closest('.review').find('.actions a.add_comment').click(showInputs);
	$(form).closest('.answer').find('.actions a.add_comment').click(showInputs);

	$(form).find('.commentTrigger input').focus(showInputs);
});


// Advanced search
$('.advanced_search').onDetect(function(){
	var advancedSearch = this;
	$(advancedSearch).hide();
	$('.hint').find('.advanced_search_link').click(function(){
		$(advancedSearch).slideDown();
	});

	// Detect search bar
	$('.search_bar').each(function(){
		if(this.searchBar){
			var searchBar = this.searchBar;
			$(searchBar.Location).bind('change', function(){
				var lat = searchBar.Location.latLng.lat();
				var lng = searchBar.Location.latLng.lng();
				if(lat && lng) {
					$(searchTips).find('#searcher_ll').val([lat, lng].join(','));
				}
			});
		}
	});
});



$('#welcomeNotice').onDetect(function(){

	var closeLink = $(this).find('a.close_link').get(0);
	closeLink.container = this;

	$(closeLink).click(function(){
		$(this.container).slideUp(200);
		$.cookie('welcomeNotice', 'hide', { expires: 7 });
		return false;
	});
	
	var container = this;
	$(container).hide().css('visibility', 'visible');
	if($.cookie('welcomeNotice') != 'hide'){
		setTimeout(function(){
			$(container).slideDown();
		}, 500);
	}
});



$(document).ready(function(){
	
	$('.gjtabs').tabs({
		showLast: true
	});
	$('.companytabs').tabs({
		// fxAutoHeight: true
		showLast: true,
		onShow: function(container){
			if(container.id == "map_tab"){
				if($(container).find('.map').length < 1) {
					$(container).append('<div class="map" />');
					$(document.body).trigger('modified');
				}
			}
		}
	});
	

	
	// modal styling
	//$.post('/firma/1258/vurderinger', {}, function(response){Modal.show(response);});
	//$.get('/users/login', {}, function(response){Modal.show(response);});
	//$.get('/brukere/4/confirm_email', {}, function(response){Modal.show(response);});
	//kart på firmaprofil
	//$.get('/firma/1258/report', {}, function(response){Modal.show(response);});
	//$.get('/firma/1815/anbefalinger/1/report', {}, function(response){Modal.show(response);});
	
	$('#flash_notice').animate({foo:1}, 5000).fadeOut(500);
	// ratings fancypants
	$('form .thumb').hover(function(){
		var thumbs = $('#1,#2,#3');
		if($(this).attr('id') == 2) thumbs = $('#1,#2');
		else if($(this).attr('id') == 1) thumbs = $('#1');
		if (!thumbs.hasClass('clicked')) {
			//thumbs.css({backgroundPosition:"0 -41px"});
			thumbs.addClass('active');
		}
	},function(){
			var thumbs = $('form .thumb');
			if (!thumbs.hasClass('clicked')){ 
				thumbs.removeClass('active');
				//thumbs.css({backgroundPosition:"0 -82px"});
			}
	});

	$('form .thumb').click(function(){

		var thumbs = $('#1,#2,#3');
		//thumbs.css({backgroundPosition:"0 -82px"});
		thumbs.removeClass('active');
		if($(this).attr('id') == 2) thumbs = $('#1,#2');
		else if($(this).attr('id') == 1) thumbs = $('#1');
		//thumbs.css({backgroundPosition:"0 -41px"})
		thumbs.addClass('active');
		$('form .thumb').addClass('clicked');
		rating = $(this).attr('id');
		$('input#review_rating').val(rating);

		// Check logged in state
		if(!window.userHasProfile){
			var loginUrl = $(this).closest('form').find('.login_link').get(0).href;
			$.get(loginUrl, {}, function(response){
				if(!redirectResponse(response)){
					Modal.show(response);
				}
			});
		} else {
			$('.company_review').trigger('rating_changed');
		}
	});

	// I can has rating
	var rating = $('#review_rating').val();
	if(rating != 0) {
		$('form .thumb').addClass('clicked');
		if(rating == 3) $('#1,#2,#3').css({backgroundPosition:"0 -41px"});
		else if (rating == 2) $('#1,#2').css({backgroundPosition:"0 -41px"});
		else $('#1').css({backgroundPosition:"0 -41px"});
	}
	/* concaf doubleclicks the internetz
	$('#main .process, #modal_container .process').click(function(){
		$(this).after("<button>Lagrer...</button");
		$(this).hide();
	}); */

	
	// fancybox
	 $('#showcase a, .question_images.showcase a').fancybox({
		'overlayShow': false,
		'overlayOpacity': 0.65
	});
});
