
/*
 jQuery Script to support dynamic search forms

*/



$(document).ready(function(){

    $("#search-form").css("display","none");

// Helper functions

    function parseJson(data) {
      if ((data.substring(0, 1) != '{') && (data.substring(0, 1) != '[')) {
        return { status: 0, data: data.length ? data : Drupal.t('Unspecified error') };
      }
      return eval('(' + data + ');');
    };

    function getSearchCategoryType(){
        return  $("#search-form [name=search-type]").val();
    }
    
    // Reset form elements
    function resetElements(){
            $("#bedsnbaths").css("display","none");
            $("#leasebuy").css("display","none");
            $("#prices").css("display","none");
            $("#landarea").css("display","none");
            $("#landarea-type").css("display","none");
            $("#landareaM2").css("display","none");
            $("#landareaHA").css("display","none");
            $("#land-area-type-m2").attr("checked","false");
            $("#land-area-type-ha").attr("checked","false");
    }
    
    // Respond to map clicks. This is uneccessary really as we are only
    // searching on region. However, we can add additional context if required
    // i.e. Category Type

    function doMapSubmit(region){
        window.location.href=$("#search-form").attr("action") + "?searchreg="+region;
    }
    
    
    // doSubmit()
    // This is the main submit function
    // It populates an empty search form with name/value pairs based on the form's context

    function doSubmit(){

        var cattype =  getSearchCategoryType();

        // If not sub category is defined, then assume all values within sub category

        $("#search-form-temp input").remove("*");
        $("#search-form-temp").append("<input id=input1 name=search[cat]>");
        $("#search-form-temp").append("<input id=input2 name=search[cattype]>");

        $("#input2").val( cattype);
     
        if ($("#category-types").val())
            $("#input1").val($("#category-types").selectedValues()[0]);
        else
            $("#input1").val($("#search-category").val());

        // If no suburb is defined, then assume all suburbs within a region
                        
       var suburb =  $("#search-form [id=suburb-search]").selectedValues()[0];
       var region =  $("#search-form [id=region-search]").selectedValues()[0];
        
       if (region){
            $("#search-form-temp").append("<input id=input3 name=search[location]>");
            $("#search-form-temp").append("<input id=input4 name=search[region]>");
            $("#input4").val(region);
             if (suburb)
                 $("#input3").val(suburb);
                else
                 $("#input3").val(region);
         }
            
            
         // update price information
         
        var pricefrom = $("#pricefrom").selectedValues()[0]; 
        var priceto   = $("#priceto").selectedValues()[0];
        
        if ($("#prices").css("display") != "none"){
            if (pricefrom)
                $("#search-form-temp").append("<input  name=search[pricefrom] value=" + pricefrom +" >");
    
            if (priceto)
                $("#search-form-temp").append("<input  name=search[priceto] value=" + priceto +" >");
        }

    // Handle search region

        if ($("#landarea").css("display") != "none"){
          var landto; var landfrom; var landareatype;
          
            if ((cattype == 'Lifestyle' && $("#land-area-type-ha").attr("checked")) || cattype == 'Rural'){
                landto = $("#landtoHA").selectedValues()[0];
                landfrom = $("#landfromHA").selectedValues()[0];
                landareatype='HA';
             } else {
                landto = $("#landtoM2").selectedValues()[0];
                landfrom = $("#landfromM2").selectedValues()[0];
                landareatype='M2';
            }
            
            if (landfrom || landto){
                if (landfrom)
                    $("#search-form-temp").append("<input  name=search[landfrom] value=" + landfrom +" >");

                if (landto)
                    $("#search-form-temp").append("<input  name=search[landto] value=" + landto + " >");
    
                $("#search-form-temp").append("<input  name=search[landareatype] value=" + landareatype + ">");
            }
        }

        // Adds beds and baths
        
        if ($("#bedsnbaths").css("display") != 'none'){

        // Add beds
            $("#search-form [class=beds]").each(function(){
                if ($(this).attr('checked'))
                    $("#search-form-temp").append("<input  name=search[bedrooms] value=" + $(this).val() + ">");
            });
            
    
        // Add baths
    
            $("#search-form [class=baths]").each(function(){
                if ($(this).attr('checked'))
                    $("#search-form-temp").append("<input  name=search[bathrooms] value=" + $(this).val() + ">");
            });
        }

        // Serialise form and post via AJAX.
        // On reply, change the location so users can browse the results
        $.post($("#search-form-temp").attr("action"), $("#search-form-temp").serialize(),
                    function(data){
               window.location.href = "index.php?nextpage=0";
           });
    }       



/*
   jQuery Handlers

*/


// Update Area(Suburbs) list based on region

    function updateAreas(region,location){
                
            $("#suburb-search").css("display","none");
            $("#suburb-search").removeOption(/./, false);
            
            if (!region)
                return;
        
              $.get('crtre_json.php?request=region&region=' + region, null, function(data){
              $("#region-search").val(region);
              var suburbs = parseJson(data);
                 for (var suburb in suburbs)
                        $("#suburb-search").addOption(suburb,suburbs[suburb]);
                      
                    if (location !=null)
                        $("#suburb-search").val(location);
                    else     
                        $("#suburb-search").attr("selectedIndex",0);  
                    $("#suburb-search").css("display","block");
                    $("#suburb-search").focus();
                  });
    }
    
    // Update property category select list based category type
    function updateCategories(cattype,cat){
        
               $("#category-types").css("display","none");
               $("#category-types").removeOption(/./, false);
               $("#search-category").val("");
                if (!cattype){
                    resetElements();
                    return;
                }
                
              $.get('crtre_json.php?request=category&cattype=' + cattype, null, function(data){
              $("#search-form [name=search-type]").val(cattype);
              var categories = parseJson(data);
                var values= "";
                 for (var category in categories){
                        $("#category-types").addOption(category,categories[category]);
                        values +=  category + ",";
                    }
                $("#search-category").val(values);
                if (cat != null)
                     $("#category-types").val(cat);
                 else  { 
                    $("#category-types").attr("selectedIndex",0);
                 }
                $("#category-types").css("display","block");
                $("#category-types").focus();
                });
              
             resetElements();   
             switch(cattype){
                case 'Residential':
                    $("#bedsnbaths").css("display","block");
                    $("#prices").css("display","block");
                    $("#landarea").css("display","block");
                    $("#land-area-type-m2").attr("checked","true");
                    $("#land-area-type-m2").css("display","block");
                    $("#landareaM2").css("display","block");
                    break;
                case 'Lifestyle':
                    $("#bedsnbaths").css("display","block");
                    $("#prices").css("display","block");
                    $("#landarea").css("display","block");
                    $("#landarea-type").css("display","inline");
                    $("#land-area-type-m2").attr("checked","true");
                    $("#landareaM2").css("display","block");
                    $("#prices").css("display","block");
                    break;
                case 'Commercial':
                    $("#prices").css("display","block");
                    $("#landarea").css("display","block");
                    $("#land-area-type-m2").attr("checked","true");
                    $("#land-area-type-m2").css("display","block");
                    $("#landareaM2").css("display","block");
                    //$("#leasebuy").css("display","block");
                    break;
                case 'Rural':
                    $("#prices").css("display","block");
    
                    $("#landarea").css("display","block");
                    $("#land-area-type-ha").attr("checked","true");
                    $("#land-area-type-m2").css("display","block");
                    
                    $("#landareaHA").css("display","block");
                    //$("#leasebuy").css("display","block");
                    break;
                default:
                    break;
            }
    }

    // Update prices
    
    function updatePrices(pricefrom,priceto){
        
        if (pricefrom || priceto){
            if (pricefrom)
                $("#pricefrom").val(pricefrom);
            if (priceto)
                $("#priceto").val(priceto);
            $("#prices").css("display","block");
        }
    }

    // Update Land area

  function updateLand(landfrom,landto,landareatype){
   
    var cattype = getSearchCategoryType();
    switch(landareatype){
        case 'M2':
                $("#landareaM2").css("display","block");
                $("#landareaHA").css("display","none");
                $("#land-area-type-m2").attr("checked",true); 
                if (landfrom)
                    $("#landfromM2").val(landfrom);
                if (landto)
                    $("#landtoM2").val(landto);
                break;
        case 'HA':
                $("#landareaM2").css("display","none");
                $("#landareaHA").css("display","block");
                $("#land-area-type-ha").attr("checked",true); 
                if (landfrom)
                    $("#landfromHA").val(landfrom);
                if (landto)
                    $("#landtoHA").val(landto);
               break;
        }
    
        $("#landarea").css("display","block");
        if (cattype == 'Lifestyle'){
           $("#landareatype").css("display","block");
        }
     
    }

    // Update beds n baths
    function updateBeds(n){
        if (!n)
            return;
        var beds = "beds" + n;
        $("#search-form [name=" + beds + "]").attr("checked",true);
    }

    function updateBaths(n){
        if (!n)
            return;
        var baths = "baths" + n;
        $("#search-form [name=" + baths +"]").attr("checked",true);
    }


    /*
     Event Triggers
     
    */

    //     Update search[cat] based on change in secondary category type

    $("#category-types").bind("change",function(){
        if (!$(this).selectedValues()[0])
            return;
        $("#search-category").val($(this).selectedValues()[0]);
    })

    // 
    $("#region-search").bind("change",function(e){
        //if (!$(this).selectedValues()[0])
          //  return;
            var region = $(this).selectedValues()[0];
            updateAreas(region,null);
            }
        );

    // These are clickable regions

    $("#quick-browse-show,#quick-browse-hide,#featured-listings,#go").bind("mouseover",function(e){
       $(this).css("cursor","pointer");
    });
        
      // Show the map
    $("#quick-browse-show").click(function(e){
       $("#quick-browse").css("height","0px");

       $("#quick-browse").animate({
            height: "200px"
            }, 1400);
    
        $("#quick-browse-hide").css("display","block");
        $("#quick-browse-show").css("display","none");
    });

    $("#quick-browse-hide").click(function(e){
       $("#quick-browse").animate({
            height: "0px"
            }, 1400);

        $("#quick-browse-hide").css("display","none");
        $("#quick-browse-show").css("display","block");
    });

    $("#mapSI area").each(function(index){
               $(this).bind("click",function(e){
                doMapSubmit($(this).attr('region'));
         });
     });


    /*
     
     Update form context based on form changes
     
    */
    
    
    $("#search-form [name=search-type]").bind("change",function(){
        updateCategories($(this).val(),null);
     });
    
    $("#search-form [class=beds]").bind("change",function(){
         var checked = $(this).val();
       
       $("#search-form [class=beds]").each(function(){
        if (checked != $(this).val())
            $(this).attr("checked",false);
       });
    });
    
    $("#search-form [class=baths]").bind("change",function(){
         var checked = $(this).val();
       
       $("#search-form [class=baths]").each(function(){
        if (checked != $(this).val())
            $(this).attr("checked",false);
       });
    });


    $("#search-form [name=landareatype]").bind("change",function(){
        updateLand(null,null,$(this).val());
    });

    /*
     The main go functions - create and submit temporary form   
    */

    $("#go").click(function(){doSubmit()});
 
    // Update from session variable
    
       // Get Session information
    $.get('crtre_json.php?request=session&key=search', null, function(data){
        var jsondata = parseJson(data);
        var  search = jsondata['search'];
 
            // Update Search categories
            
            if (search['cat'] && search['cat'].split(",").length ==1) // Select Category Sub Type
                updateCategories(search['cattype'],search['cat']);
            else    
                updateCategories(search['cattype'],null);

            // Update regions
            if (search['location'] != search['region']){ // Select Suburb
                updateAreas(search['region'],search['location']);
            }
            else {
                if (search['region'])
                    updateAreas(search['region']);
            }

            // Update prices
                updatePrices(search['pricefrom'],search['priceto']);

            // Update land
            if (search['landareatype'])
                updateLand(search['landfrom'],search['landto'],search['landareatype']);

            updateBeds(search['bedrooms']);
            updateBaths(search['bathrooms']);

        });

    $("#quick-search-field").focus();
    $("#search-form").css("display","block");

// Agent Search

    $("#agent-search").change(function(){
        var agent;
        agent = $(this).selectedValues()[0];
        if (!agent)
            return;
        var url = $("#agent-form").attr("action") + "?agent=" + agent;
        window.location.href = url;
    });

    $("#featured-listings").click(function(){
            window.location.href=$(this).attr("href");
    });
});


