

(function( $ ){
    
    var wiki = {    
        whitelist: {
            'MESHUGGAH': 'Meshuggah',
'Manna': 'Manna_(muusikko)',
'Seven': 'Seven_foo_foo_foo'

        },
        fold: function(element, settings){
            var total_height = element.innerHeight();
            var image = $('table.infobox td img:first', element);
            var disclaimer = $('div.disclaimer:first', element);
            var container_offset = settings.container.offset().top;
            var height = 300;
            
            if(image != null && image.length > 0)
            {
                var image_height = image.innerHeight();
                var image_offset = image.offset().top;
                height = image_offset + image_height - container_offset + disclaimer.outerHeight();
            }
            
            image = null;
            
            element.css('overflow', 'hidden');
            element.css('height', 0);
            
            //
            var box = $('<div class="wiki-footer"><div class="disclaimer">Artist biography courtesy <a target="_blank" href="http://fi.wikipedia.org">Wikipedia.org</a><br />Texts is available under Creative Commons BY-SA License.</div></div>');            
            box.insertAfter(element);
            
            
            if(total_height < height){
                element.animate({height: total_height+'px'}, 'slow', 'swing', function(){
                    element.css('overflow', 'visible');
                });
            }
            else {
                element.animate({height: height+'px'}, 'slow', 'swing');
                
                var dom = $('<a href="" class="wiki-button wiki-more">'+settings.button+'</a>');
                dom.prependTo(box);
                dom.click(function(){
                	if(element.height() > height) 
                	{
                		dom.removeClass('wiki-less');
                		dom.addClass('wiki-more');
                		element.animate({height: height+'px'}, 'slow', 'swing', function()
	                    { 
	                        element.css('overflow', 'hidden');
	                    });
                	}
                	else {
                		dom.removeClass('wiki-more');
                		dom.addClass('wiki-less');
	                    element.animate({height: total_height+'px'}, 'slow', 'swing', function()
	                    { 
	                        element.css('overflow', 'visible');
	                    });
                	}
                    return false;
                });
            }
            
            


        },
        preprocessor: function(text){
            var dom = $('<div>' + text + '</div>');
            //Remove links
            dom.find('sup').remove();
            
            dom.find('a').each(function(){
                 var current = $(this).attr('href');
                 if(current.indexOf('http') == 0)
                 {
                     $(this).attr('target', '_blank');
                 } 
                 else
                 {
                     $(this).attr('href', 'http://fi.wikipedia.org'+current);
                     $(this).attr('target', '_blank');
                 }
            });
            dom.find('button').remove();
            dom.find('table.metadata').remove();
            dom.find('th').removeAttr('style');
            var table = dom.find('table');
            table.removeAttr('style');
            table.removeAttr('width');
            table.addClass('infobox');
            
            
            $('span.editsection', dom).remove();
            $('div.magnify', dom).remove();
            $('table.toc', dom).remove();
            $('div.noprint', dom).remove();
            $('div.NavFrame', dom).remove();
            $('div#disambig', dom).remove();            
            
            return dom;
        },
        findArtist: function(lang, settings, queries){
            
            if(queries.length == 0)
            {
            	settings.container.removeClass('wiki-loading');
            	settings.container.append($('<div class="wiki-noartist">'+settings.missing_article+'</div>'));
                return;
            }
            
            var name = queries.shift();
            
            $.ajax({
                url: 'http://' + lang + '.wikipedia.org/w/api.php?action=query&format=json&prop=revisions&rvprop=content&rvsection=0&rvlimit=1&redirects&titles='+name,
                dataType: 'jsonp',
                success: function(data) 
                {
					
                    for (pageid in data.query.pages) break; //Will find the first page.
                    
                    if (pageid == '-1'){
                        wiki.findArtist(lang, settings, queries);
                        return;
                    }
                    
                    $.ajax({
                        url: 'http://'+ lang +'.wikipedia.org/w/api.php?action=parse&format=json&pageid='+pageid,
                        dataType: 'jsonp',
                        success: function(parsedata) {
							
                            settings.container.empty();
                            settings.container.removeClass('wiki-loading');
                            var element = wiki.preprocessor(parsedata.parse.text['*']);
                            settings.container.append(element);
                            wiki.fold(element, settings);
							
                        }
                    });
					
                }
            });
        }
    };
    
    /* Wikify(artist, options)
     * artist, The artist to query
     * options, Array of options for the rendering.
     * Will render the Wikipedia article for the artist. */
    $.fn.wikify = function(artist, options) {
        
        var settings = {
            'postfix' : [],
            'container': this,
            'button': 'Lis&auml;&auml;',
            'missing_article': artist+':lle ei valitettavasti ole saatavissa tietoja.'
        };
        
        this.addClass('wiki-container');
        this.addClass('wiki-loading');
        
        if( options ) {
            $.extend(settings, options);
        }
        
        var replacement = wiki.whitelist[artist];
        if(replacement != null) {
            artist = replacement;
        }

        //Hides the container
        //this.hide();
        wiki.findArtist('fi', settings, [artist+'_(yhtye)', artist+'_(rap-artisti)', artist+'_(laulaja)', artist+'_(artisti)', artist]);
        return this;
    };
})( jQuery );

