var UBBEditor = function (field_id)
{
    // UBB Editor
    this.__init(field_id);
};

UBBEditor.prototype = 
{
    /*
        Properties
    */
    'id' : '',
    'resource' : null,

    /*
        Init function to detect resource
    */
    '__init' : function(f_id)
    {
        if(document.getElementById)
        {
            try
            {
                this.id = f_id;
                this.resource = document.getElementById(f_id);
            }
            catch(e0)
            {
                this.resource = null;
            }
        }

        if(this.resource == null)
        {
            alert('The UBBEditor is not supported by your browser.');
        }
    },

    /*
        Utils
    */
    // Replace string within a string
    '__replace' : function(needle, replace_with, haystack)
    {
        if(haystack.length >= needle.length)
        {
            for(var i = 0; i <= (haystack.length - needle.length); i++)
            {
                if(haystack.substr(i, needle.length) == needle)
                {
                    haystack = haystack.substr(0, i) + replace_with + haystack.substr(i + needle.length);
                    i = i + replace_with.length;
                }
            }
        }

        return haystack;
    },

    // Replace string within a string
    '__addslashes' : function(haystack)
    {
        haystack = this.__replace('\\', '\\\\', haystack);
        haystack = this.__replace('"', '\\"', haystack);
        haystack = this.__replace('\'', '\\\'', haystack);
        return haystack;
    },

    // Get range of the selection. Will return an array with start index and length.
    '__getRange' : function()
    {
        var start = 0;
        var length = 0;

        if(this.resource != null)
        {
            // Set default range (cursor after last character in textarea)
            start = this.resource.value.length;
            length = 0;

            if(document.selection)
            {
                // Set focus on textarea (to ignore selection outside the textarea)
                this.resource.focus();

                // The current selection 
                var range = document.selection.createRange();

                // Store original text
                var original_text = range.text;

                // Insert ubb marker to find range
                // var marker = '[ubb_marker_' + (Math.round(Math.rand() * 90000) + 10000) + ']';
                var marker = '[ubb_marker_345381223746467363670497069367]';
                range.text = marker;

                // See if marker is found within the textarea
                var index = this.resource.value.indexOf(marker);

                if(index >= 0) // Text selected within textarea
                {
                    start = index;
                    length = original_text.length;

                    // Restore original text in textarea
                    this.resource.value = this.__replace(marker, original_text, this.resource.value);
                }
                else // No text selected within textarea
                {
                    // No selection found. Use default range.
                }
            }
            else if((this.resource.selectionStart >= 0) && (this.resource.selectionEnd >= 0))
            {
                start = this.resource.selectionStart;
                length = this.resource.selectionEnd - start;
            }
        }

        return new Array(start, length);
    },

    '__getText' : function(f_start, f_length)
    {
        var text = '';

        if(this.resource != null)
        {
            if(this.__getText.arguments.length < 1)
            {
                text = this.resource.value;
            }
            else if(this.__getText.arguments.length < 2)
            {
                text = this.resource.value.substr(f_start);
            }
            else
            {
                text = this.resource.value.substr(f_start, f_length);
            }
        }

        return text;
    },

    '__setText' : function(f_string, f_start, f_length)
    {
        if(this.resource != null)
        {
            if(this.__setText.arguments.length < 1)
            {
                this.resource.value = '';
            }
            else if(this.__setText.arguments.length < 2)
            {
                this.resource.value = f_string;
            }
            else if(this.__setText.arguments.length < 3)
            {
                this.resource.value = this.resource.value.substr(0, f_start) + f_string;
            }
            else
            {
                this.resource.value = this.resource.value.substr(0, f_start) + f_string + this.resource.value.substr(f_start + f_length);
            }
        }
    },

    /*
        UBB functions
        Note: Some functions require arguments. If not provided, PROMPT() is used to gather missing info.
    */

    // Add: [b]..[/b]
    'setBold' : function()
    {
        var range = this.__getRange();
        this.__setText('[b]' + this.__getText(range[0], range[1]) + '[/b]', range[0], range[1]);
    },

    // Add: [i]..[/i]
    'setItalic' : function()
    {
        var range = this.__getRange();
        this.__setText('[i]' + this.__getText(range[0], range[1]) + '[/i]', range[0], range[1]);
    },

    // Add: [u]..[/u]
    'setUnderline' : function()
    {
        var range = this.__getRange();
        this.__setText('[u]' + this.__getText(range[0], range[1]) + '[/u]', range[0], range[1]);
    },

    // Add: [url="f_url"]..[/url]
    'setUrl' : function(f_url)
    {
		var url = prompt('Geef de URL in: ', 'http://');
		var beschrijving = prompt('Geef de beschrijving van de URL in: ', '');
        var range = this.__getRange();
        
		if(url != '' && beschrijving != '')
        {
            this.__setText('[URL=' + url + ']' + beschrijving + '[/URL]', range[0], range[1]);
        }
        else if(url != '' && beschrijving == '')
        {
            this.__setText('[URL=' + url + ']' + url + '[/URL]', range[0], range[1]);
        }
        else
        {
        	this.__setText('', range[0], range[1]);
        }
    },
    
    'insertUnorderedlist' : function()
    {
	    var range = this.__getRange();
		var listItem = "";
		var list = "";
		
		do
		{
			listItem = prompt("Voeg een item toe");
			
			if(listItem != "" && listItem != null)
			{
				list = list+"[*]"+listItem+"\n";
			}
		}
		while(listItem != "" && listItem != null);
	
		list = "[list]"+list+"[/list]\n";
		
		this.__setText(list, range[0], range[1]);
	},
	
	'kampioenschap' : function()
	{
		var datum = prompt('Geef de datum van het kampioenschap in (vb. 1 januari 2008):', ' ');
		var plaats = prompt('Geef de plaats van het kampioenschap in (vb. Zele (ZELE)):', ' ');
		var type = prompt('Geef het type kampioenschap in (vb. Kampioenschap Van Vlaanderen AC):', ' ');
		var lijst = '';
		var lijst_item = '';
		var range = this.__getRange();
	
		do
		{
			lijst_item = prompt("Deelnemer:");
			if(lijst_item != "" && lijst_item != null)
			{
				lijst = lijst + "[*]" + lijst_item + "\n";
			}
		}
		while(lijst_item != "" && lijst_item != null);
			lijst = "[list]" + lijst + "[/list]";  
				
        this.__setText('Op ' + datum + ' vindt in [i]' + plaats + '[/i] het [b]' + type + '[/b] plaats. Hieronder vindt u een overzicht van de Zeelse geselecteerden:' + lijst + '[list][*][URL=http://www.val.be/?mnuid=668]Deelnemers en Tijdschema[/URL][/list]', range[0], range[1]);
	},
	
	'uitslag' : function()
	{
		var uitslag_beschikbaar = prompt('Is de uitslag reeds beschikbaar? (ja/nee)', '');
		var foto = prompt('Zijn er foto\'s beschikbaar op de pagina fotoreeksen? (ja/nee)', '');
        var range = this.__getRange();
        
		if(foto == 'ja' && uitslag_beschikbaar == 'ja')
        {
        	var uitslag = prompt('Geef de URL van de uitslag in:', 'http://');
            this.__setText('[list][*][URL=' + uitslag + ']Uitslag[/URL]\n[*][URL=./fotoreeksen.php]Foto\'s[/URL][/list]', range[0], range[1]);
        }
        else if(foto == 'ja' && uitslag_beschikbaar != 'ja')
        {
			this.__setText('[list][*][URL=#]Uitslag (nog niet beschikbaar)[/URL]\n[*][URL=./fotoreeksen.php]Foto\'s[/URL][/list]', range[0], range[1]);
        }		
        else if (foto !='ja' && uitslag_beschikbaar == 'ja')
        {
        	var uitslag = prompt('Geef de URL van de uitslag in:', 'http://');
			this.__setText('[list][*][URL=' + uitslag + ']Uitslag[/URL][/list]', range[0], range[1]);
        }
        else
        {
        	this.__setText('', range[0], range[1]);
        }
    },
	'podia' : function()
	{
		var goud = prompt('Zijn er gouden medailles behaald? (ja/nee)', '');
		var zilver = prompt('Zijn er zilveren medailles behaald? (ja/nee)', '');
		var brons = prompt('Zijn er bronzen medailles behaald? (ja/nee)', '');
        var range = this.__getRange();
        
        //goud, zilver en brons
		if(goud == 'ja' && zilver == 'ja' && brons == 'ja')
        {
			var lijst_goud_item = "";
			var lijst_goud = "";
			var lijst_zilver_item = "";
			var lijst_zilver = "";
			var lijst_brons_item = "";
			var lijst_brons = "";
			
			//goud
			do
			{
				lijst_goud_item = prompt("Atleet met gouden medaille");
				if(lijst_goud_item != "" && lijst_goud_item != null)
				{
					lijst_goud = lijst_goud + "[*]" + lijst_goud_item + "\n";
				}
			}
			while(lijst_goud_item != "" && lijst_goud_item != null);
				lijst_goud = "[list]" + lijst_goud + "[/list]"; 
			
			//zilver
			do
			{
				lijst_zilver_item = prompt("Atleet met zilveren medaille");
				if(lijst_zilver_item != "" && lijst_zilver_item != null)
				{
					lijst_zilver = lijst_zilver + "[*]" + lijst_zilver_item + "\n";
				}
			}
			while(lijst_zilver_item != "" && lijst_zilver_item != null);
				lijst_zilver = "[list]" + lijst_zilver + "[/list]";     
 
 			//brons
			do
			{
				lijst_brons_item = prompt("Atleet met bronsen medaille");
				if(lijst_brons_item != "" && lijst_brons_item != null)
				{
					lijst_brons = lijst_brons + "[*]" + lijst_brons_item + "\n";
				}
			}
			while(lijst_brons_item != "" && lijst_brons_item != null);
				lijst_brons = "[list]" + lijst_brons + "[/list]";  
        
        	//uitschrijven
        	this.__setText('[u]Overzicht van de podiumplaatsen:[/u]\n\n[b]Gouden medaille:[/b]' + lijst_goud + '[b]Zilveren medaille:[/b]' + lijst_zilver + '[b]Bronzen medaille:[/b]' + lijst_brons, range[0], range[1]);
        }
        //goud en zilver
        else if(goud == 'ja' && zilver == 'ja' && brons != 'ja')
        {
			var lijst_goud_item = "";
			var lijst_goud = "";
			var lijst_zilver_item = "";
			var lijst_zilver = "";
			
			//goud
			do
			{
				lijst_goud_item = prompt("Atleet met gouden medaille");
				if(lijst_goud_item != "" && lijst_goud_item != null)
				{
					lijst_goud = lijst_goud + "[*]" + lijst_goud_item + "\n";
				}
			}
			while(lijst_goud_item != "" && lijst_goud_item != null);
				lijst_goud = "[list]" + lijst_goud + "[/list]"; 
			
			//zilver
			do
			{
				lijst_zilver_item = prompt("Atleet met zilveren medaille");
				if(lijst_zilver_item != "" && lijst_zilver_item != null)
				{
					lijst_zilver = lijst_zilver + "[*]" + lijst_zilver_item + "\n";
				}
			}
			while(lijst_zilver_item != "" && lijst_zilver_item != null);
				lijst_zilver = "[list]" + lijst_zilver + "[/list]";
        
        	//uitschrijven
        	this.__setText('[u]Overzicht van de podiumplaatsen:[/u]\n\n[b]Gouden medaille:[/b]' + lijst_goud + '[b]Zilveren medaille:[/b]' + lijst_zilver, range[0], range[1]);
        }
        //goud en brons
        else if (goud == 'ja' && zilver != 'ja' && brons == 'ja')
        {
			var lijst_goud_item = "";
			var lijst_goud = "";
			var lijst_brons_item = "";
			var lijst_brons = "";		
			
			//goud
			do
			{
				lijst_goud_item = prompt("Atleet met gouden medaille");
				if(lijst_goud_item != "" && lijst_goud_item != null)
				{
					lijst_goud = lijst_goud + "[*]" + lijst_goud_item + "\n";
				}
			}
			while(lijst_goud_item != "" && lijst_goud_item != null);
				lijst_goud = "[list]" + lijst_goud + "[/list]"; 

 			//brons
			do
			{
				lijst_brons_item = prompt("Atleet met bronsen medaille");
				if(lijst_brons_item != "" && lijst_brons_item != null)
				{
					lijst_brons = lijst_brons + "[*]" + lijst_brons_item + "\n";
				}
			}
			while(lijst_brons_item != "" && lijst_brons_item != null);
				lijst_brons = "[list]" + lijst_brons + "[/list]";  
        
        	//uitschrijven
        	this.__setText('[u]Overzicht van de podiumplaatsen:[/u]\n\n[b]Gouden medaille:[/b]' + lijst_goud + '[b]Bronzen medaille:[/b]' + lijst_brons, range[0], range[1]);
        }
        //goud
        else if (goud == 'ja' && zilver != 'ja' && brons != 'ja')
        {
			var lijst_goud_item = "";
			var lijst_goud = "";
			
			//goud
			do
			{
				lijst_goud_item = prompt("Atleet met gouden medaille");
				if(lijst_goud_item != "" && lijst_goud_item != null)
				{
					lijst_goud = lijst_goud + "[*]" + lijst_goud_item + "\n";
				}
			}
			while(lijst_goud_item != "" && lijst_goud_item != null);
				lijst_goud = "[list]" + lijst_goud + "[/list]";     
        
        	//uitschrijven
        	this.__setText('[u]Overzicht van de podiumplaatsen:[/u]\n\n[b]Gouden medaille:[/b]' + lijst_goud, range[0], range[1]);
        }
        //zilver en brons
        else if (goud != 'ja' && zilver == 'ja' && brons == 'ja')
        {
			var lijst_zilver_item = "";
			var lijst_zilver = "";
			var lijst_brons_item = "";
			var lijst_brons = "";	
			
			//zilver
			do
			{
				lijst_zilver_item = prompt("Atleet met zilveren medaille");
				if(lijst_zilver_item != "" && lijst_zilver_item != null)
				{
					lijst_zilver = lijst_zilver + "[*]" + lijst_zilver_item + "\n";
				}
			}
			while(lijst_zilver_item != "" && lijst_zilver_item != null);
				lijst_zilver = "[list]" + lijst_zilver + "[/list]";     
 
 			//brons
			do
			{
				lijst_brons_item = prompt("Atleet met bronsen medaille");
				if(lijst_brons_item != "" && lijst_brons_item != null)
				{
					lijst_brons = lijst_brons + "[*]" + lijst_brons_item + "\n";
				}
			}
			while(lijst_brons_item != "" && lijst_brons_item != null);
				lijst_brons = "[list]" + lijst_brons + "[/list]";  
        
        	//uitschrijven
        	this.__setText('[u]Overzicht van de podiumplaatsen:[/u]\n\n[b]Zilveren medaille:[/b]' + lijst_zilver + '[b]Bronzen medaille:[/b]' + lijst_brons, range[0], range[1]);
        }
        //zilver
        else if (goud != 'ja' && zilver == 'ja' && brons != 'ja')
        {
			var lijst_zilver_item = "";
			var lijst_zilver = "";
		
			//zilver
			do
			{
				lijst_zilver_item = prompt("Atleet met zilveren medaille");
				if(lijst_zilver_item != "" && lijst_zilver_item != null)
				{
					lijst_zilver = lijst_zilver + "[*]" + lijst_zilver_item + "\n";
				}
			}
			while(lijst_zilver_item != "" && lijst_zilver_item != null);
				lijst_zilver = "[list]" + lijst_zilver + "[/list]";     
        
        	//uitschrijven
        	this.__setText('[u]Overzicht van de podiumplaatsen:[/u]\n\n[b]Zilveren medaille:[/b]' + lijst_zilver, range[0], range[1]);
        }
        //brons
        else if (goud != 'ja' && zilver != 'ja' && brons == 'ja')
        {
			var lijst_brons_item = "";
			var lijst_brons = "";
		
			//brons
			do
			{
				lijst_brons_item = prompt("Atleet met bronzen medaille");
				if(lijst_brons_item != "" && lijst_brons_item != null)
				{
					lijst_brons = lijst_brons + "[*]" + lijst_brons_item + "\n";
				}
			}
			while(lijst_brons_item != "" && lijst_brons_item != null);
				lijst_brons = "[list]" + lijst_brons + "[/list]";     
        
        	//uitschrijven
        	this.__setText('[u]Overzicht van de podiumplaatsen:[/u]\n\n[b]Bronzen medaille:[/b]' + lijst_brons, range[0], range[1]);
        }
		//niets
        else
        {
        	this.__setText('', range[0], range[1]);
        }
	},
	
	'nieuwsbrief' : function()
	{
		var nieuwsbrief = prompt('Geef het nummer van de nieuwsbrief in: ', '');
        var range = this.__getRange();
        
		if(nieuwsbrief != '')
        {
            this.__setText('De ' + nieuwsbrief + 'e editie van onze nieuwsbrief is er! Je kan hem vanaf nu via onderstaande link bekijken. Veel leesplezier!\n\n[i]Deze nieuwe editie van onze nieuwsbrief werd mede mogelijk gemaakt door onze sponsors. Bedankt![/i][list][*][URL=./uploads/nieuwsbrief/nieuwsbrief' + nieuwsbrief + '.pdf]Nieuwsbrief ' + nieuwsbrief + '[/URL]\n[*][URL=nieuwsbrief.php]Overzicht + Sponsors[/URL][/list]', range[0], range[1]);
        }
        else
        {
        	this.__setText('', range[0], range[1]);
        }
    }
}; 