# Copyright (C) 2003-2005 Kouichirou Eto, All rights reserved.

module HtmlGeneratorUnit
  def a(arg=[], title=nil, &block)
    if arg.kind_of?(String)
      ha = {:href=>arg}
      ha.update(:title=>title) if title
      return make(:a, ha, &block)
    end
    make(:a, arg, &block)
  end

  def img(src="", alt="")
    make(:img, {:src=>src, :alt=>alt})
  end

  def text(name="", value=nil, size=nil, maxsize=nil)
    hash = {:name=>name, :value=>value, :size=>size, :maxsize=>maxsize}
    hash.delete_if {|k, v| v.nil? }
    make(:input, hash)
  end

  def password(name="", value=nil, size=nil)
    hash = {:type=>"password", :name=>name, :value=>value, :size=>size}
    hash.delete_if {|k, v| v.nil? }
    make(:input, hash)
  end

  def form(a=nil, b=nil, c=nil, &block)
    ar = []
    if a.is_a? Hash
      ar << a
    else
      ar << {:method=>a} if a
      ar << {:action=>b} if b
      ar << {:enctype=>c} if c
    end
    make(:form, ar, &block)
  end

  def hidden(a="", b=nil)
    ar = []
    if a.is_a? Hash
      ar << a
    else
      ar << {:type=>"hidden"}
      ar << {:name=>a}
      ar << {:value=>b} if b
    end
    make(:input, ar)
  end

  def select(name="", *args)
    ar = []
    args.each {|arg|
      ar << make(:option, {:name=>arg}){arg}
    }
    make(:select, {:name=>name}){ar}
  end

  def textarea(name="", cols=nil, rows=nil, &block)
    hash = {:name=>name, :cols=>cols, :rows=>rows}
    hash.delete_if {|k, v| v.nil? }
    make(:textarea, hash){
      block.call
    }
  end

  def submit(value=nil, name=nil)
    hash = {:type=>"submit", :name=>name, :value=>value}
    hash.delete_if {|k, v| v.nil? }
    make(:input, hash)
  end

  def radio(a="", b=nil, c=nil)
    ar = []
    if a.is_a? Hash
      a.update(:type=>"radio")
      ar << a
    else
      ar << {:type=>"radio"}
      ar << {:name=>a}
      ar << {:value=>b} if b
      ar << {:checkd=>"checkd"} if c
    end
    make(:input, ar)
  end

  def contenttype(content="")
    make(:meta, {"http-equiv"=>"Content-Type", :content=>content})
  end

  def stylesheet(url="", media=nil)
    hash = {:rel=>"stylesheet", :type=>"text/css", :href=>url, :media=>media}
    hash.delete_if {|k, v| v.nil? }
    make(:link, hash)
  end

  def refresh(sec=0, url="")
    make(:meta, {"http-equiv"=>"Refresh", :content=>"#{sec}; url=#{url}"})
  end
end
