﻿var newsManager = new function () {

    //News JavaScript
    this.newsQS = "/code/news.aspx?";
    this.lastLinkID = "";
    this.loadingImg = "<img src='/media/images/ajax/loading.gif' alt='loading' width='16' height='16' align='absmiddle' />";
    this.newsID = null;

    //Performed when document is loaded and ready. 
    //Place initialisation functions here.
    //==========================================================
    this.init = function () {
        $(document).ready(function () {

            newsManager.loadNewsCategories();
            //$("#story-parent,#list,#story-add-parent").corner("5px");
        });
    }

    //Load Category and/or News if specified
    this.loadFromQueryString = function () {
       
	    $hash = document.location.hash;
        if ($hash != null && typeof ($hash) != 'undefined' && $hash.search('=') >= 0)
		{
			$catPairs = null;
			$hash = $hash.replace("#", "");
            $hash = $hash.split('&');
            if ($hash.length > 1) {
                $newsID = $hash[0];
                $catPairs = $hash[1];
                newsManager.newsID = $newsID;                
            }
            else {
                $catPairs = $hash[0];
            }
			newsManager.findNewsCategoryAnchorById($catPairs);
        }
        else {

			//Load first category
			 newsManager.registerCategoriesClickHandler();
            var cat = $("#newspage #newscategories").children("a")[0];
            newsManager.loadNewsList(cat);
        }
    }

	this.registerCategoriesClickHandler = function()
	{
			//Listen for category click
            $("#newspage #newscategories a[href]").click(function () {
                newsManager.loadNewsList(this);
                return true;
            });
	}


    //Load all new categories
    //==========================================================
    this.loadNewsCategories = function () {
        $.get(newsManager.baseQS(), function (data) {
            $("#newspage #newscategories").html(data);

            //Load Category and/or News if specified
            newsManager.loadFromQueryString();
        });
    }

    //Load news based on selected category
    //==========================================================
    this.loadNewsList = function (cat) {

        //Highlight category
        newsManager.highLightCategory(cat);
        var catKey = $(cat).attr("rel");
        catPairs = "cat=" + catKey;

        $query = newsManager.baseQS(catPairs);

		$.get($query, function (data) {
            $("#newspage #list").html(data);

            if (newsManager.newsID != null && typeof (newsManager.newsID) != 'undefined') {
				//console.log("NEWSID:"+newsManager.newsID);
                newsManager.findNewsAnchorById(newsManager.newsID);
            }
            else {
                //Load First News in List
                var news = $("#newspage #list").find("a")[0];

				newsManager.loadNewsContent(news);
                newsManager.registerNewsClickHandler();
            }
        });
    }

    this.registerNewsClickHandler = function () {
        //Listen for news click
        $("#newspage #list a[href]").click(function () {
            newsManager.loadNewsContent(this);
            return true;
        });
    }

    //Find news anchor by ID
    //==========================================================
    this.findNewsAnchorById = function ($newsPair) {
        $newsID = $newsPair.split('=')[1];
        $newsAnchor = $('#newspage #list a[href*="NewsID=' + $newsID + '"]');
        if ($newsAnchor.length > 0) {
            newsManager.loadNewsContent($newsAnchor);
        }
        else {
            console.log('NewsID not found [' + $newsID + ']'); 
        }
    }

    //Find news cateory by ID
    //==========================================================
    this.findNewsCategoryAnchorById = function ($catPair) {
        $catPair = $catPair.split('=')[1];
        $catAnchor = $('#newscategories a[rel="' + $catPair + '"]');
        if ($catAnchor.length > 0) {
            newsManager.loadNewsList($catAnchor);
        }
    }

    //Load news content for given news
    //==========================================================
    this.loadNewsContent = function (news) {
        var $href = new String($(news).attr("href"));
        $href = $href.substr($href.lastIndexOf("#") + 1);

        newsManager.highLightNews(news);
        newsManager.loadNewsContentFromID($href);
    }

    this.loadNewsContentFromID = function ($newsID) {
        var $qs = newsManager.baseQS($newsID);
        
		$.get($qs, function (data) {
            $("#newspage #story").html(data);

            newsadd = $("#newspage #story").find(".news-add").html();
            if (newsadd != "") {
                $("#newspage #story-parent").css("width", "776px");
                $("#newspage #story-add-parent").show();
                $("#newspage #story-add").html(newsadd);
            }
            else {
                $("#newspage #story-parent").css("width", "100%");
                $("#newspage #story-add-parent").hide();
            }

            var height = $("#newspage #story").css("height");
            $("#newspage #story-add").css("height", height);
        });
    }

    //Highlight given news link
    //==========================================================
    this.highLightCategory = function (news) {
        $("#newspage #newscategories a").removeClass("selected");
        $(news).addClass("selected");
    }

    //Highlight given news link
    //==========================================================
    this.highLightNews = function (news) {
        $("#newspage #list a").removeClass("selected");
        $(news).addClass("selected");
    }

    //CacheBlock (consider using global cacheBlock function
    //==========================================================
    this.CB = function (amp) {
        var amp = typeof (amp) == "undefined" ? "&" : "";
        return amp + "cb=" + new Date().getTime();
    }

    this.baseQS = function ($params) {
        return this.newsQS + this.CB(false) + "&" + $params;
    }
}

newsManager.init();
