﻿$(document).ready(function(){
	
	// All input fields assigned with the class 'default' will
	// get their default values hidden when clicked, and reset again
	// if the user leaves the field empty or hasnt changed anything
	// The searchfields needs an accompanying hidden input with the
	// same id but suffixed "-default" that contains the default value.
	$("input.default").each(function() {
		var defaultVal = $(this).next(".defaultvalue").val();
		if (!$(this).val())
			$(this).val(defaultVal);
		$(this).focus(function() {
			if ($(this).val() == defaultVal)
				$(this).val("");
		});
		$(this).blur(function() {
			if ($(this).val() == "")
				$(this).val(defaultVal);
		});
	});
	$("textarea.default").each(function() {
		var defaultVal = $(this).next(".defaultvalue").val();
		if (!$(this).val())
			$(this).text(defaultVal);
		$(this).focus(function() {
			if ($(this).text() == defaultVal)
				$(this).text("");
		});
		$(this).blur(function() {
			if ($(this).text() == "")
				$(this).text(defaultVal);
		});
	});
	
	// Validate forms¸
	$(".form .validate").click(function() {
		if(validate($(this).parent())) {
			$(this).parent().submit();
			return false;
		}
		else {
			return false;
		}
	});
	
	$(".form .alertandvalidate").click(function() {
		if(validate($(this).parent())) {
			if(confirm("Genom att klicka OK på denna rutan godkänner jag Handelsnytts publiceringsregler. Om INTE, tryck avbryt/cancel annars tryck OK för att skicka kommentaren.")){
				$(this).parent().submit(); 
				return false;
			} else {
				return false;
			}
		}
		else {
			return false;
		}
	});
	
	$("#tip-form .validate").click(function() {
		if(validate($(this).parent().parent())) {
			sendForm();
			return false;
		}
		else {
			return false;
		}
	});
	
	
	externalLinks();
	
	// Clear graphical error on required fields when correcting it
	$("input.required, textarea.required")
	.keydown(function() {
		clearError($(this));			
	});
	
	// Max words function.
	$("textarea.maxword").keyup(function(event) {
		if(event.keyCode != 8) {
			var maxWords = $(this).attr("maxword");
			nWords = $(this).val().split(/[\s]+/);
			if(nWords.length > maxWords) {
				if(typeof(alertDisplayed) === 'undefined') {
					alert("Max "+maxWords+" ord.");
					alertDisplayed = true;
				}
				
				var val = "";
				for(var i = 0; i < maxWords; i++) {
					i+1 == maxWords ? val += nWords[i] : val += nWords[i]+" ";
				}
				$(this).val(val);
			}
		}
	});
	
	// Trigger the search function when clicking the search button
	$(".search-submit")
	.click(function() {
		submitsearch($(this));
		return false;
	});
	
	// Trigger the search function when using the enter key
	$(".search-input").keydown(function(e) {
		if (e.keyCode == 13) {
			var valobj = $(this).siblings($("a.search-submit"));
			submitsearch($(valobj));
			return false;
		}
	});
	
	// Comment form toggling
	$(".toggle-form").hide(); // hide form
	$(".toggle").click(function() {
		$(this).closest($(".toggle-form").slideToggle(200));
		return false;
	});

	// QA toggle
	$("#qa-list .toggle-content").hide();
	$("#qa-list a.q-toggle").click(function() {
		$(this).parent().next(".toggle-content").slideToggle(200);
		$(this).toggleClass("expanded");
		return false;
	});
	// Print button
	$("a.print-page").click(function() { window.print(); return false; });
});



autoload = function() {
	this.inProgress = false;
	this.ajaxLoader = "";
	this.holder = "";
	this.page = 1;
	this.itemsPerPage = 10;
	this.query = "";
	this.lastRow = 0;
	this.serverPostPage = "";
	this.noMoreResultsMessage = "<p>Inga fler sökresultat.</p>";
	
	// Hides pagination
	this.hidePagination = function(div) {
		$(div).hide();
	}
	
	// Sets number of item per page.
	this.setItemsPerPage = function(nr) {
		this.itemsPerPage = nr;
	}
	
	// Sets ajaxLoader icon.
	this.setAjaxLoader = function(div) {
		this.ajaxLoader = div;
	}
	
	// Sets holder for new content to load into.
	this.setHolder = function(div) {
		this.holder = div;
	}
	
	// Sets target page for ajax posts.
	this.setServerPostPage = function(url) {
		this.serverPostPage = url;
	}
	
	// Sets "no more results" message.
	this.setNoMoreResultsMessage = function(text) {
		this.noMoreResults = text;
	}
	
	// Sets query.
	this.setQuery = function(query) {
		this.query = query;
	}
	
	// Sets lastrow.
	this.setLastRow = function(lastRow) {
		this.lastRow = lastRow;
	}
	
	// Shows ajaxLoader icon.
	this.showAjaxLoader = function() {
		if(this.ajaxLoader != "") { $(this.ajaxLoader).show(); }
	}
	
	// Hides ajaxLoader icon.
	this.hideAjaxLoader = function() {
		if(this.ajaxLoader != "") { $(this.ajaxLoader).hide(); }
	}
	
	// Initiates autoload function.
	this.init = function() {
		autoload = this;

		$(window).scroll(function() {
			if (!autoload.inProgress  && $(window).scrollTop() > $(document).height() - $(window).height() - 200) {
				autoload.inProgress = true;
				autoload.showAjaxLoader();
				autoload.page++;
				$.ajax({
					type: "GET",
					url: autoload.serverPostPage,
					cache: false,
					contentType: "application/x-www-form-urlencoded;charset=utf-8",
					data: "perpage="+autoload.itemsPerPage+"&page="+autoload.page+"&query="+autoload.query+"&lastRow="+autoload.lastRow,
					success: function(data) {
						$(autoload.holder).append(data);
						if($(autoload.holder).children("#counter").html() == autoload.itemsPerPage) {
							autoload.inProgress = false;
							autoload.hideAjaxLoader();
						} else {
							$(autoload.ajaxLoader).html(autoload.noMoreResultsMessage);
						}
						$(autoload.holder).children("#counter").remove();
					}
				});
			}
		});
	}
}


function externalLinks() {
	$('a[rel*=external]').click( function() {
		window.open(this.href);
		return false;
	});
}

// 
// Clear error on required fields
//
function clearError(obj) {
	if (obj.val())
		obj.removeClass("has-error");
}

//
// Show and hide the status text for a form
//
function setStatus(obj, val) {
	obj.find(".status p").hide();
	if(val) {
		obj.children().hide();
		obj.find(".status .success, .status").show();
	}
	else {
		obj.find(".status .field-error, .status").show();
	}
}

//
// Validates all input and textarea children of the passed object.
// Adds a yellow background on required input/textareas that are not correctly filled.
//
function validate(obj) {
	
	var validated = true;
	
	// Dont send anything if one of the fields are equal to the default vaule
	obj.find("input, textarea").each(function() {
		if($(this).val() == $(this).next(".defaultvalue").val()) {
			validated = false;
		}
	});
	
	obj.find(".required").each(function() {
		if($(this).val() == "" || $(this).val() == $(this).next(".defaultvalue").val()) {
			$(this).addClass("has-error");	
			validated = false;
		}
	});

	if (!validated) {
		setStatus(obj, false);
		return false;
	}
	else {
		//setStatus(obj, true);
		return true;
	}
}

//
// Article slideshow
//
$(function() {

	var elms = [];
	var instantiated = false;
	var index = 0;
	var nextTitle = "Se bilder";
	
	var toggleTo = function(elm) {
		if ($(".slideshow").length == 0) {
			var wrapper = $(".image-container ul").parent();
			wrapper.html("<div class=\"slideshow\"><img src=\"" + elms[elm].src + "\"/><p class=\"image-description\">" + elms[elm].caption + "</p></div>");
			$(".slideshow img").load( function() {
				if (instantiated) {
					$(".slideshow").fadeIn("slow");
					wrapper.animate({
						"height": $(".slideshow").outerHeight()
					}, "slow");
				} else {
					wrapper.css("height", $(".slideshow").outerHeight());
					instantiated = true;
				}
			});
		} else {
			$(".slideshow").stop(true, true);
			$(".slideshow").fadeOut("normal", function() {
				$(".slideshow img").attr("src", elms[elm].src);
				$(".slideshow p").html(elms[elm].caption);

			});
			
		}
		$(".slideshow-nav a").removeClass("current");
		$(".slide-" + elm).addClass("current");
	};
			
	$(".image-container li a").each( function() {
		elm = $(this);
		elms.push( {
			"src": elm.attr("href"),
			"caption": elm.text(),
			"thumb": $(elm.children("img")).attr("src")
		} );
	});

	if (elms.length > 0) {
		$(".image-container").addClass("loader");
		$("#related").prepend("<div class=\"slideshow-nav block-item\"><ul></ul></div>");
		for (var i = 0, l = elms.length; i < l; i++) {
			$(".slideshow-nav ul").append("<li><a href=\"" + elms[i].src + "\" class=\"slide-" + i + "\"><img src=\"" + elms[i].thumb + "\"/><span></span></a></li>");
		}
		$(".slideshow-nav").append("<a class=\"readmore next-image\" href=\"##\">" + nextTitle + "</a>");
		toggleTo(0);
		$(".slideshow-nav li a").live("click", function() {
			index = $(this).parent("li").index();
			toggleTo(index);
			return false;
		});
		$(".slideshow-nav .next-image").live("click", function() {
			index = index + 1;
			if (index >= elms.length) index = 0;
			toggleTo(index);
			return false;
		});
	}
});

//
// List ticker
//
$(function() {
	var first = 0;
	var speed = 700;
	var pause = 5500;
	var isBanner = true;
	
	if($('#ticker-wrapper').parent('.block-ticker').length)
		isBanner = false;
		
	setHeight(0);
		
		function removeFirst(){
			first = $('ul#listticker li').first().html();
			$('ul#listticker li').first()
			.animate({opacity: 'hide', height: 0}, speed)
			.fadeOut('slow', function() {$(this).remove();});
			setHeight(1);
			addLast(first);
			
		}
		
		function addLast(first){
			last = '<li style="display:none">'+first+'</li>';
			$('ul#listticker').append(last)
			$('ul#listticker li').last()
			.animate({opacity: 1}, speed)
			.fadeIn('slow')
			
		}
		
		function setHeight(index){
			
			if(!isBanner) {
				var height = 0;
				for(i = 0; i < 2; i++) {
					height += $('ul#listticker li').eq(i+index).outerHeight();
				}
				$('ul#listticker').height(height);
			}
		};
	
	interval = setInterval(removeFirst, pause);
});

//
// Search
//
function submitsearch(obj) {
	var url = $(obj).attr("href");
	url += url.indexOf("?") > -1 ? "&" : "?";
	url += "query=" + encodeURIComponent($(obj).siblings("input").val());
	document.location = url;
}

//
// Hook up tabs
//
$(function() {
	$(".block-tabs .tab")
	.click(function() {
		
		var id = $(this).attr("id");
		$(".block-tabs .active").removeClass("active");
		$(".block-tabs .tab-area").hide();
		$("#"+id+"-content").show().addClass("active");
		$(this).addClass("active");
		
		return false;
	});

});

//
// Article tools animation
//
$(function() {
	
	var orgWidth = $(".tools-content").outerWidth();
	var orgHeight = $(".tools-content").outerHeight();
	$("#article-tools .tool").hide();
	$("#article-tools .wrapper").hide();
	
	$(".tools-content li a.tool-trigger").click(function() {
		var obj = $(this).attr("href");
		var wrapper = $(obj+"-wrapper");
		wrapper.width(orgWidth).height(orgHeight);
		wrapper.show();
		$(".tools-content").hide();
		
		$(wrapper).animate({ width: $(obj).outerWidth(), height: $(obj).outerHeight() }, "fast", false,
			function() {
				$(obj).fadeIn();
				$(obj).addClass("current");
				wrapper.width("auto");
				wrapper.height("auto");
		});

		return false;
	});
	
	$("#article-tools span.cancel").click(function() {
		var obj = $(".tool.current");
		var wrapper = $("#"+$(obj).attr("id")+"-wrapper");
		wrapper.width(wrapper.width() + "px");
		wrapper.height(wrapper.height() + "px");
		$(obj).fadeOut("fast", function() { 
			$(wrapper).animate({ width: orgWidth, height: orgHeight }, "fast", false, 
				function() {
					$("#"+$(obj).attr("id")+"-wrapper").hide();
					$(".tools-content").fadeIn();
					obj.removeClass("current");
			});
		});
	
	});
});

//
// Toggler
//
$(function() {
	var index = 0;
	var numEntries = $(".toggler .entries li").length;
	if(numEntries == 1)
		$(".toggler .nav").hide();
		
	$(".toggler .nav li")
	.click(function() { 
		index = $(this).html() - 1;	
		switchImage(index);
	});
	
	$(".toggler .nav .prev")
	.click(function() {
		index = $(".toggler .nav li.active").html() -1;
		switchImage(index-1);
	});
	
	$(".toggler .nav .next")
	.click(function() {
		index = $(".toggler .nav li.active").html();
		if(index > $(".toggler .nav li").length - 1) {
			index = 0;
		}
		switchImage(index);
	});
});

function switchImage(index) {
	// Find and activate image	
	$(".toggler .nav li.active").removeClass("active");
	$(".toggler .nav li").eq(index).addClass("active");
	
	$(".toggler .entries li.active").hide().removeClass("active");
	var imageToView = $(".entries li").eq(index);
	imageToView.fadeIn(500).addClass("active");
}

function tipsaSuccess(data, textStatus, xhr)
{
	var obj = $("#tip-form");
	obj.find(".status p").hide();
	if(data.code == 1) {
		obj.children().hide();
		obj.find(".status .success, .status").show();
	}
	else {
		obj.find(".status .error, .status").show();
	}	
}

function sendForm() {
	var data = $("#tip-form").serialize();
	data += "&ajax=true";
	$("#status").html('<b>Skickar...</b>');
	$.post('tipsa.cfm',data,tipsaSuccess, "json");

};

