var data={};
var ui={};
var ajax={};

comments_handler=function(options, target){
    var defaults={
        url: '',
        target: target,
        article: '',
        list: target.find('.comments_list'),
        form: target.find('.comments_form'),
        button: target.find('.comments_button'), 
        display: target.find('.comments_display'),
        callback:function(comments, target){
            var html='';
            $.each(comments, function(){
                html+='<div class="comment">';
                html+='<span class="comment_author">'+this.author+': </span>';
                html+='<span class="comment_text">'+this.text+'</span>';
                html+='</div>';
            });
            target.html(html);
        }
    };
    options=$.extend({}, defaults, options);
    if(options.article=="input" || options.article==''){
        options.article=target.find('input[name=article_id]').val();
    }
    var obj={
        options: options,
        clear: function(){
            this.options.list.html('');
        },
        load: function(){
            var callback=this.options.callback;
            var list=this.options.list;
            var display=this.options.display;
            $.get(
                this.options.url,
                {article: this.options.article},
                function(comments){   
                    callback(comments, list);
                    display.show('blind');
                }
            );
        },
        init_form: function(){
            var that=this;
            this.options.form.validate({
                submitHandler: function(form){
                    $(form).ajaxSubmit({
                        data: {js: 'ok', article: that.options.article},
                        success: function(){
                            that.load();
                            that.options.form.resetForm();
                        }
                    });
                }
            });
        },
        init_button: function(){
            var that=this;
            this.options.button.click(function(){
                if(that.options.display.css('display')=='none'){
                    that.show();
                }else{
                    that.hide();
                }
            });
            this.options.display.css('display', 'none');
        },
        show: function(){
            this.options.button.html('hide comments');
            this.load();
        },
        hide: function(){
            this.clear();
            this.options.button.html('show comments');
            this.options.display.hide('blind');
        }
    };
    
    obj.init_form();
    obj.init_button();
    return obj;
};

inplace_video_player=function(options, target){
    var defaults={};
    options=$.extend({}, defaults, options);
    var obj={
        init:function(){
            target.click(function(){
                //ui.init_player=function(target, file, image, link, playlist)
                //ui.init_player('.playvideo', "", target.attr('src'));
                var thumb=target.attr('src');
                var embed=target.attr('ref');
                var player='<embed src="'+embed+'" width="480" height="270" allowfullscreen="true" /></embed>';
                //var player='<embed type="application/x-shockwave-flash" src="/public/jwplayer/player.swf" width="540" height="330" style="undefined" id="ply" name="ply" bgcolor="#ffffff" quality="high" allowfullscreen="true" allowscriptaccess="always" flashvars="autostart=true&amp;file='+video+'&amp;image='+thumb+'">';
                target.parent().html(player);
            });
        }
    };
    obj.init();
    return obj;
};

$(function(){
    ui.$article=$('#article');
    ui.$article.$date=$('#article_date');
    ui.$article.$title=$('#article_title');
    ui.$article.$text=$('#article_text');
    
    ui.$article.$video=$('#article_video');
    ui.$article.$image=$('#article_image');
    
    ui.$article.$gallery=$('#article_gallery');
    
    ui.$blog={};
    ui.$blog.$name=$('#blog_name');
    
    /*
     *Banner rotator as a jquery plugin
     */
    jQuery.fn.banner=function(timer){
        if(timer==undefined){
            timer=2000;
        }
        this.each(function(){
            var target=$(this);
            target.stopTime('banner');
            target.everyTime(timer, 'banner', function(){ui.set_banner(target);});
        });
    };
    
    jQuery.fn.comments_handler=function(action, args){
        this.each(function(){
            var target=$(this);
            var chandler=target.data('comments_handler');
            switch(action){
                case 'reload':
                    chandler.load();
                    break;
                case 'clear':
                    chandler.clear();
                    break;
                case 'changearticle':
                    chandler.hide();
                    chandler.options.article=args;
                    break;
                default:
                    chandler=comments_handler(action, target);
                    target.data('comments_handler', chandler);
                    break;
            }
        });
        return this;
    };
    
    jQuery.fn.inplace_video_player=function(action, args){
        this.each(function(){
            var target=$(this);
            var ivp=target.data('ivp');
            switch(action){
                default:
                    ivp=inplace_video_player(action, target);
                    target.data('ivp', ivp);
                    break;
            }
        });
        return this;
    };
    
    $('.banner').banner(5000);
    
});

ui.init_player=function(target, id, file, image, link, playlist){
    var so;
    if(playlist){
   	 so = new SWFObject('/public/jwplayer/player.swf','ply','540','481','9', '#ffffff'); 
    }else{
   	 so = new SWFObject('/public/jwplayer/player.swf','ply','540','330','9', '#ffffff'); 
    }
   
    so.addParam('allowfullscreen','true');
    so.addParam('allowscriptaccess','always');
    so.addParam('wmode','opaque');
    so.addVariable('file', file);
    so.addVariable('image', image);
    
    so.addVariable('skin', '/public/jwplayer/glow.zip');
    so.addVariable('dock', false);

    
    if(playlist){
        so.addVariable('plugins', 'sharing-2,flow-1');
        so.addVariable('flow.position', 'bottom');
        so.addVariable('flow.showtext', true);
        so.addVariable('screencolor','FFFFFF');
        so.addVariable('flow.textstyle','/css/jwplayer.css');
        so.addVariable('flow.color','000000');
        
        so.addVariable('sharing.link', true);
        so.addVariable('sharing.code', true);
    }else{
        so.addVariable('sharing.link', link);
        so.addVariable('sharing.code', encodeURIComponent('<embed src="'+data.current.embed_url+'" width="480" height="270" allowfullscreen="true" /></embed>'));
        so.addVariable('plugins', 'sharing-2');
    }
    
    so.write(target);
    
    return so;
};

ui.set_video_article=function(){
    ui.$article.$image.css('display', 'none');
    ui.$article.$video.css('display', 'block');
    
    ui.init_player('article_video',
        data.current.id,
        data.current.video_url,
        data.current.img_url,
        data.current.page_url);
        
        ui.$article.$date.html(data.current.article.post_date);
        ui.$article.$title.html(data.current.article.title);
        ui.$article.$text.html(data.current.styled_text);
};

ui.set_image_article=function(){
    ui.$article.$image.css('display', 'block');
    ui.$article.$video.css('display', 'none');
    
    ui.$article.$image.attr('src', data.current.img_url);
    
    ui.$article.$date.html(data.current.article.post_date);
    ui.$article.$title.html(data.current.article.title);
    ui.$article.$text.html(data.current.styled_text);
};

ui.set_gallery=function(){
    var html='';
    var article=data.current.article;
    $.each(article.images, function(){
        image=this;
        html+='<a class="grouped_gallery" rel="gallery_'+article.id+'" href="/media/images/'+image.filename+'">';
        html+='<img height="50" src="/media/mini_thumbnails/'+image.filename+'" alt="'+image.description+'">';
        html+='</a>';
    });
    
    ui.$article.$gallery.html(html);
    ui.init_fancybox($('.grouped_gallery'));
};

ui.get_article=function(id, callback){
    ajax.get_article(id, ui.$blog.$name.val(), function(){
        var share={};
        share['url']=data.current.page_url;
        share['title']=data.current.article.title;
        share['description']=data.current.article.title;
        addthis.button("#atbutton", addthis_conf, share);
        
        $('.comments').comments_handler('changearticle', data.current.article.id);
        
        if(data.current.article.type=='image_article'){
            ui.set_image_article();
        }else if(data.current.article.type=='video_article'){
            ui.set_video_article();
        }
        
        ui.set_gallery();
        
        if(callback){
            callback();
        }
    });
};

ui.get_handle_get_page=function(channel, target){
    return function(page, container){
        ajax.get_page(page, channel, ui.$blog.$name.val(), function(html){
            target.html(html);
        });
    };
};

ui.init_fancybox=function(target){
    target.fancybox({
		'autoDimensions':false,
		'transitionIn':'elastic',
		'transitionOut':'elastic',
		'speedIn':600, 
		'speedOut':200, 
		'overlayShow':false,
		'cyclic':true,
		'titlePosition':'inside'
	});
};

ui.set_banner=function(target){
    ajax.get_banner(target.find('a').attr('rel'), function(banner){
        var old_img=target.find('img');
        var old_a=target.find('a');
        var a = $('<a/>');
        a.addClass('iframe');
        a.attr('href', banner.link).attr('target', 'related');
        a.attr('rel', old_a.attr('rel'));
        var img = $('<img>');
        img.attr('width', old_img.attr('width'));
        img.attr('height', old_img.attr('height'));
        img.attr('title', banner.title);
        img.attr('src', '/media/images/'+banner.img_name);
        a.append(img);
        target.html(a);
        switch(banner.banner_type){
            case 'overlaybanner':
                target.find('a').fancybox({
                    'width':1014,
            		'height':720,
            		'scrolling':'no',
            		'autoDimensions':false,
            		'autoScale': false
                });
                break;
            case 'adbanner':
                break;
        }
    });
};

ajax.get_article=function(id, blog, callback){
    return $.get(
        '/article/get_article',
        {article_id: id, blog: blog},
        function(r_data){            
            data.current=r_data;
            
            callback();
        }
    );
};

ajax.get_page=function(page, channel, blog, callback){
    return $.get(
        '/article/list_channel/'+blog+"/"+channel,
        {page: page, perpage: 10},
        function(html){
            callback(html);
        }
    );
};

ajax.get_banner=function(position, callback){
    return $.get(
        '/article/get_banner/'+position,
        {},
        function(r_data){   
            callback(r_data);
        }
    );
};

