$(function () {
  LoadCategories();
  LoadTopArticles();
});

/**
* Loads top articles
*/
function LoadTopArticles()
{
	$.getJSON('ajax/home/help/gettoparticles', InitializeTopArticles);
}

/**
* Initializes top articles
*/
function InitializeTopArticles(data)
{
	if (data && data['rows'])
	{
		$(data['rows']).each(function() {
			if ($(this).length == 3)
			{
        var topArticleTitleLink = CreateElement(
          'a', null, { id: 'aHTopArticle_' + $(this)[0] + '_' + $(this)[1], href: '#' }, $(this)[2]);
        topArticleTitleLink.click(ShowTopArticle);
        
				$('#ulHTopArticles').append(CreateElement('li', null, null, null, topArticleTitleLink));
      }
		});
	}
}

/**
* Loads categories
*/
function LoadCategories()
{
	$.getJSON('ajax/home/help/getcategories', InitializeCategories);
}

/**
* Initializes categories
*/
function InitializeCategories(data)
{
	if (data && data['rows'])
	{
		$(data['rows']).each(function() {
			if ($(this).length == 3)
			{
        var categoryLink = CreateElement(
          'a', null, { id: 'aHCategory_' + $(this)[0], href: '#' }, $(this)[1]);
        categoryLink.click(LoadArticles);
        
        var categoryIcon = $(this)[2] ? 'url(/templates/!shared/images/home/kb_icon_' + $(this)[2] + '.gif)'
                                      : '';
        
        var category = CreateElement('li', null, { id: 'liHCategory_' + $(this)[0] }, null, categoryLink);
        if (categoryIcon) { category.css({ 'list-style-image': categoryIcon }); }
			 
				$('#ulHCategories').append(category);
      }
		});
	}
}

/**
* Loads articles
*/
function LoadArticles()
{
	var categoryID = (/(\d+)$/.exec($(this).attr('id'))) ? RegExp.$1 : '';
	if (categoryID) { LoadArticlesByCategory(categoryID); }

  return false;
}

/**
* Loads articles by category identifier
*/
function LoadArticlesByCategory(categoryID)
{
  HideCategories(categoryID);
	var categoryArticlesID = '#ulHArticles_' + categoryID;
	
	$('#liHCategory_' + categoryID).toggleClass('category');

  if ($(categoryArticlesID).length > 0) { $(categoryArticlesID).toggle(); }
  else { $.getJSON('ajax/home/help/getarticles?category=' + categoryID, InitializeArticles); }
}

/**
* Initializes articles
*/
function InitializeArticles(data)
{
	if (data && data['rows'] && data['category'])
	{
    var categoryID = parseInt(data['category']);
    var articles = CreateElement('ul', null, { id: 'ulHArticles_' + categoryID });

		$(data['rows']).each(function() {
			if ($(this).length == 3)
			{
        var articleTitleLink = CreateElement(
          'a', null, { id: 'aHArticle_' + categoryID + '_' + $(this)[0], href: '#' }, $(this)[1]);
        articleTitleLink.click(ShowArticle);
        
        var articleText = CreateElement(
          'div', 'hiddenArticle', { id: 'divHArticle_' + categoryID + '_' + $(this)[0] }, null, $(this)[2]);
			 
				articles.append(CreateElement(
          'li', null, { id: 'liHArticle_' + categoryID + '_' + $(this)[0] }, null,
          [ articleTitleLink, articleText ]));
      }
		});
		
		$('#liHCategory_' + categoryID).append(articles);
		
		var articleID = $('#liHCategory_' + categoryID).attr('showArticle');
		if (articleID) { ShowArticleByID(categoryID, articleID); }
	}
}

/**
* Shows article
*/
function ShowArticle()
{
	if (/(\d+)(?:_)(\d+)$/.exec($(this).attr('id')))
	{
		var categoryID = parseInt(RegExp.$1);
		var articleID = parseInt(RegExp.$2);
		
		ShowArticleByID(categoryID, articleID);
	}

  return false;
}

/**
* Shows article by identifier
*/
function ShowArticleByID(categoryID, articleID)
{
  HideArticles(categoryID, articleID);
  
  $('#liHArticle_' + categoryID + '_' + articleID).toggleClass('article');
  $('#divHArticle_' + categoryID + '_' + articleID).toggle();
  
  ScrollToArticle(categoryID, articleID);
}

/**
* Scrolls to article
*/
function ScrollToArticle(categoryID, articleID)
{
  $('html,body').scrollTop($('#liHArticle_' + categoryID + '_' + articleID).offset().top);
}

/**
* Shows top article
*/
function ShowTopArticle()
{
	if (/(\d+)(?:_)(\d+)$/.exec($(this).attr('id')))
	{
		var articleID = parseInt(RegExp.$1);
		var categoryID = parseInt(RegExp.$2);
		var articlesLoaded = $('#ulHArticles_' + categoryID).length > 0;

		if (!$('#liHCategory_' + categoryID).hasClass('category'))
		{
		  if (!articlesLoaded) { $('#liHCategory_' + categoryID).attr({ showArticle: articleID }); }
		  LoadArticlesByCategory(categoryID);
		}
		
		if (articlesLoaded)
		{
      if (!$('#liHArticle_' + categoryID + '_' + articleID).hasClass('article'))
  		{
  		  ShowArticleByID(categoryID, articleID);
  		}
  		else { ScrollToArticle(categoryID, articleID); }
		}
	}

  return false;
}

/**
* Hides categories
*/
function HideCategories(currentCategoryID)
{
  $('li[id^=liHCategory_]').each(function () {
    var categoryID = (/(\d+)$/.exec($(this).attr('id'))) ? RegExp.$1 : '';
    if (categoryID && categoryID != currentCategoryID)
    {
      $('#liHCategory_' + categoryID).removeClass('category');
      $('#ulHArticles_' + categoryID).hide();
    }
    
    HideArticles(categoryID);
  });
}

/**
* Hides articles
*/
function HideArticles(categoryID, currentArticleID)
{
  $('li[id^=liHArticle_' + categoryID + '_]').each(function () {
    var articleID = (/(\d+)$/.exec($(this).attr('id'))) ? RegExp.$1 : '';
    if (articleID && articleID != currentArticleID)
    {
      $('#liHArticle_' + categoryID + '_' + articleID).removeClass('article');
      $('#divHArticle_' + categoryID + '_' + articleID).hide();
    }
  });
}

