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 botResponseSearch;
var botResponseGenres;
var botCurrentPosition;

function BOTLoadGenres(obj) {
    botEventTypes = obj;
}

function BOTInitialize() {
    var bCookies = false;

    var dateFrom = BOTReadCookie('botdateFrom');
    if (!BOTIsEmpty(dateFrom)) {
        bCookies = true;
        document.getElementById('BOTStartDate').value = dateFrom;
    } else if (botDaysOut > 0) {
        var d = new Date();
        document.getElementById('BOTStartDate').value = (d.getMonth() + 1) + '-' + d.getDate() + '-' + BOTGetYear(d);
    }

    var dateTo = BOTReadCookie('botdateTo');
    if (!BOTIsEmpty(dateTo)) {
        bCookies = true;
        document.getElementById('BOTEndDate').value = dateTo;
    } else if (botDaysOut > 0) {
        var d = new Date();
        d.setTime(d.getTime() + (botDaysOut * 24 * 60 * 60 * 1000));
        document.getElementById('BOTEndDate').value = (d.getMonth() + 1) + '-' + d.getDate() + '-' + BOTGetYear(d);
    }

    var eventType = BOTReadCookie('boteventType');
    if (!BOTIsEmpty(eventType)) {
        bCookies = true;
        document.getElementById('BOTEventType' + eventType).selected = true;
    }

    var keyWord = BOTReadCookie('botkeyWord');
    if (!BOTIsEmpty(keyWord)) {
        bCookies = true;
        document.getElementById('BOTKeyword').value = keyWord;
    }

	var programId = BOTGetUrlParameter('pid');
    if (programId == "" && (bCookies || botDaysOut > 0))
		BOTSearch();
	else
		BOTInitializeWithProgram(programId);
}

function BOTSearch() {
    if (!BOTValidateInputs())
		return;

	BOTStartLoading();
	var eventType = document.getElementById('BOTEventType').value;
	var dateFrom = document.getElementById('BOTStartDate').value;
	var dateTo = document.getElementById('BOTEndDate').value;
	var keyWord = document.getElementById('BOTKeyword').value;

	var uri = 'https://robot.boxofficetickets.com/800-494-TIXS/WebObjects/RoBOTWebAPI.woa/wa/DAForRoBOTWebAPI/subProgramsForTag?idForTag=8991&passKeyForTag=562c908eb0&objectGraphDepth=2&callback=BOTLoadResults&lite=Y';

	uri += BOTAddParameter(eventType, '0', 'boteventType', '&genre=');
	uri += BOTAddParameter(dateFrom, '', 'botdateFrom', '&dateFrom=');
	uri += BOTAddParameter(dateTo, '', 'botdateTo', '&dateTo=');
	uri += BOTAddParameter(keyWord, '', 'botkeyWord', '&keyWord=');
	
	if (botDebug)
	    alert(uri);

	var programId = BOTGetUrlParameter('pid');
    if (programId != "")
		window.location = "/mayor/calendar/index.cfm";

	var botJsonCall = document.createElement('script');
	botJsonCall.setAttribute('type', 'text/javascript');
	botJsonCall.setAttribute('src', uri);
	document.getElementsByTagName('head')[0].appendChild(botJsonCall);
}

function BOTLoadResults(obj) {
    botResponseSearch = obj;
    var iCount = botResponseSearch.results.length;
    var botSearchResults;

    if (iCount == 0)
        botSearchResults = "No results found. Please search again.";
    else
        botSearchResults = '<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);
        if (i != iCount-1)
            botSearchResults += '<hr />';
    }

    document.getElementById('BOTView').innerHTML = botSearchResults;
	BOTEndLoading();
}

function BOTGetResultCode(index) {
    var botSearchResult = ''
        + '<div class="BOTSearchResult">'
        + '  <a name="anchor' + index + '"></a>'
        + '  <table class="BOTSearchResultTable">'
        + '    <tr>'
        + '      <td class="BOTSearchResultDateTimes">'
        + '        <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>'
        + '      </td>'
        + '      <td class="BOTSearchResultDetails">'
        + '        <div class="BOTTextMedium">' + botResponseSearch.results[index].program.presentingPartner.toString + '</div>'
        + '        <div class="BOTTextLarge"><a href="?pid=' + botResponseSearch.results[index].program.id + '">' + botResponseSearch.results[index].fullName + '</a></div>'
        + '        <div class="BOTTextMedium">' + botResponseSearch.results[index].venue.toString + ', ' + botResponseSearch.results[index].venue.facility.cityState + '</div>'
        + '        <div class="BOTTextSmall">' + botResponseSearch.results[index].detailsShort + '</div>'
        + '      </td>'
        + '      <td class="BOTSearchResultMoreInfo"><a href="?pid=' + botResponseSearch.results[index].program.id + '"><img src="/mayor/images/more-info.gif" /></a></td>'
        + '    </tr>'
        + '  </table>'
        + '</div>';
    return botSearchResult;
}

function BOTInitializeWithProgram(programId) {
	BOTStartLoading();
	var lookupUrl = "https://www.hulahub.com/cgi-bin/WebObjects/BOTBoOS.woa/wa/DAForHulaHubAPI/program?id=" + programId + "&callback=BOTLoadProgram";
	var botJsonCall = document.createElement('script');
    botJsonCall.setAttribute('type', 'text/javascript');
    botJsonCall.setAttribute('src', lookupUrl);
    document.getElementsByTagName('head')[0].appendChild(botJsonCall);
}

function BOTLoadProgram(obj) {
	var html = '';
	html += '<div class="BOTResult">';
	html += 	'<div class="BOTResultTitle">' + obj.toString + '</div>';
	html += 	'<div class="BOTResultSubText">' + obj.details + '</div>';
	html +=		'<div class="BOTResultLeft">';
	html +=			'<div class="BOTResultSubTitle">Location</div>';
	html +=			'<div class="BOTResultSubText">' + obj.venue.toString + '</div>';
	html +=			'<div class="BOTResultMapLink"><a href="' + obj.venue.facility.src + '" target="_blank">Map It!</a></div>';
	if (!BOTIsEmpty(obj.venue.facility.phone)) {
		html +=			'<div class="BOTResultSubTitle">Phone</div>';
		html +=			'<div class="BOTResultSubText">' + obj.venue.facility.phone.number + '</div>'
	}
	html +=			'<div class="BOTResultSubTitle">Date/Time</div>';
	html +=			'<div class="BOTResultSubText">'
	for (var i = 0; i < obj.subPrograms.length; i++) {
		if (obj.subPrograms[i].toString.indexOf(',') == -1)
			html += obj.subPrograms[i].toString + '<br />';
		else {
			html += obj.subPrograms[i].toString.substring(0,obj.subPrograms[i].toString.indexOf(',')) + '<br />';
			html += obj.subPrograms[i].toString.substring(obj.subPrograms[i].toString.indexOf(',') + 1) + '<br /><br />';
		}
	}
	html +=			'</div>';
	html +=		'</div>';
	html +=		'<div class="BOTResultRight">';
	html +=			'<img class="BOTResultPoster" src="' + obj.srcForIcon + '" />';
	html +=			'<div class="BOTResultSubTitle">Presented By</div>';
	html +=			'<div class="BOTResultSubText"><a href="' + obj.presentingPartner.srcForHomePage + '">' + obj.presentingPartner.toString + '</a></div>';
	html +=			'<div class="BOTResultSubLink"><a href="' + obj.src + '">Buy Tickets</a></div>';
	html +=			'<div class="BOTResultSubLink">';
	html +=				'<a href="' + obj.srcForHulaHub + '"><img src="/mayor/images/hhIcon16.png" /></a>';
	if (!BOTIsEmpty(obj.srcForTwitter))
		html +=				'<a href="' + obj.srcForTwitter + '"><img src="/mayor/images/twitter16.png" /></a>';
	if (!BOTIsEmpty(obj.presentingPartner.srcForFacebook))
		html +=				'<a href="' + obj.presentingPartner.srcForFacebook + '"><img src="/mayor/images/facebook16.png" /></a>';
	html +=			'</div>';
	html +=		'</div>';
	html +=		'<div class="BOTClear"></div>';
	html +=	'</div>';
	document.getElementById('BOTView').innerHTML = html;
	BOTEndLoading();
}

/* Helper functions */
function BOTIsEmpty(value) {
	if (value == null || value == '')
		return true;
    return false;
}

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 BOTGetUrlParameter(name) {
	name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
	var regexS = "[\\?&]"+name+"=([^&#]*)";
	var regex = new RegExp( regexS );
	var results = regex.exec( window.location.href );
	if( results == null )
		return "";
	else
		return results[1];
}

//currently not working when the dateTo is in the next calendar year.
function BOTValidateInputs() {
	return true;
/*	
	var bIsValid = true;
	var dateFrom = document.getElementById('BOTSearchOptionsStartDate').value;
	var dateTo = document.getElementById('BOTSearchOptionsEndDate').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;
*/
}

function BOTAddParameter(value, empty, cookie, parameter) {
	if (value != empty) {
	    BOTCreateCookie(cookie, value);
	    return parameter + value;
	} else {
	    BOTClearCookie(cookie);
	    return '';
	}
}

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 BOTClearCookie(name) {
    var date = new Date();
	date.setTime(date.getTime() - 1);
	var expires = "; expires=" + date.toGMTString();
	document.cookie = name + "=" + expires + "; path=/";
}

function BOTGetYear(theDate) {
	x = theDate.getYear();
	var y = x % 100;
	y += (y < 38) ? 2000 : 1900;
	return y;
}

function BOTStartLoading() {
	document.getElementById('BOTSearchIndicator').innerHTML = '<img src="/mayor/images/ajaxload.gif" />';
	document.getElementById('BOTSearchButton').disabled = true;
}

function BOTEndLoading() {
	document.getElementById('BOTSearchIndicator').innerHTML = '';
	document.getElementById('BOTSearchButton').disabled = false;
}
