// offeretti_index.js
// jscript for index page
// Created 30 Apr 2009

ITEMS_TO_VISIBLE = 10;

function isEmpty(variable) {
    return variable == null || variable == '';
}

jQuery(document).ready(function() {

    var results

    var offerMarkers = []

    $.ajax({
        type: "GET",
        url: "search/search",
        data : {},
        success: function(data){
            loadResult(data)
        }
    });

    $.ajax({
        type: "GET",
        url: "search/topCities",
        success: function(data){
            doTopCities(data)
        }
    });
		
    var myIcon = Mapifies.createIcon({
        iconImage: "http://dvp055w5yljq5.cloudfront.net/app/images/offeretti.png",
        iconShadow: "http://dvp055w5yljq5.cloudfront.net/app/images/offshadow.png",
        iconSize : new GSize(26, 30),
        shadowSize : new GSize(36, 30),
        iconAnchor : new GPoint(9, 34),
        infoWindowAnchor : new GPoint(20, 45),
        infoShadowAnchor : new GPoint(18, 25)
    });
		
		
    jQuery("#searchOffersForm").ajaxForm(loadResult)
    

    function doTopCities(data){
        var top = JSON.parse(data)
        var cities = top.facet_counts.facet_fields.city_country
        jQuery("#top_cities").empty()
        var facet = ""
        for (var x = 0; x < cities.length; x = x + 2) {
            cityname = cities[x].split(", ");
            if(cityname[2]=='US'){
                jQuery("#top_cities").append('<li><a href="" id="' + cityname[0] + ', ' + cityname[1] + '"' + '>' + cityname[0] + '(' + cities[x + 1] + ')' + '</a></li>')
            }else{
                jQuery("#top_cities").append('<li><a href="" id="' + cities[x] + '"' + '>' + cityname[0] + '(' + cities[x + 1] + ')' + '</a></li>')
            }
        }
    }

    function loadResult(data){
        results = JSON.parse(data);
    	
        jQuery('#query').attr("value", results.q);
        jQuery('#location').attr("value", results.loc);
        
        // Map Zoom 15 street level
        jQuery('#map').jmap('init', {
            'mapType': 'map',
            'mapZoom': 14,
            'mapCenter': [results.responseHeader.params.lat, results.responseHeader.params.long],
            'mapShowjMapsIcon': false,
            'debugMode': false
        }, function (map, element, options) {
            GEvent.addListener(map, 'dragend', function(){
                $.ajax({
                    type: "GET",
                    url: "search/updateCoordinates",
                    data: {
                        'lat': map.getCenter().lat(),
                        'lng': map.getCenter().lng()
                    },
                    success: function(data) {
                        map.clearOverlays();
                        updateOffersRightHandList(JSON.parse(data))
                    }
                });
            });
        });

        updateOffersRightHandList(results)

        var facet_category = results.facet.category
        if(jQuery.trim(facet_category).length==0){
            var categories = results.facet_counts.facet_fields.category
            jQuery("#facet_category").empty()
            var facet = ""
            var counterForVisible = 0;
            for (var x = 0; x < categories.length; x = x + 2) {
                jQuery("#facet_category").append('<li><a href="" id="' + categories[x] + '"'
                        + (++counterForVisible > ITEMS_TO_VISIBLE ? 'class="less"' : '') + '>' + categories[x] + '(' + categories[x + 1] + ')</a></li>')
            }

            if (counterForVisible > ITEMS_TO_VISIBLE) {
                jQuery("#facet_category a.less").hide();

                jQuery("#facet_category").append('<li><a id="more_less_categories" class="more-less" href="javascript:void(0);">More &#187;&#187;</a></li>');
                jQuery("#more_less_categories").toggle(function() {
                    $(this).html("Less &#171;&#171;");
                }, function() {
                    $(this).html("More &#187;&#187;");
                })
                jQuery("#more_less_categories").click(function() {
                    jQuery("#facet_category a.less").toggle();
                });
            }
        } else {
            facet = ""
            facet += '<li><a href="" id="">All</a></li>'
            facet += '<li>' + facet_category + '(' + results.response.numFound + ')</li>'
            jQuery('#facet_category').empty().append(facet);
        }

        var facet_business = results.facet.business
        if(jQuery.trim(facet_business).length==0){
            var businesses = results.facet_counts.facet_fields.business
            facet = ""
            var counterForVisible = 0;
            for (var x = 0; x < businesses.length; x = x + 2) {
                facet += '<li><a href="" id="' + businesses[x] + '"'
                        + (++counterForVisible > ITEMS_TO_VISIBLE ? 'class="less"' : '') + '>' + businesses[x] + '(' + businesses[x + 1] + ')</a></li>';
            }
            jQuery("#facet_business").empty().append(facet);
            if (counterForVisible > ITEMS_TO_VISIBLE) {
                jQuery("#facet_business a.less").hide();

                jQuery("#facet_business").append('<li><a id="more_less_business" class="more-less" href="javascript:void(0);">More &#187;&#187;</a></li>');
                jQuery("#more_less_business").toggle(function() {
                    $(this).html("Less &#171;&#171;");
                }, function() {
                    $(this).html("More &#187;&#187;");
                })
                jQuery("#more_less_business").click(function() {
                    jQuery("#facet_business a.less").toggle();
                });
            }
        }else{
            facet = ""
            facet += '<li><a href="" id="">All</a></li>'
            facet += '<li>' + facet_business + '(' + results.response.numFound + ')</li>'
            jQuery('#facet_business').empty().append(facet);
        }
		
        var facet_day = results.facet.day
        if(jQuery.trim(facet_day).length==0){
            var days = results.facet_counts.facet_fields.days
            facet = ""
            facet += "<li><a href='' id='Monday'></a></li>"
            facet += "<li><a href='' id='Tuesday'></a></li>";
            facet += "<li><a href='' id='Wednesday'></a></li>";
            facet += "<li><a href='' id='Thursday'></a></li>";
            facet += "<li><a href='' id='Friday'></a></li>";
            facet += "<li><a href='' id='Saturday'></a></li>";
            facet += "<li><a href='' id='Sunday'></a></li>";
            jQuery('#facet_days').empty().append(facet);
            for (var x = 0; x < days.length; x = x + 2) {
                var day_id = "#" + days[x]
                jQuery(day_id).html(days[x] + '(' + days[x + 1] + ')')
            }
        }else{
            facet = ""
            facet += "<li><a href='' id=\'\'>All</a></li>"
            facet += "<li>" + facet_day + "(" + results.response.numFound + ")" + "</li>"
            jQuery('#facet_days').empty().append(facet);
			
        }
        
        var facet_valid = results.facet.valid
        if(jQuery.trim(facet_valid).length==0){
            var valid = results.valid
            facet = ""
            jQuery("#facet_valid").empty()
            for (var x = 0; x < valid.length; x = x + 2) {
                facet += '<li><a href="" id="'+  valid[x] + '">' + valid[x] + '(' + valid[x + 1] + ')</a></li>';
            }
            jQuery("#facet_valid").append(facet);
        }else{
            facet = ""
            facet += "<li><a href='' id=\'\'>All</a></li>"
            facet += "<li>" + facet_valid + "(" + results.response.numFound + ")" + "</li>"
            jQuery('#facet_valid').empty().append(facet);
        }
    }

    function updateOffersRightHandList(results) {
        var resultCount = results.response.numFound
        if (resultCount > 1) {
            jQuery("#offerCount b").empty().append(resultCount).append(" offers available");
        }
        if (resultCount == 1) {
            jQuery("#offerCount b").empty().append(resultCount).append(" offer available");
        }
        if (resultCount == 0) {
            jQuery("#offerCount b").empty().append("No offers available");
        }


        jQuery("#offerdiv").empty()
        offerMarkers = []

        var html = "<ul>"
        jQuery("#offerdiv").append(html);
        for(x in results.response.docs){

            var offer = results.response.docs[x]
            var distance = parseFloat(offer.geo_distance)

            html += '<li id="' + x + '">'
            html += '<b>' + distance.toFixed(2) + ' mi.</b>'
            html += '<a href="' + 'offer/' + offer.id + '">' + offer.business + '<br/>'
            html += offer.title + '</a><br />'
            html += '</li>'

            jQuery('#map').jmap('AddMarker', {
                'pointLatLng': [offer.lat, offer.lng],
                'pointHTML': createOfferDetail(offer),
                'pointIcon': myIcon,
                'pointOpenHTMLEvent': 'click',
                'centerMap': true
            }, function(marker){
                offerMarkers[x] = marker
            });
        }

        var start = results.response.start
        var matches = results.response.numFound
        var prev = start - 10
        var next = start + 10

        if(matches>0){
            html += "</ul>"
            html += '<div id="results_start" class="continue-tags">'
            html += '<p class="fl">'

            if(start>'0' &&  start<=matches){
                html += '<a href="" id="' + prev + '">Prev</a>'
            }

            if(start>='0' &&  start<(matches-10)){
                html += '<a href="" id="' + next + '">Next</a>'
            }

            html += '</p>'

            var page = (start/10) + 1
            html +=  '<p><span class="fr tags">Page ' + page + '</span></p>'
            html +=  '</div>'
            jQuery("#offerdiv").append(html);
        }
    }

    function createOfferDetail(offer) {
        var detail = '<div class="info">'
        detail += '<a href="' + 'offer/' + offer.id + '">' + offer.title + "</a>"
        detail += '<p>' + offer.desc + '</p>'

        startDate = offer.startdate
        sd = startDate.split("T")
        sdDate = sd[0].split("-")
        var sDate = new Date()
        sDate.setYear(sdDate[0])
        sDate.setMonth(sdDate[1]-1)
        sDate.setDate(sdDate[2])
        startDate = sDate.toLocaleDateString()

        endDate = offer.enddate
        ed = endDate.split("T")
        edDate = ed[0].split("-")
        var eDate = new Date()
        eDate.setYear(edDate[0])
        eDate.setMonth(edDate[1]-1)
        eDate.setDate(edDate[2])
        endDate = eDate.toLocaleDateString()

        days = offer.days.join(", ")
        days = days.replace(/day/g, "")
        days = days.replace(/nes/g, "")
        days = days.replace(/ur$/g, "")

        starttime = $.strPad(offer.starttime,4)
        hours = parseInt(starttime.substring(0,2), 10)
        if(isNaN(hours)) hours = 0
        min = parseInt(starttime.substring(2), 10)
        if(isNaN(min)) min = 0
        sDate.setHours(hours , min)

        endtime = $.strPad(offer.endtime,4)
        hours = parseInt(endtime.substring(0,2), 10)
        if(isNaN(hours)) hours = 0
        min = parseInt(endtime.substring(2), 10)
        if(isNaN(min)) min = 0
        eDate.setHours(hours , min)

        detail += '<p>' + 'Between '+  sDate.format("h:MM TT") +  ' and  '+  eDate.format("h:MM TT")  + '<br/>'
        detail +=  days + '<br/>'
        detail +=  'Valid until ' +  endDate + '</p>'

        detail += '<h1>' + offer.business + "</h1>"
        detail += '<p>' + offer.street + '</p>'
        detail += '</div>'
        return detail
    }

    // add expand-collapse functionality to titles for boxes with items (category, valid etc)
    $(".collapsable h3").toggle(function() {
        $(this).addClass("active");
    }, function () {
        $(this).removeClass("active");
    });

    $(".collapsable h3").click(function(){
        $(this).next().toggle();
    });

    jQuery('#facet_days a').live("click", function(event){
        jQuery.get('search/search',{
            'days': $(this).attr('id')
            }, loadResult)
        return false;
    });

    jQuery('#facet_business a').live("click", function(event){
        jQuery.get('search/search',{
            'business': $(this).attr('id')
            }, loadResult)
        return false;
    });
    
    jQuery('#facet_valid a').live("click", function(event){
        jQuery.get('search/search',{
            'valid': $(this).attr('id')
            }, loadResult)
        return false;
    });

    jQuery('#facet_category a').live("click", function(event){
        jQuery.get('search/search',{
            'category': $(this).attr('id')
            }, loadResult)
        return false;
    });

    jQuery('#results_start a').live("click", function(event){
        jQuery.get('search/search',{
            'start': $(this).attr('id')
            }, loadResult)
        return false;
    });

    jQuery('#top_cities a').live("click", function(event){
        jQuery.get('search/search',{
            'location': $(this).attr('id'),
            'query':'All'
        }, loadResult)
        return false;
    });

    jQuery('#offerdiv ul li').live("mouseover",  function (event) {
        var x = $(this).attr('id')
        var offer = results.response.docs[x]
        var pos = offer.id.indexOf('-')
        if(pos>0){
            offerid_no = offer.id.split("-")
            var staturl = 'http://admin.offeretti.com/analytics/displayed?' + 'offerId=' + offerid_no[0]
            jQuery.getJSON(staturl+"&callback=?", function() {
            });
        };
    });

    jQuery('#offerdiv ul li').live("mouseover",  function (event) {  
        $(this).css("border", "1px solid orange");
        var offerId = $(this).attr('id');

        GEvent.trigger(offerMarkers[offerId], 'click');
    });

    jQuery('#offerdiv ul li').live("mouseout",  function (event) {  
        $(this).css("border-bottom", "1px solid #f1f1ed");
        $(this).css("border-top", "1px solid #ffffff");
        $(this).css("border-left", "1px solid #ffffff");
        $(this).css("border-right", "1px solid #ffffff");
    });

    jQuery('#login').click(function(){
        FB.Connect.get_status().waitUntilReady( function( status ) {
            //alert(status)
            switch ( status ) {
                case FB.ConnectState.connected:
                    //alert("connected");
                    user_logout();
                    break;
                case FB.ConnectState.appNotAuthorized:
                    //alert("app not authorized");
                    break;
                case FB.ConnectState.userNotLoggedIn:
                    //alert("not logged in");
                    user_login();
                    break;
            }
        } )
    });
    
    $.strPad = function(i,l,s) {
        var o = i.toString();
        if (!s) {
            s = '0';
        }
        while (o.length < l) {
            o = s + o;
        }
        return o;
    };
});

function user_login(){
    jQuery('#login').html('<fb:login-button size="medium" background="white" length="long" autologoutlink="true"></fb:login-button><fb:profile-pic size="thumb" uid="loggedinuser" facebook-logo="true"></fb:profile-pic>')
    FB.XFBML.Host.parseDomTree();
}
function user_logout(){
    jQuery('#login').html('<fb:login-button size="medium" background="white" length="long" autologoutlink="true"></fb:login-button>')
    FB.XFBML.Host.parseDomTree();
}

function arrayContains(array, obj) {
  var i = array.length;
  while (i--) {
    if (array[i] === obj) {
      return true;
    }
  }
  return false;
}