// Solna stad
// Javascript

/* It's not really cool to add className to the <html>-element, 
   but it's needed to avoid flickering in IE when hiding content. */
document.documentElement.className = "js";

SolnaStad = {};

// Links to any of these domains should not be marked as external
SolnaStad.InternalDomains = [
	'solna.se',
	'www.solna.se',
	'app.readspeaker.com'
];

SolnaStad.getThemePath = function (path) {
	return SolnaStad.themeBasePath + path.replace(/^\//, '');
};
SolnaStad.themeBasePath = '/themes/brown/';

SolnaStad.FormFixer = (function () {
	return {
		// Pass in any form elements as jQuery objects or selector strings
		init: function () {
			if (arguments.length) {
				$.each(arguments, function () {
					$(this).each(function () {
						SolnaStad.FormFixer.fixButtons(this);
						SolnaStad.FormFixer.fixLegends(this);
					});
				});
			}
		},
		// Replace submit-inputs with spans and buttons for better styling
		fixButtons: function (form) {
			$('input[type=submit]', form).each(function () {
				var oldButton = $(this),
				    newButton = $('<button type="submit">' + oldButton.val() + '</button>');
				// Copy attributes from old button to new button
				['id', 'class', 'name', 'value'].each(function () {
					var attr = oldButton.attr(this.toString());
					if (attr) {
						newButton.attr(this.toString(), attr);
					}
				});
				// Insert new button
				oldButton.after(newButton);
				newButton.wrap('<span class="button"><span><span><span><span></span></span></span></span></span>');
				// Add clearfix to submit-area
				oldButton.closest('.submit-area').addClass('cf');
				// Hide old button. If it is removed from the DOM, pressing enter in the form won't work in IE
				oldButton.hide();
			});
		},
		fixLegends: function (form) {
			$('legend', form).wrapInner('<span>');
		}
	};
})();

SolnaStad.ReadSpeakerPlayer = function(el) {
	el = $(el);

	el.click(function (e) {
		if ($.flash.available && $.flash.version.major > 8) {
			e.preventDefault();
		}
		// /plugins/readspeaker.aspx
		$.get("/plugins/readspeaker.aspx?url=" + escape(el.attr('href').replace("save=1", "type=0") + "&readid=content-primary"), function(url) {
			var flashvars = $.extend({}, SolnaStad.ReadSpeakerPlayer.colors, {
				autoplay: 1,
				mp3: url
			});

			el.hide();
			el.parent().flash({
				swf: '/js/player_mp3_mini.swf',
				width: 200,
				height: 20,
				hasVersion: 8,
				wmode: 'transparent',
				params: {
					flashvars: flashvars
				}
			});
		});
	});
};
SolnaStad.ReadSpeakerPlayer.colors = {
	loadingcolor: 'ffffff',
	buttoncolor: 'ffffff',
	slidercolor: 'ffffff'
};

SolnaStad.activateEmailLinks = function() {
    var options = {
        emailClass: 'hidden-email',
        textClass: 'email-text',
        addressClass: 'email-address'
    };
    /**
    * Initialization
    */
    function init(opts) {
        // If options were supplied, apply them to the option Object.
        for (var key in opts) {
            if (options.hasOwnProperty(key)) {
                options[key] = opts[key];
            }
        }
        $('.' + options.emailClass).each(function() {
            var textElem = $(this).find('.' + options.textClass + ':first');
            var addressElem = $(this).find('.' + options.addressClass + ':first');
            if ($(addressElem).length) {
                var textText = addressText = $(addressElem).text();
                if ($(textElem).length) {
                    textText = $(textElem).text();
                }
                $(this).html('<a href="mailto:' + addressText.replace("REMOVE_ME","") + '">' + textText.replace("REMOVE_ME","") + '</a>');
            }
        });
    }
    return {
        init: init
    };
} ();


// Startup scripts
jQuery(function() {

	//Remember default values of some elements
	$('.find input[type=text]').rememberDefaultValue();

	// Fix some form stuff
	SolnaStad.FormFixer.init($('.form-general, .search, .form-table'));

	// Add classname to external links, excluding banner links
	$('#content a:not(.banner a)').each(function() {
		var link = $(this);
		var text;
		var image;

		if (link.isExternal()) {
			link.addClass('external');
			// Is external link in news heading
			if (link.is('.newsitem h3 a')) {
				// We have to remove the span from the DOM or else IE will loose the contained img element
				image = link.find('span.img').remove();
				text = link.text();
				link.html(link.text()).prepend(image);
			} else {
				link.html('<span>' + link.text() + '</span>');
			}
			link.append('<span class="icon"/>');
		}
	});

	$('a.new-window').triggerNewWindow();

	if ($.datepicker) {
		// Attach datepickers
		$('input.date').datepicker($.extend($.datepicker.regional['sv'], {
			duration: ''
		}));
	}

	if ($.fn.filelist) {
		$('ul.file-list.collapsable > li > ul').filelist().filelistExpand();
	}

	$(".listen a").each(function() {
		var rs = new SolnaStad.ReadSpeakerPlayer(this);
	});

	SolnaStad.activateEmailLinks.init();

	// Find YouTube links
	$('.youtube').each(function () {
		try {
			var el  = $(this);

			if (!el.is('a')) {
				el = el.find('a:first');
			}

			// Parse link query for video ID parameter
			var videoID = el.attr('search').match(/v=([a-zA-Z0-9_-]+)/)[1];
			var swfurl = 'http://www.youtube.com/v/' + videoID + '?fs=1&hd=1';

			// Create flash html
			var width = el.parent().width();
			var flash = $.flash.create({
				swf: swfurl,
				width: width,
				height: (width * 0.6015625),
				params: {
					movie: swfurl,
					allowFullScreen: true,
					allowscriptaccess: 'always'
				}
			});

			// Insert YouTube video!
			el.replaceWith(flash);
		} catch (e) {
			// Fail silently…
		}
	});

	// Add print-link
	if (!(document.isStartPage() || document.isSubSectionPage())) {
		var printLink = document.articleFunctions.addItem({
			text: 'Skriv ut sidan',
			className: 'print-page',
			callback: function(e) {
				e.preventDefault();
				window.print();
			}
		});

		// Hide contact form
		var contactForm = $('#contact-publisher');
		if (contactForm.size()) {
			if (window.location.hash == '#contact-publisher') {
				contactForm.show();
				contactForm.isHidden = false;
			} else {
				contactForm.hide();
				contactForm.isHidden = true;
			}
			var contactLink = $('<a href="#">' + contactForm.find('h2:first').text() + '</a>');
			contactLink.click(function(e) {
				e.preventDefault();
				if (contactForm.isHidden) {
					contactForm.animate({
						height: 'show',
						opacity: 'show'
					}, 'slow', function() {
						var targetOffset = contactForm.offset().top;
						$('html,body').animate({
							scrollTop: targetOffset
						}, 1000, function() {
							window.location.hash = '#contact-publisher';
						});
						contactForm.isHidden = false;
					});
				} else {
					contactForm.animate({
						height: "hide",
						opacity: "hide"
					}, 'slow', function() {
						contactForm.isHidden = true;
					});
				}
			});
			$('<p class="publisher"></p>').appendTo($('.article-info')).append(contactLink);
		}

		// Hide comment form
		var commentForm = $('#comment-blog-post');
		if (commentForm.size()) {
			if (window.location.hash == '#comment-blog-post') {
				commentForm.show();
				commentForm.isHidden = false;
			} else {
				commentForm.hide();
				commentForm.isHidden = true;
			}
			var commentLink = $('<a href="#">' + commentForm.find('h2:first').text() + '</a>');
			commentLink.click(function(e) {
				e.preventDefault();
				if (commentForm.isHidden) {
					commentForm.animate({
						height: 'show',
						opacity: 'show'
					}, 'slow', function() {
						var targetOffset = commentForm.offset().top;
						$('html,body').animate({
							scrollTop: targetOffset
						}, 1000, function() {
							window.location.hash = '#comment-blog-post';
						});
						commentForm.isHidden = false;
					});
				} else {
					commentForm.animate({
						height: "hide",
						opacity: "hide"
					}, 'slow', function() {
						commentForm.isHidden = true;
					});
				}
			});
			$('<p class="publisher"></p>').prependTo($('.article-info')).append(commentLink);
		}
	}

	// Google Translate popup
	var googleTranslateLink = $("#gtranslate a"),
	    googleTranslatePopUp;
	
	function getGTLanguages () {
		var optionList = [];
		var option = '<option value="{0}">{1}</option>';
		for (var i in google.language.Languages) {
			if (i !== "UNKNOWN" && google.language.isTranslatable(google.language.Languages[i])) {
				optionList.push(option.format(google.language.Languages[i], i.replace("_", " ").capitalize()));
			}
		}
		return ('<option value="-1">Select language</option>' + optionList.join(''));
	}
	
	googleTranslateLink.click(function(e) {
		if (google) {
			e.preventDefault();
			if (! googleTranslatePopUp) {
				function buildPopUp() {
					var content = $('<form action=""></form>'),
					    select;
					content.append('<h2>Translate page</h2><p>Automatically translate this page using Google Translate.</p><p>Solna stad does not take any responsibility for the accuracy of the translation.</p>');
					select = $('<select id="select-language">');
					select.append(getGTLanguages());
					content.append('<label for="select-language">Translate from Swedish into</label>');
					content.append(select);
					content.append('<input type="submit" value="Translate" />');
					content.append(google.language.getBranding());
					content.submit(function(e) {
						e.preventDefault();
						var selectedval = $(this).find("option:selected").attr("value"),
						    q = $.parseQuery(googleTranslateLink.attr("search"));
						document.location.href = googleTranslateLink.attr("href").replace("hl=" + q.hl, "hl=" + selectedval).replace("tl=" + q.tl, "tl=" + selectedval);
					});
					googleTranslatePopUp = SolnaStad.PopUpManager.addPopUp({
					    content: content,
					    modal: true,
						className: 'gtranslate-popup'
					});
					googleTranslatePopUp.show();
				}
				google.load('language', '1', {
					'callback': buildPopUp
				});
			} else {
				googleTranslatePopUp.show();
			}
		}
	});

	// Auto submit Blog Archive
	$('#blog-archive input + span.button').hide();
	$('#blog-archive input').hide();
	$('#blog-archive select').change( function() {
		$('#blog-archive').submit();
	});

});

