jQuery.fn.sortElements = (function() {
    var sort = [].sort;
    return function(comparator, getSortable) {
        getSortable = getSortable || function(){return this;};
        var placements = this.map(function(){
            var sortElement = getSortable.call(this),
                parentNode = sortElement.parentNode,
                nextSibling = parentNode.insertBefore(
                    document.createTextNode(''),
                    sortElement.nextSibling
                );
            return function() {
                if (parentNode === this) {
                    throw new Error(
                        "You can't sort elements if any one is a descendant of another."
                    );
                }
                parentNode.insertBefore(this, nextSibling);
                parentNode.removeChild(nextSibling);
            };
        });
        return sort.call(this, comparator).each(function(i){
            placements[i].call(getSortable.call(this));
        });
    };
})();
function in_array(e,d,c){var b="",a=!!c;if(a){for(b in d){if(d[b]===e){return true;}}}else{for(b in d){if(d[b]==e){return true;}}}return false;}
function Pager(h){var k;var a=this;switch(h){case"unread":var e=document.getElementById("tutorials-read")?"#tutorials-read":"#tutorials-anchors";k={source:j("#tutorials-unread .tutorials-list"),target:j(e),items:10,height:93};break;case"read":k={source:j("#tutorials-read .tutorials-list"),target:j("#tutorials-anchors"),items:10,height:46};break;}this.lenght;this.temporary;this.page;this.make=function(n){var r=k.target.find(".pager");var m=j(k.target).find(".tutorials-list").height();var s=300;var l="";var q=jQuery('<li class="prev"><a href="javascript:void(0);">&nbsp;</a></li>');var p=jQuery('<li class="next"><a href="javascript:void(0);">&nbsp;</a></li>');for(var o=1;o<=this.lenght;o++){l+='<li><a href="javascript:void(0);" rel="'+o+'">&nbsp;</a></li>';}r.append(q).append(l).append(p);r.addClass("hidden").fadeIn(s).addClass("pager-remove");if(isNaN(a.index)){r.find("li:eq(1)").addClass("active");}else{a.index-=(a.index>this.lenght)?1:0;r.find("li:eq("+a.index+")").addClass("active");c(a.index);}g();return false;};this.check=function(){k.target.find(".pager").empty();var m=(k.source.find("li:visible").size())/k.items;var l=Math.round(m);m=l<m?(l+1):l;if(m>1){k.source.parent().css({height:k.height*(k.items/2)});k.source.css({top:0});this.lenght=m;this.make(true);}else{k.source.parent().css({height:k.source.height()});return false;}};this.check();function c(m){curentIndex=""+j(k.target).find(".pager li:eq("+m+") a").attr("rel");a.index=m;var l=((k.height*5)*(curentIndex-1));jQuery(k.source).animate({top:-l},300);}function f(m){var l=k.target.find(".pager li").index(m);return l;}function b(m){var l=f(m);if(l==0||l==a.lenght+1){return false;}c(l);return true;}function g(){k.target.find(".pager li").bind("click",d);}function i(){k.target.find(".pager li").unbind("click",d);}function d(){var l=j(this);var n=l.attr("class");var m=k.target.find(".pager .active");switch(n){case"prev":if(b(m.prev())){m.removeClass("active").prev().addClass("active");}break;case"next":if(b(m.next())){m.removeClass("active").next().addClass("active");}case"active":break;default:m.removeClass("active");l.addClass("active");c(f(l));}return false;}return this;}

var tutorials = {
    filter: {},
    $articles: j('.tut-list .tutorial-one'),
    $articlesRead: j('.subjects .subject-one'),
    $categories: j('.side-left .menu-left li a'),
    jsp: {},
    $jsp: {},
    jsp2: {},
    $jsp2: {},
    
    original: {
        levels: ["beginner", "intermediate", "advanced"]
    },
    setup: function() {
        
		tutorials.filter = {
			showLevels: 'all',
			showTreeCategories: 0
		};
		tutorials.$articles = j('.tut-list .tutorial-one');
		tutorials.$categories = j('.side-left .menu-left li a');
		tutorials.$articlesRead = j('.subjects .subject-one');
		
		tutorials.$jsp2 = jQuery('.subjects');
		tutorials.$jsp2.jScrollPane( { 
			horizontalGutter: 0
		} );
		tutorials.jsp2 = jQuery('.subjects').data('jsp');
		
		tutorials.$jsp = jQuery('.tut-list');
		tutorials.$jsp.jScrollPane( { 
			horizontalGutter: 0
		} );
		tutorials.jsp = jQuery('.tut-list').data('jsp');
		
		var s = new szkSelect('#select', function(selected){
			tutorials.setLevel(selected);
			return false;
		});
		
		
// 				alert('1');
		tutorials.filter = j.extend(tutorials.filter,ignored)
		if(!tutorials.filter.showLevels)
			tutorials.filter.showLevels = 'all';
        tutorials.filter.showTreeCategories = showTreeCategories;
        
        if(tutorials.filter.showTreeCategories == 0)
        {
			var categories = tutorials.$articles.filter(':first').attr('data-category').split(',');
			tutorials.filter.showTreeCategories = categories[1];
        }
        
//         tutorials.calcTree();
//         tutorials.convert();
//         tutorials.put();
// 		console.log(tutorials.filter.showLevels);
		if(!tutorials.filter.showLevels || tutorials.filter.showLevels.length == 0)
		{
			s.selectOption('all');
		} else {
			s.selectOption(tutorials.filter.showLevels);
		}
        return false;
    },
    
    start: function() {
    
        this.setup();
        this.calculate();
        
        tutorials.$categories.click(
			function()
			{
				var id = j(this).attr('data-category');
				tutorials.filter.showTreeCategories = id;
				tutorials.calculate();
				return false;
			}
        );
        j('p.see-all a').click(
			function()
			{
				tutorials.filter.showTreeCategories = -1;
				tutorials.calculate();
				return false;
			}
        );
    },
    
    setLevel: function(level)
	{
// 		alert(level);
		if(!level)
		{
			level = 'all';
		}
		tutorials.filter.showLevels = level;
		tutorials.calculate();
    },
    
    calculate: function() {

		var $articlesToShow = tutorials.$articles.hide();
		
		if(tutorials.filter.showLevels && tutorials.filter.showLevels != 'all')
			$articlesToShow = $articlesToShow.filter('[data-level="' + tutorials.filter.showLevels + '"]');
		
		if(tutorials.filter.showTreeCategories > 0)
		{
			$articlesToShow = $articlesToShow.filter('[data-category*=",' + tutorials.filter.showTreeCategories + ',"]');
		}
		
		$articlesToShow.show();
		
		
		jQuery('div.side-left ul.menu-left li li')
			.removeClass('active')
			.find('a[data-category="' + tutorials.filter.showTreeCategories + '"]')
				.addClass('active')
			.parent().addClass('active');
			
		Cufon.refresh('.menu-left li li a');
		
		tutorials.scrollReset();
        tutorials.pager();
        tutorials.put();
    },
    pager: function() {
        if (document.getElementById("tutorials-read")) {
            new Pager("read");
        }
        if (document.getElementById("tutorials-unread")) {
            new Pager("unread");
        }
    },
    put: function() {
        if (ignored) {
            
            var data =
            {
				showLevels: tutorials.filter.showLevels,
				showTreeCategories: tutorials.filter.showTreeCategories
            };
            
            j.post("/ustawienia-filtra/", data, function(b) {},
            "json");
        }
    },
    
    scrollReset: function()
    {
// 		alert('2');
		if(tutorials.jsp)
			tutorials.$jsp.data('jsp').reinitialise({horizontalGutter: 10})
			tutorials.$jsp.data('jsp').scrollToY(0, 500);
	}
};


var tutorialsCore = {
    start: function() {
        this.sort();
        this.opinion();
    },
    
    opinion: function() {
        if (document.getElementById('tutorials-filter')) {
            j('.info .opinion').each(function(i, e) {
                j(this).find('em:lt('+j(this).attr('data-checked')+')').addClass('active');
            });
        };
    },
    
    sort: function() {
        j('#tutorial-sort .date').click(function() {
            j(this).parent().hide();
            if (j(this).hasClass('active')) {
                return false;
            }
            j(this).addClass('active').siblings('a').removeClass('active');
            j(this).parents('#tutorial-sort').find('.selected').html(j(this).html());
            tutorials.$articles.sortElements(function(a, b){
                return j(a).attr('data-date') > j(b).attr('data-date') ? -1 : 1;
            });
            return false;
        });
        j('#tutorial-sort .opinion').click(function() {
            j(this).parent().hide();
            if (j(this).hasClass('active')) {
                return false;
            }
            j(this).addClass('active').siblings('a').removeClass('active');
            j(this).parents('#tutorial-sort').find('.selected').html(j(this).html());
            tutorials.$articles.sortElements(function(a, b){
                return j(a).attr('data-date') > j(b).attr('data-date') ? 1 : -1;
            });
            tutorials.$articles.sortElements(function(a, b){
                var c = j(a).attr('data-opinion') > j(b).attr('data-opinion') ? -1 : 1;
                return c;
            });
            return false;
        });
        
        j('#tutorial-read-sort .date').click(function() {
            j(this).parent().hide();
            if (j(this).hasClass('active')) {
                return false;
            }
            j(this).addClass('active').siblings('a').removeClass('active');
            j(this).parents('#tutorial-read-sort').find('.selected').html(j(this).html());
            tutorials.$articlesRead.sortElements(function(a, b){
                return j(a).attr('data-date') > j(b).attr('data-date') ? -1 : 1;
            });
            tutorials.$articlesRead.removeClass('odd').filter(':even').addClass('odd');
            return false;
        });
        j('#tutorial-read-sort .opinion').click(function() {
            j(this).parent().hide();
            if (j(this).hasClass('active')) {
                return false;
            }
            j(this).addClass('active').siblings('a').removeClass('active');
            j(this).parents('#tutorial-read-sort').find('.selected').html(j(this).html());
            tutorials.$articlesRead.sortElements(function(a, b){
                return j(a).attr('data-date') > j(b).attr('data-date') ? 1 : -1;
            });
            tutorials.$articlesRead.sortElements(function(a, b){
                var c = j(a).attr('data-opinion') > j(b).attr('data-opinion') ? -1 : 1;
                return c;
            });
            tutorials.$articlesRead.removeClass('odd').filter(':even').addClass('odd');
            return false;
        });
        
        j('#tutorial-sort .selected').click(function() {
            j(this).parent().find('.selection').show();
        });
        j('#tutorial-read-sort .selected').click(function() {
            j(this).parent().find('.selection').show();
        });
    }
}


var Player = {
    Bind: function() {
        j('#tutorials-unread .tutorials-list .video').click(function() {
            Player.Open(this, 0);
            return false;
        });
        j('#tutorials-read .tutorials-list .video').click(function() {
            Player.Open(this, 1);
            return false;
        });
    },

    Open: function(element, watched) {
        id = j(element).attr('rel');
        content = '';
        content += '<div id="window" class="new-video-player">';
        content += '<div id="videoplayer">';
        content += '</div>';
        content += '</div>';

        var values = {
            'height' : jQuery('body').height(),
            'width'  : jQuery('body').width()
        };

        hd_available = j(element).attr('data-hd-available');

        j('<div id="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() {
                Player.Play(id, watched, hd_available);
                j('#overlay').click(function() {
                    Player.Close();
                    return false;
                });
            }).center();
        });
        return false;
    },

    Play: function(id, watched, hd_available) {
        var quality = cookie.read('CakeCookie[Video]');
        quality = quality ? quality : 1;
        switch (quality) {
            default:
            case 'ZDoxOw%3D%3D':
                quality = 1;
                break;
            case 'ZDowOw%3D%3D':
                quality = 0;
                break;
        }
        var so = new SWFObject('/swf/videotutorial_player_layer.swf', 'videoplayerflash', '915','653', '9.0.115', '#000000', true);
        so.addVariable("userId", userid);
        so.addVariable("videoId", id);
        so.addVariable('watched', watched);
        so.addVariable('mainpage', 1);
        so.addVariable('hd', quality);
        so.addVariable('hd_available', hd_available);
        so.addVariable("gateway", "/cake_gateway.php");
        so.addParam('allowFullscreen', true);
        so.addParam("allowScriptAccess", "always");
        so.addParam("scale", "noscale");
        so.addParam('wmode', 'transparent');
        so.write('videoplayer');
    },

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

j(document).ready(function() {
    tutorialsCore.start();
    j('.tutorials-list').css('position','absolute');
    Player.Bind();
   
    Cufon.replace('', {fontFamily: 'GlasgowPl RR ExtraBold'});
    Cufon.replace(', .tutorials-top .select-box .decoration', {fontFamily: 'GlasgowPl RR Light'});
    Cufon.replace('.tutorials-top h1, #vignette ul a, .menu-left li strong', {fontFamily: 'GlasgowPl RR ExtraBold'});
    Cufon.replace('.menu-left li li a, .see-all a,.new-subjects .pomoc, .new-subjects .rss, .new-subjects .map, .known-subjects .pomoc', {fontFamily: 'HelveticaNeue',hover: true});
    if(!jQuery.browser.msie || document.location.href.indexOf('disableCufon') < 0)
    {
		Cufon.replace('.tut-list .tutorial-opis .title strong, .tut-list .tutorial-opis .title small, .tut-list .info em, .tut-list .info a ', {fontFamily: 'HelveticaNeue',hover: true});
		Cufon.replace('.subject-one .tutorial-opis .title strong, .subjects .info a, #foo div p ', {fontFamily: 'HelveticaNeue'});
    }
    Cufon.replace('.menu-left li li a',{fontFamily: 'HelveticaNeue',hover:true}); 
    
    j('.link').attr('target', '_blank');

    if (document.getElementById('tutorials-read')) 
        new Pager('read');
    if (document.getElementById('tutorials-unread')) 
        new Pager('unread');
    if (document.getElementById('tutorials')) 
        tutorials.start();
 
    j('.all').click(function() {
        j('.tutorials-list').each(function() {
           j(this).css({top: 0}).parent().height(j(this).height()); 
        });
        j('.pager').empty();
        return false;
    });
    

    
});

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