/**
 * jQuery.ScrollTo - Easy element scrolling using jQuery.
 * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
 * Dual licensed under MIT and GPL.
 * Date: 5/25/2009
 * @author Ariel Flesler
 * @version 1.4.2
 *
 * http://flesler.blogspot.com/2007/10/jqueryscrollto.html
 */
;(function(d){var k=d.scrollTo=function(a,i,e){d(window).scrollTo(a,i,e)};k.defaults={axis:'xy',duration:parseFloat(d.fn.jquery)>=1.3?0:1};k.window=function(a){return d(window)._scrollable()};d.fn._scrollable=function(){return this.map(function(){var a=this,i=!a.nodeName||d.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!i)return a;var e=(a.contentWindow||a).document||a.ownerDocument||a;return d.browser.safari||e.compatMode=='BackCompat'?e.body:e.documentElement})};d.fn.scrollTo=function(n,j,b){if(typeof j=='object'){b=j;j=0}if(typeof b=='function')b={onAfter:b};if(n=='max')n=9e9;b=d.extend({},k.defaults,b);j=j||b.speed||b.duration;b.queue=b.queue&&b.axis.length>1;if(b.queue)j/=2;b.offset=p(b.offset);b.over=p(b.over);return this._scrollable().each(function(){var q=this,r=d(q),f=n,s,g={},u=r.is('html,body');switch(typeof f){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(f)){f=p(f);break}f=d(f,this);case'object':if(f.is||f.style)s=(f=d(f)).offset()}d.each(b.axis.split(''),function(a,i){var e=i=='x'?'Left':'Top',h=e.toLowerCase(),c='scroll'+e,l=q[c],m=k.max(q,i);if(s){g[c]=s[h]+(u?0:l-r.offset()[h]);if(b.margin){g[c]-=parseInt(f.css('margin'+e))||0;g[c]-=parseInt(f.css('border'+e+'Width'))||0}g[c]+=b.offset[h]||0;if(b.over[h])g[c]+=f[i=='x'?'width':'height']()*b.over[h]}else{var o=f[h];g[c]=o.slice&&o.slice(-1)=='%'?parseFloat(o)/100*m:o}if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],m);if(!a&&b.queue){if(l!=g[c])t(b.onAfterFirst);delete g[c]}});t(b.onAfter);function t(a){r.animate(g,j,b.easing,a&&function(){a.call(this,n,b)})}}).end()};k.max=function(a,i){var e=i=='x'?'Width':'Height',h='scroll'+e;if(!d(a).is('html,body'))return a[h]-d(a)[e.toLowerCase()]();var c='client'+e,l=a.ownerDocument.documentElement,m=a.ownerDocument.body;return Math.max(l[h],m[h])-Math.min(l[c],m[c])};function p(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);

var j = jQuery.noConflict();

var count = 0;


var Profiler = {
    flickr: function() {
        j('.flickr .image').bind('click', function() {
            var target = {
                'src': j(this).attr('rel'),
                'href': j(this).attr('href')
            }
            Flickr(target);
            return false;
        });
    },
    construct: function() {
        var Layer = new Windows();
        Layer.close('.close');
        Layer.open('.user-profile', function() {
            var id = j(Layer.openElement).attr('rel');
            j.ajax({
                url: '/request/profile/view/' + id + '/window/',
                cache: false,
                success: function(content) {
                    Layer.init(content);
                }
            });
        },
        function() {
            j('.wpublic .list dt').bind('click', function() {
                j(this).toggleClass('active').next().slideToggle(300);
            });
            Scroller('.flickr');
            Profiler.flickr();
        });
    }
};

function Slideshow(slideshow) {

    var that = this;
    this.slideshow = slideshow.split(',');
    this.index = 0;

    this.load = function(image, callback) {
        jQuery('#image_window .image img').fadeOut(120, function() {
            jQuery(this).remove();
            var img = new Image();
            img.onload = function() {
                callback(img);
                img.onload = function() {};
            };
            img.src = image;
        });
    }

    this.init = function() {
        j('.close .prev').addClass('disabled').siblings('a').removeClass('disabled');
        jQuery('.close .prev, .close .next').unbind('click').bind('click', function() {
            if (j(this).hasClass('disabled')) {
                return false;
            } else {
                j('.close .prev, .close .next').removeClass('disabled');
            }
            if (jQuery(this).hasClass('prev')) {
                that.index--;
                if (that.index <= 0) {
                    index = 0;
                    j('.close .prev').addClass('disabled').siblings('a').removeClass('disabled');
                }
            }

            if (jQuery(this).hasClass('next')) {
                that.index++;
                if (that.index >= (that.slideshow.length - 1)) {
                    index = that.slideshow.length - 1;
                    j('.close .next').addClass('disabled').siblings('a').removeClass('disabled');
                }
            }

            that.load('/files/tutorials/' + that.slideshow[that.index], function(image) {
                jQuery('#image_window').animate({'width': image.width, 'height': (image.height + 33), 'marginLeft': -(image.width / 2), 'marginTop': -((image.height - 333) / 2)}, 300);
                jQuery(image).css({'display': 'none'}).appendTo('#image_window .image').fadeIn(120);
            });
            return false;
        });
    }
}


function ImageSequence(containerSelector)
{
	var vthis = this;
	this.$container = jQuery(containerSelector);
	this.$slides = this.$container.find('p.image');
	
	var strNav = '<p class="img-sequence-nav"></p>';
	this.$container.find('p.image:last').after(strNav);
	
	this.current = 1;
	this.total = this.$slides.length;
	
	this.$nav = this.$container.find('p.img-sequence-nav');
	this.$nav.append('<a class="prev" href="javascript:void(0);"><img src="/template/image/tutorials/common/a_left.png" /></a>');
	this.$nav.append('<span>0'+this.current+'/0'+this.total+'</span>');
	this.$nav.append('<a class="next" href="javascript:void(0);"><img src="/template/image/tutorials/common/a_right.png" /></a>');
	
	this.$slides.hide();
	this.$slides.eq(this.current-1).show();
	
	this.$nav.css(
		{
			height: '26px',
			position: 'relative',
			"text-align": 'center',
			'padding-bottom': '8px'
		}
	);
	
	this.$nav.find('a').css(
		{
			position: 'absolute',
			display: 'block',
			top: '0',
			left: '0'
		}
	);
	
	this.$nav.find('a.next').css(
		{
			left: 'auto',
			right: '0'
		}
	);
	
	this.$nav.find('span').css(
		{
			display: 'inline-block',
			"vertical-align": 'middle',
			height: '26px',
			"line-height": '26px',
			"font-size": '12px',
			"font-weight": 'bold'
		}
	);
	
	
 	this.next = function()
 	{
		this.current++;
		if(this.current > this.total)
			this.current=1;
			
		this.$slides.hide();
		this.$slides.eq(this.current-1).show();
		this.$nav.find('span').text('0'+this.current+'/'+'0'+this.total);
	}
	
 	this.prev = function()
 	{
		this.current--;
		if(this.current < 1)
			this.current=this.total;
			
		this.$slides.hide();
		this.$slides.eq(this.current-1).show();
		this.$nav.find('span').text('0'+this.current+'/'+'0'+this.total);
 	}
 	
 	this.$nav.find('a.next').click(
		function()
		{
			vthis.next();
			return false;
		}
 	);
	
 	this.$nav.find('a.prev').click(
		function()
		{
			vthis.prev();
			return false;
		}
 	);
	
}


var imagebox = {
    show: function() {
        imagebox.display(j(this).attr('href'), j(this).hasClass('action-zoom-slide'), j(this).attr('rel'),  j(this).hasClass('image-panorama'));
        return false;
    },

    open: function(target) {
        imagebox.display(target, false, false);
    },

    display: function(target, hasSlides, slides, hasPanorama) {
        var content = '';
        if (hasSlides) {
            content += '<div id="image_window" class="wimage slideshow">';
            content += '<div class="content"><a class="image" href="javascript:void(0);" title=""></a></div>';
            content += '<div class="close">';
            content += '<a href="javascript:void(0);" class="prev">< poprzednie</a>';
            content += '&nbsp;&nbsp;';
            content += '<a href="javascript:void(0);" class="next">następne ></a>';
            content += '<a class="terminate" href="javascript:void(0);"></a>';
            content += '</div>';
            content += '</div>';

        } else {
            content += '<div id="image_window" class="wimage">';
            content += '<div class="content"><a class="image" href="javascript:void(0);" title=""></a></div>';
            content += '<div class="close"><a class="terminate" href="javascript:void(0);"></a></div>';
            content += '</div>';
        }
        var source = {src: target, 'title': 'Kliknij aby zamknąć zdjęcie.'};
        var values = {'height' : j('body').height(), 'width'  : j('body').width()};
        j('<div id="image_overlay"></div>').animate({opacity: 0}, 0).prependTo('body').css(values).animate({opacity: 0.6}, 180, function() {
            j(content).animate({opacity: 0}, 0).prependTo('body').animate({opacity: 1}, 260, function() {
				var dontResize = 0;
				if(hasPanorama)
					dontResize = 1;
                new Loader(source, '#image_window', dontResize);
                if (slides) {
                    (new Slideshow(slides)).init();
                };
                imagebox.bind();
            }).center();
        });
        return false;
    },

    addition: function() {
        var target = this;
        jQuery.ajax({
            url: j(target).attr('href'),
            cache: false,
            success: function(content){
                j('<div id="overlay"></div>').animate({opacity: 0}, 0).prependTo('body').css({'width': j('body').width(), 'height': j('body').height()}).animate({'opacity': 0.6}, 180, function() {
                    j(content).animate({opacity: 0}, 0).prependTo('body').animate({opacity: 1}, 260, function() {
                        Cufon.replace('#guide h1', {fontFamily: 'GlasgowPl RR ExtraBold'});
                        Cufon.replace('#guide h3 span', {fontFamily: 'GlasgowPl RR Light'});
                        imagebox.bind();
                    }).center();
                });
            }
        });
        return false;
    },

    flash: function(target) {
        jQuery.ajax({
            url: j(target).attr('href'),
            cache: false,
            success: function(content){
                j('body').append(content);
                var w = {'width': j('#windowsize').width(), 'height': j('#windowsize').height()};
                j('#image_overlay').animate({opacity: 0}, 0).css({'width': j('body').width(), 'height': j('body').height()}).animate({'opacity': 0.6}, 180, function() {
                    j('#image_window').css({'marginLeft': - (w.width / 2), 'width': w.width, 'height': w.height, 'visibility': 'visible'}).center();
                    imagebox.bind();
                });
            }
        });
        return false;
    },

    bind: function() {
        j('#image_overlay, #image_window .terminate, #image_window .image, #window .terminate, #overlay').click(imagebox.hide);
    },

    hide: function() {
        j('#image_window, #window').fadeOut('120', function() {
            j('#image_overlay, #overlay').fadeOut('60', function() {
                j('#image_window, #image_overlay, #overlay, #window').remove();
            });
        });
        return false;
    }
}

var Librarian = {
    Start: function() {
        j('#article img').not(j('h1 img')).addClass('library-image');
        this.Images();
        this.Selection();
        this.Topic();
        this.Header();
    },

    Video: function(value) {
        if (typeof logged === 'undefined') {
            alert('Musisz się zalogować aby oznaczyć materiał jako obejrzany.');
        } else {
            j.get('/obejrzany/' + value);
        }
        return false;
    },

    Flash: function(value) {
        j.get('/request/flash/add/' + value + '/json/');
    },

    Selection: function() {
        var range = true;
        var time = 0;
        var fade = 500;
        j(cloud.content.handler).mouseup(function(e) {
            function removeThumbler() {
                clearTimeout(time);
                j('.cloud-text').hide().remove();
            }
            removeThumbler();
            j(cloud.content.handler + ':not(.cloud)').bind('click', removeThumbler);
            var userSelection;
            var selection = '';
            if (window.getSelection) {
                userSelection = window.getSelection();
                if (userSelection.getRangeAt) {
                    try {
                        selection = userSelection.getRangeAt(0);
                    } catch(e) {}
                } else {
                    userSelection = document.selection.createRange();
                    userSelection.setStart(userSelection.anchorNode,userSelection.anchorOffset);
                    userSelection.setEnd(userSelection.focusNode,userSelection.focusOffset);
                    selection = userSelection;
                }
            } else if (document.selection && document.selection.createRange) {
                var range = document.selection.createRange();
                selection = range.text;
            }

            selection = '' + selection;
            if (selection.length > 3) {
                removeThumbler();
                var date = new Date();
                var id = 'selection' + date.getTime();
                var css = {
                    'top' : e.pageY + 15,
                    'left': e.pageX + 15,
                    'z-index': 16091984
                }
                j(cloud.content.structure).appendTo('body').css(css).attr('id', id).click(function() {
                    var self = j(this);
                    var data = 'data[Snippet][source_section]=tutorials&data[Snippet][source_id]='
                            + encodeURIComponent(tutorial_id)
                            + '&data[Snippet][contents]='
                            + encodeURIComponent(selection);
                    var url = "/snippets/addToLibrary/";
                    j.post(url, data, function(data) {
                        self.addClass('cloud-text-added');
                        time = setTimeout(function() {
                            self.hide();
                        }, 600);
                    }, "text");
                });
            }

            time = setTimeout(function() {
                j('#' + id).hide();
            }, 30000);
        });
    },

    Images: function() {
        var range = true;
        var time = 0;
        var fade = 500;
        j(cloud.image.handler).not('.disabled').mouseover(function() {
            var rel = j(this).attr('rel');
            var thumbler = 'thumbler' + rel;
            if (document.getElementById(thumbler)) {
                var thumbler = j('#' + thumbler);
                if (!(thumbler.hasClass('cloud-image-added')))
                    thumbler.show();
            } else {
                j(cloud.image.structure).insertAfter(this).attr('id', thumbler);
                var thumbler = j('#' + thumbler);
                thumbler.hover(
                    function() {
                        range = false;
                    }, function() {
                        range = true;
                    }
                );
                thumbler.click(function() {
                    var self = j(this);
                    self.addClass('cloud-image-added');
                    j.get('/illustrations/addToLibrary/' + rel, function() {
                        time = setTimeout(function() {
                            self.hide();
                        }, 600);
                    });
                    return false;
                })
            }
        });
        j(cloud.image.handler).mouseout(function() {
            var rel = j(this).attr('rel');
            time = setTimeout(function() {
                if (range) {
                    var thumbler = 'thumbler' + rel;
                    j('#' + thumbler).hide();
                }
            }, 600);
        });
    },

    Header: function() {
        var range = true;
        var time = 0;
        var fade = 500;
        j(cloud.header.handler).mouseover(function() {
            var element = this;
            var thumbler = 'thumbler-header';
            if (document.getElementById(thumbler)) {
                var thumbler = j('#' + thumbler);
                if (!(thumbler.hasClass('cloud-header-added')))
                    thumbler.show();
            } else {
                j(cloud.header.structure).appendTo(j(element).parent()).attr('id', thumbler);
                var thumbler = j('#' + thumbler);
                thumbler.hover(
                    function() {
                        range = false;
                    }, function() {
                        range = true;
                    }
                );
                thumbler.click(function() {
                    var self = j(this);
                    self.addClass('cloud-header-added');
                    j.get('/tutorials/ajaxAddToLibrary/' + tutorial_id, function() {
                        time = setTimeout(function() {
                            self.hide();
                        }, 600);
                    });
                    return false;
                })
            }
        });
        j(cloud.header.handler).mouseout(function() {

            time = setTimeout(function() {
                if (range) {
                    j('#thumbler-header').hide();
                }
            }, 600);
        });
    },

    Topic: function () {
        j('#contentbigbutton .button').click(function() {
            if ((typeof logged === 'undefined') == false) {
                j.get('/przeczytany/' + tutorial_id, function() {
                    j('#topicunknown').css({backgroundPosition: 'bottom center'});
                }, "html");
            }
            return false;
        });
    }
}

j(document).ready(function() {

    jQuery('#tutorial-header ul span').each(function(i, e) {
        if (jQuery(e).html() == 'Krystian Bielatowicz') {
            jQuery(e).html('<a href="http://bielatowicz.com" target="_blank">Krystian Bielatowicz</a>');
        };
    });
    j('a[rel^="lightbox"],.image-zoom, .action-zoom-image').each(function() {
        j(this).click(imagebox.show);
    });
    j('.flash-zoom').click(function() {
        imagebox.flash(this);
        return false;
    });

    j('.additions').click(imagebox.addition);

    if ((typeof logged === 'undefined') == false) { Librarian.Start(); }

	ImageSequence('.jsSlideSequence');

    var Layer = new Windows();
    Layer.close('.terminate');
    Layer.open('.helper',
        function() {
            j.ajax({
                url: Layer.handler,
                cache: false,
                success: function(content){
                    Layer.init(content);
                }
            });
        }
    );
    j('.photo-zoom').click(function() {
        var source = {
            src: j(this).attr('href'),
            'title': 'Kliknij aby zamknąć zdjęcie.'
        };

        var content = j('<div id="image_window" class="wimage"></div>');
        content.append('<div class="content"><a class="image" href="javascript:void(0);" title=""></a></div>');
        content.append('<div class="close"><a class="terminate" href="javascript:void(0);"></a></div>');
        var values = {
            'height' : j('body').height(),
            'width'  : j('body').width()
        };
        j('<div id="image_overlay"></div>').animate({opacity: 0}, 0).prependTo('body').css(values).animate({opacity: 0.6}, 180, function() {
            j(content).animate({opacity: 0}, 0).prependTo('body').animate({opacity: 1}, 260, function() {
                new Loader(source, '#image_window');
                j('#image_window .image').click(function() {
                    j('#image_window').fadeOut('120', function() {
                        j('#image_overlay').fadeOut('60', function() {
                            j('#image_window').remove();
                            j('#image_overlay').remove();
                        });
                    });
                    return false;
                })
                Close();
            }).center();
        });
        return false;
    });
    Profiler.construct();
    Discussion.start();
    Cufon.replace('#tutorial h5.colored > strong, #tutorial-header h1, h4, h4 > span.cufon, h5 > span.cufon > strong, h4 > span.cufon > strong > span.cufon, h2 > strong, h2 > span > strong, h5.sub > strong, , .promotion strong', {fontFamily: 'GlasgowPl RR ExtraBold'});
    Cufon.replace('#tutorial h5.colored > span, #tutorial-header h2 strong, h2 span, h3 span, h4 > span, h5 > span.cufon, h5.sub, .promotion span', {fontFamily: 'GlasgowPl RR Light'});
    Cufon.replace('h2 > strong, h2 > span > strong,h3 > strong, h3 > span > strong,h4 > strong, h4 > span > strong', {fontFamily: 'GlasgowPl RR ExtraBold'});
	Cufon.replace('#redegined h3 > strong, h3 > span >strong', {fontFamily: 'GlasgowPl RR ExtraBold'});
	Cufon.replace('p.h5 span.cufon', {fontFamily: 'GlasgowPl RR Light'});
	Cufon.replace('p.h5s span.cufon', {fontFamily: 'GlasgowPl RR ExtraBold'});
	

    // j('img.action-replace').css({'cursor': 'pointer'}).click(function() {
    //     j(this).hide().siblings('img').show();
    // }).filter('.hidden').hide();

    j('img.action-replace').css({'cursor': 'pointer'}).bind('mouseenter mouseleave', function(event) {
        j(this).toggle().siblings('img').toggle();
    }).filter('.hidden').hide();

    j('.slides .slide').css({'position': 'relative'});

    if (document.getElementById('associated')) {
        j('#tutorial-header .discussion').before('<li class="associated"><a href="#associated"><em></em> Powiązane tematy</a></li>');
    };

    if (j('.page-brake').size() > 0) {

        var tmpl = '<div class="tutorial-pager">' +
            '<p>Ten artykuł jest podzielony na strony</p>' +
            '<ul>' +
            '<li><a class="prev" href="javascript:void(0);"><</a></li>' +
            '{0}' +
            '<li><a class="next" href="javascript:void(0);">></a></li>' +
            '</ul>' +
            '</div>';
        var elem = '<li><a rel="{0}" class="count-element count-{1}">{1}</a></li>';

        j('#redegined > *:not(:first-child)').wrapAll('<div class="page-wraper"></div>');
        var prev = Array.prototype.reverse.call(j('.page-wraper').find('.page-brake').eq(0).prevAll())
        prev.wrapAll('<div class="page"></div>');
        j('.page-wraper').find('.page-brake').each(function() {
            j(this).nextUntil('.page-brake').wrapAll('<div class="page"></div>');
        });
        j('.page-wraper .page').not(':eq(0)').hide();

        setTimeout(function() {
            var page_index = 0;
            var pages_size = j('.page-wraper .page').size();

            var elems = '';
            for (var i=0; i < pages_size; i++) {
                elems += elem.format(i, i + 1);
            };

            j('#tutorial-header').after(j(tmpl.format(elems)).addClass('pager-first'));
            j('.page-wraper').after(j(tmpl.format(elems)).addClass('pager-second'));

            j('.tutorial-pager').each(function() {
                j(this).find('.count-element:eq(0)').addClass('active');
            });


            function resolve(index) {
				j('.tutorial-pager li:first-child').css({'opacity': 1}).find('a').removeClass('disabled').css({'cursor': 'pointer'});
				j('.tutorial-pager li:last-child').css({'opacity': 1}).find('a').removeClass('disabled').css({'cursor': 'pointer'});
                if (index >= (pages_size - 1)) {
                    j('.tutorial-pager li:last-child').css({'opacity': 0.3}).find('a').addClass('disabled').css({'cursor': 'default'});
                    j('.tutorial-pager li:first-child').css({'opacity': 1}).find('a').removeClass('disabled').css({'cursor': 'pointer'});
                };
                if (index <= 0) {
                    j('.tutorial-pager li:first-child').css({'opacity': 0.3}).find('a').addClass('disabled').css({'cursor': 'default'});
                    j('.tutorial-pager li:last-child').css({'opacity': 1}).find('a').removeClass('disabled').css({'cursor': 'pointer'});
                };
            }

            resolve(page_index);

            j('.tutorial-pager a').click(function() {
				if (j(this).is('.disabled')) {
					return false;
				};
                if (j(this).is('.prev')) {
                    page = (page_index - 1) < 0 ? pages_size - 1 : page_index - 1;
                    page_index = page;
                    j('.page-wraper .page').eq(page).show().siblings('.page').hide();
                    j('.tutorial-pager').each(function() {
                        j(this).find('.active').removeClass('active');
                        j(this).find("a[rel='"+page+"']").addClass('active');
                    });
					document.location = '#/strona/' + (parseInt(page) + 1);
                }
                if (j(this).is('.next')) {
                    page = (page_index + 1) >= pages_size ? 0 : page_index + 1;
                    page_index = page;
                    j('.page-wraper .page').eq(page).show().siblings('.page').hide();
                    j('.tutorial-pager').each(function() {
                        j(this).find('.active').removeClass('active');
                        j(this).find("a[rel='"+page+"']").addClass('active');
                    });
					document.location = '#/strona/' + (parseInt(page) + 1);
                }
                if (j(this).is('.count-element')) {
                    page = j(this).attr('rel');
                    page_index = parseInt(page);
                    j('.page-wraper .page').eq(page).show().siblings('.page').hide();
                    j('.tutorial-pager').each(function() {
                        j(this).find('.active').removeClass('active');
                        j(this).find("a[rel='"+page+"']").addClass('active');
                    });
					document.location = '#/strona/' + (parseInt(page) + 1);
                };
                resolve(page_index);
                j.scrollTo('#tutorial-header', 1);
                return false;
            });

			if (document.location.hash.length > 0) {
				var hash = document.location.hash;
				if (match = hash.match(/^#\/strona\/([0-9]{1,})/)) {
					j('.tutorial-pager li').eq(parseInt(match[1])).find('a').trigger('click');
				}
			};
        }, 100);
    }
    
    /* devel */
//     alert(location.href.indexOf('www.szerokikadr.pl'));
//     alert(location.href.indexOf('#debug'));
    if(location.href.indexOf('www.szerokikadr.pl') == -1 && location.href.indexOf('#debug') > -1)
    {
		j('h1').css('border','1px solid white');
		j('h2').css('border','1px solid red');
		j('h3').css('border','1px solid green');
		j('h4').css('border','1px solid blue');

    }
    
    
});
