jQuery(function($){

	/**
     * plugins
     */
    $.fn.whenLoaded = function(fn){
        if (this.complete || this.readyState == 'complete'){
            fn();
        }else{
            $(this).load(function(){
                fn();
            });
        }
    }
    $.fn.fadeToggle = function(speed, easing, callback){
       return this.animate({opacity: 'toggle'}, speed, easing, callback);
    }

	/**
     * puffery switches
     */
	var $puffery = $('#puffery');
	if ($puffery.length){
        var $puff = $('#puff', $puffery);
		$puff.append('<ul><li><a href="." class="prev"></a></li><li><a href="." class="next"></a></li></ul>');

        var $prev = $('a.prev', $puff),
            $next = $('a.next', $puff),
            $header = $('.header', $puff),
            $desc = $('.desc', $puff),
            $img = $('#display img', $puffery),
            k = 0,
            interval = null;

        function startInterval(){
            stopInterval();
            interval = window.setInterval(function(){$next.click();}, 12500);
        }
        function stopInterval(){
            window.clearInterval(interval);
        }

        function switchPuff(step){
            k += step;
            if (k < 0){
                k = sf_puffs.length - 1;
            }
            if (k >= sf_puffs.length){
                k = 0;
            }
            $header.fadeOut(300, function(){
               $(this).html(sf_puffs[k].header).fadeIn();
            });
            $desc.fadeOut(450, function(){
               $(this).html(sf_puffs[k].desc).fadeIn();
            });
            $img.fadeOut(300, function(){
                var $this = $(this);
                $this.attr('src', '/images/puffs/' + sf_puffs[k].img).whenLoaded(function(){
                    $this.fadeIn();
                    $('a.target', $puffery).attr('href', sf_puffs[k].path);
                });
            });
            startInterval();
        }

        $prev.click(function(){
            switchPuff(-1);
            return false;
        });
        $next.click(function(){
            switchPuff(1);
            return false;
        });
    }

    /**
     * devlog tags cloud
     */
    $tags_cloud = $('#tags_cloud');
    $tags_cloud
        .toggle()
        .prev()
        .find('span:first-child')
        .append('<span class="desc"><em><a href="#" title="toggle tags & authors cloud"><span id="toggle-cloud-verb">show</span> tags cloud</a></em></span>')
        .find('a')
        .toggle(function(){
            $tags_cloud.fadeIn('fast');
            $('#toggle-cloud-verb').text('hide');
            return false;
        }, function(){
            $tags_cloud.fadeOut('fast');
            $('#toggle-cloud-verb').text('show');
            return false;
        });

    /**
     * syntaxhighlighter
     */    
    var $syntaxs = $('pre[class*=brush:]');
    if ($syntaxs.length){
        var js_brushes = [];
        $syntaxs.each(function(){
            var matches = $(this).attr('class').match(/brush\:\s*(\w+)/);
            var brush = matches[1], fname;
            switch (brush)
            {
                case 'as3': case 'actionscript3 ': fname = 'AS3'; break;
                case 'bash': case 'shell': fname = 'Bash'; break;
                case 'c-sharp': case 'csharp': fname = 'CSharp'; break;
                case 'cpp': case 'c': fname = 'Cpp'; break;
                case 'css': fname = 'Css'; break;
                case 'delphi': case 'pas': case 'pascal': fname = 'Delphi'; break;
                case 'java': fname = 'Java'; break;
                case 'js': case 'jscript': case 'javascript': fname = 'JScript'; break;
                case 'rails': case 'ror': case 'ruby': fname = 'Ruby'; break;
                case 'php': fname = 'Php'; break;
                case 'sql': fname = 'Sql'; break;
                case 'xml': case 'xhtml': case 'xslt': case 'html': case 'xhtml': fname = 'Xml'; break;
                default : fname = brush.charAt(0).toUpperCase()+brush.substr(1); break;
            }
            js_brushes.push('/js/sh/shBrush'+fname+'.js');
        });
        $.xLazyLoader({
            js: $.merge(['/js/sh/shCore.js'], js_brushes),
            css: ['/css/sh/shCore.css', '/css/sh/shThemeDefault.css'],
            success: function(){
                function alert(text){ console.log(text) }
                SyntaxHighlighter.all();                
            }
        });
    }
    /**
     * about
     */
    var $p_about = $('#p_about');
    if ($p_about.length){
        var $img_body = $('#body hr:eq(1)').after('<div id="about_imgs" class="body"></div>').next();
        var img_html = '<img src="" width="170" height="127" alt=""/>'
        for (var i=0;i<4;i++){
            $img_body.append(img_html);
        }
        var $imgs = $('img', $img_body);

        var actives = [];

        function rand(min,max){
            if (min==0){
                max += 1;
            }
            return Math.floor(Math.random()*max+min);
        }
        function shuff(pos){
            if (pos === undefined){
              pos = rand(0,3);
            }
            $imgs.eq(pos).attr('src', '/images/about/' + rand(1,14) + '.jpg');
        }

        shuff(0);
        shuff(1);
        shuff(2);
        shuff(3);

        window.setInterval(function(){shuff();}, 400);
        window.setInterval(function(){shuff();}, 600);
    }
});
