var DefaultChannel = "";
var DefaultLocation = "";
var DefaultModule = ""
var WeatherModuleData = "";
var TVGuideModuleData = "";
var objTVData = "";
var objCurrentTVData = "";
var loopChannels = ['6', '1', '7', '31'];
var chanNames = ['TV2', 'TV3', 'TVOne', 'PRIME']

$(document).ready(function() {

    // get the div ID to be displayed
    var currentLi;
    var displayDiv;
    //var cookieData = "WeatherDiv|WeatherDiv:link_18_85020|TVGuideDiv:7_Tab";

    cookieData = $.cookie('wthcookie');
    if (cookieData == null) {
        cookieData = "TVGuideDiv";
    }

    var cookieArr = cookieData.split("|");
    //alert(cookieData);

    DefaultModule = cookieArr[0];


    var tempArr, nCtr;
    for (nCtr = 1; nCtr < cookieArr.length; nCtr++) {

        tempArr = cookieArr[nCtr].split(":");

        switch (tempArr[0]) {
            case "WeatherDiv":
                WeatherModuleData = tempArr[nCtr];
                DefaultLocation = tempArr[1];
                //alert("DefaultLocation = " + DefaultLocation)
                showCityWeather(DefaultLocation);

                if (typeof (execMe) == "function") {
                    var _oArrAnid2 = 'pref09';
                    var _oArrCats2 = '85011,84907,85010,85012,85013,85014,85015,85016,85017,85018,85019,85020,85022,85023,85024,85025,85026,85027,85028,85029,85030,85031,85032,85033,85034,85035,85036,85037,85038,85039,85040,85041,85042,85043,85044,85045,85046,85047,85048,85049,85050,85051,85052';
                    var _oArrGroups2 = '7762, 7760, 7761, 7763, 7764, 7766, 7767, 7768, 7769, 7770, 7771, 7772, 7773, 7774, 7775, 7776, 7777, 7778, 7779, 7780, 7781, 7782, 7783, 7784, 7785, 7786, 7787, 7788, 7789, 7790, 7791, 7792, 7793, 7794, 7795, 7796, 7797, 7798, 7799, 7800, 7801, 7802, 7803'; var ARR_85011_SUPER_GROUPS = JS_85011_SUPER_GROUPS.split(','); var JS_85011_SUPER_MODE = '0'; var ARR_85011_SUPER_MODE = JS_85011_SUPER_MODE.split(',');
                    var _ArrMode2 = '0';
                    var _oArrAnid2 = 'pref09';
                    execMe(_ArrMode2, _oArrCats2, _oArrGroups2, DefaultLocation, _oArrAnid2);

                }


                break;
            case "TVGuideDiv":
                TVGuideModuleData = cookieArr[nCtr];
                DefaultChannel = tempArr[1];
                showChannelPrograms(DefaultChannel);
                break;
        }
    }

    changeTab("TVGuideDiv");
})


function showCityWeather(WeatherCityId) {

    if (WeatherCityId == "") {
        WeatherCityId = "link_2_85010";
    }
    var WeatherCitySelect = $('#WeatherDiv #cat_hl_85011 #cat_hl_85011_tabLoc select');
    var found = false;
    $(WeatherCitySelect).find('option').each(function() {

        //alert($(this).attr('value') + "<=>" + WeatherCityId);

        if ($(this).attr('value') == WeatherCityId) {
            $(this).attr('selected', 'selected');
            DefaultLocation = $(this).attr('value');
            //alert($(WeatherCitySelect))
            $(WeatherCitySelect).change(function() {
                $(WeatherCitySelect).attr('id', WeatherCityId);
            })
            WeatherModuleData = "WeatherDiv:" + WeatherCityId;
            //alert(WeatherModuleData )
            setCookieData();
            return false;
        }
    })

}


function changeTab(divID) {

    var displayDiv = document.getElementById(divID);
    var currentLi;
    var selectedOption;
    var cookieStr = "";
    var currentDivId;
    var nCtr = 0;

    // start by setting the current selected Div in Cookie Value String
    cookieStr = divID;

    //alert("changeTab divID=" + divID)

    // create the Cookie Value based on current options selected in each of the Divs

    if ((divID == "TVGuideDiv") && (objTVData == "")) {
        loadTVGuideData();
    }

    $('#tabsBase div').each(function() {
        $(this).removeClass("SelectedDiv");
        currentDivId = $(this).attr('id');
        currentLi = document.getElementById($(this).attr('id').replace('Div', ''));
        $(currentLi).removeClass("SelectedLi")
    })

    //alert(cookieStr)
    $(displayDiv).addClass("SelectedDiv")
    currentLi = document.getElementById(divID.replace('Div', ''));
    $(currentLi).addClass("SelectedLi");


    DefaultModule = divID;
    setCookieData();
    $('#mainloading').css("display", "none");

}



function setCookieData() {
    // setting cookie for current tab
    var cookieStr = DefaultModule + "|" + TVGuideModuleData + "|" + WeatherModuleData;

    //alert("Setting Cookir = " + cookieStr)
    $.cookie('wthcookie', cookieStr, { expires: 2 });
}

function limitLength(str, maxlen, dots, maxword) {
    maxlen = maxlen || 105;
    maxword = maxword || 18;
    dots = dots || '...';
    var dlim = ' ';
    if (str.length > maxlen) {
        var str1 = str.substring(0, maxlen - maxword);
        var str2 = $.trim(str.substring(maxlen - maxword, maxlen));
        return str1 + str2.substring(0, str2.lastIndexOf(dlim)) + dots;
    } else {
        return str;
    }
}



function displayTVGuideData(o) {
    //alert("displayTVGuideData");
    objTVData = o;

    var TVDiv = document.getElementById("TVGuideDiv");
    var now = new Date();
    var sPayTvLink = "http://entertainment.msn.co.nz/tv-guide?starttime=" + now + "&channelset=1";
    if (objTVData.RowList) {
        var arrPrograms = objTVData.RowList.Row;

        //alert("Programs Count : " + arrPrograms.length)

        var nCtr = 0;
        var sChannelList = "";
        var arrChannelNames = new Array(0);
        var arrChannelIds = new Array(0);

        for (nCtr = 0; nCtr < arrPrograms.length; nCtr++) {

            if (sChannelList.indexOf(arrPrograms[nCtr].Channel) < 0) {
                sChannelList = arrPrograms[nCtr].Channel + "," + sChannelList;
                arrChannelNames.push(arrPrograms[nCtr].Channel);
                arrChannelIds.push(arrPrograms[nCtr].ChannelId);
            }

        }

        if (arrChannelNames.length > 0) {
            $('#TVGuideDiv').attr("innerHtml", "");
            $('#tvloading').css("display", "none");

            $("<table id='tblChannelList' cellspacing='0' cellpadding='0' border='0'><tr><td><div id='ChannelDiv'></div></td></tr><tr><td><div id='ProgramsDiv'></div></td></tr></table>").appendTo("#TVGuideDiv")


            $("<ul id='ChannelUL'></ul>").appendTo("#ChannelDiv");

            var liChannel = "";

            for (nCtr = 0; nCtr < arrChannelNames.length; nCtr++) {
                var sChName = arrChannelNames[nCtr]

                switch (sChName) {
                    case 'PRIM':
                        sChName = 'PRIME';
                        break;
                    case 'C4TV':
                        sChName = 'C4';
                        break;
                }

                liChannel = liChannel + "<li class='ChannelLI' id='" + arrChannelIds[nCtr] + "_Tab' onclick='showChannelPrograms(this.id)'>";
                liChannel = liChannel + "<span class='ChannelName'>" + sChName + "</span>";
                liChannel = liChannel + "</li>";
                liChannel = liChannel + "<li class='ChannelLIDivider'></li>";


                // for current channel create a DIV.
                var nCounter = 0;
                $("<div class='ChannelPrograms' id='" + arrChannelIds[nCtr] + "_Div'></div>").appendTo("#ProgramsDiv")
                // create TABLE for current channel and add it to above DIV
                $("<table class='ProgramTable' cellpadding='0' cellspacing='0' border='0' id='" + arrChannelIds[nCtr] + "_tbl'></table>").appendTo($("#" + arrChannelIds[nCtr] + "_Div"))

                var sProgramClass = "PgrClassAlt";
                var sPrimeProgramTitle = "";
                var sProgramTitle = "";
                var nMinRows = 5;
                var nRowCount = 0;

                for (nCounter = 0; nCounter < arrPrograms.length; nCounter++) {

                    if (arrPrograms[nCounter].ChannelId == arrChannelIds[nCtr]) {
                        nRowCount = nRowCount + 1;
                        if (sProgramClass == "PgrClassAlt") {
                            sProgramClass = "PgrClass";
                        }
                        else {
                            sProgramClass = "PgrClassAlt";
                        }

                        sProgramTitle = arrPrograms[nCounter].Title.replace("&apos;", "'");
                        if (sProgramTitle.length > 30) {
                            sProgramTitle = sProgramTitle.substring(0, 30) + "..."
                        }

                        if (arrPrograms[nCounter].PrimeFlag == "True") {
                            //alert(arrPrograms[nCounter].PrimeFlag)
                            // create rows for each programs of current channel and add then to above TABLE
                            //$("<tr><td><span class='TimeSpanNowOn'>Now :</span><span class='TitleSpanNowOn'>" + arrPrograms[nCounter].Title.replace("&apos;", "'") + "</span></td></tr>").appendTo($("#" + arrChannelIds[nCtr] + "_tbl"))
                            sPrimeProgramTitle = sProgramTitle;
                        }
                        else {
                            // create rows for each programs of current channel and add then to above TABLE


                            $("<tr class='" + sProgramClass + "'><td><span class='TimeSpan'>" + fncCreateTimeForProgram(arrPrograms[nCounter].StartTime) + "</span><span class='TitleSpan'>" + sProgramTitle + "</span></td></tr>").appendTo($("#" + arrChannelIds[nCtr] + "_tbl"))

                        }
                    }

                }

                if (nRowCount < 5) {
                    var nAdditionalRows = nMinRows - nRowCount
                    //alert("Channel " + arrChannelIds[nCtr] + " found: nAdditionalRows" + nAdditionalRows);
                    var nCounter2 = 0;
                    if (sProgramClass == "PgrClassAlt") {
                        sProgramClass = "PgrClass";
                    }
                    else {
                        sProgramClass = "PgrClassAlt";
                    }
                    for (nCounter2 = 0; nCounter2 < nAdditionalRows; nCounter2++) {
                        $("<tr class='" + sProgramClass + "'><td><span class='TimeSpanNoImage'>&nbsp;</span><span class='TitleSpan'>&nbsp;</span></td></tr>").appendTo($("#" + arrChannelIds[nCtr] + "_tbl"))
                    }
                    nAdditionalRows = 0;
                    nRowCount = 0;
                }


                if (sPrimeProgramTitle.length > 0) {

                    $("<div class='DivNowOn'><span class='TimeSpanNowOn'>TONIGHT </span><span class='TitleSpanNowOn'><a href='http://entertainment.msn.co.nz/tv-guide'>" + sPrimeProgramTitle + "</a></span><span class='MoreLink'>Full <a href='" + sPayTvLink + "'>TV Guide</a></span></div>").appendTo($("#" + arrChannelIds[nCtr] + "_Div"))
                }
                else {
                    $("<div class='DivNowOn'><span class='TimeSpanNowOnHidden'>&nbsp;</span><span class='TitleSpanNowOn'>&nbsp;</span><span class='MoreLink'>Full <a href='" + sPayTvLink + "'>TV Guide</a></span></div>").appendTo($("#" + arrChannelIds[nCtr] + "_Div"))
                }



            }

            $(liChannel).appendTo("#ChannelUL");
        }


        if (DefaultChannel == "") {
            DefaultChannel = $('#ChannelDiv #ChannelUL Li:eq(0)').attr('id');
        }
        showChannelPrograms(DefaultChannel)
    }
}


function showChannelPrograms(ChannelTabId) {
    // hide all the ProgramDivs 
    $('#ProgramsDiv div').each(function() {
        $(this).removeClass("ChannelProgramsSelected");
        $(this).addClass("ChannelPrograms");
    })

    // change all Channel names to standard CSS
    $('#ChannelDiv ul li').each(function() {
        $(this).addClass("ChannelLI");
        $(this).removeClass("ChannelLISelected");
    })


    // show only the selected Channel's ProgramDiv
	if(!ChannelTabId)
	{
		return;
	}
	
    var ChannelProgramsDiv = document.getElementById(ChannelTabId.replace('Tab', 'Div'));
    $(ChannelProgramsDiv).removeClass("ChannelPrograms");
    $(ChannelProgramsDiv).addClass("ChannelProgramsSelected");

    var ChannelLi = document.getElementById(ChannelTabId);
    $(ChannelLi).removeClass("ChannelLI");
    $(ChannelLi).addClass("ChannelLISelected");

    TVGuideModuleData = "TVGuideDiv:" + ChannelTabId;
    //alert("showChannelPrograms = " + TVGuideModuleData) ;
    setCookieData();
}




// load the data from the service
function load(url) {
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = url + '&_=' + Math.round(Math.random() * 10000000);
    document.getElementsByTagName('head')[0].appendChild(script);
}

function loadTVGuideData() {
    //alert("loadTVGuideData");
    load('http://data.app06.ninemsn.com.au/Services/Service.axd?ServiceFormat=JSON&ServiceName=NewZealand&ServiceAction=GetTVGuideTop5Schedules&ChannelIDs=6,7,1,31,24072&PrimeTimeOnly=0&UTCHrs=12&AttributeStyle=true&callback=displayTVGuideData')
    return false;

}

function loadPrimeTimeTVGuideData(strChannelId) {
    //alert("loadPrimeTimeTVGuideData");
    load('http://data.app06.ninemsn.com.au/Services/Service.axd?ServiceFormat=JSON&ServiceName=NewZealand&ServiceAction=GetTVGuideTop5Schedules&ChannelIDs=' + strChannelId + '&PrimeTimeOnly=1&UTCHrs=12&AttributeStyle=true&callback=displayPrimeTimeTVGuideData')
    return false;

}


function displayPrimeTimeTVGuideData(o) {
    //alert("displayPrimeTimeTVGuideData");
    var objCurrentTVData = o;


    if (objCurrentTVData.RowList) {
        var arrPrograms = objCurrentTVData.RowList.Row;
        //alert("Programs Count : " + arrPrograms.length)

        var nCtr = 0;
        var sChannelList = "";
        var arrChannelNames = new Array(0);
        var arrChannelIds = new Array(0);

        for (nCtr = 0; nCtr < arrPrograms.length; nCtr++) {

            var p = (arrPrograms[nCtr].Title).match(/[^\:]*/)[0];
            p = p.replace("&apos;", "'");
            p = limitLength(p, 15, '&hellip;', 1);
            var s = "<span class='odd'>" + (parseInt(arrPrograms[nCtr].StartTime.substring(12, 14)) - 12) + ':' + arrPrograms[nCtr].StartTime.substring(15, 17) + "&nbsp;<span class='onlytitle'><a href='http://entertainment.msn.co.nz/tv-guide/' class='linkItem orderedItem1' title=\"" + arrPrograms[nCtr].Title.replace("&apos;", "'") + "\">" + p + "</a></span></span>"
            $(s).appendTo('#tv_outer');
        }
    }
}


function fncCreateTimeForProgram(convert_time) {
    var strMonth = 0;
    var strHour = 0;
    var arrDate = convert_time.split("T");
    var strDateIs = arrDate[0];
    var strDatePart = strDateIs.split("-");
    var strYear = strDatePart[0];
    var strMonth = strDatePart[1];
    var strDateIs = strDatePart[2];
    var allMonths = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
    for (c = 0; c <= allMonths.length; c++) {
        if (strMonth == allMonths[c]) strMonth = c;
    }
    var strTimeIs = arrDate[1];
    var splitedTime = strTimeIs.split("+");
    var timePart = splitedTime[0].split(":");
    var strHour = timePart[0];
    var strMinute = timePart[1];
    var strSecond = timePart[2];
    //var FormattedTime = new Date(strYear, strMonth, strDateIs, strHour, strMinute, strSecond);
    var FormattedTime = strHour + ":" + strMinute
    return FormattedTime;

};



