window.Web2IPhone = {
   init: function (){
      $('#web2iphone-submit').bind('click', function(){
         $('#web-2-iphone').submit();
      });
      $('table.submit-fields input').bind('keyup', function(){
         $('div.error').html("");
      })
   }
}
window.Results = {
   searchBarVal: '',
   
   selectedDevice :function(){
      var device = $('#ipad-tab').hasClass('tab-white') ? 'ipad' : 'iphone';
      return device;
   },
   
   indexValues : function (){
      var tokens = $('td.search-stats').html().split("&nbsp;");
      return {
         startIndex: parseInt(tokens[0]),
         endIndex: parseInt(tokens[2]),
         total: parseInt(tokens[4])
      };
   },
   
   init: function () {
      this.initCheckBoxes();
      this.initNavArrows();
      this.applyOldFilters();
      this.searchBarVal = $('#search-bar-long-field').val();
      $('#search-bar-long-field').bind("keyup", function(event){        
         if(event.keyCode == 13){
            $('#free-text-search').submit();
         }else {
            var currentSearchBarVal = $('#search-bar-long-field').val();
            if(currentSearchBarVal == '' && currentSearchBarVal != Results.searchBarVal){
               Results.showModal('wait-box', null);
               $.ajax({
                  url: "/search/results_for_filters",
                  data: {
                     'filters':$("#old-filters").val(),
                     'startIndex':0,
                     'freeTextQuery': '',
                     'device' : Results.selectedDevice()
                  },
                  success: function(data){
                     $('div.results-container').html(data);
                     stats = Results.indexValues();
                     if(stats.endIndex < stats.total){
                        App.enableArrow("right-nav-arrow");
                     }
                     if(stats.startIndex == 1){
                        App.disableArrow("left-nav-arrow");
                     }
                  },
                  complete: function(){
                     $('div.wait-box, div.mask').hide();
                     Results.searchBarVal = '';
                  }
               });
            }else{
               Results.searchBarVal = currentSearchBarVal;
            }
         }
      });
   },

   applyOldFilters: function(){
      var attributes = $('#old-filters').val().replace(/\(|\)/g, '').split('AND');
      $.each(attributes, function(index, val){
         if(val != ''){
            var attrTokens = val.split('OR');
            if(attrTokens.length > 1){
               $.each(attrTokens, function(subIndex, subVal){
                  $('#'+$.trim(subVal.split(':')[1]).replace(/\s/g, '_')).addClass('checkbox-checked');
               });
            }else{
               $('#'+$.trim(val.split(':')[1]).replace(/\s/g, '_')).addClass('checkbox-checked');
            }
         }
      });
   },

   initCheckBoxes: function (){
      $('div.checkbox').bind('click', function(){
         Results.assignCheckBoxes($(this));
      });
      $('div.attr').bind('click', function(){
         var id = $(this).attr("id");
         Results.assignCheckBoxes($('#'+id.substring(0, id.length-2)));
      });
   },

   initNavArrows: function (){
      $("div.left-nav-arrow").bind("click", function(){
         var oldFilters = $("#old-filters").val();
         var limit = $('#app-result-limit').val();
         var freeTextQuery = $('#free_text_qurey').val();
         var stats = Results.indexValues();
         if(stats.startIndex > 1){
            Results.showModal('wait-box', null);
            $.ajax({
               url: "/search/results_for_filters",
               data: {
                  'filters':oldFilters,
                  'startIndex':stats.startIndex-limit-1,
                  'freeTextQuery': freeTextQuery,
                  'device' : Results.selectedDevice()
               },
               success: function(data){
                  $('div.results-container').html(data);
                  stats = Results.indexValues();
                  if(stats.endIndex < stats.total){
                     App.enableArrow("right-nav-arrow");
                  }
                  if(stats.startIndex == 1){
                     App.disableArrow("left-nav-arrow");
                  }
               },
               complete: function(){
                  $('div.wait-box, div.mask').hide();
               }
            });
         }
      });
      
      $("div.right-nav-arrow").bind("click", function(){
         var oldFilters = $("#old-filters").val();
         var stats = Results.indexValues();
         var limit = $('#app-result-limit').val();
         var freeTextQuery = $('#free_text_qurey').val();
         if(stats.endIndex < stats.total){
            Results.showModal('wait-box', null, '');
            $.ajax({
               url: "/search/results_for_filters",
               data: {
                  'filters':oldFilters,
                  'startIndex':stats.endIndex,
                  'freeTextQuery': freeTextQuery,
                  'device' : Results.selectedDevice()
               },
               success: function(data){
                  $('div.results-container').html(data);
                  stats = Results.indexValues();
                  if(stats.startIndex > limit){
                     App.enableArrow("left-nav-arrow");
                  }
                  if(stats.endIndex == stats.total){
                     App.disableArrow("right-nav-arrow");
                  }
               },
               complete: function(){
                  $('div.wait-box, div.mask').hide();
               }
            });
         }
      });
   },

   assignCheckBoxes: function(elem){
      if(elem){
         if(elem.hasClass('checkbox-checked')){
            elem.removeClass('checkbox-checked');
         } else{
            elem.addClass('checkbox-checked');
         }
      }

      //Pricing Filter
      var priceFilters = "("+$('table#price-attrs div.checkbox-checked').map(
         function(){
            return "priceBucket:"+$(this).attr("id");
         }).get().join(" OR ")+")";

      //Catgories Filter
      var catFilters = "("+$('table#cat-attrs div.checkbox-checked').map(
         function(){
            return "primaryCategory:"+$(this).attr("id").replace(/_/, " ");
         }).get().join(" OR ")+")";

      //Parental Rating Filter
      var pFilters = "("+$('table#prating-attrs div.checkbox-checked').map(
         function(){
            return "parentalRating:"+$(this).attr("id").replace(/s_/, "s");
         }).get().join(" OR "); //ending right paren will be added down below

      //Review Rating Filter
      var rFilters = "("+$('table#review-attrs div.checkbox-checked').map(
         function(){
            return "reviewRating:"+$(this).attr("id");
         }).get().join(" OR ")+")";

      //Size Filter
      var sizeFilters = "("+$('table#size-attrs div.checkbox-checked').map(
         function(){
            return "sizeBucket:"+$(this).attr("id");
         }).get().join(" OR ")+")";


      //Get Data
      var filterQuery = "";
      if(catFilters.length > 2){
         filterQuery = catFilters;
      }
      if(priceFilters.length > 2){
         filterQuery = filterQuery.length > 0? filterQuery + " AND " +
         priceFilters : priceFilters;
      }
      if(pFilters.length > 2){
         pFilters += " OR parentalRating:0_plus)"
         filterQuery = filterQuery.length > 0? filterQuery + " AND " +
         pFilters : pFilters;
      }
      if(rFilters.length > 2){
         filterQuery = filterQuery.length > 0? filterQuery + " AND " +
         rFilters : rFilters;
      }
      if(sizeFilters.length > 2){
         filterQuery = filterQuery.length > 0? filterQuery + " AND " +
         sizeFilters : sizeFilters;
      }

      //Add old free text query if any
      var freeTextQuery = $('#free_text_qurey').val();

      Results.showModal('wait-box', null, '');
      $.ajax({
         url: "/search/results_for_filters",
         data: {
            'filters': filterQuery,
            'freeTextQuery': freeTextQuery,
            'device': Results.selectedDevice()
         },
         success: function(data){
            $('div.results-container').html(data);
         },
         complete: function(){
            $('div.wait-box, div.mask').hide();
         }
      });
   },
   
   initPopups: function (){
      $('div.mask').bind('click', function(){
         Results.closePopups();
      });
      $('img.fancy-close').bind('click', function(){
         Results.closePopups();
      });
   },

   closePopups: function(){
      $('div.wait-box').hide();
      $('div#popup-content').html(
         '<img src="/images/main/ajax-loader.gif" class="spinner"/>'
         );
      $('div.popup-container').hide();
      $('div.mask').hide();
   },

   bindSubmissions: function(){
      $('a.fancy-use-it').bind('click', function(){
         var id = $(this).attr('id').split("-")[3];
         $('#use-app-submit-'+id).submit();
      });

      $('a.app-title-link').bind('click', function(){
         var id = $(this).attr('id').split("-")[3];
         $('#use-app-submit-'+id).submit();
      });

      $('#ipad-tab a').bind('click', function(){
         if($('#ipad-tab').hasClass('tab-blue')){
            $('#ipad-tab').removeClass('tab-blue').addClass('tab-white');
            $('#iphone-tab').removeClass('tab-white').addClass('tab-blue');
            $('#search-bar-device').attr({
               value:Results.selectedDevice()
            });
            Results.assignCheckBoxes();
         }
      });

      $('#iphone-tab a').bind('click', function(){
         if($('#iphone-tab').hasClass('tab-blue')){
            $('#iphone-tab').removeClass('tab-blue').addClass('tab-white');
            $('#ipad-tab').removeClass('tab-white').addClass('tab-blue');
            $('#search-bar-device').attr({
               value:Results.selectedDevice()
            });
            Results.assignCheckBoxes();
         }
      });
   },
   
   resetStats: function(freeTextQuery, searchStats, filters){
      $('td.search-stats').html(searchStats);
      $('#old-filters').val(filters);
      var stats = Results.indexValues();
      if(stats.total == 0){
         App.disableArrow("right-nav-arrow");
         $("div.results-container").html("<div class='no-results'>Ooops! No results found for "+freeTextQuery+". Try selecting a different set of filters.</div>");
      }else{
         $('#search-bar-long-field, #free_text_qurey').val(freeTextQuery);
         if(stats.endIndex == stats.total){
            App.disableArrow("right-nav-arrow");
         }else{
            App.enableArrow("right-nav-arrow");
         }

         var limit = $('#app-result-limit').val();
         if(stats.startIndex > limit){
            App.enableArrow("left-nav-arrow");
         }else {
            App.disableArrow("left-nav-arrow");
         }
      }
   },
      
   showModal: function(name, elem, ajaxUrl) {
      var maskHeight = $(document).height();
      var maskWidth = $(window).width()-1;
      $('div.mask').css({
         'width':maskWidth,
         'height':maskHeight
      });
      $('div.mask').fadeTo(500,0.8);
      var winH = $(window).height();
      var winW = $(window).width();
      $('div.'+name).css('top',  winH/2-$('div.'+name).height()/2);
      $('div.'+name).css('left', winW/2-$('div.'+name).width()/2);
      $('div.'+name).fadeIn(500);
      if(elem != null && ajaxUrl != null){
         var id = elem.attr("id").split("-")[2];
         $.ajax({
            url:ajaxUrl,
            data:{
               'app_id': id
            },
            success: function(data){
               $('div#popup-content').html(data);
            }
         });
      }
   }
}

window.App = {
   screenImages: [],
   enableArrow: function(name){
      $('div.'+name).css("background-image",
         "url(/images/search/nav-arrows-blue.png)");
   },
   disableArrow: function(name){
      $('div.'+name).css("background-image",
         "url(/images/search/nav-arrows-gray.png)");
   },
   initReviewArrows: function (){
      $('#review-current-page').val(0);
      $('div.left-nav-pop-arrow').bind("click", function(){
         var current = parseInt($("#review-current-page").val());
         var totalPages = parseInt($("#review-pages").val());
         if(current > 0){
            $.ajax({
               url: "/search/get_next_reviews",
               data: {
                  app_id: $("#app-id").val(),
                  page:current-1
               },
               success: function(data){
                  $("div.review-container").html(data);
                  $("#review-current-page").val(current-1);
                  if(current-1 < totalPages - 1){
                     App.enableArrow("right-nav-pop-arrow")
                  }
                  if(current-1 == 0){
                     App.disableArrow("left-nav-pop-arrow");
                  }
               }
            });
         }
      });
      $('div.right-nav-pop-arrow').bind("click", function(){
         var current = parseInt($("#review-current-page").val());
         var totalPages = parseInt($("#review-pages").val());
         if(current < totalPages - 1){
            $.ajax({
               url: "/search/get_next_reviews",
               data: {
                  app_id: $("#app-id").val(),
                  page:current+1
               },
               success: function(data){
                  $("div.review-container").html(data);
                  $("#review-current-page").val(current+1);
                  if(current+1 == totalPages - 1){
                     App.disableArrow("right-nav-pop-arrow")
                  }
                  if(current+1 == 1){
                     App.enableArrow("left-nav-pop-arrow");
                  }
               }
            });
         }
      });
   },
   initScreenArrows: function () {
      $('#screen-image-count').val(0);
      $('div.left-nav-pop-arrow').bind("click", function(){
         var count = $('#screen-image-count').val();
         if(count == App.screenImages.length-2){
            App.enableArrow("right-nav-pop-arrow");
         }
         if(count > 0){
            count--;
            $('#displayed-screen').fadeOut("slow",function(){
               $('#displayed-screen').attr('src', App.screenImages[count]);
               $('#displayed-screen').fadeIn("slow");
               $('#screen-image-count').val(count);
               if(count == 0){
                  App.disableArrow("left-nav-pop-arrow");
               }
            });
         }
      });
      $('div.right-nav-pop-arrow').bind("click", function(){
         var count = $('#screen-image-count').val();
         if(count < App.screenImages.length-2){
            count++;
            if(count == 1){
               App.enableArrow("left-nav-pop-arrow");
            }
            $('#displayed-screen').fadeOut("slow",function(){
               $('#displayed-screen').attr('src', App.screenImages[count]);
               $('#displayed-screen').fadeIn("slow");
               $('#screen-image-count').val(count);
               if(count == App.screenImages.length-2){
                  App.disableArrow("right-nav-pop-arrow");
               }
            });            
         }
      });
   }
}
