module ApplicationHelper

  FLASH_NOTICE_KEYS = [:error, :notice, :warning]
  
  def colorize_in_use_locale(locale)
    @site_in_use_locales.include?(locale)? 'green' : 'red'
  end
  
  def flash_messages
    return unless messages = flash.keys.select{|k| FLASH_NOTICE_KEYS.include?(k)}
    formatted_messages = messages.map do |type|      
      content_tag :div, :class => type.to_s do
        message_for_item(flash[type], flash["#{type}_item".to_sym])
      end
    end
    raw(formatted_messages.join)
  end
  
  def link_back
     link_to t('back'), get_go_back, :class => 'nav'
  end
  
  # Clean the link back
  # Remove the locale but keep all the other params
  def get_go_back
    begin
      if request.url.include?('locale=')
        session[:last_page]
      else
        target = request.referer.split('?')
        vars = target[1].split('&') rescue []
        vars.delete_if {|var| var.include? 'locale=' }
        session[:last_page] = if vars.size > 0
         target[0].to_s + '?' + vars.join('&')
        else
          target[0].to_s
        end
      end
    rescue
      eval(params[:controller].split('/').join('_') << '_url')
    end
  end

  def message_for_item(message, item = nil)
    if item.is_a?(Array)
      message % link_to(*item)
    else
      message % item
    end
  end
  
  def render_node_and_children(node)
    ret = ''
    if node
      case node._type
        when 'Page'
          dest = admin_page_path(node)
        when 'Link'
          dest = admin_link_path(node)
      end
      ret << "<li>"
      ret << (link_to node.name, dest)
      ret << ' | ' << (link_to 'new_link', new_admin_link_path(:parent_id => node.id)) if node._type.eql?('Page')
      ret << ' | ' << (link_to t(:delete), delete_admin_link_path(node, :authenticity_token => form_authenticity_token), :confirm => t('sure?'), :class => 'delete') if node._type.eql?('Link')
      ret << render_children(node)
      ret << "</li>"
    end
    ret.html_safe
  end
  
  def render_children(parent)
    if children = parent.children
      ret = ''
      ret << "<ul>"
      children.each do |child|
        ret << render_node_and_children(child)
      end
      ret << "</ul>"
      ret
    end
  end

end
