#include ".\regional_state_capital_report_generator.h"

 
void Xport_report_suite::regional_state_capital_report_generator::create_header(Xport::document& doc) const
{
  using namespace Xport;

  *doc.title() << "Regional State Capital Report";

  element hdr(Xport::div, "id_header");
  markup::iterator it = hdr.insert(element(Xport::div, "id_header_left"));
  element image(img);
  image.attribute(src, "../img/us_regions.png");
  *it << image;
  hdr << (element(h1) << "US Regional State Capital Report");

  element lnk(a);
  lnk << "Wikipedia";
  lnk.attribute(href, "http://en.wikipedia.org/wiki/Wiki");
  hdr << (element(Xport::div, "id_aknowledgement") << "Statistics and images courtesy of " << lnk);

  *doc.body() << hdr;
}

void Xport_report_suite::regional_state_capital_report_generator::create_report_body(Xport::document& doc) const
{
  using namespace Xport;

  int rgn = northeast;
  for (; rgn <= west; ++rgn) {
    std::ostringstream sRegion;
    sRegion << "id_region" << rgn;
    element rgn_div(Xport::div, "", "region");
    create_table_heading(rgn, rgn_div);
    element tbl(table);
    create_region_table(tbl, rgn);
    rgn_div << tbl;
    *doc.body() << rgn_div;
  }
}

void Xport_report_suite::regional_state_capital_report_generator::create_region_table(Xport::element& tbl, int rgn) const
{
  using namespace Xport;

  std::vector<state_info> siv;
  us_state_report_generator::get_regional_state_data(rgn, siv, sf_name, ascending);
  std::vector<state_info>::const_iterator it = siv.begin();

  create_table_header(tbl, rgn);
  int rows = 0;
  long total_area = 0;
  for (; it != siv.end(); ++it, ++rows) {
    markup::iterator mit = tbl.insert(element(tr));
    *mit << (element(td, "", "state_name") << it->name());
    *mit << (element(td) << it->abbr());
    *mit << (element(td, "", "capital") << it->capital());
  }

}

void Xport_report_suite::regional_state_capital_report_generator::create_table_heading(int rgn, Xport::element& container) const
{
  using namespace Xport;

  std::ostringstream img_path;
  img_path << "../img/region_" << rgn << ".png";

  element heading(Xport::div, "", "tbl_heading");
  markup::iterator it = heading.insert(element(Xport::div, "", "tbl_heading_left"));
  it = it->insert(element(img));
  it->attribute(src, img_path.str());

  heading << (element(h2) << get_region_name(rgn));

  container << heading;
}

void Xport_report_suite::regional_state_capital_report_generator::create_table_header(Xport::element& tbl, int rgn) const
{
  using namespace Xport;

  markup::iterator it_row = tbl.insert(element(tr, "", "titles"));
  *it_row << (element(th) << "State");
  *it_row << (element(th) << "Abbr");
  *it_row << (element(th) << "Capital");
}

void Xport_report_suite::regional_state_capital_report_generator::create_footer(Xport::document& doc) const
{
  using namespace Xport;

  element footer(Xport::div, "id_footer");
  element para(p);
  para << "xhtml report and stylesheet created by ";
  element lnk(a);
  lnk.attribute(href, "http://www.xportpro.com");
  lnk << "Xport";
  footer << (para << lnk);

  *doc.body() << footer;
}

void Xport_report_suite::regional_state_capital_report_generator::create_stylesheet(Xport::document& doc, Xport::stylesheet& ss) const
{
  using namespace Xport;

  xhtml_stylesheet_rule<char> rule("body");
  stylesheet::iterator it = ss.insert(stylesheet_rule("body"));
  *it << declaration(css::border, "0px");

  it = ss.insert(stylesheet_rule("#id_header"));
  *it << declaration(css::height, "200px")
      << declaration(css::border, "5px solid #8e2800")
      << declaration(background_color, "#ffb03b")
      << declaration(position, "relative");

  it = ss.insert(stylesheet_rule("#id_header_left"));
  *it << declaration(css::width, "300px")
      << declaration(float_css, "left")
      << declaration(background_color, "white")
      << declaration(css::height, "100%")
      << declaration(border_right, "5px solid #8e2800");

  it = ss.insert(stylesheet_rule("#id_header_left img"));
  *it << declaration(css::height, "150px")
      << declaration(margin_left, "40px")
      << declaration(margin_top, "20px");

  it = ss.insert(stylesheet_rule("#id_header h1"));
  *it << declaration(padding_left, "40%")
      << declaration(margin_top, "50px");

  it = ss.insert(stylesheet_rule("#id_aknowledgement"));
  *it << declaration(position, "absolute")
      << declaration(right, "20px")
      << declaration(bottom, "5px")
      << declaration(font_style, "italic");

  it = ss.insert(stylesheet_rule(".region"));
  *it << declaration(position, "relative")
      << declaration(margin_left, "auto")
      << declaration(margin_right, "auto")
      << declaration(css::width, "50%")
      << declaration(margin_top, "50px")
      << declaration(css::border, "3px solid #8e2800");

  it = ss.insert(stylesheet_rule(".tbl_heading"));
  *it << declaration(css::width, "100%")
      << declaration(css::height, "100px")
      << declaration(background_color, "#ffb03b")
      << declaration(border_bottom, "3px solid #8e2800");

  it = ss.insert(stylesheet_rule(".tbl_heading div"));
  *it << declaration(float_css, "left")
      << declaration(css::width, "130px")
      << declaration(css::height, "100%")
      << declaration(background_color, "white")
      << declaration(border_right, "3px solid #8e2800");

  it = ss.insert(stylesheet_rule(".tbl_heading div img"));
  *it << declaration(css::height, "80px")
      << declaration(margin_left, "20px")
      << declaration(margin_top, "10px");

  it = ss.insert(stylesheet_rule(".tbl_heading h2"));
  *it << declaration(padding_top, "30px")
      << declaration(padding_left, "50%")
      << declaration(margin_top, "0px");

  it = ss.insert(stylesheet_rule("table"));
  *it << declaration(css::width, "100%")
      << declaration(border_collapse, "collapse");

  it = ss.insert(stylesheet_rule("tr.titles"));
  *it << declaration(background_color, "#468966")
      << declaration(line_height, "150%");

  it = ss.insert(stylesheet_rule("th"));
  *it << declaration(border_bottom, "3px solid #8e2800")
      << declaration(text_align, "left")
      << declaration(padding_left, "10px");

  it = ss.insert(stylesheet_rule("td"));
  *it << declaration(background_color, "#fff0a5")
      << declaration(text_align, "left")
      << declaration(padding_left, "10px");

  it = ss.insert(stylesheet_rule("td.state_name"));
  *it << declaration(css::width, "200px");

  it = ss.insert(stylesheet_rule(".capital"));
  *it << declaration(css::color, "#8e2800")
      << declaration(font_weight, "bold");

  it = ss.insert(stylesheet_rule("#id_footer"));
  *it << declaration(css::width, "40%")
      << declaration(background_color, "#fff0a5")
      << declaration(margin_left, "auto")
      << declaration(margin_right, "auto")
      << declaration(margin_top, "50px")
      << declaration(css::border, "4px ridge #b64926")
      << declaration(css::height, "30px")
      << declaration(text_align, "center");

  it = ss.insert(stylesheet_rule("#id_footer p"));
  *it << declaration(margin_top, "5px");

  element css_link(Xport::link);
  css_link.attribute(rel, "stylesheet");
  css_link.attribute(type, "text/css");
  css_link.attribute(href, "regional_state_capital_report.css");
  *doc.head() << css_link;
  
}