onload = function constr() {
	$('#topstyle').attr( 'href', './style_images/top-opcjonalny/'+ $.cookie( "topstyle" ) + '.css'  );
}

tags = {
    /**
     * originally created by
     * Pitor `webdicepl` Leżoń
     * Contact: piotr.lezon@webdice.pl
     *
     * improvements and jQuery port
     * Przemysław "eRIZ" (erix) Pawliczuk
     * http://eriz.pcinside.pl
     */
    titleField: null,

    category: [
        {   ID: 'kindergarten',
            tags: [
                'PHP',
                'MySQL',
                'Access',
                'HTML',
                'PostgreSQL',
                'AJAX',
                'CSS',
                'Oracle',
                'XML',
                'JavaScript',
                'SQLite',
                'Java',
                'SQL',
                'MSSQL',
                'inne'
            ],
            forumID: 27,
            rules: 'http://forum.php.pl/Tematyka_i_zasady_panujace_na_forum_Przedszkole_t42815.html'
        },

        {
            ID: 'frameworks',
            tags: [
                'ZendFramework',
                'ZF',
                'Symfony',
                'SF',
                'CakePHP',
                'Cake',
                'CodeIgniter',
                'CI',
                'Kohana',
                'Prado',
                'Agavi',
                'inny'
            ],
            forumID: 101,
            rules: 'http://forum.php.pl/Tematyka_i_zasady_panujace_na_forum_Frameworki_t60749.html'
        }
    ],

    hasTag: function(tag){
        var expr = new RegExp('\\['+tag+'\\]', 'i');
        return expr.test(tags.titleField.val());
    },

    updateList: function(){
        $(tags.tags).each(function(i,v){
            $('#tag'+i).attr('checked', tags.hasTag(v));
        });
    },

    addTag: function(tag){
        if(tags.hasTag(tag)){
            return;
        }
        tags.titleField.val('['+tag+']'+tags.titleField.val());
    },

    isTagged: function(){
        var expr = new RegExp('\\[[a-z]+\\]', 'i');
        return expr.test(tags.titleField.val());
    },

    hasEmptyTitle: function(){
        var title = this.titleField.val();
        $(tags.tags).each(function(){
            var expr = new RegExp('\\['+this+'\\]', 'gi');
            title = title.replace(expr, '');
        });

        return title.replace(/\s+/gi, '').length==0;
    },

    removeTag: function(tag){
        if(!tags.hasTag(tag)){
            return;
        }

        var expr = new RegExp('\\['+tag+'\\]', 'gi');
        tags.titleField.val(tags.titleField.val().replace(expr, ''));
    },

    addTagChooser: function(tagsList){
        this.tags = tagsList;

        $('#postingform .ipbtable:eq(0) > tbody > tr:eq(1)').after('<tr><td colspan="2" class="bg1" align="center"><div style="width: 100%;" class="borderwrap" align="center"><table class="darkrow3" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td align="right" valign="top" width="20%"><strong>Tagi tematu</strong></td><td align="left" width="80%" id="tagList"><ul></ul></td></tr></table></div></td></tr>');
        var list = $('#tagList ul:eq(0)');
        $(this.tags).each(function(i,v){
            list.append('<li><input type="checkbox" value="'+v+'" id="tag'+i+'" /> <label for="tag'+i+'">['+v+']</label></li>');
        });

        checkboxes = list.find('input:checkbox').attr('checked', false);
        checkboxes.click(function(e){
            if(checkboxes.filter(':checked').length>3 && $(this).attr('checked')){
                e.preventDefault();
                alert('za duzo.');
                return;
            }

            tags.hasTag($(this).val()) ? tags.removeTag($(this).val()) : tags.addTag($(this).val());
        });

        $('#postingform').submit(function(e){
            if(!tags.isTagged()){
                e.preventDefault();
                alert('Wpisy w tym dziale muszą zostać opatrzone tagami.');
                return;
            }

            if(tags.hasEmptyTitle()){
                e.preventDefault();
                alert('Same tagi nie są poprawnym tytułem.');
            }
        });

        this.updateList();

        this.titleField.change(tags.updateList);
    },

    addRules: function(link){
        $('#postingform .ipbtable:eq(0) > tbody > tr:eq(0)').after('<tr><td colspan="2" class="bg1" align="center"><div style="width: 100%;" class="borderwrap" align="center"><table class="darkrow3" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td align="right" valign="top" width="20%"><strong>UWAGA</strong></td><td align="left" width="80%">W tym dziale obowiązują dodatkowe <a href="'+link+'">zasady</a>. Ich nie przestrzeganie może spowodować zamknięcie wątku przez moderatora.</td></tr>');
    },

    init: function(){
        this.titleField = $('input[name=TopicTitle]:eq(0)');

        if(this.titleField.length>0){
            for(var i=0; i<this.category.length; i++){
                if(this.category[i].forumID==parseInt(ipb_input_f)){
                    this.addTagChooser(this.category[i].tags);
                    this.addRules(this.category[i].rules);
                    break;
                }
            }
        }
    }

}

codeDetector = {

    trivialBugs: [
        {
            pattern: /headers already sent/ig,
            link: 'http://phpedia.pl/wiki/Cannot_add_header_information_-_headers_already_sent'
        },
        {
            pattern: /cannot add header/ig,
            link: 'http://phpedia.pl/wiki/Cannot_add_header_information_-_headers_already_sent'
        },
        {
            pattern: /cannot send session cookie/ig,
            link: 'http://phpedia.pl/wiki/Cannot_add_header_information_-_headers_already_sent'
        }
    ],

    detectTrivialBugs: function(content){
        var url = null;
        $(codeDetector.trivialBugs).each(function(){
            if(this.pattern.test(content)){
                url = this.link;
                return;
            }
        });

        return url==null ? false : url;
    },

    hasBbCode: function(content){
        return true;
    
        // don't match within tags
        var replace = /\[manual\]([a-z0-9_]+)\[\/manual\]|\[url([\s\S]*?)\]([\s\S]*?)\[\/url\]|\[i\](a-z0-9_)\[\/i\]|\[php\]([\s\S]*?)\[\/php\]|\[html\]([\s\S]*?)\[\/html\]|\[code\]([\s\S]*?)\[\/code\]/ig;

        content = content.replace(replace, '');

        var match = new RegExp(
            'print_r|'+
            'var_[a-z]+|'+
            '\\$[_]?[a-z]+|'+
            'header[^\w]|'+
            'isset|'+
            '\\<\\?PHP|'+
            '\\?\\>|'+
            '===|'+
            'die|'+
            'global|'+
            '[a-z]+Iterator|'+
            'private|'
        , 'i');

        return !match.test(content);
    },

    attachEvents: function(){
        var obj = $(this);
        var form = obj.parents('form');

        form.submit(function(e){
            var link = codeDetector.detectTrivialBugs(obj.val())

            if(link!=false){
                if(confirm('Prawdopodobnie Twój problem został poruszony już wielokrotnie. Czy chcesz otworzyć stronę z proponowanym rozwiązaniem?')){
                    e.preventDefault();
                    window.open(link, 'faq');
                    return;
                }
            }

            if(!codeDetector.hasBbCode(obj.val())){
                e.preventDefault();
                alert('Twój post zawiera listing, który powinien zostać objęty odpowiednim bbcode.');
                return;
            }
        });

    },

    init: function(){
        $('textarea.rte-iframe').each(codeDetector.attachEvents);
    }
}

$(document).ready(function(){

	/** Menu w topie */
	$('ul.sf-menu').superfish({
		delay: 0,
		autoArrows: false,
		dropShadows: false,
		speed: 0,
	    onBeforeShow:  function(){ $(this).parent().addClass( 'roll' );	},
	    onHide:        function(){ $(this).parent().removeClass( 'roll' ); }
	});



	var TopColors = new Array( "standard", "red", "blue", "pink", "green" );
	var ul = $('#background-color-switch ul');

	var style = "top_standard";
	var sty = $.cookie( "topstyle" );
	if( sty != null ) {
		style = sty;
	}


	/** Ustawienie pierwszego */
	var li = $( '<li id="top-selected" class="'+style+'"></li>' );

	ul.mouseleave( function() {
		ul.find( 'li' ).each( function( i ) {
			if( i != 0 ) {
				$(this).remove();
			}
		});
	});

	li.click( function() {
		ul.find( 'li' ).each( function( i ) {
			if( i != 0 ) {
				$(this).remove();
			}
		});

		for( var i=0; i < TopColors.length; i++ ) {

			var lii = $( '<li class="top_'+TopColors[i]+'"></li>' );

			lii.click( function() {
				$('#topstyle').attr( 'href', './style_images/top-opcjonalny/'+ $(this).attr('class') + '.css'  );
				$.cookie( "topstyle", $(this).attr('class'), { path: '/', expires: 10 });
				$('#top-selected').attr( 'class', $(this).attr('class') );
			});

			ul.append( lii );
		}
	});


	ul.append( li );


    /** erix' magic ;)
    * Firefox won't let us bind accesskey?
    */
    try{
        $('#fast-reply_cmd_ipb_php').attr({title: 'Wstaw link do funkcji w dokumentacji', accesskey: '1'});
    }catch(e){}

    // tags picker
    tags.init();
    // code detection lib
    codeDetector.init();

    // staff's stuff
    $('a.report').click(function(e){
        e.preventDefault();
        $(this).prev().css({top: e.pageY, left: e.pageX}).toggle();
    });
});
