var Tools =
{
    contextVisible : true,
    challengeType : 'challenge',
    
    rules : {
      '.inside_label' : function(element)
      {
          Tools.fillLabel(element);
	      element.onblur = function()
	      {
              Tools.fillLabel(element);
	      };
	      
	      element.onfocus = function()
	      {
	          Tools.emptyLabel(element);
	      };
      },
      '.inside_label_cleaner' : function(element)
      {
          element.onclick = function()
          {
              var form = element.up('form');
              if(form != null)
              {
                var inputs = form.getElementsBySelector(".inside_label");
		        $A(inputs).each(function(input, index)
		        {
		            if(input.value == $(input.id + '_label').innerHTML)
                    {
		                input.removeClassName('light');
                        input.value = '';
                    }
		        });
              }
          };
      },
      'input#challenge_title' : function(element)
        {
            if([$('challenge_title_label').innerHTML].grep(/^tKaap/))
            {
                Tools.updateTitleLabel();
                
                element.onkeyup = function()
                {
                    if(Tools.challengeType == 'challenge')
                    {
                       Tools.updateTitleLabel();
                    }
                };
            }
        },
        'div.form_row span.tab input' : function(element)
        {
            if(element.type == 'radio')
            {
                element.onchange = function()
                {
                    if(element.checked)
                    {
                        Tools.updateContext(element);
                    }
                }
            }
        },
        'div.form_row span.tab a' : function(element)
        {
            element.onclick = function()
            {
                var siblings = element.siblings();
                siblings.each(function(sibling, index)
                {
                   if(sibling.type == 'radio')
                   {
                       sibling.checked = true;
                       Tools.updateContext(sibling);
                   }
                });
                return false;
            }
        },
        'input#context_switcher' : function(element)
        {
            element.onclick = function()
            {
                Tools.initContext(true);
            }
        }
    },
    initialize : function()
    {
        document.observe("dom:loaded", 
            function() {
                EventSelectors.start(Tools.rules);
                Tools.initContext(false);
            }
        );
    },
    fillLabel : function(element)
    {
	    var labels = document.getElementsByTagName("label");
	    $A(labels).each(function(label, index)
	    {
	       if(label.id == element.id + '_label' && element.value == '')
	       {
	           /*if(element.type != 'text')
                  element.type = 'text';*/
                  
	           element.addClassName('light');
	           element.value = label.innerHTML;
	       }
	    });
    },
    emptyLabel : function(element)
    {
	    var labels = document.getElementsByTagName("label");
	    $A(labels).each(function(label, index)
	    {
	       if(label.id == element.id + '_label' && element.value == label.innerHTML)
	       {
	           /*if(element.name == 'login_password')
                  element.type = 'password';*/

	           element.removeClassName('light');
	           element.value = '';
	       }
	    });
    },
    updateTitleLabel : function()
    {
        var noaccent = Tools.stripAccent($('challenge_title').value);
        var match = [noaccent].grep(/^[aAeEyYuUiIoOhH]/);
        
        var label = 'tKaap de';
        if(match.first() != undefined)
        {
            label = 'tKaap d\'';
        }
        
        $('challenge_title_label').innerHTML = label;
    },
    initContext : function(effect)
    {
        Tools.contextVisible = !$('context_switcher') || $('context_switcher').checked ? true : false;
        
        var contexts = $$('div.context');
        contexts.each(function(context, index)
        {
            if(Tools.contextVisible)
            {
                effect == true ? new Effect.SlideDown(context, {duration:0.7}) : context.show();
            }
            else
            {
                effect == true ? new Effect.SlideUp(context, {duration:0.7}) : context.hide();
            }
        });
        
        var inputs = $$('input');
        inputs.each(function(input, index)
        {
            if(input.checked && input.type == 'radio' && input.name != 'context_switcher')
            {
                Tools.updateContext(input);
            }
        });
        
        var tabs = $$('span.tab');
        tabs.each(function(tab, index)
        {
	        tab.addClassName('close');
	        if(Tools.contextVisible)
	        {
	           tab.removeClassName('close');
	        }
	    });
    },
    updateContext : function(element)
    {
        if(element.value == 'challenge')
        {
            $('challenge_title_label').innerHTML = 'tKaap de';
            $('challenge_title_suffix').innerHTML = '&nbsp;?';
            Tools.challengeType = element.value;
            Tools.updateTitleLabel();
            
            /*$('tab_sound').hide();
            if($('media_type_sound').checked == true)
            {
                $('media_type_all').checked = true;
                Tools.updateContext($('media_type_all'));
            }*/
            
            $('tab_kevadams').show();
            $('tab_videoclash').show();
        }
        else if(element.value == 'battle')
        {
            $('challenge_title_label').innerHTML = 'tKaap de trouver';
            $('challenge_title_suffix').innerHTML = '&nbsp;?';
            Tools.challengeType = element.value;
            
            //$('tab_sound').show();
            $('tab_videoclash').hide();
            
            $('tab_kevadams').hide();
            if($('target_kevadams').checked == true || $('target_videoclash').checked == true)
            {
                $('target_community').checked = true;
                Tools.updateContext($('target_community'));
            }
        }
        else if(element.value == 'kevadams')
        {
            $('tab_all').hide();
            $('tab_picture').hide();
            //$('tab_sound').hide();
            $('tab_media_load_picture').show();
            if($('media_type_video').checked == false)
            {
                $('media_type_video').checked = true;
                Tools.updateContext($('media_type_video'));
            }
        }
        else if(element.value == 'videoclash')
        {
            $('tab_all').hide();
            $('tab_picture').hide();
            //$('tab_sound').hide();
            $('tab_media_load_picture').hide();
            if($('media_type_video').checked == false)
            {
                $('media_type_video').checked = true;
                Tools.updateContext($('media_type_video'));
            }
        }
        else if(element.value == 'community')
        {
            $('tab_all').show();
            $('tab_picture').show();
            //$('tab_sound').show();
            $('tab_media_load_picture').show();
        }
        
        var tab = element.ancestors()[0];
        var formRow = tab.ancestors()[0];
        var siblings = formRow.childElements();
        siblings.each(function(sibling, index)
        {
            if(sibling.hasClassName('tab'))
            {
             sibling.removeClassName('select');

             var childItems = sibling.childElements();
             childItems.each(function(childItem, index)
             {
	             if(childItem.type == 'radio' && element.value == childItem.value)
	             {
	              sibling.addClassName('select');
	             }
             });
            }
            
            if(Tools.contextVisible && sibling.hasClassName('context'))
            {
                var contextItems = sibling.childElements();
                contextItems.each(function(contextItem, index)
                {
                    contextItem.hide();

                    if($(element.name + '_' + element.value + '_context'))
                    {
                       $(element.name + '_' + element.value + '_context').show();
                       new Effect.Fade($(element.name + '_' + element.value + '_context'), {duration:0.3, from:0, to:1});
                    }
                });
            }
        });
    },
    stripAccent: function(text)
    {
        /* no choice to repeat these lines because for_in is breaking on prototype 
        and charset doesn't allow object holder*/
        
        text = text.replace(/[ÀÁÂÃÄÅ]/g, 'A');
        text = text.replace(/[àáâãäå]/g, 'a');
        
        text = text.replace(/[ÒÓÔÕÖØ]/g, 'O');
        text = text.replace(/[òóôõöø]/g, 'o');

        text = text.replace(/[ÈÉÊË]/g, 'E');
        text = text.replace(/[éèêë]/g, 'e');
        
        text = text.replace(/[Ç]/g, 'C');
        text = text.replace(/[ç]/g, 'c');
        
        text = text.replace(/[ÌÍÎÏ]/g, 'I');
        text = text.replace(/[ìíîï]/g, 'i');
        
        text = text.replace(/[ÙÚÛÜ]/g, 'U');
        text = text.replace(/[ùúûü]/g, 'u');
        
        text = text.replace(/[ÿ]/g, 'y');
        
        text = text.replace(/[Ñ]/g, 'N');
        text = text.replace(/[ñ]/g, 'n');
        
		return text;
    },
    ucfirst: function(str) 
    {
		if(str.length > 0) 
		    return str[0].toUpperCase() + str.substring(1);
		else 
		    return str;
    },
    switchAbuse: function(contentId, show)
    {
        if(show == undefined)
            show = $(contentId).visible();

        if($(contentId))
        {
	        if(show == true)
	        {
	            if($(contentId).visible() == true)
	            {
	                new Effect.BlindUp($(contentId), {duration: .4});
	            }
	        }
	        else
	            new Effect.BlindDown($(contentId), {duration: .4});
	    }
    }
};
Tools.initialize();