﻿//alert('Lets very first ok ok');

if (!window.Ninemsn) {
    window.Ninemsn = {};
}
if (!window.Ninemsn.Glance) {
    window.Ninemsn.Glance = {};
}
if (!window.Ninemsn.Shared) {
    window.Ninemsn.Shared = {};
}

$(document).ready(function() {
    //alert('Lets get ready to init ok');
    Ninemsn.Glance.Init();
});

/* Elements are cached globally for performance reasons */
/** Don't have to reselect elements when doing complex processing **/
Ninemsn.Glance = new function() {
    var me = this;

    /* Globals */
    this.THUMB_COUNT = 0;
    this.THUMBS_POS_LEFT = 0;
    this.CUR_GAL_INDEX = 0;
    this.DIR_RIGHT = true;
    this.FIRST_LOAD = true;
    this.NO_MORE_DATA = false;
    this.LOAD_GAL_FROM_ARR = false;
    this.LAST_ID = 0;
    this.RESIZER_HGT = 80;

    this.thumbs = null;
    this.dateImgs = null;
    this.artItems = null;

    this.Init = function() {

        //alert('Lets maybe init ok');

        if (typeof FIRST_ART_ID != "undefined" && FIRST_ART_ID != "") {

            //alert('Lets really init ok');

            //GLANCE IN WWOS
            me.DISPLAY_YEAR_ENABLED = typeof DISPLAY_YEAR_ENABLED != "undefined" && DISPLAY_YEAR_ENABLED == "true" ? true : false;
            //Server-side globals
            me.FIRST_ART_ID = FIRST_ART_ID;
            me.FIRST_VERT_ART_DATE = typeof FIRST_VERT_ART_DATE != "undefined" && FIRST_VERT_ART_DATE != "" ? FIRST_VERT_ART_DATE : "Today";
            me.FIRST_ART_DATE = typeof FIRST_ART_DATE != "undefined" && FIRST_ART_DATE != "" ? FIRST_ART_DATE : "Today";
            me.FIRST_ART_VID = typeof FIRST_ART_VID != "undefined" && FIRST_ART_VID != "" ? FIRST_ART_VID : "";
            me.FIRST_ART_IMGS = typeof FIRST_ART_IMGS != "undefined" && FIRST_ART_IMGS.length ? FIRST_ART_IMGS : [];
            me.CURRENT_ASSET_DISPLAY_URL = CURRENT_ASSET_DISPLAY_URL;

            //HL driven globals
            me.CAR_THUMB_WIDTH = typeof CAR_THUMB_WIDTH != "undefined" && CAR_THUMB_WIDTH != "" ? parseInt(CAR_THUMB_WIDTH) : 134;
            me.CAR_DATEIMG_WIDTH = typeof CAR_DATEIMG_WIDTH != "undefined" && CAR_DATEIMG_WIDTH != "" ? parseInt(CAR_DATEIMG_WIDTH) : 30;

            //alert("JS_SITEID" + JS_SITEID);

            //Default to false
            me.FLOCK_ENABLED = typeof FLOCK_ENABLED != "undefined" && FLOCK_ENABLED ? true : false;
            me.VERT_ENABLED = typeof VERT_ENABLED != "undefined" && VERT_ENABLED ? true : false;
            me.AD_ENABLED = typeof AD_ENABLED != "undefined" && AD_ENABLED ? true : false;
            me.AD_WIDTH = typeof AD_WIDTH != "undefined" && AD_WIDTH != "" ? parseInt(AD_WIDTH) : 300;
            me.AD_HEIGHT = typeof AD_HEIGHT != "undefined" && AD_HEIGHT != "" ? parseInt(AD_HEIGHT) : 250;
            me.AD_LEFT_AND_RIGHT = typeof AD_LEFT_AND_RIGHT != "undefined" && AD_LEFT_AND_RIGHT ? true : false;
            me.PAGE_SIZE = typeof PAGE_SIZE != "undefined" && PAGE_SIZE != "" ? parseInt(PAGE_SIZE) : 7;
            //me.ART_TEMPLATE_ID = typeof ART_TEMPLATE_ID != "undefined" && ART_TEMPLATE_ID != "" ? parseInt(ART_TEMPLATE_ID) : 4055;

            //Auto. Page JS vars
            me.SITE_ID = typeof JS_SITEID != "undefined" && JS_SITEID != "" ? JS_SITEID : "2339";
            me.SITE_NAME = typeof JS_SITE != "undefined" && JS_SITE != "" ? JS_SITE : "news";
            me.SECTION_ID = typeof JS_SECTIONID != "undefined" && JS_SECTIONID != "" ? JS_SECTIONID : "9201";
            me.SECTION_NAME = typeof JS_SECTION != "undefined" && JS_SECTION != "" ? JS_SECTION : "glance";
            me.SUBSECTION_ID = typeof JS_SUB_SECTIONID != "undefined" && JS_SUB_SECTIONID != "" ? JS_SUB_SECTIONID : "0";
            me.SUBSECTION_NAME = typeof JS_SUB_SECTION != "undefined" && JS_SUB_SECTION != "" ? JS_SUB_SECTION : "";
            me.JS_ADX_MEDIUM_TOP = typeof JS_ADX_MEDIUM_TOP != "undefined" && JS_ADX_MEDIUM_TOP != "" ? JS_ADX_MEDIUM_TOP : "";
            me.OMNTR_CATEGORY = typeof JS_OMNTR_CATEGORY != "undefined" && JS_OMNTR_CATEGORY != "" ? JS_OMNTR_CATEGORY : "";
            if (me.JS_ADX_MEDIUM_TOP == '') {
                me.JS_ADX_MEDIUM_TOP = typeof JS_ADEXPERT_RECTANGLE != "undefined" && JS_ADEXPERT_RECTANGLE != "" ? JS_ADEXPERT_RECTANGLE : "";
            }

            //alert('Lets init get paths ok');

            //note that BASE_PATH still inuse for "blank image" url, should this change?
            me.BASE_PATH = 'http://' + window.location.host;

            //target format: http://asset.9msn.com.au/img/000/000/024/211/geena_1992.jpg
            me.ASSET_IMAGE_BASE_PATH = Ninemsn.Shared.Util.GetDomain('asset') + '/img/';
            //if we have a debug image path url, use it to override image path url
            if (typeof ASSET_DEBUG_IMAGE_BASE_PATH != "undefined" && ASSET_DEBUG_IMAGE_BASE_PATH != "") {
                me.ASSET_IMAGE_BASE_PATH = ASSET_DEBUG_IMAGE_BASE_PATH;
            }

            me.RESIZER_PATH = 'http://images.ninemsn.com.au/resizer.aspx?height=' + me.RESIZER_HGT + '&url=';
            //if we have a debug resizer url, use it to override resizer url
            if (typeof ASSET_DEBUG_RESIZER_URL != "undefined" && ASSET_DEBUG_RESIZER_URL != "") {
                me.RESIZER_PATH = ASSET_DEBUG_RESIZER_URL + '?height=' + me.RESIZER_HGT + '&url=';
            }

            me.ASSET_SERVICE_URL = Ninemsn.Shared.Util.GetDomain('data') + '/Services/Service.axd';
            //if we have a debug service url, use it to override service url
            if (typeof ASSET_DEBUG_SERVICE_URL != "undefined" && ASSET_DEBUG_SERVICE_URL != "") {
                me.ASSET_SERVICE_URL = ASSET_DEBUG_SERVICE_URL;
            }
            //add params to the service url
            me.ASSET_SERVICE_URL = me.ASSET_SERVICE_URL +
				'?ServiceName=Asset' +
				'&ServiceAction=PackageSearch' +
				'&ServiceFormat=JSONAUTO' +
				'&AssetDisplayTypeId=3' +
				'&OrderBy=AuthorDate' +
				'&PageIndex=0' +
				'&FirstAssetId=0' +
				'&IncludeTotal=false' +
				'&IncludeChildren=true' +
				'&IncludeRelated=true' +
				'&IncludeData=false' +
				'&IsThumbnailPathAbsolute=false' +
				'&SiteID=' + me.SITE_ID +
				'&SectionId=' + me.SECTION_ID +
				'&SubSectionID=' + me.SUBSECTION_ID +
				'&PageSize=' + me.PAGE_SIZE;

            me.AD_FRAME_URL = '/share/ads/GetAd.html?site=' + me.SITE_NAME + '&sec=' + me.SECTION_NAME + '&sub=' + me.SUBSECTION_NAME + '&pg=' + escape(me.JS_ADX_MEDIUM_TOP);

            /*** Date Image Globals ***/
            me.VERTICAL_IMG_BOLD = typeof VERTICAL_IMG_BOLD != "undefined" && VERTICAL_IMG_BOLD != "" ? VERTICAL_IMG_BOLD : true;
            me.VERTICAL_IMG_COLOR = typeof VERTICAL_IMG_COLOR != "undefined" && VERTICAL_IMG_COLOR != "" ? VERTICAL_IMG_COLOR : 'white';
            me.VERTICAL_IMG_FONT_FAM = typeof VERTICAL_IMG_FONT_FAM != "undefined" && VERTICAL_IMG_FONT_FAM != "" ? VERTICAL_IMG_FONT_FAM : 'arial';
            me.VERTICAL_IMG_FONT_SIZE = typeof VERTICAL_IMG_FONT_SIZE != "undefined" && VERTICAL_IMG_FONT_SIZE != "" ? parseInt(VERTICAL_IMG_FONT_SIZE) : 14;
            me.VERTICAL_IMG_X_POS = typeof VERTICAL_IMG_X_POS != "undefined" && VERTICAL_IMG_X_POS != "" ? parseInt(VERTICAL_IMG_X_POS) : 5;
            me.VERTICAL_IMG_Y_POS = typeof VERTICAL_IMG_Y_POS != "undefined" && VERTICAL_IMG_Y_POS != "" ? parseInt(VERTICAL_IMG_Y_POS) : 5;
            me.VERTICAL_IMG_BG_PATH = typeof VERTICAL_IMG_BG_PATH != "undefined" && VERTICAL_IMG_BG_PATH != "" ? VERTICAL_IMG_BG_PATH : '/img/glance/carousel/date_bg.png';
            me.AD_INTERVAL = typeof AD_INTERVAL != "undefined" && AD_INTERVAL != "" ? AD_INTERVAL : 0;
            me.VID_AUTOPLAY = typeof VID_AUTOPLAY != "undefined" ? VID_AUTOPLAY : 'true';
            me.VID_AD = typeof VID_AD != "undefined" ? VID_AD : 'false';

            //todo go back to using this correct path (next line)
            me.VERTICAL_IMG_PATH = '/share/com/glance/VerticalImage.aspx?bold=' + me.VERTICAL_IMG_BOLD + '&color=' + me.VERTICAL_IMG_COLOR + '&italic=false&rotate=true&family=' + me.VERTICAL_IMG_FONT_FAM + '&size=' + me.VERTICAL_IMG_FONT_SIZE + '&imgpath=' + me.VERTICAL_IMG_BG_PATH + '&xpos=' + me.VERTICAL_IMG_X_POS + '&ypos=' + me.VERTICAL_IMG_Y_POS + '&vtext=';
            //me.VERTICAL_IMG_PATH = 'http://news.ninemsn.com.au/share/com/glance/VerticalImage.aspx?bold=' + me.VERTICAL_IMG_BOLD + '&color=' + me.VERTICAL_IMG_COLOR + '&italic=false&rotate=true&family=' + me.VERTICAL_IMG_FONT_FAM + '&size=' + me.VERTICAL_IMG_FONT_SIZE + '&imgpath=' + me.VERTICAL_IMG_BG_PATH + '&xpos=' + me.VERTICAL_IMG_X_POS + '&ypos=' + me.VERTICAL_IMG_Y_POS + '&vtext=';

            me.BLANK_IMG_PATH = typeof BLANK_IMG_PATH != "undefined" && BLANK_IMG_PATH != "" ? BLANK_IMG_PATH : '/img/glance/shared/blank_1x1.gif';

            me.FIRST_DAY_IMG_SRC = me.VERTICAL_IMG_PATH + me.FIRST_VERT_ART_DATE;
            me.THUMBS_WIDTH = me.CAR_THUMB_WIDTH;
            me.AD_COUNTER = 0;

            //alert('Lets init get refs to controls ok');

            /* Carousel Elems */
            me.thbCarL = $('#thbCarL');
            me.thbCarCur = $('#thbCarCur');
            me.thbCarCtnr = $('#thbCarCtnr');
            me.carThumbs = $('#carThumbs');
            me.thbCarR = $('#thbCarR');

            /* Content Window Elems */
            me.glcConCar = $('#glcConCar');
            me.glcWin = $('#glcWin');
            me.glcWinR = $('#glcWinR');
            me.winRArr = $('#winRArr');
            me.rArrTxt1 = $('#rArrTxt1');
            me.rArrTxt2 = $('#rArrTxt2');
            me.glcWinL = $('#glcWinL');
            me.winLArr = $('#winLArr');
            me.lArrTxt1 = $('#lArrTxt1');
            me.lArrTxt2 = $('#lArrTxt2');
            me.glcConCar = $('#glcConCar');
            me.glcVideo_p = $('#glcVideo_p');
            //me.glcVideo_p.disableTextSelect();    // disable for chrome bug with new video player UI
            me.winStrapStatus = $('#winStrapStatus');
            me.winStrapTxt = $('#winStrapTxt');
            me.strapTxt = me.winStrapTxt.find('span.strapTxt');
            me.strapBtnR = $('#strapBtnR');
            me.strapBtnTxt = $('#strapBtnTxt');
            me.strapBtnL = $('#strapBtnL');

            /* Article Elems */
            me.glcTitle = $('#glcTitle');
            me.artDate = $('#artDate');
            me.artBy = $('#artBy');
            me.artImgArrTxt = $('#artImgArrTxt');
            me.artBody = $('#artBody');
            me.rlCntr = $('#rlCntr');
            me.RelatedLinksWrapper = $('#RelatedLinksWrapper');

            /* Thumb Template */
            me.thumbTemplate = $('#thumbTemplate .carThumb').eq(0);

            /* Initialize Globals */
            me.THUMB_CTNR_WIDTH = me.thbCarCtnr.width();
            me.IMG_HEIGHT = me.glcConCar.height();
            me.IMG_WIDTH = me.glcConCar.width();
            me.CONTENT_WIN_TOP = me.glcWinR.offset().top;
            me.CONTENT_WIN_HEIGHT = me.glcWinR.height();
            me.CONTENT_ARR_HEIGHT = me.winRArr.height();
            me.STRAP_WIDTH = me.winStrapTxt.width();
            me.DOC_TOP = (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);

            /* Add Event Handlers */
            $((document.documentElement ? document.documentElement : document.body)).mousewheel(me.bodyMouseWheel);
            $(document).keydown(me.docoKeypress);
            me.thbCarL.hover(me.thbCarLMouseEnter, me.thbCarLMouseLeave).click(me.thbCarLClick).disableTextSelect();
            me.thbCarR.hover(me.thbCarRMouseEnter, me.thbCarRMouseLeave).click(me.thbCarRClick).disableTextSelect();

            me.strapBtnR.mousedown(me.moveRight).disableTextSelect();
            me.strapBtnL.mousedown(me.moveLeft).disableTextSelect();
            me.glcWinR.mousemove(me.winRMouseMove).hover(me.winRMouseEnter, me.winRMouseLeave).mousedown(me.moveRight).disableTextSelect();
            me.glcWinL.mousemove(me.winLMouseMove).hover(me.winLMouseEnter, me.winLMouseLeave).mousedown(me.moveLeft).disableTextSelect();

            //If user clicks too quickly, IE will fire dblclick event, RATHER than click event
            //Other browsers will fire both events
            if ($.browser.msie) {
                me.glcWinR.dblclick(me.moveRight);
                me.glcWinL.dblclick(me.moveLeft);
                me.strapBtnR.dblclick(me.moveRight);
                me.strapBtnL.dblclick(me.moveLeft);
            }

            //Added for inclusion of Article Sharing Footer Toolbar
            var printIcon = $('#asf_prt_wrap');
            var asf = $('#article_sharing_footer');
            var glcMod = $('#glcMod');

            if (printIcon.length) {
                printIcon.css('display', 'none');
            }

            if (glcMod.length && asf.length) {
                asf.width(glcMod.width());
            }

            me.addPageArticle();
            me.updateFlock(me.FIRST_ART_ID);


            //alert('Lets init ready to get asset json');

            //todo confirm if correct
            //$.getJSON(me.ART_SERVICE_URL + '&LastID=0&callback=?', me.articleDataCallback);
            $.getJSON(me.ASSET_SERVICE_URL + '&LastAssetID=0&callback=?', me.assetDataCallback);
        }
        //todo remove this
        else {
            //alert('nah couldnt init');
        }
    }

    //render the first item, the data for which is populated by the GlanceControl server control
    this.addPageArticle = function() {

        //alert('Lets add page article');

        var imgCtnr = $('#' + me.FIRST_ART_ID);
        var thumb = me.carThumbs.find('div.carThumb').eq(0);
        var rlArray = [];

        me.artBody.find('p:first').css('fontWeight', 'bold');

        var rlElems = me.rlCntr.find('a.rlItem');
        if (rlElems.length) {
            me.RelatedLinksWrapper.css('display', 'block');
            for (var i = 0; i < rlElems.length; i++) {
                rlArray.push(rlElems.eq(i));
            }
        }

        if (imgCtnr.length && thumb.length) {
            imgCtnr.data('data',
                {
                    id: me.FIRST_ART_ID,
                    title: me.glcTitle.text(),
                    date: me.artDate.html(),
                    author: me.artBy.text(),
                    body: me.artBody.html(),
                    imgs: me.FIRST_ART_IMGS,
                    RLs: rlArray,
                    flocks: '',
                    vid: me.FIRST_ART_VID,
                    totalImgs: me.FIRST_ART_IMGS.length,
                    url: location.href,
                    DisplayUrl: CURRENT_ASSET_DISPLAY_URL
                }
            );

            if (me.VERT_ENABLED) {
                Ninemsn.Glance.DateController.Init(me.FIRST_ART_DATE);

                var firstVertImg = $('<img alt="' + me.FIRST_VERT_ART_DATE + '" src="' + me.VERTICAL_IMG_PATH + me.FIRST_VERT_ART_DATE + '"/>');
                me.thbCarCur.append(firstVertImg);
            }

            thumb.hover(me.thumbMouseEnter, me.thumbMouseLeave).click(me.thumbClick).disableTextSelect();

            if (me.FIRST_ART_IMGS.length > 0) {
                var imgCtnrChildren = imgCtnr.children();
                for (i = 0; i < me.FIRST_ART_IMGS.length; i++) {
                    var imgObj = me.FIRST_ART_IMGS[i];

                    //if there is a child element (should only happen if first item is an image)
                    if (imgCtnrChildren.eq(i).length) {

                        //find the existing image tag, store jquery data on it
                        var img = imgCtnrChildren.eq(i).find('img').eq(0);
                        img.data('imgData',
                            {
                                pos: i,
                                url: imgObj.url,
                                alt: imgObj.alt,
                                caption: imgObj.caption,
                                assettypeid: imgObj.assettypeid,
                                total: me.FIRST_ART_IMGS.length,
                                sourceuniqueid: imgObj.sourceuniqueid,
                                assetid: imgObj.assetid
                            });
                    }
                    else {

                        if (imgObj.assettypeid == "4") //if this is a video
                        {
                            var curSpan = $('<span> </span>').data('vidData',
                            {
                                pos: i,
                                url: imgObj.url,
                                alt: imgObj.alt,
                                caption: imgObj.caption,
                                assettypeid: imgObj.assettypeid,
                                total: me.FIRST_ART_IMGS.length,
                                sourceuniqueid: imgObj.sourceuniqueid,
                                assetid: imgObj.assetid
                            }).append(' ');

                            curSpan.addClass('artVid');

                            if (i == 0) //if this is the first item in list
                            {
                                curSpan.addClass('curr'); //mark as currently viewed span
                                me.loadVideo(imgObj.sourceuniqueid); //load the video into player, passing the guid
                            }

                            imgCtnr.append(curSpan);
                        }
                        else  //else add an image
                        {
                            var curImg = $('<img/>').data('imgData',
                            {
                                pos: i,
                                url: imgObj.url,
                                alt: imgObj.alt,
                                caption: imgObj.caption,
                                assettypeid: imgObj.assettypeid,
                                total: me.FIRST_ART_IMGS.length,
                                sourceuniqueid: imgObj.sourceuniqueid,
                                assetid: imgObj.assetid
                            }).attr({ 'src': (Ninemsn.Shared.Util.IsAbsolute(imgObj.url) ? '' : me.ASSET_IMAGE_BASE_PATH) + imgObj.url });

                            var curSpan = $('<span> </span>').append(curImg).append(' ');
                            imgCtnr.append(curSpan);
                        }
                    }
                }

                if (me.AD_ENABLED) {
                    var adSpan = $('<span></span>').attr('class', 'artAd');
                    imgCtnr.append(adSpan);
                }
            }

            me.THUMB_COUNT++;
            me.LAST_ID = me.FIRST_ART_ID;
        }
    }

    /* Glance asset data callback */
    this.assetDataCallback = function(data) {

        //alert('Lets asset callback begin ok');

        var assetArray = [];
        var asset;
        var childAssets = [];
        var RLs = [];
        var flockCount = "";

        var title = null;
        var thumb = null;
        var i;

        if (data) {
            if (data.AssetList) {
                // More than 1 asset
                if (data.AssetList.Asset.length) {

                    //alert('Lets asset callback more than 1 asset ok');

                    assetArray = data.AssetList.Asset;

                    for (i = 0; i < assetArray.length; i++) {
                        asset = assetArray[i];
                        if (asset.AssetId != me.FIRST_ART_ID) {
                            me.addJSONAsset(asset, Ninemsn.Glance.Asset.GetImages(asset), Ninemsn.Glance.Asset.GetRelatedLinks(asset), Ninemsn.Glance.Asset.GetFlockCount(asset), Ninemsn.Glance.Asset.GetFriendlyUrl(asset), asset.DisplayUrl);
                        }
                    }

                    if (assetArray.length < parseInt(me.PAGE_SIZE)) {
                        me.disableDataCalls();
                    }
                }
                // Just 1 asset
                else {

                    //alert('Lets asset callback just 1 asset ok');

                    asset = data.AssetList.Asset;
                    if (asset.AssetId != me.FIRST_ART_ID) {
                        me.addJSONAsset(asset, Ninemsn.Glance.Asset.GetImages(asset), Ninemsn.Glance.Asset.GetRelatedLinks(asset), Ninemsn.Glance.Asset.GetFlockCount(asset), Ninemsn.Glance.Asset.GetFriendlyUrl(asset), asset.DisplayUrl);
                    }

                    me.disableDataCalls();
                }

                me.thumbs = me.carThumbs.find('div.carThumb');
                me.artItems = me.glcConCar.find('div.artItem');
                me.dateImgs = me.carThumbs.find('img.dateImg');

                if (me.FIRST_LOAD) {
                    me.FIRST_LOAD = false;
                    me.thumbs.eq(0).click();
                }

                me.checkCarArrows();

            }
            else {
                me.disableDataCalls();
            }
        }
        else {
            me.disableDataCalls();
        }

        //alert('Lets asset callback finished ok');
    }

    this.disableDataCalls = function() {
        me.NO_MORE_DATA = true;
        me.thbCarCtnr.css('backgroundImage', 'none');
    }

    /* ASSET BASED: Adds asset thumbs to thumb carousel and asset images to content carousel (containing asset data) */
    this.addJSONAsset = function(asset, childAssets, RLs, flockCount, friendlyUrl, displayUrl) {

        //alert('Lets asset json asset begin ok');
        if (childAssets.length) {

            //alert('Lets asset json asset got child assets length ok');

            var thumb = me.thumbTemplate.clone();
            var thbImgCtnr = thumb.find('.thbImgCtnr').eq(0);
            var thumbImg = $('<img />');
            var thumbText = thumb.find('.thbTextOF').eq(0);
            var firstImgObj = childAssets[0];
            var i;

            var imgCtnr = $('<div></div>').attr({ 'id': asset.AssetId, 'class': 'artItem' }).data('data',
                {
                    id: asset.AssetId,
                    title: asset.Title,
                    date: asset.AuthorDate.substring(0, asset.AuthorDate.length - 3),
                    author: asset.AuthorName,
                    body: asset.Abstract,
                    imgs: childAssets,
                    RLs: RLs,
                    flocks: flockCount,
                    vid: asset.VidLoUrl,
                    totalImgs: childAssets.length,
                    url: "http://" + location.hostname + friendlyUrl,
                    DisplayUrl: displayUrl
                }
            );

            if (me.VERT_ENABLED) {
                var dateStr = "";
                if (!me.DISPLAY_YEAR_ENABLED) {
                    dateStr = Ninemsn.Glance.DateController.AddDate(asset.AuthorDate.substring(0, asset.AuthorDate.length - 3));
                }
                else {
                    dateStr = asset.AuthorDate.substring(0, 4);
                }
                if (dateStr != '') {
                    var dateImg = $('<img class="dateImg" />').click(me.dateImgClick).disableTextSelect();

                    me.carThumbs.width(me.THUMBS_WIDTH + me.CAR_DATEIMG_WIDTH);
                    me.THUMBS_WIDTH += me.CAR_DATEIMG_WIDTH;
                    me.carThumbs.append(dateImg);

                    dateImg.attr('src', me.VERTICAL_IMG_PATH + dateStr);
                }
            }

            thumb.attr('tIndex', me.THUMB_COUNT).hover(me.thumbMouseEnter, me.thumbMouseLeave).click(me.thumbClick).disableTextSelect();

            if (me.FLOCK_ENABLED) {
                thumbText.append($('<div></div>').html('<b>' + asset.Title + ': </b>' + flockCount + ' Flocks'));
            }
            else {
                thumbText.append($('<div></div>').html('<b>' + asset.Title + '</b>'));
            }

            //added the extra .append(' ') for vertical centering
            //issue in FF for vertical centering... need to just add whitespace after the tag for it
            //to render correctly
            thbImgCtnr.append($('<span> </span>').append(thumbImg).append(' '));

            me.carThumbs.width(me.THUMBS_WIDTH + me.CAR_THUMB_WIDTH);
            me.THUMBS_WIDTH += me.CAR_THUMB_WIDTH;
            me.carThumbs.append(thumb);
            me.THUMB_COUNT++;
            me.LAST_ID = asset.AssetId;

            //determine which thumb to use - by default will be specified on the asset
            var thumbUrl = asset.ThumbnailFilePath;
            //if no value proveded, use the url to the first image in list
            if (asset.ThumbnailFilePath == null || asset.ThumbnailFilePath == "")
                thumbUrl = firstImgObj.url;

            thumbImg.attr('src', me.RESIZER_PATH + (Ninemsn.Shared.Util.IsAbsolute(thumbUrl) ? '' : me.ASSET_IMAGE_BASE_PATH) + thumbUrl);

            for (i = 0; i < childAssets.length; i++) {
                var imgObj = childAssets[i];

                if (imgObj.assettypeid == "4") //if this is a video
                {
                    var curSpan = $('<span> </span>').data('vidData',
                    {
                        pos: i,
                        url: imgObj.url,
                        alt: imgObj.alt,
                        caption: imgObj.caption,
                        assettypeid: imgObj.assettypeid,
                        total: childAssets.length,
                        sourceuniqueid: imgObj.sourceuniqueid,
                        assetid: imgObj.assetid
                    }).append(' ');

                    curSpan.addClass('artVid');
                    imgCtnr.append(curSpan);

                }
                else  //else add an image
                {

                    var curImg = $('<img/>').data('imgData',
                    {
                        pos: i,
                        url: imgObj.url.replace(/&apos;/g, "'"),
                        alt: imgObj.alt,
                        caption: imgObj.caption,
                        assettypeid: imgObj.assettypeid,
                        total: childAssets.length,
                        sourceuniqueid: imgObj.sourceuniqueid,
                        assetid: imgObj.assetid
                    }).attr({ 'src': (Ninemsn.Shared.Util.IsAbsolute(me.BLANK_IMG_PATH) ? '' : me.BASE_PATH) + me.BLANK_IMG_PATH });

                    var curSpan = $('<span> </span>').append(curImg).append(' ');

                    imgCtnr.append(curSpan);
                }


            }

            /*
            if (asset.VidLoUrl != '') {
            var vidSpan = $('<span></span>').attr('class', 'artVid').data('vidURL', asset.VidLoUrl);
            imgCtnr.append(vidSpan);
            }
            */

            if (me.AD_ENABLED) {
                var adSpan = $('<span></span>').attr('class', 'artAd');
                imgCtnr.append(adSpan);
            }

            me.glcConCar.append(imgCtnr);
        }
    }

    /**** Event Handler Functions and Helpers ****/
    this.docoKeypress = function(event) {
        if (event.keyCode == 37) {
            me.moveLeft();
        }
        else if (event.keyCode == 39) {
            me.moveRight();
        }

        event.stopPropagation();
        return true;
    }

    this.thbCarLMouseEnter = function(e) {
        $(this).addClass('thbCarL_ro');
    }

    this.thbCarLMouseLeave = function(e) {
        $(this).removeClass('thbCarL_ro');
    }

    this.thbCarRMouseEnter = function(e) {
        $(this).addClass('thbCarR_ro');
    }

    this.thbCarRMouseLeave = function(e) {
        $(this).removeClass('thbCarR_ro');
    }

    this.updateCurrentDate = function() {
        me.dateImgs.each(function(i) {
            if ((parseInt($(this).position().left) + parseInt(me.CAR_DATEIMG_WIDTH) + parseInt(me.THUMBS_POS_LEFT)) > 0) {
                var curImg = me.thbCarCur.find('img').eq(0);
                if (i == 0) {
                    if (curImg.attr('src') != me.FIRST_DAY_IMG_SRC) {
                        me.thbCarCur.find('img').eq(0).fadeOut('fast').load(function() {
                            $(this).fadeIn('fast');
                        }).attr('src', me.FIRST_DAY_IMG_SRC);
                    }
                }
                else {
                    if (curImg.attr('src') != me.dateImgs.eq(i - 1).attr('src')) {
                        me.thbCarCur.find('img').eq(0).fadeOut('fast').load(function() {
                            $(this).fadeIn('fast');
                        }).attr('src', me.dateImgs.eq(i - 1).attr('src'));
                    }
                }

                return false;
            }
            else if (i == (me.dateImgs.length - 1)) {
                var curImg = me.thbCarCur.find('img').eq(0);
                if (curImg.attr('src') != me.dateImgs.eq(i).attr('src')) {
                    me.thbCarCur.find('img').eq(0).fadeOut('fast').load(function() {
                        $(this).fadeIn('fast');
                    }).attr('src', me.dateImgs.eq(i).attr('src'));
                }
            }
        });
    }

    this.checkCarArrows = function() {
        var totalTrav = Math.abs(me.THUMBS_POS_LEFT) + me.THUMB_CTNR_WIDTH;

        if (me.VERT_ENABLED) {
            me.updateCurrentDate();
        }
        if (me.THUMBS_POS_LEFT < 0) {
            me.thbCarL.css('display', 'block');
        }
        else {
            me.thbCarL.css('display', 'none');
        }

        if (totalTrav < me.THUMBS_WIDTH) {
            me.thbCarR.css('display', 'block');
        }
        else {
            me.thbCarR.css('display', 'none');
            if (!me.NO_MORE_DATA) {
                $.getJSON(me.ASSET_SERVICE_URL + '&LastAssetID=' + me.LAST_ID + '&callback=?', me.assetDataCallback);
            }
        }
    }

    this.thbCarLClick = function() {
        var thumbPos = Math.abs(me.THUMBS_POS_LEFT);

        if (thumbPos > me.THUMB_CTNR_WIDTH) {
            me.carThumbs.stop().animate({ 'left': -(thumbPos) + me.THUMB_CTNR_WIDTH }, "fast", function() {
                me.THUMBS_POS_LEFT = $(this).position().left;
                me.checkCarArrows();
            });
        }
        else {
            me.carThumbs.stop().animate({ 'left': 0 }, "fast", function() {
                me.THUMBS_POS_LEFT = $(this).position().left;
                me.checkCarArrows();
            });
        }

    }

    this.thbCarRClick = function() {
        var thumbPos = Math.abs(me.THUMBS_POS_LEFT);
        var thumbsWidth = me.THUMBS_WIDTH;
        var ctnrWidth = me.THUMB_CTNR_WIDTH;

        if ((me.THUMBS_WIDTH - thumbPos) > me.THUMB_CTNR_WIDTH) {
            me.carThumbs.stop().animate({ 'left': -(thumbPos) - me.THUMB_CTNR_WIDTH }, "fast", function() {
                me.THUMBS_POS_LEFT = $(this).position().left;
                me.checkCarArrows();
            });
        }
        else {
            me.carThumbs.stop().animate({ 'left': -me.THUMBS_WIDTH + CAR_THUMB_WIDTH }, "fast", function() {
                me.THUMBS_POS_LEFT = $(this).position().left;
                me.checkCarArrows();
            });
        }
    }

    this.thumbMouseEnter = function() {
        var thumb = $(this);
        var imgCtnr = thumb.find('.thbImgCtnr').eq(0);
        var txtOF = thumb.find('.thbTextOF').eq(0);

        thumb.addClass('thumbOver');
        imgCtnr.stop().animate({ 'top': (txtOF.find('div').eq(0).height() + 3 * txtOF.position().top) }, 'fast');

    }

    this.thumbMouseLeave = function() {
        var thumb = $(this);
        var imgCtnr = thumb.find('.thbImgCtnr').eq(0);

        thumb.removeClass('thumbOver');
        imgCtnr.stop().animate({ 'top': 0 }, 'fast');
    }

    this.thumbClick = function() {
        var thumb = $(this);

        if (thumb.hasClass('selected')) {
            return false;
        }

        var thumbInd = parseInt(thumb.attr('tIndex'));
        me.CUR_GAL_INDEX = thumbInd;

        var leftOffset = thumb.position().left;

        me.thumbs.removeClass('selected');
        thumb.addClass('selected');

        me.carThumbs.stop().animate({ 'left': -(leftOffset) }, "fast", function() {
            me.THUMBS_POS_LEFT = $(this).position().left;
            me.checkCarArrows();
        });

        me.loadGallery();
    }

    this.dateImgClick = function() {
        if ($(this).next().length) {
            $(this).next().click();
        }
    }

    this.loadGallery = function() {
        var gal = me.artItems.eq(me.CUR_GAL_INDEX);
        var m;

        if (gal.length) {
            var data = gal.data('data');
            var curr = me.glcConCar.find('span.curr').eq(0);

            me.glcTitle.text(data.title);
            document.title = data.title;

            if (pageUrl && pageTitle) {
                pageUrl = data.url;
                pageTitle = data.title;
                JS_ARTICLE_ID = data.id;
            }

            me.loadArtBody(data.body);

            me.artImgArrTxt.html('<b>' + data.totalImgs + ' images</b> in this story');

            if (data.date.indexOf('AEST') != -1) {
                me.artDate.html(data.date);
            }
            else {
                me.artDate.html(Ninemsn.Shared.Util.GetFormatedDate(data.date));
            }

            me.artBy.text(data.author);

            var rlData = data.RLs;
            me.rlCntr.children().remove();

            if (rlData.length) {
                for (m = 0; m < rlData.length; m++) {
                    me.rlCntr.append(rlData[m]);
                }
                me.RelatedLinksWrapper.css('display', 'block');
            }
            else {
                me.RelatedLinksWrapper.css('display', 'none');
            }

            if (curr.length) {
                curr.removeClass('curr');
            }

            if (me.LOAD_GAL_FROM_ARR) {
                me.LOAD_GAL_FROM_ARR = false;

                if (me.DIR_RIGHT) {
                    me.preLoadImgs(gal, true);
                    var imgSpan = gal.find('span').eq(0);
                    imgSpan.addClass('curr');
                    me.updateContentWindow(true, true);
                }
                else {
                    me.preLoadImgs(gal, false);
                    var lastSpan = gal.find('span:last');
                    lastSpan.addClass('curr');
                    me.updateContentWindow(true, false);
                }
            }
            else {
                me.preLoadImgs(gal, true);
                var imgSpan = gal.find('span').eq(0);
                imgSpan.addClass('curr');
                me.updateContentWindow(true, true);
            }
        }
    }

    this.preLoadImgs = function(gal, dir_right) {
        var imgElems = gal.find('img');

        if (dir_right) {
            imgElems.each(function(i) {
                if ($(this).attr('src') == ((Ninemsn.Shared.Util.IsAbsolute(me.BLANK_IMG_PATH) ? '' : me.BASE_PATH) + me.BLANK_IMG_PATH)) {
                    $(this).load(function() {
                        $(this).height('auto');
                        $(this).width('auto');
                    }).attr('src', (Ninemsn.Shared.Util.IsAbsolute($(this).data('imgData').url) ? '' : me.ASSET_IMAGE_BASE_PATH) + $(this).data('imgData').url);
                }
            });
        }
        else {
            for (i = (imgElems.length - 1); i >= 0; i--) {
                var imgElem = imgElems.eq(i);
                if (imgElem.attr('src') == ((Ninemsn.Shared.Util.IsAbsolute(me.BLANK_IMG_PATH) ? '' : me.BASE_PATH) + me.BLANK_IMG_PATH)) {
                    imgElem.load(function() {
                        $(this).height('auto');
                        $(this).width('auto');
                    }).attr('src', (Ninemsn.Shared.Util.IsAbsolute(imgElem.data('imgData').url) ? '' : me.ASSET_IMAGE_BASE_PATH) + imgElem.data('imgData').url);
                }
            }
        }
    }

    this.loadArtBody = function(bodyHTML) {
        me.artBody.html(bodyHTML);
        me.artBody.find('p:first').css('fontWeight', 'bold');
    }

    this.loadStrap = function(strapTxt, imgNum, totImgs) {

        me.strapTxt.html(strapTxt.replace(/&amp;/g, "&").replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&apos;/g, "'"));

        if (typeof imgNum != 'undefined') {
            me.strapBtnTxt.text((imgNum + 1) + ' of ' + totImgs);
            me.winStrapStatus.width(((imgNum + 1) / totImgs) * me.STRAP_WIDTH);
        }
        else {
            me.strapBtnTxt.text('');
            me.winStrapStatus.width(0);
        }
    }

    this.loadVideo = function(vidID) {
        var sitename = 'unknown';
        var catname = typeof JS_OMNTR_CATEGORY != "undefined" && JS_OMNTR_CATEGORY != "" ? JS_OMNTR_CATEGORY : "unknown";
        if (typeof (JS_OMNTR_SITE) != 'undefined' && JS_OMNTR_SITE != '') {
            sitename = JS_OMNTR_SITE;
        }
        else if (typeof (JS_SITE) != 'undefined' && JS_SITE != '') {
            sitename = JS_SITE;
        }
        
        if (vidID != '') 
        {
            if (typeof (Ninemsn) != "undefined" && typeof (Ninemsn.Video) != "undefined" && typeof (Ninemsn.Video.Player) != "undefined") 
            {
                var glcVideo_p = document.getElementById("glcVideo_p");

                if (glcVideo_p != null) {
                    //glcVideo_p.innerHTML = ""; // remove the existing video from the page  *new internal_embeded library has a removeChild call, will fail if container's child is empty

                    var glancePlayer = new Ninemsn.Video.Player();
                    glancePlayer.Render({ ID: 'glcVideo', Width: me.IMG_WIDTH, Height: me.IMG_HEIGHT, "OutputLocation": "glcVideo_p", c: 'v', v: vidID, hideOptions: 'true', fr: 'glanceinline', fg: 'news', skin: '2', ad: me.VID_AD.toString(), timePlaying: '180', ps: '1', partnerlogo: 'true', ch: 'true', fr: catname, fg: sitename, ifs: 'true', mkt: 'en-au', mk: 'en-au', ap: me.VID_AUTOPLAY.toString(), vc: 'edge1.catalog.video.msn.com', msnlink: "false" });
                    glancePlayer.EventListener.Add("playbackStatusChanged", Legacy.OnVideoLoaded);
                }
            } else {
                Msn.Video.BuildPlayer('glcVideo', { c: 'v', v: vidID, hideOptions: 'true', fr: 'glanceinline', fg: 'news', skin: '2', ad: me.VID_AD.toString(), timePlaying: '180', ps: '1', partnerlogo: 'true', ch: 'true', fr: catname, fg: sitename, ifs: 'true', mkt: 'en-au', mk: 'en-au', ap: me.VID_AUTOPLAY.toString(), vc: 'edge1.catalog.video.msn.com', msnlink: false }, me.IMG_WIDTH, me.IMG_HEIGHT, 'transparent');
            }
        }
    }

    /***Content Window Event Handlers *****/

    this.winLMouseMove = function(e) {
        var evt = (e) ? e : (window.event) ? window.event : null;

        var top = parseInt(evt.clientY) - (me.CONTENT_WIN_TOP - me.DOC_TOP);

        if ((top > 0) && (top < me.CONTENT_WIN_HEIGHT)) {
            me.winLArr.css('top', top - (me.CONTENT_ARR_HEIGHT / 2));
        }

        return true;
    }

    this.winRMouseMove = function(e) {
        var evt = (e) ? e : (window.event) ? window.event : null;

        var top = parseInt(evt.clientY) - (me.CONTENT_WIN_TOP - me.DOC_TOP);

        if ((top >= 0) && (top <= me.CONTENT_WIN_HEIGHT)) {
            me.winRArr.css('top', top - (me.CONTENT_ARR_HEIGHT / 2) + 'px');
        }

        return true;

    }

    this.winLMouseEnter = function() {
        me.winLArr.css('display', 'block');
        me.DOC_TOP = (document.documentElement.scrollTop ?
                document.documentElement.scrollTop :
                document.body.scrollTop);
    }

    this.winLMouseLeave = function() {
        me.winLArr.css('display', 'none');
    }

    this.winRMouseEnter = function() {
        me.winRArr.css('display', 'block');
        me.DOC_TOP = (document.documentElement.scrollTop ?
                document.documentElement.scrollTop :
                document.body.scrollTop);
    }

    this.winRMouseLeave = function() {
        me.winRArr.css('display', 'none');
    }

    this.bodyMouseWheel = function(event, delta) {
        setTimeout(me.updateDOCTOP, 100);
        return true;
    }

    this.updateDOCTOP = function() {
        me.DOC_TOP = (document.documentElement.scrollTop ?
                document.documentElement.scrollTop :
                document.body.scrollTop);
    }

    this.moveRight = function() {
        var curr = me.glcConCar.find('span.curr').eq(0);
        var next = curr.next();

        me.DIR_RIGHT = true;

        if (next.length) {
            curr.removeClass('curr');
            next.addClass('curr');
            me.updateContentWindow(false, true);
        }
        else {
            if (me.CUR_GAL_INDEX != (me.thumbs.length - 1)) {
                me.LOAD_GAL_FROM_ARR = true;
                me.thumbs.eq(me.CUR_GAL_INDEX + 1).click();
            }
        }
    }

    this.moveLeft = function() {
        var curr = me.glcConCar.find('span.curr').eq(0);
        var prev = curr.prev();

        me.DIR_RIGHT = false;

        if (prev.length) {
            curr.removeClass('curr');
            prev.addClass('curr');
            me.updateContentWindow(false, false);
        }
        else {
            if (me.CUR_GAL_INDEX != 0) {
                me.LOAD_GAL_FROM_ARR = true;
                me.thumbs.eq(me.CUR_GAL_INDEX - 1).click();
            }
        }
    }

    this.updateContentWindow = function(loadGal, dirRight) {
        var curr = me.glcConCar.find('span.curr').eq(0);
        var prev = curr.prev();
        var next = curr.next();
        var artID = curr.parent().attr('id');
        var title = me.glcTitle.text();

        $('#IsAd').remove();

        if (me.FIRST_LOAD) {
            me.FIRST_LOAD = false;
        }
        else {
            var customNielsenTrackCode = me.SITE_NAME.toUpperCase() + "GLANCE"; // this is newly introduced in Glacne ultimate and is now used when we make our nielsen calls, so possible we can break down by site in the reports
            _rsSlideShowEvent(customNielsenTrackCode); // nielsen tracking, but requires the "share/com/js/v5.3nse.js" on your Glance page
            OMNTRCustomGlanceArticleTracking('ninemsn', me.OMNTR_CATEGORY.toLowerCase(), me.SITE_NAME.toLowerCase(), me.SECTION_NAME.toLowerCase(), me.SUBSECTION_NAME.toLowerCase(), 'assetglance-' + title, artID, title, loadGal, 'agla', 'glance'); // This is the omniture tracking
        }

        var assetid = "";

        // Lets show the currentImageRating div which holds the rating stars (we then hide it below in case its a Ad being shown)
        $("#currentImageRating").show();

        if (curr.hasClass('artVid')) {
            //alert('video found');
            //var vidURL = curr.data('vidURL');
            var currData = curr.data('vidData');
            var vidID = currData.sourceuniqueid;
            assetid = currData.assetid;

            if (vidID && (vidID != '')) {
                //alert('loading video url=' + vidURL);
                me.loadStrap(currData.caption, currData.pos, currData.total);
                me.loadVideo(vidID);
            }
            else {
                alert('vidID not found in curr');
            }
        }
        else if (curr.hasClass('artAd')) 
        {
            if(me.AD_INTERVAL != 0)
            {
				if(me.AD_COUNTER != me.AD_INTERVAL - 1)
				{
					me.AD_COUNTER = me.AD_COUNTER + 1;
					
					if(me.DIR_RIGHT)
					{
						me.moveRight();	
					}
					else
					{
						me.moveLeft();
							
					}
					return;				
				}
				else
				{
					me.AD_COUNTER = 0;	
				}    
            }  
            
            me.glcVideo_p.children().remove();
            me.loadStrap('Advertisement');
            me.glcWin.append(me.getIsland(dirRight));

            // Let hide the rating starts temprarily as you cant rate an Ad
            $("#currentImageRating").hide();

        }
        else {
            me.glcVideo_p.children().remove();
            var currImg = curr.find('img').eq(0);
            var currData = currImg.data('imgData');
            assetid = currData.assetid;
            me.loadStrap(currData.caption, currData.pos, currData.total);
        }

        //if we have UGC, update it for the current item
        if (window.Ugc.Rating.Input) {
            //alert('updating ugc for artID=' + artID + ', assetid=' + assetid);
            window.Ugc.Rating.Input.ConfigContentId = artID;
            window.Ugc.Rating.Input.StatsContentId = assetid;
            window.Ugc.Rating.Input.Refresh();
        }

        if (window.Ugc.Comment.Input) {
            //alert('updating comment ugc for artID=' + artID + ', assetid=' + assetid);
            if (window.Ugc.Comment.Input.ContentId != artID) {
                window.Ugc.Comment.Input.ContentId = artID;
                //window.Ugc.Comment.Input.InitTrigger();
            }
            //window.Ugc.Comment.Input.ContentId = artID;
            //window.Ugc.Comment.Input.InitTrigger();
        }

        if (window.Ugc.Vote.Input) {
            if (window.Ugc.Vote.Input.ContentId != artID) {
                window.Ugc.Vote.Input.ContentId = artID;
                window.Ugc.Vote.Input.PopupVotePageUrl = "/share/com/ugc/VoteTool/PopupVote.aspx?AssetTitle=" + $("#glcTitle").text() + "&AssetId=" + artID + "&stylesheet=/css/vote_popup_page_style.css";
                //window.Ugc.Vote.Input.Init();
            }
        }

        if (!prev.length && (me.CUR_GAL_INDEX == 0)) {
            me.glcWinL.css('display', 'none');
            me.strapBtnL.css('display', 'none');
        }
        else {
            me.glcWinL.css('display', 'block');
            me.strapBtnL.css('display', 'block');
        }

        if (!next.length && (me.CUR_GAL_INDEX == (me.THUMB_COUNT - 1)) && me.NO_MORE_DATA) {
            me.glcWinR.css('display', 'none');
            me.strapBtnR.css('display', 'none');
        }
        else {
            me.glcWinR.css('display', 'block');
            me.strapBtnR.css('display', 'block');
        }

        if (prev.length) {
            var prevClass = prev.attr('class');

            if (prevClass == '') {
                me.winLArr.attr('class', 'imgArr');
                me.lArrTxt1.html('<b>Prev</b> photo');
                me.lArrTxt2.text('');
            }
            else if (prevClass == 'artVid') {
                me.winLArr.attr('class', 'imgArr');
                me.lArrTxt1.html('<b>Video</b>');
                me.lArrTxt2.text('');
            }
        }
        else {
            var prevGal = me.artItems.eq(me.CUR_GAL_INDEX - 1);

            if (prevGal.length) {
                var prevTitle = prevGal.data('data').title;
                me.winLArr.attr('class', 'storyArr');
                me.lArrTxt1.html('<b>Prev</b> story');
                me.lArrTxt2.text(prevTitle);
            }
        }

        if (next.length) {
            var nextClass = next.attr('class');

            if (nextClass == '') {
                me.winRArr.attr('class', 'imgArr');
                me.rArrTxt1.html('<b>Next</b> photo');
                me.rArrTxt2.text('');
            }
            else if (nextClass == 'artVid') {
                me.winRArr.attr('class', 'imgArr');
                me.rArrTxt1.html('<b>Video</b>');
                me.rArrTxt2.text('');
            }
            else if (nextClass == 'artAd') {
                var nextGal = me.artItems.eq(me.CUR_GAL_INDEX + 1);

                if (nextGal.length) {
                    var nextTitle = nextGal.data('data').title;
                    me.winRArr.attr('class', 'storyArr');
                    me.rArrTxt1.html('<b>Next</b> story');
                    me.rArrTxt2.text(nextTitle);
                }
            }
        }
        else {
            var nextGal = me.artItems.eq(me.CUR_GAL_INDEX + 1);

            if (nextGal.length) {
                var nextTitle = nextGal.data('data').title;
                me.winRArr.attr('class', 'storyArr');
                me.rArrTxt1.html('<b>Next</b> story');
                me.rArrTxt2.text(nextTitle);
            }
        }

        var leftOffset = me.thumbs.eq(me.CUR_GAL_INDEX).position().left;

        me.carThumbs.stop().animate({ 'left': -(leftOffset) }, "fast", function() {
            me.THUMBS_POS_LEFT = $(this).position().left;
            me.checkCarArrows();
        });

        if (loadGal) {
            me.updateFlock(artID);
        }

        // As its a new glance being viewed, Let's update the global CURRENT_ASSET_DISPLAY_URL var that hols the current glacnes url so we can use it with facebook like
        if (loadGal) {
            CURRENT_ASSET_DISPLAY_URL = $('#' + artID + '.artItem').data('data').DisplayUrl;
            refresh_facebook_like(CURRENT_ASSET_DISPLAY_URL, artID); // now refresh the facebook like module
        }
    }


    this.updateFlock = function(id) {
        if (me.FLOCK_ENABLED) {
            var flockCtnrElem = $('#artFlock');
            var flockFrame;

            if (flockCtnrElem.length && $('#flockFrame').length && id != null) {
                flockFrame = $('#flockFrame')[0];
                flockFrame.src = '/GlcFlock.aspx?id=' + id + '&frame=true';
            }
            else if (flockCtnrElem.length) {
                flockFrame = document.createElement('iframe');
                flockFrame.scrolling = 'no';
                flockFrame.frameborder = '0';
                flockFrame.marginwidth = '0';
                flockFrame.marginheight = '0';
                flockFrame.border = '0';
                flockFrame.width = 210;
                flockFrame.height = 150;
                flockFrame.id = 'flockFrame';
                flockFrame.name = 'flockFrame';
                flockFrame.src = '/GlcFlock.aspx?id=' + id + '&frame=true';

                flockCtnrElem[0].appendChild(flockFrame);
            }
        }
    }

    this.getIsland = function(dirRight) {
        var isFrame = document.createElement('iframe');
        isFrame.scrolling = 'no';
        isFrame.frameborder = '0';
        isFrame.marginwidth = '0';
        isFrame.marginheight = '0';
        isFrame.border = '0';
        isFrame.id = 'IsAd';
        isFrame.width = me.AD_WIDTH;
        isFrame.height = me.AD_HEIGHT;
        isFrame.src = me.AD_FRAME_URL;

        if (AD_LEFT_AND_RIGHT) {
            if (dirRight) {
                return $(isFrame).addClass('leftMedRec');
            }
            else {
                return $(isFrame).addClass('rightMedRec');
            }
        }
        else {
            return $(isFrame).css({ 'left': (parseInt(me.IMG_WIDTH) - parseInt(me.AD_WIDTH)) / 2 + 'px', 'top': (parseInt(me.IMG_HEIGHT) - parseInt(me.AD_HEIGHT)) / 2 + 'px' });
        }
    }
}

Ninemsn.Shared.Util = new function() {
    var me = this;
    /* Parses query string param from url */
    this.GetQueryParam = function(name, url) {
        var param = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
        var regexS = "[\\?&]" + name + "=([^&#]*)";
        var regex = new RegExp(regexS);
        var results = regex.exec(url);
        if (results == null) {
            return '';
        }
        else {
            return results[1];
        }
    }

    this.IsAbsolute = function(url) {
        if (url.indexOf('http://') != -1) {
            return true;
        }
        else {
            return false;
        }
    }

    this.GetDomain = function(domain) {
        var base = window.location.hostname;
        var firstPart = base.substring(0, base.indexOf("."));
        var secondPart = base.substring(firstPart.length + 1, base.indexOf(".", firstPart.length + 1));

        var host = ""; //live is default
        if (base.indexOf('ninemsn') == -1) { // for third party sites
            host = "";
        }
        else if (secondPart != "ninemsn" && secondPart != "msn" && secondPart.substr(0, 3) != "www" && secondPart.substr(0, 3) != "dyn") {//is not live
            host = secondPart + ".";
        }

        return "http://" + domain + "." + host + "ninemsn.com.au";
    }


    this.GetFormatedDate = function(dateString) {
        var year = dateString.substr(0, 4);
        var month = Ninemsn.Shared.Util.GetMonth(dateString.substr(5, 2));
        var day = dateString.substr(8, 2);
        var time = dateString.substr(11, 5);

        var date = new Date(parseInt(year), me.GetIntegerMonth(month), parseInt(day));
        var dayString = date.toDateString().substr(0, 3);

        return '<span id="glance_aest_text">AEST </span>' + time + ', ' + dayString + ' ' + month + ' ' + day + ' ' + year;

    }

    this.GetMonth = function(monthString) {
        switch (monthString) {
            case '01':
                return 'Jan';
            case '02':
                return 'Feb';
            case '03':
                return 'Mar';
            case '04':
                return 'Apr';
            case '05':
                return 'May';
            case '06':
                return 'Jun';
            case '07':
                return 'Jul';
            case '08':
                return 'Aug';
            case '09':
                return 'Sep';
            case '10':
                return 'Oct';
            case '11':
                return 'Nov';
            case '12':
                return 'Dec';
            default:
                return null;
        }

    }

    this.GetIntegerMonth = function(monthString) {
        switch (monthString.toLowerCase()) {
            case 'jan':
                return 0;
            case 'feb':
                return 1;
            case 'mar':
                return 2;
            case 'apr':
                return 3;
            case 'may':
                return 4;
            case 'jun':
                return 5;
            case 'jul':
                return 6;
            case 'aug':
                return 7;
            case 'sep':
                return 8;
            case 'oct':
                return 9;
            case 'nov':
                return 10;
            case 'dec':
                return 11;
            default:
                return null;
        }
    }

    this.GetDaySuffix = function(day) {
        switch (day) {
            case 1:
                return 'st';
            case 21:
                return 'st';
            case 31:
                return 'st';
            case 2:
                return 'nd';
            case 22:
                return 'nd';
            case 3:
                return 'rd';
            case 23:
                return 'rd';
            default:
                return 'th';
        }
    }
}


//new asset based replacement to article
Ninemsn.Glance.Asset = new function() {
    /* Parses related link data */
    this.GetImages = function(asset) {
        var artImgs = [];
        var chilAssetArray = [];
        var chilAsset;

        if (asset.ChildAssetList != "") {
            //More than 1 childAsset
            if (asset.ChildAssetList.ChildAsset.length) {
                childAssetArray = asset.ChildAssetList.ChildAsset;

                for (var j = 0; j < childAssetArray.length; j++) {
                    childAsset = childAssetArray[j];
                    artImgs.push(new Ninemsn.Glance.ImgItem(childAsset.AssetId, childAsset.FilePath, childAsset.Caption, childAsset.Caption, childAsset.AssetTypeId, childAsset.SourceUniqueId));
                }
            }
            //Only 1 childAsset
            else {
                childAsset = asset.ChildAssetList.ChildAsset;
                artImgs.push(new Ninemsn.Glance.ImgItem(childAsset.AssetId, childAsset.FilePath, childAsset.Caption, childAsset.Caption, childAsset.AssetTypeId, childAsset.SourceUniqueId));
            }
        }
        return artImgs;
    }

    //todo
    this.GetRelatedLinks = function(asset) {
        var relatedArray = [];
        var relatedLink;
        var RLs = [];

        if (asset.RelatedLinkList != null && asset.RelatedLinkList != "") {
            //More than 1 classifier
            if (asset.RelatedLinkList.RelatedLink.length) {
                relatedArray = asset.RelatedLinkList.RelatedLink;

                for (var j = 0; j < relatedArray.length; j++) {
                    relatedLink = relatedArray[j];
                    var RLTitle = relatedLink.Title.replace(/&amp;/g, "&").replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&apos;/g, "'");
                    var RLPath = relatedLink.LinkUrl;
                    RLs.push($('<a></a>').attr({ 'class': 'rlItem', 'title': RLTitle, 'href': (Ninemsn.Shared.Util.IsAbsolute(RLPath) ? '' : Ninemsn.Glance.BASE_PATH) + RLPath }).html(RLTitle));
                }
            }
            //Only 1 classifier
            else {
                relatedLink = asset.RelatedLinkList.RelatedLink;
                var RLTitle = relatedLink.Title.replace(/&amp;/g, "&").replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&apos;/g, "'");
                var RLPath = relatedLink.LinkUrl;
                RLs.push($('<a></a>').attr({ 'class': 'rlItem', 'title': RLTitle, 'href': (Ninemsn.Shared.Util.IsAbsolute(RLPath) ? '' : Ninemsn.Glance.BASE_PATH) + RLPath }).html(RLTitle));
            }
        }

        return RLs;
    }

    /* Parses flock data */
    this.GetFlockCount = function(asset) {
        var flockCount = "";

        if (asset.FlockList != null && asset.FlockList != "") {
            flockCount = asset.FlockList.Flock.FlockCount;
        }

        return flockCount;
    }

    /* Parses friendly url data */
    this.GetFriendlyUrl = function(asset) {
        var friendlyUrl = "";

        if (asset.FriendlyUrl) {
            friendlyUrl = asset.FriendlyUrl;
        }
        return friendlyUrl;
    }

}

Ninemsn.Glance.ImgItem = function(assetid, url, caption, alt, assettypeid, sourceuniqueid) {
    this.assetid = assetid;
    this.url = url;
    this.caption = caption;
    this.alt = alt;
    this.assettypeid = assettypeid;
    this.sourceuniqueid = sourceuniqueid;
}

Msn.Video.OnVideoTitle = function(title) {
    var curr = Ninemsn.Glance.glcConCar.find('span.curr').eq(0);
    if (curr.hasClass('artVid')) {
        Ninemsn.Glance.loadStrap(title);
    }
}

/* Logic behind vertical date images within Carousel */
Ninemsn.Glance.DateController = new function() {
    var me = this;

    this.Init = function(firstDate) {
        me.today = new Date();
        me.today.setHours(23, 59, 59, 900);
        me.todayMS = me.today.getTime();
        me.oneDay = 24 * 60 * 60 * 1000;

        me.lastDateMS = null;
        me.currArtDate = firstDate;
    }



    this.AddDate = function(dateString) {
        var date = dateString.substr(0, 10);
        var year = date.substr(0, 4);
        var monthStr = Ninemsn.Shared.Util.GetMonth(date.substr(5, 2));
        var month = Ninemsn.Shared.Util.GetIntegerMonth(monthStr);
        var day = date.substr(8, 2);
        var newDate = new Date();
        var newDateMS = null;
        var diff = null;
        var diffFromToday = null;
        var returnDate = "";

        if (day.substr(0, 1) == "0") {
            day = day.substr(1, 1);
        }

        if (month != null) {
            newDate.setFullYear(parseInt(year), parseInt(month), day);
            newDate.setHours(0, 0, 0, 20);
            newDateMS = newDate.getTime();

            if (me.lastDateMS == null) {
                diff = Math.floor(((me.todayMS - newDateMS) / me.oneDay));
            }
            else {
                diff = Math.floor(((me.lastDateMS - newDateMS) / me.oneDay));
                diffFromToday = Math.floor(((me.todayMS - newDateMS) / me.oneDay));
            }

            //First pass
            if (diffFromToday == null) {
                if (me.currArtDate == "Today") {
                    if (diff == 0) {
                        returnDate = "";
                    }
                    else if (diff == 1) {
                        me.lastDateMS = newDateMS;
                        returnDate = "Yesterday";
                    }
                    else {
                        this.lastDateMS = newDateMS;
                        returnDate = monthStr + ' ' + parseInt(day) + Ninemsn.Shared.Util.GetDaySuffix(parseInt(day));
                    }
                }
                else if (this.currArtDate == "Yesterday") {
                    if (diff == 1) {
                        returnDate = "";
                    }
                    else if (diff < 1) {
                        me.lastDateMS = newDateMS;
                        returnDate = "Today";
                    }
                    else {
                        me.lastDateMS = newDateMS;
                        returnDate = monthStr + ' ' + parseInt(day) + Ninemsn.Shared.Util.GetDaySuffix(parseInt(day));
                    }
                }
                else {
                    me.lastDateMS = newDateMS;
                    if (diff == 0) {
                        returnDate = "Today";
                    }
                    else if (diff == 1) {
                        returnDate = "Yesterday";
                    }
                    else {
                        returnDate = monthStr + ' ' + parseInt(day) + Ninemsn.Shared.Util.GetDaySuffix(parseInt(day));
                    }
                }
            }
            //There should now be 2 dates rendered... one server side and one client side
            else {
                if (diff > 0) {
                    this.lastDateMS = newDateMS;
                    if (diffFromToday == 0) {
                        returnDate = "Today";
                    }
                    else if (diffFromToday == 1) {
                        returnDate = "Yesterday";
                    }
                    else {
                        returnDate = monthStr + ' ' + parseInt(day) + Ninemsn.Shared.Util.GetDaySuffix(parseInt(day));
                    }
                }
                else {
                    returnDate = "";
                }
            }
        }
        else {
            returnDate = "";
        }

        return returnDate;
    }
}
/**** Flock ***/

updateFlockCount = function(artID, flockCount) {
    if (artID == Ninemsn.Glance.FIRST_ART_ID) {
        var thumb = $('#carThumbs').children().eq(0);
        var thumbText = thumb.find('div.thbTextOF').eq(0);
        var title = $('#glcTitle').text();
        thumbText.html("<div><b>" + title + ": </b>" + flockCount + " Flocks</div>");
    }

}
showFlockThisUI = function() {
    $('#flockFrame').stop().animate({ 'width': '210px' }, "normal", function() {
        $(this).animate({ 'height': '150px' }, "fast");
    });
}
showFlockNotificationUI = function() {

}
showFlockThankyouUI = function(artID, count) {
    $('#flockFrame').stop().animate({ 'width': '210px' }, "normal", function() {
        $(this).animate({ 'height': '150px' }, "fast");
    });
}
showMotherFlockerRegoUI = function() {
    $('#flockFrame').stop().animate({ 'width': '305px' }, "normal", function() {
        $(this).animate({ 'height': '490px' }, "fast");
    });
}
showEditFlockProfileUI = function() {
    $('#flockFrame').stop().animate({ 'width': '300px' }, "normal", function() {
        $(this).animate({ 'height': '450px' }, "fast");
    });
}
showFlockCommentUI = function() {

}
showFlockValidationUI = function() {

}
remindToRegoAsMotherFlockerLater = function() {
    $('#flockFrame').stop().animate({ 'width': '210px' }, "normal", function() {
        $(this).animate({ 'height': '150px' }, "fast");
    });
}
onEditFlockProfileCancelButtonClicked = function() {
    $('#flockFrame').stop().animate({ 'width': '210px' }, "normal", function() {
        $(this).animate({ 'height': '150px' }, "fast");
    });
}
onEditProfileSaveButtonClicked = function() {
    $('#flockFrame').stop().animate({ 'width': '210px' }, "normal", function() {
        $(this).animate({ 'height': '150px' }, "fast");
    });
}
