var oResources;
var oLibrary;
var oNavigation;
var oPageHome;
var oPagePortfolio;
var oPageProjects;
var oPageWork;
var oPageSoft;


function onLoaded()
{
  oLibrary = new CLibrary(g_debugMode);
  oResources = new CResources();
  oLibrary.sortByYear(oResources.tablePortfolio);
  oLibrary.createIndex(oResources.tablePortfolio);
  oLibrary.createIndexByCategory(oResources.tablePortfolio, g_enumCategory);

  oPageHome = new CPageHome
  (
    oLibrary,
    {
      Thumb:            "aha-thumb",
      ThumbBorder:      "aha-thumb-border",
      ThumbImage:       "aha-thumb-image",
      Thumb11:          "aha-thumb-11",
      Thumb12:          "aha-thumb-12",
      Thumb21:          "aha-thumb-21",
      Thumb31:          "aha-thumb-31",
      ThumbBorderLink:  "aha-thumb-border-link"
    }
  );

  oPagePortfolio = new CPagePortfolio
  (
    oLibrary,
    {
      Thumb:            "aha-thumb",
      ThumbBorder:      "aha-thumb-border",
      ThumbImage:       "aha-thumb-image",
      Thumb11:          "aha-thumb-11",
      Thumb12:          "aha-thumb-12",
      Thumb21:          "aha-thumb-21",
      Thumb31:          "aha-thumb-31",
      ThumbBorderLink:  "aha-thumb-border-link"
    }
  );

  oNavigation = new CNavigation
  (
    oLibrary,
    oResources
  );

  oPageWork = new CPageWork
  (
    oLibrary,
    {
      Thumb:                "aha-thumb",
      ThumbBorder:          "aha-thumb-border",
      ThumbImage:           "aha-thumb-image",
      Thumb11:              "aha-thumb-11",
      Thumb12:              "aha-thumb-12",
      Thumb21:              "aha-thumb-21",
      Thumb31:              "aha-thumb-31",
      ThumbBorderSelected:  "aha-thumb-border-selected",
      ThumbBorderLink:      "aha-thumb-border-link",
      NavThumbImage:           "aha-thumb-image",
      NavThumbBorderSelected:  "aha-nav-thumb-border-selected",
      NavThumbBorderLink:      "aha-nav-thumb-border-link"
    }
  );

  document.getElementById("ctl-Preloader").style.display = "none";
  document.getElementById("ctl-Content").style.display = "block";
  
  redirect();
}


function redirect()
{
  var url = document.location.href;

  var item = new Array();

  item = oLibrary.parseQueryString(url);

  validateLanguage(item.langId);

  var pageId = item.pageId;

  if (validatePage(pageId) && validateParams(item, pageId))
  {
    openPage(pageId);
  }
  else
  {
    openPage(g_enumMenuItem.Home);
  }
}


function validateLanguage(langId)
{
  if (langId && langId != null)
  {
    if (oLibrary.isInObject(langId, g_enumLanguages))
    {
       g_language = langId;
       return true;
    }
  }

  return false;
}


function validatePage(pageId)
{
  if (pageId && pageId != null)
  {
    if (oLibrary.isInObject(pageId, g_enumMenuItem))
    {
      return true;
    }
  }

  return false;
}


function validateParams(params, siteSection)
{
  var elementIndex;
  var resource;

  if (siteSection == g_enumMenuItem.Work ||
      siteSection == g_enumMenuItem.Portfolio)
  {
    resource = oResources.tablePortfolio;
  }
  else
  {
    return true;
  }
  

  if (oLibrary.isInObject(params.cgr, g_enumCategory))
  {
    g_params.cgr = params.cgr;

    if (siteSection == g_enumMenuItem.Portfolio)
    {
      return true;
    }
  }
  
  elementIndex = oLibrary.findInResource(resource, "Idx", params.idx);
  if (elementIndex != null)
  {
    if (resource[elementIndex].Source.Picture.length > params.img)
    {
      g_params.idx = params.idx;
      g_params.img = params.img;

      if (siteSection == g_enumMenuItem.Work ||
          siteSection == g_enumMenuItem.Soft)
      {
        return true;
      }
    }
  }

  return false;
}


function openPage(pageId)
{
  var currentPage;

  updateWindowTitle();
 
  changeSection(pageId);

  g_currentPageId = pageId;

  setSelectedMenuItem(oResources.tableMenuLanguages, g_language);

  if (pageId == g_enumMenuItem.Home)      { renderPageHome(); }
  if (pageId == g_enumMenuItem.Portfolio) { renderPagePortfolio(); }
  if (pageId == g_enumMenuItem.Work)      { renderPageWork(); }
  if (pageId == g_enumMenuItem.Resume)    { renderPageResume(); }

  if (pageId != g_enumMenuItem.Home)
  {
    oLibrary.getElementByIdEx("header-spacer").style.display = "block";
    oLibrary.getElementByIdEx("ctl-Header-Logo").style.display = "block";
    oLibrary.getElementByIdEx("ctl-Header-Logo2").style.display = "none";
  }

  oNavigation.renderMenu("ph-Header-MenuLanguages", oResources.tableMenuLanguages,    "aha-menu-small-link", "aha-menu-small-text", "aha-menu-small-back");
  setSelectedMenuItem(oResources.tableMenuMain[0].Child, pageId);

  if (pageId != g_enumMenuItem.Work)
  {
    setSelectedMenuItem(oResources.tableMenuTopLeft, pageId);
    oLibrary.getElementByIdEx("ctl-Header-Navigator").style.display = "none";
  }

  oNavigation.renderMenu("ph-Header-MenuTopLeft",      oResources.tableMenuTopLeft, "aha-menu-main-link", "aha-menu-main-text", "aha-menu-main-back");

  renderContentByPage(g_enumMenuItem.Header);
  renderContentByPage(g_enumMenuItem.Footer);
  renderContentByPage(pageId);

  pageVisibility(g_enumMenuItem.Header,     "ctl-Header");
  pageVisibility(g_enumMenuItem.Navigation, "ctl-Navigation");
  pageVisibility(g_enumMenuItem.Footer,     "ctl-Footer");
  pageVisibility(pageId, "ctl-Page");
}


function updateWindowTitle()
{
  document.title = oResources.tableWindowTitle[oLibrary.getLanguage()];
}


function changeSection(pageId)
{
  var res;

  if (pageId == g_enumMenuItem.Portfolio)
  {
    res = oLibrary.findInResource(oResources.tableMenuMain[0].Child[1].Child, "Id", g_params.cgr);
    if (res == null)
    {
      g_params.cgr = g_categoryPortfolio;
    }
  }
}


function renderPageHome()
{
  oPageHome.renderWorksByTable("ph-Home-Category01", oResources.tablePortfolio, g_enumCategory.Industrial);
  oPageHome.renderWorksByTable("ph-Home-Category02", oResources.tablePortfolio, g_enumCategory.Characters);
  oPageHome.renderWorksByTable("ph-Home-Category03", oResources.tablePortfolio, g_enumCategory.Objects);

  oLibrary.getElementByIdEx("header-spacer").style.display = "none";
  oLibrary.getElementByIdEx("ctl-Header-Logo").style.display = "none";
  oLibrary.getElementByIdEx("ctl-Header-Logo2").style.display = "block";
}

function renderPagePortfolio()
{
  oPagePortfolio.renderWorksByTable("ph-Portfolio-WorksArea", oResources.tablePortfolio, g_params.cgr);
  oLibrary.getElementByIdEx("ph-Header-MenuTop").style.display = "block";

  setSelectedMenuItem(oResources.tableMenuTopPortfolio, g_params.cgr);
  oNavigation.renderMenu("ph-Header-MenuTop",      oResources.tableMenuTopPortfolio, "aha-menu-secondary-link", "aha-menu-secondary-text", "aha-menu-secondary-back");
}


function renderPageWork()
{
  oPageWork.renderInformation
  (
    { Title:            "ph-Work-Title",
      YearText:         "ph-Work-YearText",
      CustomerPart:     "ph-Work-CustomerPart",
      CustomerText:     "ph-Work-CustomerText",
      Description:      "ph-Work-Description",
      ReferencesPart:   "ph-Work-ReferencesPart",
      ReferencesText:   "ph-Work-ReferencesText"
    },
    {
      Portfolio: oResources.tablePortfolio,
      Customers: oResources.tableCustomers
    },
    g_params
  );

  oPageWork.renderNavigation
  (
    {
      List: "ph-Header-List"
    },
    {
      Portfolio: oResources.tablePortfolio
    },
    g_params
  );

  oPageWork.renderPictures("ph-Work-Picture", oResources.tablePortfolio, g_params, DEF_ART_WORKS_INLINE, DEF_ART_WORKS_SPACER, g_enumMenuItem.Work);

  oLibrary.getElementByIdEx("ph-Header-MenuTop").style.display = "block";

  setSelectedMenuItem(oResources.tableMenuTopLeft, g_enumMenuItem.Portfolio);
  oLibrary.getElementByIdEx("ctl-Header-Navigator").style.display = "block";

  setSelectedMenuItem(oResources.tableMenuTopPortfolio, g_params.cgr);
  setBackMarkToMenuItem(oResources.tableMenuTopPortfolio, g_params.cgr);
  oNavigation.renderMenu("ph-Header-MenuTop",      oResources.tableMenuTopPortfolio, "aha-menu-secondary-link", "aha-menu-secondary-text", "aha-menu-secondary-back");
}


function renderPageResume()
{
  oLibrary.getElementByIdEx("ph-Header-MenuTop").style.display = "none";
}


function pageVisibility(pageId, nameDest)
{
  var nameSrc;
  var nodeSrc;
  var nodeDest;

  nameSrc   = getPageName(pageId);

  nodeSrc   = oLibrary.getElementByIdEx(nameSrc);
  nodeDest  = oLibrary.getElementByIdEx(nameDest);

  nodeDest.innerHTML = nodeSrc.innerHTML;
}


function getPageName(pageId)
{
  var res;
  res = oLibrary.findInResource(oResources.tablePageContent, "PageId", pageId);
  return oResources.tablePageContent[res].ElemId;
}


function renderContentByPage(pageId)
{
  var res;
  res = oLibrary.findInResource(oResources.tablePageContent, "PageId", pageId);

  if (res != null)
  {
    oLibrary.renderContent(oResources.tablePageContent[res].Value);
  }
}


function setSelectedMenuItem(data, itemId)
{
  var res = null;
  res = oLibrary.findInResource(data, "Id", itemId);

  if (res != null)
  {
    setUnselectAllMenuItems(data);
    data[res].IsChecked = true;
  }
}


function setUnselectAllMenuItems(data)
{
  var len = data.length;
  for (var i = 0; i < len; i++)
  {
    if (data[i].Id != g_enumMenuItem.Separator)
    {
      data[i].IsChecked = false;
    }
  }
}


function setBackMarkToMenuItem(data, param)
{
  var len = data.length;
  for (var i = 0; i < len; i++)
  {
    if (data[i].Id == param)
    {
      data[i].IsChecked = null;
    }
  }
}
