﻿/// <reference path="jquery-1.3.1.min-vsdoc.js" />
/*global $*/

// Biggerlink
// Version 1.0 - October 19, 2007
// Requires http://jquery.com version 1.2.1

(function($) {
    $.fn.biggerlink = function(options) {

        // Default settings
        var settings = {
            hoverclass: 'hover', // class added to parent element on hover
            clickableclass: 'hot', // class added to parent element with behaviour
            follow: true	// follow link? Set to false for js popups
        };
        if (options) {
            $.extend(settings, options);
        }
        $(this).filter(function() {
            return $('a', this).length > 0;

        }).addClass(settings.clickableclass).each(function(i) {

            // Add title of first link with title to parent
            $(this).attr('title', $('a[title]:first', this).attr('title'));

            // hover and trigger contained anchor event on click
            $(this)
			.mouseover(function() {
			    window.status = $('a:first', this).attr('href');
			    $(this).addClass(settings.hoverclass);
			})
			.mouseout(function() {
			    window.status = '';
			    $(this).removeClass(settings.hoverclass);
			})
			.bind('click', function() {
			    $(this).find('a:first').trigger('click');
			})

            // triggerable events on anchor itself

			.find('a').bind('focus', function() {
			    $(this).parents('.' + settings.clickableclass).addClass(settings.hoverclass);
			}).bind('blur', function() {
			    $(this).parents('.' + settings.clickableclass).removeClass(settings.hoverclass);
			}).end()

			.find('a:first').bind('click', function(e) {
			    if (settings.follow === true) {
			        window.location = this.href;
			    }
			    e.stopPropagation(); // stop event bubbling to parent
			}).end()

			.find('a', this).not(':first').bind('click', function() {
			    $(this).parents('.' + settings.clickableclass).find('a:first').trigger('click');
			    return false;
			});
        });
        return this;
    };
})(jQuery);


/**
* hoverIntent r5 // 2007.03.27 // jQuery 1.1.2+
* <http://cherne.net/brian/resources/jquery.hoverIntent.html>
* @param  f  onMouseOver function || An object with configuration options
* @param  g  onMouseOut function  || Nothing (use configuration options object)
* @author    Brian Cherne <brian@cherne.net>
*/
(function($) { $.fn.hoverIntent = function(f, g) { var cfg = { sensitivity: 7, interval: 100, timeout: 0 }; cfg = $.extend(cfg, g ? { over: f, out: g} : f); var cX, cY, pX, pY; var track = function(ev) { cX = ev.pageX; cY = ev.pageY; }; var compare = function(ev, ob) { ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); if ((Math.abs(pX - cX) + Math.abs(pY - cY)) < cfg.sensitivity) { $(ob).unbind("mousemove", track); ob.hoverIntent_s = 1; return cfg.over.apply(ob, [ev]); } else { pX = cX; pY = cY; ob.hoverIntent_t = setTimeout(function() { compare(ev, ob); }, cfg.interval); } }; var delay = function(ev, ob) { ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); ob.hoverIntent_s = 0; return cfg.out.apply(ob, [ev]); }; var handleHover = function(e) { var p = (e.type == "mouseover" ? e.fromElement : e.toElement) || e.relatedTarget; while (p && p != this) { try { p = p.parentNode; } catch (e) { p = this; } } if (p == this) { return false; } var ev = jQuery.extend({}, e); var ob = this; if (ob.hoverIntent_t) { ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); } if (e.type == "mouseover") { pX = ev.pageX; pY = ev.pageY; $(ob).bind("mousemove", track); if (ob.hoverIntent_s != 1) { ob.hoverIntent_t = setTimeout(function() { compare(ev, ob); }, cfg.interval); } } else { $(ob).unbind("mousemove", track); if (ob.hoverIntent_s == 1) { ob.hoverIntent_t = setTimeout(function() { delay(ev, ob); }, cfg.timeout); } } }; return this.mouseover(handleHover).mouseout(handleHover); }; })(jQuery);

/*
* Image preview script 
* written by Alen Grakalic (http://cssglobe.com)
* for more info visit http://cssglobe.com/post/1695/easiest-tooltip-and-image-preview-using-jquery*/
this.imagePreview = function() {
    /* settings */
    xOffset = 0;
    yOffset = -220;
    xOffset2 = -10;
    yOffset2 = 0;
    $("ul#kuvavirta > li > a").hoverIntent(function(e) {
        /* hover */
        this.t = this.title;
        $("body").append("<p id='preview'><img src='" + $(this).find("img").attr("src").replace("76s", "150l") + "' alt='Image preview' />" + this.t + "<br/><span class='comments'>" + $(this).find("span.comments").html() + "</span><span class='date'>" + $(this).find("span.date").html() + "</span></p>");
        this.title = ""; /* nollataan title JS käyttäjille, jotta vältetään kaksoistooltip*/
        if (e.pageX < 250) {
            $("#preview")
			.css("top", (e.pageY - xOffset2) + "px")
			.css("left", (e.pageX - yOffset2) + "px");
        }
        else {
            $("#preview")
			.css("top", (e.pageY - xOffset) + "px")
			.css("left", (e.pageX + yOffset) + "px");
        }
    },
    /* hover out */
	function() {
	    this.title = this.t; /* palautetaan title ja poistetaan esikatselu */
	    $("#preview").remove();
	});
    /* mouse movement */
    $("ul#kuvavirta > li > a").mousemove(function(e) {
        if (e.pageX < 250) {
            $("#preview")
			    .css("top", (e.pageY - xOffset2) + "px")
			    .css("left", (e.pageX - yOffset2) + "px");
        }
        else {
            $("#preview")
			    .css("top", (e.pageY - xOffset) + "px")
			    .css("left", (e.pageX + yOffset) + "px");
        }
    });
};

/* searchfield replacement */
function searchfieldText(input) {
    input.val('Hae Suomen Kuvalehdestä');
    input.addClass('hint');
    input._hintValue = input.val();

    input.focus(function() {
        if ($.trim(input.val()) == input._hintValue) {
            input.val('').removeClass('hint');
        }
    });

    input.blur(function() {
        if ($.trim(input.val()) === '') {
            input.val(input._hintValue).addClass('hint');
        }
    });
}

/* calendar */
function calendarinit() {
    url = window.location;
    tulokset = /(kuvat\/(\d{4})?\/?(\d{2})?\/?(\d{2})?)/.exec(url);
    if (!(tulokset[2])) {
        tulokset[2] = new Date().getFullYear();
        tulokset[3] = new Date().getUTCMonth() + 1;
        tulokset[4] = new Date().getUTCDate() + 1;
    }
    if (!(tulokset[3])) {
        tulokset[3] = '01';
    }
    if (!(tulokset[4])) {
        tulokset[4] = '01';
    }

    $('#datepicker').datepicker({
        dateFormat: 'yy/mm/dd',
        onSelect: function(dateText) {
            window.location = 'http://suomenkuvalehti.fi/kuvat/' + dateText;
        },
        minDate: new Date(2008, 12 - 1, 28),
        maxDate: '+0m',
        defaultDate: new Date(tulokset[2], tulokset[3] - 1, tulokset[4])
    });
}

$(document).ready(function() {
    if ($('#kuvavirta').length > 0) {
        /* hide descriptions from javascript users */
        if (!jQuery.browser.msie) {
            $('#kuvavirta > li > a > span').addClass('shadow');
        }
        imagePreview();
    }
    /* turn the whole list to a clickable area */
    if ($('#kuvakertomukset').length > 0) {
        $('#kuvakertomukset div').biggerlink();
    }
    /* searchfield replacement */
    searchfieldText($('#searchfield'));
    $('abbr[class*=timeago]').timeago();
    $('#search > label').addClass('hidden');
    if ($('#datepicker').length > 0) {
        calendarinit();
    }

    $('.fold').parent().append('<span>katso koko kommentti</span>');
    $('.comment > span').click(
    function() {
        if ($(this).siblings('.fold').is(":hidden")) {
            $(this).siblings('.fold').slideDown('fast');
            var linkText = $(this).text().replace(/katso koko/, 'piilota');
            $(this).text(linkText);
            $(this).toggleClass('comment_fold');
        } else {
            $(this).siblings('.fold').slideUp('fast');
            linkText = $(this).text().replace(/piilota/, 'katso koko');
            $(this).text(linkText);
            $(this).toggleClass('comment_fold');
        }
    });

    /*popup*/
    $('a[rel="external"]').click(function() {
        window.open($(this).attr('href'), 'external', 'width=800,height=500,resizeable=yes');
        return false;
    });

    $('#karttaoptions').show();
    $('#karttaoptions').click(
    function() {
        $('#karttaoptions > li').toggleClass('active');
        $('#picturewall').toggle();
    });

    $('#nickname').focus(function() {
        $('#nicknamehint').fadeIn('50');
    });

    $('#nickname').blur(function() {
        $('#nicknamehint').fadeOut('50');
    });

});
