/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

function contentLoadUrl(url)
{
   if(url)
   {
      if ( (url.substr(0, 8) == 'lot/list') || (url.substr(0, 12) == 'auction/list') )
         $('#content').html(pleaseWaitWhileLoading);
      $("#content").load(url.replace(/\/\:/, '/?'), {i:1}, evalLoadResult);
   }
   else
   {
      var dev = '/ia/';
      var path = location.pathname;
      var isDev = (path.indexOf(dev) != -1) ? true : false;
      if (isDev) path = path.substr(dev.length);
      if (path.length > 2)
      {
         var url = 'http://' + location.hostname;
         if (isDev) url += ':' + location.port + dev;
         else url += '/';
         url += '#' + path + location.search;
         location.href = url;
      }
      else
         $.historyLoad('auction/list/featured/');
   }   
}

function resetScroll()
{
   window.scrollTo(0, 0);
   setHeights();
   //setTimeout(setHeights, 5)
}

function setHeights() {
   outer_h = $('#outer').height();
   $('.item').height(outer_h-112);
}

function evalLoadResult(responseText, textStatus, XMLHttpRequest)
{
   switch (XMLHttpRequest.status)
   {
       case 200:
          break;
       case 401:
          location.href = "./#my/login/"
          break;
       default:
          $('#content').html('<div id="item"><h1>' + XMLHttpRequest.status + ': ' + XMLHttpRequest.statusText + '</h1> Please contact the administrator if the problem persists.');
          break;
   }
   resetScroll();
 }

function languageChangeTo()
{
   $("#language").load($(this).attr('href'), {}, function(){location.reload();});
}

function submitOnEnter(e)
{
   c = e.which ? e.which : e.keyCode;
   if(c == 13) {
      $(this).blur();
      return searchLots();
   }
}

function searchLots()
{
   filterTarget = "lot/list/";
   return submitSearchValues();
}
// retreive all finler Values and request result
function submitSearchValues()
{
   var url = filterTarget + '?';

   //query = returnAdvancedSearchValues('.keyword');
   excludes = getTextFieldValue('.excludes');
   priceFromSearch = getTextFieldValue('.search_price_range_from');
   priceToSearch = getTextFieldValue('.search_price_range_to');
   dateFromSearch = getTextFieldValue('.hidden_auction_date_from');
   dateToSearch = getTextFieldValue('.hidden_auction_date_to');
   categoryFilters = getSelectedFiltersInDiv('#categoryfilter');
   houseFilters = getSelectedFiltersInDiv('#housefilter');
   timeFilters = getSelectedFiltersInDiv('#timefilter');
   url += 'q=' + ((keywords!=undefined)? (keywords.replace(/ /g, ',')) : '');
   url += '&cf=' + ( (categoryFilters.length > 0) ? categoryFilters.join(',') : '' );
   url += '&hf=' + ( (houseFilters.length > 0) ? houseFilters.join(',') : '' );
   url += '&tf=' + ( (timeFilters.length > 0) ? timeFilters.join(',') : '' );
   url += '&ex=' + ((excludes != undefined)? (excludes.replace(/ /g, ',')) : '');
   url += '&prf=' + ((priceFromSearch!=undefined) ? priceFromSearch : '');
   url += '&prt=' + ((priceToSearch!=undefined) ? priceToSearch : '');
   url += '&daf=' + ((dateFromSearch!=undefined) ? dateFromSearch : '');
   url += '&dat=' + ((dateToSearch!=undefined) ? dateToSearch : '');
   
   $.historyLoad(url);
   return false;
}

// search Requests - Output Search Keys
function getTextFieldValue(field)
{
    return $(field).val();
}

function setKeywords(q)
{
   keywords = q.replace(/,/g, ' ');
}

function setExcludes(ex)
{
   excludes = ex.replace(/,/g, ' ');
}
function setTextFieldValue(field, val)
{
   if ((val != 'null') && (val != ''))
         $(field).val(val);
}

function getSelectedFiltersInDiv(divId)
{
   selectedFilters = new Array();
   $(divId+' a').each(
      function()
      {
         if ($(this).hasClass('list_active'))
         {
            var idAttr = $(this).attr("id");
            selectedFilters[selectedFilters.length] = parseInt(idAttr.substr(3));
         }
      }
   );
   return selectedFilters;
}
// highlights selected filters in functions bar
function setSelectedFiltersInDiv(divId, selectedFilterIds)
{
   $(divId+' a').each(
      function(i){
         var idAttr = $(this).attr("id");
         if ( selectedFilterIds.in_array( parseInt(idAttr.substr(3)) ) ){
            $(this).addClass("list_active");
         }
      }
    )
}

// highlights selected filters in functions bar
function setHitCountInDiv(divId, hitCountMap)
{
   $(divId+' a').each(
      function(i){
         var idAttr = $(this).attr("id");
         var hash = idAttr.substr(3);
         if ( findHash(hash, hitCountMap) ){
            $(this).append( ' ('+hitCountMap[hash]+')');
         }
      }
    )
}

// loads functions into left function bar
// map: mapping of functions to load: see FrameworkFuntions.java for Details
function loadFunctions(target, filter, functions, collapsed, disabled)
{
   //if ((filterTarget != target))
   {
      $("#functions").load("util/function" + (filter=="" ? "?f=" : filter+"&f=") +functions+"&c="+collapsed+"&d="+disabled, {}, initFunctions);
      lastFunctionMap = functions;
   }
   filterTarget = target;
}

function toggleGrouped(id)
{
   var myObj = $("#"+id);
   if (myObj.css('display') == 'none')
   {
      animatedcollapse.show(id);
      animatedcollapse.hide((id=='search_exp' ? 'advanced_search_exp' : 'search_exp'));
   }
   else
   {
      animatedcollapse.hide(id);
   }
}
// init animated collapse
function initAnimatedCollapse()
{
   //animatedcollapse.uninit();

   // adds all DIVs whos ID ends with '_exp' to animatedCollapse
   $("div[id$='_exp']").each(function() {
      var x="";
      $(this).hasClass("collapsed") ? x+=",hide=1" : x+="";
      animatedcollapse.addDiv($(this).attr("id"), 'speed=300,fade=1' + x);
   });
   // register function for click callback
   animatedcollapse.ontoggle=function($, divobj, state){ //fires each time a DIV is expanded/contracted
      // change arrow icon
      var myobj = $(divobj).prev("div").children("a").children("span");
      if (!$(divobj).hasClass("disabled")) {
         if(state=="none") myobj.removeClass('ui-icon-triangle-1-s').addClass('ui-icon-triangle-1-e');
         else myobj.addClass('ui-icon-triangle-1-s').removeClass('ui-icon-triangle-1-e');
      }
   }
   // init the collapsable divs
   animatedcollapse.init();
}

function initTextFields()
{
   setTextFieldValue('.keywords', keywords);
   setTextFieldValue('.excludes', excludes);

   // makes keyword fields of search/advanced search synced
   $(".synced").blur(function(e) {
        keywords = $(this).val();
         $(".synced").each(function() {
            $(this).val(keywords)
         });
   });
   $("input[class^='search_'], .excludes, .keywords").keypress(submitOnEnter);

   // prevent standard form submit
   $("form").submit(function() {
      return false;
   });

   $('.search_price_range_from').val(priceFromSearch);
   $('.search_price_range_to').val(priceToSearch);
   $('.search_price_range_from, .search_price_range_to').numeric();

   // datepicker and shadow drop
   $('.datepicker').datepicker();
   //$('.datepicker').datepicker('option', {dateFormat: 'yymmdd'});
   $('.search_auction_date_from').datepicker('option', {altField: '.hidden_auction_date_from'});
   $('.search_auction_date_from').datepicker('option', {altFormat: 'yymmdd'});
   $('.search_auction_date_to').datepicker('option', {altField: '.hidden_auction_date_to'});
   $('.search_auction_date_to').datepicker('option', {altFormat: 'yymmdd'});
   $.datepicker.setDefaults($.extend({showMonthAfterYear: false}, $.datepicker.regional[(lang == 'en' ? '' : lang)]));
   $('.datepicker').datepicker($.datepicker.regional[lang]);

   if (dateFromSearch != '')
   {
      var dateFromFormat = $('.search_auction_date_from').datepicker('option', 'dateFormat');
      var myFromDate = $.datepicker.formatDate(dateFromFormat, $.datepicker.parseDate('yymmdd', dateFromSearch));
      $('.search_auction_date_from').val(myFromDate);
   }
   if (dateToSearch != '')
   {
      var dateToFormat = $('.search_auction_date_to').datepicker('option', 'dateFormat');
      var myToDate = $.datepicker.formatDate(dateToFormat, $.datepicker.parseDate('yymmdd', dateToSearch));
      $('.search_auction_date_to').val(myToDate);
   }

   $('.hidden_auction_date_from').val(dateFromSearch);
   $('.hidden_auction_date_to').val(dateToSearch);
}

//
function initRadioLists()
{
   // bind function to toggle Filter Classes
   // fire the Selected Filter-catcher YAY!
   $('.radio_list a').click(function () {
      $('.radio_list a').removeClass('list_active');
      $(this).toggleClass("list_active");
      searchLots();
   });
}
//
function initCheckLists()
{
   // bind function to toggle Filter Classes
   // fire the Selected Filter-catcher YAY!
   $('.check_list a').click(function () {
      $(this).toggleClass("list_active");
      submitSearchValues();
   });
}

// init calendar
function initCalendar()
{
   // define hoverstate for calendar arrows
   $('a.ui-icon').hover(
      function(){$(this).addClass('ui-state-hover')},
      function(){$(this).removeClass('ui-state-hover')}
   );
   $('#dates a, .calendar_month .month_link').bind("click", contentLoadWithHistory);
}

// initialise and bind events to function boxes
function initFunctions()
{
   // animatedCollapse: folds/unfolds boxes in functions bar
   initAnimatedCollapse();
   initCheckLists();
   initRadioLists();
   initTextFields();

   $('a.form_go').bind('click', searchLots);
   setSelectedFiltersInDiv('#categoryfilter', categoryFilters);
   setSelectedFiltersInDiv('#housefilter', houseFilters);
   setSelectedFiltersInDiv('#timefilter', timeFilters);
   setHitCountInDiv('#categoryfilter', categoryHitCount);
   setHitCountInDiv('#housefilter', houseHitCount);
}

function evalJSON(data, statusText)
{
   
   var options = {
      modal: true,
      width: 500,
      title: '',
      buttons: {Ok: function() { $(this).dialog('close'); }}
   };
   var errors = '';
   var dialog_msg = '';
   var dialog_title = '';
   if (!data.success)
   {                                         // AN ERROR OCCURED
      errors += '';
      errors += setErrorLabels(data.errors);
      return;
      switch(data.action) {
         default:
            dialog_msg = '';
            dialog_title = data.message;
      }
   }
   else
   {                                         // EVERYTHING WENT FINE
      var dialog_msg = '';
      switch(data.action) {
         case 'save':
            dialog_msg = data.message;
            dialog_title = data.message;
            if (data.object != 'user') {
               $.historyLoad(data.info);
               return;
            }
            if (data.object == 'password') {
               $.historyLoad(data.info);
               return;
            }
            if (data.object == 'user') {
               setSuccessLabel(dialog_msg);
               resetScroll();
               return;
            }
            break;
         case 'delete':
            dialog_msg = data.message;
            dialog_title = data.message;
            if (data.object == 'search') 
            {
               //$('#s'+data.id).remove();
               $.historyLoad('my/search/')
               return;
            }
            break;
         case 'register':
            $.historyLoad('my/register/?action=registered');
            return;
            break;
         case 'order':
            $.historyLoad(data.info);
            return;
            break;
         default:
            return;
      }
   }
   
   // show dialog
   options.title = dialog_title;
   $('#container').append('<div id="dialog"><p>'+ dialog_msg + '\n<br />' + errors + '</p></div>');
   var d = $("#dialog");
   d.dialog(options);
   //alert(dialog_message);
}

function showMessage(hl, msg)
{
   var dialog_msg = msg;
   var title = hl;
   $('#container').append('<div id="dialog"><p>'+ dialog_msg + '</p></div>');
   var d = $("#dialog");
   d.dialog({
         modal: true,
         width: 500,
         title: title,
			buttons: {
            Ok: function() { $(this).dialog('close'); }
			}
      }
   );
}

function confirmDeleteSearch(s_id, dialog_title, dialog_msg, abort_btn)
{
   search_id = s_id;
   $('#container').append('<div id="dialog"><p>'+ dialog_msg + '</p></div>');
   var d = $("#dialog");
   var btns = {};
   btns[abort_btn] = function() { $(this).dialog('close'); };
   btns[dialog_title] = function() { $(this).dialog('close'); deleteSearch(); };
   d.dialog({
         modal: true,
         width: 500,
         title: dialog_title,
			buttons: btns
      }
   );
}

function deleteSearch()
{
   if (search_id != false)
   {
      jQuery.post( 'my/search/'+search_id, {action: 'delete'}, evalJSON, "json");
      search_id = false;
   }
}
// execute when dom has loaded
$(document).ready(function()
{
   initFunctions();
   // jQueryHistory: re-enables back/forward buttons and bookmarking in browsers
   // init history with callback-function
   $.historyInit(contentLoadUrl);

});


