﻿var state = 'california';
var load = true;

$(document).ready(function() {
    GetCities();
});

function Reset() {
    $('.Listing').empty();
}

function GetCities() {

    var url = "http://timenavigator.redbullna.com/location/" + state;

    $.ajax({
        type: "GET",
        url: url,
        dataType: "jsonp",
        jsonp: "onSuccess",
        success: function(data) {

            var citySelect = $('.Cities').find('option').remove().end(); ;

            $.each(data.Cities.List, function() {
                citySelect.append('<option value="' + this.UrlPart + '">' + this.City + '</option>');
            });

            if (load) {
                citySelect.find('option[value="san-diego"]').attr('selected', true);
            }

            if (citySelect.val() != '') {
                GetAreas(state, citySelect.val());
            }
        }
    });
}

function GetAreas(state, city) {

    var url = "http://timenavigator.redbullna.com/location/" + state + "/" + city;

    $.ajax({
        type: "GET",
        url: url,
        dataType: "jsonp",
        jsonp: "onSuccess",
        success: function(data) {

            var areaSelect = $('.Areas').find('option').remove().end();

            areaSelect.append('<option value="">Choose Neighborhood</option>');

            $.each(data.Areas.List, function() {
                areaSelect.append('<option value="' + this.UrlPart + '">' + this.Area + '</option>');
            });

            if (load) {
                areaSelect.find('option[value="downtown"]').attr('selected', true);
            }

            if (areaSelect.val() != '') {
                GetVenues(state, city, areaSelect.val());
            }
            else {

                var c = { Name: $('.Cities option[value=' + city + ']').text(), UrlPart: city };

                BuildBreadCrumb(c, null, null);
                $('.Filter').show();
                GetVenuesByAreas(state, city, null);
                $('.Venues').find('option').remove().end().append('<option value="">Choose Venue</option>');
            }
        }
    });
}

function GetVenues(state, city, area) {

    if ($('.Areas').val() != '') {

        var url = "http://timenavigator.redbullna.com/location/" + state + "/" + city + "/" + area;

        $.ajax({
            type: "GET",
            url: url,
            dataType: "jsonp",
            jsonp: "onSuccess",
            success: function(data) {

                var venueSelect = $('.Venues').find('option').remove().end();

                venueSelect.append('<option value="">Choose Venue</option>');

                $.each(data.Venues.List, function() {
                    venueSelect.append('<option value="' + this.UrlPart + '">' + this.Name + '</option>');
                });

                if ($('.Areas').val() != '' && venueSelect.val() == '') {
                    GetVenuesByAreas(state, city, $('.Areas').val());
                }
                else {
                    GetVenuesByAreas(state, city, null);
                }

                var c = { Name: $('.Cities option[value=' + city + ']').text(), UrlPart: city };
                var a = { Name: $('.Areas option[value=' + area + ']').text(), UrlPart: area };

                BuildBreadCrumb(c, a, null);
            }
        });
    }
    else {
        Reset();
        if (area == null) {
            var c = { Name: $('.Cities option[value=' + city + ']').text(), UrlPart: city };
            BuildBreadCrumb(c, null, null);
        }
        GetVenuesByAreas(state, city, area, null);
        $('.Venues').find('option').remove().end().append('<option value="">Choose Venue</option>');
    }

    $('.Filter').show();
}

function BuildBreadCrumb(city, area, venue) {

    $('.BreadCrumb .Path').empty();

    if (city != null) {

        var c = city.UrlPart;

        var anchor = $('<a href="#">' + city.Name + '</a>').filter('a').click(function() {
            $('.Areas').val('');
            GetAreas(state, c, null);
            return false;
        });

        $('.BreadCrumb .Path').append(' > ').append(anchor);

        if (area != null) {

            var a = area.UrlPart;

            anchor = $('<a href="#">' + area.Name + '</a>').filter('a').click(function() {
                $('.Venues').val('');
                GetVenues(state, c, a);
                return false;
            });

            $('.BreadCrumb .Path').append(' > ').append(anchor);

            if (venue != null) {

                var v = venue.UrlPart;

                anchor = $('<a href="#">' + venue.Name + '</a>').filter('a').click(function() {
                    Reset();
                    GetVenue(state, c, a, v);
                    return false;
                });

                $('.BreadCrumb .Path').append(' > ').append(anchor);
            }
        }
    }
}

function GetVenuesByAreas(state, city, area) {
    var url = "http://timenavigator.redbullna.com/VenuesByAreas/" + state;

    if (city != null) {
        url = url + "/" + city;
    }

    if (area != null) {
        url = url + "/" + area;
    }

    if (city != null && area == null) {
        url = url + "/" + 5;
    }
    else {
        url = url + "/" + 100;
    }

    $.ajax({
        type: "GET",
        url: url,
        dataType: "jsonp",
        jsonp: "onSuccess",
        success: function(data) {

            $('.Listing').empty();

            var areaHtml = null;

            // Iterate Areas
            $.each(data, function() {

                var c = { Name: this.City.City, UrlPart: this.City.UrlPart };
                var a = { Name: this.Area.Area, UrlPart: this.Area.UrlPart };

                if (this.VenueCount > 0) {
                    areaHtml = $('.AreaListing:hidden').clone(true);

                    areaHtml.find('.AreaName').html(a.Name).end().show();

                    if (this.VenueCount > 5 && area == null) {
                        areaHtml.find('.MoreAreas').html('More ' + a.UrlPart + ' venues...').show().click(function() {
                            Reset();
                            BuildBreadCrumb(c, a, null);
                            GetVenues(state, c.UrlPart, a.UrlPart);
                            return false;
                        }).end();
                    }
                    else {
                        areaHtml.find('.MoreAreas').remove();
                    }

                    var venue = null;

                    // Iterate Venues
                    $.each(this.Venues, function() {

                        var v = this;
                        var a = this.Area;
                        var c = this.City;

                        venue = $('.VenueListing:hidden').clone(true);

                        var venueUrlPart = this.UrlPart;
                        venue
                                                   
                                                    .find('.VenueTitle').html(v.Name).click(function() {
                                                        Reset();
                                                        GetVenue(state, c.UrlPart, a.UrlPart, v.UrlPart);
                                                        return false;
                                                    }).end()
                                                    .find('.ReadMore').click(function() {
                                                        Reset();
                                                        GetVenue(state, c.UrlPart, a.UrlPart, v.UrlPart);
                                                        return false;
                                                    }).end();
						    
		    	if(this.DefaultImage)
			{
 				venue.find('.VenueLeft img').attr('src', this.DefaultImage.Path).end();
		    	}
			else
			{
				venue.find('.VenueLeft img').remove();
			}
			
			
                        PopulateAddress(this, venue);

                        if (this.Description1.length > 0) {
                            venue.find('.VenueRight .Content').html(this.Description1).end();
                        }
                        else {
                            venue.find('.VenueRight .Content').remove();
                        }

                        venue.show()
                                                    .appendTo(areaHtml.find('.VenueList'));

                    });

                    areaHtml.appendTo('.Listing');

                    if (!load) {
                        document.getElementById('VenuePosition').scrollIntoView(true);
                    }

                    load = false;
                }
            });

        }
    });
}

function PopulateAddress(venue, html) {

    if (venue.Address.Street.length > 0) {
        html.find('.Address .Street').html(venue.Address.Street).end();
    }
    else {
        html.find('.Address .Street').remove();
    }

    if (venue.GoogleMapUrl.length > 0) {
        html.find('.Address a').attr('href', venue.GoogleMapUrl).end();
    }

    if (venue.Address.StreetCont.length > 0) {
        html.find('.Address .StreetCont').html(venue.Address.StreetCont).end();
    }
    else {
        html.find('.Address .StreetCont').remove();
    }

    if (venue.Address.City.length > 0) {
        html.find('.Address .AddressMore .City').html(venue.Address.City).end();
    }
    else {
        html.find('.Address .AddressMore .City').remove();
    }

    if (venue.Address.State.length > 0) {
        html.find('.Address .AddressMore .State').html(', ' + venue.Address.State).end();
    }
    else {
        html.find('.Address .AddressMore .State').remove();
    }

    if (venue.Address.ZipCode.length > 0) {
        html.find('.Address .AddressMore .PostalCode').html(' ' + venue.Address.ZipCode).end();
    }
    else {
        html.find('.Address .AddressMore .PostalCode').remove();
    }

    if (venue.PhoneNumber.length > 0) {
        html.find('.Address .Phone').html('P: ' + venue.PhoneNumber).end();
    }
    else {
        html.find('.Address .Phone').remove();
    }
}

function GetVenue(state, city, area, venue) {

    if (venue != '') {

        var url = "http://timenavigator.redbullna.com/location/" + state + "/" + city + "/" + area + "/" + venue + "/Info";

        $.ajax({
            type: "GET",
            url: url,
            dataType: "jsonp",
            jsonp: "onSuccess",
            success: function(data) {

                var venue = null;

                if (data.Venue != null) {

                    venue = $('.VenueDetails:hidden').clone(true).show();

                    venue
                                            .find('.Description').html(data.Venue.Description2).end();

			if(data.Venue.DefaultImage)
			{
				venue.find('.Photo img').attr('src', data.Venue.DefaultImage.Path.replace('_M', '_L')).end();
				
				for (var i = 0; i < data.Venue.Images.length; i++) {
                        		venue.find('.Photos').append('<img rel="' + data.Venue.Images[i].Path.replace('_M', '_L') + '" src="' + data.Venue.Images[i].ThumbnailPath + '" alt="" />').end();
                    		}
			}
			else	
			{
				venue.find('.Photo img').remove();
				venue.find('.Photos').remove();
			}

                    

                    PopulateAddress(data.Venue, venue);

                    var hours = data.Venue.Hours.split(';');

                    var l = hours.length;
                    for (var i = 0; i < l; i++) {
                        venue.find('.Hours').append('<div>' + hours[i] + '</div>').end();
                    }

                    venue.appendTo('.Listing');

                    $('.VenueDetails .Photos img').click(function() {
                        $('.Photo img').attr('src', $(this).attr('rel'));
                    });

                    var c = { Name: data.Venue.City.City, UrlPart: data.Venue.City.UrlPart };
                    var a = { Name: data.Venue.Area.Area, UrlPart: data.Venue.Area.UrlPart };
                    var v = { Name: data.Venue.Name, UrlPart: data.Venue.UrlPart };
                    BuildBreadCrumb(c, a, v);
                    document.getElementById('VenuePosition').scrollIntoView(true);
                }
                else {
                    Reset();
                }
            }
        });
    }
    else {
        GetVenues(state, city, area);
    }
}
