﻿var botDaysOut = 4;    //The number of days from today to set end date to.  Change this to alter the default date/time
                        //window for the initial search.  If <= 0, the code will not load any default date/times and it
                        //will not do an initial search if there are no cookies.

var botDebug = false;    //The debug mode of the page, if debug is set to true, the program will create an alert with each
                        //JSON call.

var botRefreshDelay = 30;   //The number of seconds between quick pick and partner refreshes.

var botStagnantFix = 0;
var botResponseSearch;
var botResponseGenres;
var botResponseNeighborhoods;
var botCurrentPosition;
var botResponseQuickPicks;
var botResponsePartners;
var botQuickPickFaders = new Array(5);  //the current number of quick picks
var botPartnerFaders = new Array(6);    //the current number of partners
var bLoadedQuickPicks = false;
var bLoadedPartners = false;


function BOTLoadGenres(obj)
{
    botResponseGenres = obj;
}

function BOTLoadNeighborhoods(obj)
{
    botResponseNeighborhoods = obj;
}

function BOTLoadResults(obj)
{
    botResponseSearch = obj;
    var iCount = botResponseSearch.results.length;
    var botSearchResults;

    if (iCount == 0)
        botSearchResults = '<div class="BOTResultsDefaultText">No results found. Please search again.</div>';
    else
        botSearchResults = '\n<div class="BOTResultsCount">' + iCount + ' results</div>';

    var sCurrent = '';

    for(var i = 0; i < iCount; i++)
    {
        if (botResponseSearch.results[i].monthOfYearToString != sCurrent)
        {
            sCurrent = botResponseSearch.results[i].monthOfYearToString;
            botSearchResults += '<div class="BOTResultsMonth">' + botResponseSearch.results[i].monthOfYearToString + ' ' + botResponseSearch.results[i].yearOfCommonEra + '</div>';
        }

        botSearchResults += BOTGetResultCode(i);
    }

    document.getElementById('BOTResults').innerHTML = botSearchResults;
    document.getElementById('BOTSearchButton').innerHTML = '<a href="javascript:BOTSearch();"><img src="images/btn-search.jpg" alt="search" class="BOTImageLink" /></a>';
}

function BOTGetResultCode(index)
{
    var botSearchResult = ''
        + '<div class="BOTResultWrapper">'
        + '  <div class="BOTResult">'
        + '    <div class="BOTResultDateTime">'
        + '      <div class="BOTTextLarge">' + botResponseSearch.results[index].dayOfWeekToString + '</div>'
        + '      <div class="BOTTextLarge">' + botResponseSearch.results[index].dayOfMonth + " " + botResponseSearch.results[index].monthOfYearToStringShort + " " + botResponseSearch.results[index].yearOfCommonEra + '</div>'
        + '      <div class="BOTTextMedium">' + botResponseSearch.results[index].time + '</div>'
        + '    </div>'
        + '    <div class="BOTResultGenre">'
        + '      <img src="http://resource.boxofficetickets.com/BOT/UI/Genre/' + botResponseSearch.results[index].program.genre + '/32.png" />'
        + '    </div>'
        + '    <div class="BOTResultDetails">'
        + '      <div class="BOTTextLarge">' + botResponseSearch.results[index].program.presentingPartner.toString + '</div>'
        + '      <div class="BOTTextLarge">' + botResponseSearch.results[index].fullName + '</div>'
        + '      <div class="BOTTextMedium">' + botResponseSearch.results[index].venue.toString + ', ' + botResponseSearch.results[index].venue.facility.cityState + '</div>'
        + '      <div class="BOTTextSmall">' + botResponseSearch.results[index].detailsShort + '</div>'
        + '    </div>'
        + '    <div class="BOTResultMoreInfo">'
        + '      <a href="javascript:BOTMoreInfo(' + index + ', false);" class="BOTImageLink"><img src="images/btn-more-info-sqr.jpg" class="BOTImageLink" /></a>'
        + '    </div>'
        + '    <div class="BOTClear"></div>'
        + '  </div>'
        + '  <img class="BOTResultBottomImage" src="images/bg-dynamic-bottom.png" />'
        + '</div>';
    return botSearchResult;
}

function BOTMoreInfo(index, isQuickPick)
{
    var itemToDisplay;
    botCurrentPosition = document.documentElement.scrollTop;

    if (isQuickPick)
        itemToDisplay = botResponseQuickPicks.results[index];
    else
        itemToDisplay = botResponseSearch.results[index];

    //check to make sure there is a venu before displaying venue information
    if (itemToDisplay.venue.src != '')
    {
        document.getElementById('BOTInspectVenueText').style.display = 'block';
        document.getElementById('BOTInspectVenueMap').style.display = 'block';

        BOTLoadMap(itemToDisplay.venue.facility.address.toString);
        document.getElementById('BOTInspectVenueText').innerHTML = '<div class="BOTTextSmall">Venue:</div><a href="' + itemToDisplay.venue.src + '" target="_blank">' + itemToDisplay.venue.toString + '</a><br />'
            + '<a href="' + itemToDisplay.venue.facility.src + '" target="_blank">' + itemToDisplay.venue.facility.address.toString + '</a>';
    }
    else
    {
        document.getElementById('BOTInspectVenueText').style.display = 'none';
        document.getElementById('BOTInspectVenueMap').style.display = 'none';
    }

    document.getElementById('BOTInspectPoster').innerHTML = '<img id="BOTInspectPosterImage" src="' + itemToDisplay.srcForIcon + '" />';
    document.getElementById('BOTInspectMoreInfo').innerHTML = '<a href="' + itemToDisplay.srcForOfficialWebsite + '" target="_blank"><img src="images/btn-more-info-rect.jpg" class="BOTImageLink" /></a>';

    if (isQuickPick)
    {
        document.getElementById('BOTInspectGenreImage').innerHTML = '<img src="http://resource.boxofficetickets.com/BOT/UI/Genre/' + itemToDisplay.genre + '/64.png" />';
        document.getElementById('BOTInspectGenreText').innerHTML = itemToDisplay.genres;
        document.getElementById('BOTInspectProgramTitle').innerHTML = itemToDisplay.toString;
        document.getElementById('BOTInspectProgramDateTime').innerHTML = itemToDisplay.dateRange + '<br />' + itemToDisplay.runTime;
        if (itemToDisplay.fundingMiceTypeHTML != '')
            document.getElementById('BOTInspectProgramFunding').innerHTML = itemToDisplay.fundingMiceTypeHTML;
        else
            document.getElementById('BOTInspectProgramFunding').innerHTML = '';
        document.getElementById('BOTInspectPartner').innerHTML = '<div class="BOTTextSmall">Presented By:</div><a href="' + itemToDisplay.presentingPartner.src + '" target="_blank">' + itemToDisplay.presentingPartner.toString + '</a>';
        if (itemToDisplay.presentingPartner.fundingMiceTypeHTML != '')
            document.getElementById('BOTInspectPartner').innerHTML += '<div class="BOTFundingMiceType">' + itemToDisplay.presentingPartner.fundingMiceTypeHTML + '</div>';
    }
    else
    {
        document.getElementById('BOTInspectGenreImage').innerHTML = '<img src="http://resource.boxofficetickets.com/BOT/UI/Genre/' + itemToDisplay.program.genre + '/64.png" />';
        document.getElementById('BOTInspectGenreText').innerHTML = itemToDisplay.program.genres;
        document.getElementById('BOTInspectProgramTitle').innerHTML = itemToDisplay.program.toString;
        document.getElementById('BOTInspectProgramDateTime').innerHTML = itemToDisplay.date + '<br />' + itemToDisplay.time + '<br />' + itemToDisplay.runTime;
        if (itemToDisplay.program.fundingMiceTypeHTML != '')
            document.getElementById('BOTInspectProgramFunding').innerHTML = itemToDisplay.program.fundingMiceTypeHTML;
        else
            document.getElementById('BOTInspectProgramFunding').innerHTML = '';
        document.getElementById('BOTInspectPartner').innerHTML = '<div class="BOTTextSmall">Presented By:</div><a href="' + itemToDisplay.program.presentingPartner.src + '" target="_blank">' + itemToDisplay.program.presentingPartner.toString + '</a>';
        if (itemToDisplay.program.presentingPartner.fundingMiceTypeHTML != '')
            document.getElementById('BOTInspectPartner').innerHTML += '<div class="BOTFundingMiceType">' + itemToDisplay.program.presentingPartner.fundingMiceTypeHTML + '</div>';
    }

    if (!itemToDisplay.freeOfCharge && !isQuickPick)
        document.getElementById('BOTInspectBuy').innerHTML = '<a href="' + itemToDisplay.src + '" target="_blank"><img src="images/btn-order-now.jpg" class="BOTImageLink" /></a>';
    else
        document.getElementById('BOTInspectBuy').innerHTML = '';

    if (itemToDisplay.details == '')
        document.getElementById('BOTInspectDetails').style.display = 'none';
    else
    {
        document.getElementById('BOTInspectDetails').style.display = 'block';
        document.getElementById('BOTInspectDetails').innerHTML = itemToDisplay.details;
    }

    document.getElementById('BOTResults').style.display = 'none';
    document.getElementById('BOTInspect').style.display = 'block';
}

function BOTBackToResults()
{
    document.getElementById('BOTResults').style.display = 'block';
    document.getElementById('BOTInspect').style.display = 'none';
    document.documentElement.scrollTop = botCurrentPosition;
}

function BOTSearch()
{
    if (BOTValidateInputs())
    {
        document.getElementById('BOTResults').innerHTML = '<div class="BOTResultsDefaultText">Searching...</div>';
        document.getElementById('BOTResults').style.display = 'block';
        document.getElementById('BOTInspect').style.display = 'none';
        document.getElementById('BOTSearchButton').innerHTML = '<img src="images/img-load.gif" id="BOTSearchLoad" />';
        BOTDoSearch();
    }
}

function BOTDoSearch()
{   
    var genre = document.getElementById('BOTSearchInputGenre').value;
    var dateFrom = document.getElementById('BOTSearchInputDateStart').value;
    var dateTo = document.getElementById('BOTSearchInputDateEnd').value;
    var neighborhood = document.getElementById('BOTSearchInputNeighborhood').value;
    var keyWord = document.getElementById('BOTSearchInputKeyword').value;

    var uri = 'https://robot.boxofficetickets.com/800-494-TIXS/WebObjects/RoBOTWebAPI.woa/wa/DAForRoBOTWebAPI/subProgramsForNetwork?idForNetwork=11&passKeyForNetwork=2442b46312&objectGraphDepth=2';
    uri += '&callback=BOTLoadResults';

    if (genre != "0")
    {
        BOTCreateCookie('botgenre', genre);
        uri += '&genre=' + genre;
    }
    else
        BOTClearCookie('botgenre');

    if (dateFrom != '')
    {
        BOTCreateCookie('botdateFrom', dateFrom);
        uri += '&dateFrom=' + dateFrom;
    }
    else
        BOTClearCookie('botdateFrom');

    if (dateTo != '')
    {
        BOTCreateCookie('botdateTo', dateTo);
        uri += '&dateTo=' + dateTo;
    }
    else
        BOTClearCookie('botdateTo');

    if (neighborhood != "0")
    {
        BOTCreateCookie('botneighborhood', neighborhood);
        uri += '&neighborhood=' + neighborhood;
    }
    else
        BOTClearCookie('botneighborhood');

    if (keyWord != '')
    {
        BOTCreateCookie('botkeyWord', keyWord);
        uri += '&keyWord=' + keyWord;
    }
    else
        BOTClearCookie('botkeyWord');

    //deprecated method, only works in IE 7.0 as of 10/27/08
    //document.getElementById('jsoncall').src = uri;

    if (botDebug)
        alert(uri);

    //this seems to work in all tested browsers, though using an XMLHttpRequest is a more ideal solution
    var botJsonCall = document.createElement('script');
    botJsonCall.setAttribute('type', 'text/javascript');
    botJsonCall.setAttribute('src', uri);
    document.getElementsByTagName('head')[0].appendChild(botJsonCall);
}

function BOTClearDate(sDateInput, sDateCookie)
{
    document.getElementById(sDateInput).value = '';
}

//Google Maps code
function BOTLoadMap(address)
{
    var map = new google.maps.Map2(document.getElementById("BOTInspectVenueMap"),{size:new google.maps.Size(620,200)});
    var geocoder = new google.maps.ClientGeocoder();

    if (geocoder)
    {
        geocoder.getLatLng(address,
            function(point)
            {
                if (!point)
                {
                    //alert(address + " not found");
                }
                else
                {
                    map.setCenter(point, 13);
                    var marker = new google.maps.Marker(point);
                    map.addOverlay(marker);
                    //marker.openInfoWindowHtml(address);
                }
            }
        );
    }
}

function BOTInitialize()
{
    //setup the quick picks fader array
    botQuickPickFaders[0] = new Spry.Effect.Fade('BOTQuickPick0', {toggle:true});
    botQuickPickFaders[1] = new Spry.Effect.Fade('BOTQuickPick1', {toggle:true});
    botQuickPickFaders[2] = new Spry.Effect.Fade('BOTQuickPick2', {toggle:true});
    botQuickPickFaders[3] = new Spry.Effect.Fade('BOTQuickPick3', {toggle:true});
    botQuickPickFaders[4] = new Spry.Effect.Fade('BOTQuickPick4', {toggle:true});

    //setup the partner fader array
    botPartnerFaders[0] = new Spry.Effect.Fade('BOTPartner0', {toggle:true});
    botPartnerFaders[1] = new Spry.Effect.Fade('BOTPartner1', {toggle:true});
    botPartnerFaders[2] = new Spry.Effect.Fade('BOTPartner2', {toggle:true});
    botPartnerFaders[3] = new Spry.Effect.Fade('BOTPartner3', {toggle:true});
    botPartnerFaders[4] = new Spry.Effect.Fade('BOTPartner4', {toggle:true});
    botPartnerFaders[5] = new Spry.Effect.Fade('BOTPartner5', {toggle:true});

    BOTLoadQuickPicks();
    BOTLoadPartners();

    var bCookies = false;

    var genre = BOTReadCookie('botgenre');
    if (genre != null && genre != '')
    {
        bCookies = true;
        document.getElementById('BOTSearchInputGenre' + genre).selected = true;
    }

    var dateFrom = BOTReadCookie('botdateFrom');
    if (dateFrom != null && dateFrom != '')
    {
        bCookies = true;
        document.getElementById('BOTSearchInputDateStart').value = dateFrom;
    }
    else if (botDaysOut > 0)
    {
        var d = new Date();
        var day = d.getDate();
        var month = d.getMonth() + 1;
        if (day < 10)
            day = '0' + day;
        if (month < 10)
            month = '0' + month;
        document.getElementById('BOTSearchInputDateStart').value = month + '-' + day + '-' + getTrueYear(d);
    }

    var dateTo = BOTReadCookie('botdateTo');
    if (dateTo != null && dateTo != '')
    {
        bCookies = true;
        document.getElementById('BOTSearchInputDateEnd').value = dateTo;
    }
    else if (botDaysOut > 0)
    {
        var d = new Date();
        d.setTime(d.getTime() + (botDaysOut * 24 * 60 * 60 * 1000));
        var day = d.getDate();
        var month = d.getMonth() + 1;
        if (day < 10)
            day = '0' + day;
        if (month < 10)
            month = '0' + month;
        document.getElementById('BOTSearchInputDateEnd').value = month + '-' + day + '-' + getTrueYear(d);
    }
    
    var neighborhood = BOTReadCookie('botneighborhood');
    if (neighborhood != null && neighborhood != '')
    {
        bCookies = true;
        document.getElementById('BOTSearchInputNeighborhood' + neighborhood).selected = true;
    }
    
    var keyWord = BOTReadCookie('botkeyWord');
    if (keyWord != null && keyWord != '')
    {
        bCookies = true;
        document.getElementById('BOTSearchInputKeyword').value = keyWord;
    }

    if (bCookies || botDaysOut > 0)
        BOTSearch();
}

//Cookie Management code, these scripts are modified versions of the ones found at http://www.quirksmode.org/js/cookies.html
function BOTCreateCookie(name, value)
{
    var date = new Date();
	date.setTime(date.getTime() + (15 * 60 * 1000));
	var expires = "; expires=" + date.toGMTString();
	document.cookie = name + "=" + value + expires + "; path=/";
}

function BOTReadCookie(name)
{
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i = 0; i < ca.length; i++)
	{
        var c = ca[i];
		while (c.charAt(0)==' ')
		    c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0)
		    return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function BOTClearCookie(name)
{
    var date = new Date();
	date.setTime(date.getTime() - 1);
	var expires = "; expires=" + date.toGMTString();
	document.cookie = name + "=" + expires + "; path=/";
}

function BOTLoadQuickPicks()
{
    var uri = 'https://robot.boxofficetickets.com/800-494-TIXS/WebObjects/RoBOTWebAPI.woa/wa/DAForRoBOTWebAPI/programsForNetwork?idForNetwork=11&passKeyForNetwork=2442b46312&random=Y&limit=5&daysOut=30';
    uri += '&callback=BOTProcessQuickPicks';
    uri += '&botSafariFix' + botStagnantFix + '=' + Date();
    botStagnantFix++;
    var botJsonCall = document.createElement('script');
    botJsonCall.setAttribute('type', 'text/javascript');
    botJsonCall.setAttribute('src', uri);
    document.getElementsByTagName('head')[0].appendChild(botJsonCall);
}

function BOTProcessQuickPicks(obj)
{
    botResponseQuickPicks = obj;

    var iCount = botResponseQuickPicks.results.length;

    if (iCount == 5)
    {
        document.getElementById('BOTQuickPicks').style.display = 'block';
        for (var i = 0; i < iCount; i++)
        {
            if (bLoadedQuickPicks)
                setTimeout('botQuickPickFaders[' + i + '].start()', (i + 1) * 1000);
            setTimeout('BOTLoadQuickPick(' + i + ')', (i + 2) * 1000);
            setTimeout('botQuickPickFaders[' + i + '].start()', (i + 3) * 1000);
        }
    }
    else
    {
        document.getElementById('BOTQuickPicks').style.display = 'none';
    }
    bLoadedQuickPicks = true;
    setTimeout('BOTLoadQuickPicks()', botRefreshDelay * 1000);
}

function BOTLoadQuickPick(index)
{
    document.getElementById('BOTQuickPick' + index).innerHTML = ''
        + '<div class="BOTQuickPickIcon"><a href="javascript:BOTMoreInfo(' + index + ', true);"><img src="' + botResponseQuickPicks.results[index].srcForIcon + '" class="BOTQuickPickImage" /></a></div>'
        + '<div class="BOTQuickPickToString"><a href="javascript:BOTMoreInfo(' + index + ', true);">' + trim(botResponseQuickPicks.results[index].toString, 30) + '</a></div>'
        + '<div class="BOTQuickPickDateRange"><a href="javascript:BOTMoreInfo(' + index + ', true);">' + trim(botResponseQuickPicks.results[index].dateRange, 30) + '</a></div>';
}

function BOTLoadPartners()
{
    var uri = 'https://robot.boxofficetickets.com/800-494-TIXS/WebObjects/RoBOTWebAPI.woa/wa/DAForRoBOTWebAPI/presentingPartnersForNetwork?idForNetwork=11&passKeyForNetwork=2442b46312&limit=6&random=Y';
    uri += '&callback=BOTProcessPartners';
    uri += '&botSafariFix' + botStagnantFix + '=' + Date();
    botStagnantFix++;
    var botJsonCall = document.createElement('script');
    botJsonCall.setAttribute('type', 'text/javascript');
    botJsonCall.setAttribute('src', uri);
    document.getElementsByTagName('head')[0].appendChild(botJsonCall);
}

function BOTProcessPartners(obj)
{
    botResponsePartners = obj;

    var iCount = botResponsePartners.results.length;

    if (iCount == 6)
    {
        document.getElementById('BOTPartners').style.display = 'block';
        for (var i = 0; i < iCount; i++)
        {
            if (bLoadedPartners)
                setTimeout('botPartnerFaders[' + i + '].start()', (i + 1) * 1000);
            setTimeout('BOTLoadPartner(' + i + ')', (i + 2) * 1000);
            setTimeout('botPartnerFaders[' + i + '].start()', (i + 3) * 1000);
        }
    }
    else
    {
        document.getElementById('BOTPartners').style.display = 'none';
    }
    bLoadedPartners = true;
    setTimeout('BOTLoadPartners()', botRefreshDelay * 1000);
}

function BOTLoadPartner(index)
{
    document.getElementById('BOTPartner' + index).innerHTML = '<a href="' + botResponsePartners.results[index].src + '" target="_blank"><img src="' + botResponsePartners.results[index].srcForIcon + '" class="BOTPartnerIcon" /></a>';
}

//currently not working when the dateTo is in the next calendar year.
function BOTValidateInputs()
{
    return true;

    var bIsValid = true;
    var dateFrom = document.getElementById('BOTSearchInputDateStart').value;
    var dateTo = document.getElementById('BOTSearchInputDateEnd').value;

    if (dateTo != '' && dateFrom != '')
    {
        var dFrom = Date.parse(dateFrom);
        var dTo = Date.parse(dateTo);

        if (dateFrom > dateTo)
        {
            alert('The end date must occur after the start date, please adjust the dates you have selected.');
            bIsValid = false;
        }
    }
    
    return bIsValid;
}

//Helper functions
function getTrueYear(theDate)
{
	x = theDate.getYear();
	var y = x % 100;
	y += (y < 38) ? 2000 : 1900;
	return y;
}

function trim(theString, theLength)
{
    if (theString.length > theLength)
        return theString.substring(0, (theLength-3)) + '...';
    else
        return theString;
}
