﻿function AdvancedSearch()
{
    this.ControlArray = [];
    this.AdvancedSearchType = null;  //Features or Neighborhoods
}



AdvancedSearch.prototype.CollectAllValues = function() {
    this.UpdateAllValues();
    this.DisplayLeftSideLinks();
}

AdvancedSearch.prototype.UpdateAllValues = function()
{ 
    // TODO: Check each existing value, and only if there is a change call the following line
    _search.SavedSearchCriteriaChanged = true;

    this.ControlArray = [];
    if(!IsNullOrEmpty(_search.ListingTypeId)) { 
        var div=$("advSearch_"+_search.ListingTypeId); //get the parent div
        if(div==null){return;}
        var controls = div.getElementsByTagName("input"); 
        for (var i = 0; i < controls.length; i++) { 
           if(controls[i].getAttribute("colType")=="Checkbox") {
                this.GetCheckbox(controls[i]);
            }
            if(controls[i].getAttribute("colType")=="Boolean") {
                this.GetBoolean(controls[i]);
            }
            if(controls[i].getAttribute("colType")=="NumericRange") {
                this.GetNumericRange(controls[i]);
            }
        }
        //get select boxes
        
        //Get selected neighborhood type
        var selectboxes = div.getElementsByTagName("select");
        var selectedValues = "";
        for (var i = 0; i < selectboxes.length; i++) { 
            if(selectboxes[i].id.indexOf('selNeighborhoodTypes') != -1) {
                if(!(IsNullOrEmpty(selectboxes[i].value))){
                    var selectedItem = selectboxes[i].options[selectboxes[i].selectedIndex].text;       
                    
                    var type = selectboxes[i].id.substring(selectboxes[i].id.indexOf("_")+1,selectboxes[i].id.length);
                    var obj = $('selSelectedNeighborhoodValues_'+type);
                    var len = obj.options.length;
                    if(len>0) {
                        this.ControlArray.push("<a style=\"text-decoration:none;color:#000000;\" href=\"javascript:_advancedSearch.RemoveNeighborhoods('"+type+"');\"><img src=\"../App_Themes/Default/Images/Map/icon_tiny_x.png\" border=\"0\">&nbsp;&nbsp;"+selectedItem+"("+len+")</a><br>");
                    }
                    
                }
            }
        }        
    }
}
AdvancedSearch.prototype.RemoveNeighborhoods = function(type) {
var div=$("advSearch_"+_search.ListingTypeId); //get the parent div
    var selectboxes = div.getElementsByTagName("select");
    for (var i = 0; i < selectboxes.length; i++) { 
        if(selectboxes[i].id.indexOf('selAvailableNeighborhoodValues_') != -1) {
           selectboxes[i].options.length = 0;
        }
        if(selectboxes[i].id.indexOf('selSelectedNeighborhoodValues_') != -1) {
           selectboxes[i].options.length = 0;
        }
        if(selectboxes[i].id.indexOf('selNeighborhoodTypes') != -1) {
            selectboxes[i].selectedIndex=0;
        }
    }
    var divs = div.getElementsByTagName("div");
    for (var i = 0; i < divs.length; i++) {
        if(divs[i].id.indexOf('divNeighborhoodListPaging') != -1) {
            divs[i].innerHTML='';
        }
    }
    this.CollectAllValues();
    GetListings();
}
AdvancedSearch.prototype.GetCheckbox = function(obj) {
if(obj.checked) {
        this.ControlArray.push("<a style=\"text-decoration:none;color:#000000;\" href=\"javascript:_advancedSearch.RemoveCheckbox('"+obj.id+"');\"><img src=\"../App_Themes/Default/Images/Map/icon_tiny_x.png\" border=\"0\">&nbsp;&nbsp;"+obj.getAttribute("itemName")+"</a><br>");
    }
}
AdvancedSearch.prototype.RemoveCheckbox = function(objId) {
var div=$("advSearch_"+_search.ListingTypeId); //get the parent div
    var controls = div.getElementsByTagName("input"); 
    for (var i = 0; i < controls.length; i++) { 
        if(controls[i].getAttribute("colType")=="Checkbox" && controls[i].id==objId) {
            controls[i].checked=false;
        }
    }
    this.CollectAllValues();
    GetListings();
}
AdvancedSearch.prototype.GetBoolean = function(obj) {
if(obj.checked) {
        this.ControlArray.push("<a style=\"text-decoration:none;color:#000000;\" href=\"javascript:_advancedSearch.RemoveBoolean('"+obj.id+"');\"><img src=\"../App_Themes/Default/Images/Map/icon_tiny_x.png\" border=\"0\">&nbsp;&nbsp;"+obj.getAttribute("itemName")+": "+obj.value+"</a><br>");
    }
}
AdvancedSearch.prototype.RemoveBoolean = function(objId) {
var div=$("advSearch_"+_search.ListingTypeId); //get the parent div
    var controls = div.getElementsByTagName("input"); 
    for (var i = 0; i < controls.length; i++) { 
        if(controls[i].getAttribute("colType")=="Boolean" && controls[i].id==objId) {
            controls[i].checked=false;
        }
    }
    this.CollectAllValues();
    GetListings();
}
AdvancedSearch.prototype.GetNumericRange = function(obj) {
var id= obj.id.substring(obj.id.lastIndexOf("_")+1);
        if((obj.id.indexOf("textbox_min_")!=-1)&&(!IsNullOrEmpty($("textbox_min_"+id).value))) {
            this.ControlArray.push("<a style=\"text-decoration:none;color:#000000;\" href=\"javascript:_advancedSearch.RemoveNumericRange('"+obj.id+"');\"><img src=\"../App_Themes/Default/Images/Map/icon_tiny_x.png\" border=\"0\">&nbsp;&nbsp;Min "+obj.getAttribute("itemName")+": "+$(obj.id).value+"</a><br>");
        }
        if((obj.id.indexOf("textbox_max_")!=-1)&&(!IsNullOrEmpty($("textbox_max_"+id).value))) {
            this.ControlArray.push("<a style=\"text-decoration:none;color:#000000;\" href=\"javascript:_advancedSearch.RemoveNumericRange('"+obj.id+"');\"><img src=\"../App_Themes/Default/Images/Map/icon_tiny_x.png\" border=\"0\">&nbsp;&nbsp;Max "+obj.getAttribute("itemName")+": "+$(obj.id).value+"</a><br>");
        }
}
AdvancedSearch.prototype.RemoveNumericRange = function(objId) {
var div=$("advSearch_"+_search.ListingTypeId); //get the parent div
    var controls = div.getElementsByTagName("input"); 
    for (var i = 0; i < controls.length; i++) { 
        if(controls[i].getAttribute("colType")=="NumericRange" && controls[i].id==objId) {
            controls[i].value="";
        }
    }
    this.CollectAllValues();
    GetListings();
}
AdvancedSearch.prototype.DisplayLeftSideLinksAndChangeSavedSearchCriteria = function() {
    _search.SavedSearchCriteriaChanged = true;
    this.DisplayLeftSideLinks();
    this.Criteria = "Basic";
}
AdvancedSearch.prototype.DisplayLeftSideLinks = function() {
    _search.ShowSearchCriteria();
    for(var i=0; i<this.ControlArray.length; i++) {
        $('divSearchResults').innerHTML +=this.ControlArray[i];    
    }
    if($('divAdvancedSearch').style.display=='block') {
        this.DisplayAdvancedSearch();
    }
}

AdvancedSearch.prototype.ClearAll = function() {
    this.ControlArray=[];
    if((!($("advSearch_8")===undefined))&&(!($("advSearch_8")==null))){this.ClearControls($("advSearch_8"));}
    if((!($("advSearch_4")===undefined))&&(!($("advSearch_4")==null))){this.ClearControls($("advSearch_4"));}
    if((!($("advSearch_2")===undefined))&&(!($("advSearch_2")==null))){this.ClearControls($("advSearch_2"));}
    if((!($("advSearch_1")===undefined))&&(!($("advSearch_1")==null))){this.ClearControls($("advSearch_1"));}
}

AdvancedSearch.prototype.ClearControls = function(parentDiv) {
    var controls = parentDiv.getElementsByTagName("input"); 
    for (var i = 0; i < controls.length; i++) { 
        if(controls[i].getAttribute("colType")=="Checkbox") {
            controls[i].checked=false;
        }
        if(controls[i].getAttribute("colType")=="Boolean") {
            controls[i].checked=false;
        }
        if(controls[i].getAttribute("colType")=="NumericRange") {
            controls[i].value="";
        }
    }
    
    var selectboxes = parentDiv.getElementsByTagName("select");
    for (var i = 0; i < selectboxes.length; i++) { 
        if(selectboxes[i].id.indexOf('selAvailableNeighborhoodValues_') != -1) {
           selectboxes[i].options.length = 0;
        }
        if(selectboxes[i].id.indexOf('selSelectedNeighborhoodValues_') != -1) {
           selectboxes[i].options.length = 0;
        }
        if(selectboxes[i].id.indexOf('selNeighborhoodTypes') != -1) {
            selectboxes[i].selectedIndex=0;
        }
    }
    
    var divs = parentDiv.getElementsByTagName("div");
    for (var i = 0; i < divs.length; i++) {
        if(divs[i].id.indexOf('divNeighborhoodListPaging') != -1) {
            divs[i].innerHTML='';
        }
    }
}
AdvancedSearch.prototype.SubmitAdvancedSearch = function() {
    if (!IsNullOrEmpty(_search.ListingTypeId)) {
        // Only reposition map if user has clicked submit from the Neighborhoods selector
        var shouldRepositionMap = false;
        var div = $("advSearch_"+_search.ListingTypeId); //get the parent div
        if (div != null) {
            var divs = div.getElementsByTagName("div");
            for (var i = 0; i < divs.length; i++) {
                if( (divs[i].id == "divNeighborhoodSelector") && (divs[i].style.display == "block") ) {
                    shouldRepositionMap = true;
                    break;
                }
            }
        }
        this.CollectAllValues();
        GetListings(shouldRepositionMap);
    }
    else {
        alert("Please select a property type.");
    }

    $('divAdvancedSearch').style.display = 'none';
}

AdvancedSearch.prototype.GetAdvancedSearchControlSelections = function() {
    var qString='';
    if(!IsNullOrEmpty(_search.ListingTypeId)) { 
        var div=$("advSearch_"+_search.ListingTypeId); //get the parent div
        if(div==null) return qString;
        var controls = div.getElementsByTagName("input"); 
        for (var i = 0; i < controls.length; i++) { 
            switch(controls[i].getAttribute("colType"))
	        {
	        case "Boolean":
	            if(controls[i].checked){
	                qString+=controls[i].id+"="+controls[i].value+"&";
	            }
	          break;    
	        case "Checkbox":
                if(controls[i].checked){
	                qString+=controls[i].name+"="+controls[i].value+"&";
	            }
	          break;   
	        case "NumericRange":
                if(!(IsNullOrEmpty(controls[i].value))){
                    var message = this.CheckMinMaxValues(controls[i].id, controls[i].getAttribute("itemName"));
                    if(message=="success") {
                        qString+=controls[i].id+"="+controls[i].value+"&";
                    }
                    else{ 
                        ShowMessage(message);
                    }
                }
	          break;
	        } // switch
        } // for
        } // if
       return qString;  
}
AdvancedSearch.prototype.GetAdvancedSearchNeighborhoodSelections = function() {
     var qString = '';
     if (!IsNullOrEmpty(_search.ListingTypeId)) {
         var div = $("advSearch_" + _search.ListingTypeId); //get the parent div
         if (div == null) return qString;
         var controls = div.getElementsByTagName("input"); 

         //Get selected neighborhood type
         var selectboxes = div.getElementsByTagName("select");
         var selectedValues = "";
         for (var i = 0; i < selectboxes.length; i++) {
             if (selectboxes[i].id.indexOf('selNeighborhoodTypes') != -1) {
                 if (!(IsNullOrEmpty(selectboxes[i].value))) {
                     var selectedIndex = selectboxes[i].value;
                     qString += "select_" + selectedIndex + "=";

                     var type = selectboxes[i].id.substring(selectboxes[i].id.indexOf("_") + 1, selectboxes[i].id.length);
                     var obj = $('selSelectedNeighborhoodValues_' + type);
                     for (a = 0; a < obj.options.length; a++) {
                         selectedValues += obj.options[a].value + ",";
                     }
                     qString += selectedValues + "&";
                 }
             }
         }
     } // if
     return qString;
}
AdvancedSearch.prototype.GetAdvancedSearchSelections = function() {
    var qString='';
    if(!IsNullOrEmpty(_search.ListingTypeId)) { 
        var div=$("advSearch_"+_search.ListingTypeId); //get the parent div
        if(div==null) return;
        var controls = div.getElementsByTagName("input"); 
        for (var i = 0; i < controls.length; i++) { 
            switch(controls[i].getAttribute("colType"))
	        {
	        case "Boolean":
	            if(controls[i].checked){
	                qString+=controls[i].id+"="+controls[i].value+"&";
	            }
	          break;    
	        case "Checkbox":
                if(controls[i].checked){
	                qString+=controls[i].name+"="+controls[i].value+"&";
	            }
	          break;   
	        case "NumericRange":
                if(!(IsNullOrEmpty(controls[i].value))){
                    var message = this.CheckMinMaxValues(controls[i].id, controls[i].getAttribute("itemName"));
                    if(message=="success") {
                        qString+=controls[i].id+"="+controls[i].value+"&";
                    }
                    else{ 
                        ShowMessage(message);
                    }
                }
	          break;
	        } // switch
        } // for

        //Get selected neighborhood type
        var selectboxes = div.getElementsByTagName("select");
        var selectedValues = "";
        for (var i = 0; i < selectboxes.length; i++) { 
            if(selectboxes[i].id.indexOf('selNeighborhoodTypes') != -1) {
                if(!(IsNullOrEmpty(selectboxes[i].value))){
                    var selectedIndex = selectboxes[i].value;       
                    qString+="select_"+selectedIndex+"=";
                    
                    var type = selectboxes[i].id.substring(selectboxes[i].id.indexOf("_")+1,selectboxes[i].id.length);
                    var obj = $('selSelectedNeighborhoodValues_'+type);
                    for(a=0;a<obj.options.length;a++) {
                        selectedValues += encodeURIComponent(obj.options[a].value + ",");
                    }
                    qString+=selectedValues+"&";
                }
            }
        }
   } 
    return qString;
}
AdvancedSearch.prototype.CheckMinMaxValues = function(id,name) {
    var idInt=id.substring(id.lastIndexOf("_")+1);
    var msg=null;
    if($("textbox_min_"+idInt).value!=null){
        if((isNaN($("textbox_min_"+idInt).value)) || ($("textbox_min_"+idInt).value < 0)){msg=name + ' must be numeric';}   
    } 
    if($("textbox_max_"+idInt).value!=null){
        if((isNaN($("textbox_max_"+idInt).value)) || ($("textbox_max_"+idInt).value < 0)){msg=name + ' must be numeric';}   
    } 
    if((!IsNullOrEmpty($("textbox_min_"+idInt).value)) && (!IsNullOrEmpty($("textbox_max_"+idInt).value))) {
        if(!($("textbox_min_"+idInt).value <= $("textbox_max_"+idInt).value)){msg='Invalid min-max relationship for '+name;}
    }
    return msg != null ? ErrorCls.CreateHtmlErrorMessage(msg) : "success";      
}

AdvancedSearch.prototype.DisplayAdvancedSearch = function() {
    if((!($("advSearch_8")===undefined))&&(!($("advSearch_8")==null))){$("advSearch_8").style.display='none';}
    if((!($("advSearch_4")===undefined))&&(!($("advSearch_4")==null))){$("advSearch_4").style.display='none';}
    if((!($("advSearch_2")===undefined))&&(!($("advSearch_2")==null))){$("advSearch_2").style.display='none';}
    if((!($("advSearch_1")===undefined))&&(!($("advSearch_1")==null))){$("advSearch_1").style.display='none';}
    $("advSearch_options").style.display='none';
        if(!(IsNullOrEmpty(_search.ListingTypeId))) {
            if((!($("advSearch_"+_search.ListingTypeId)===undefined))&&(!($("advSearch_"+_search.ListingTypeId)==null))){
                $("advSearch_"+_search.ListingTypeId).style.display='block';

                if(this.AdvancedSearchType=="features") {
                    var div=$("advSearch_"+_search.ListingTypeId); //get the parent div
                    var divs = div.getElementsByTagName("div"); 
                    for(var i = 0; i < divs.length; i++) { 
                        var divId = divs[i].id;
                        if(divId.indexOf('divAdvSearchTable')!=-1) { 
                            divs[i].style.display='block';
                        }
                        if(divId.indexOf('divNeighborhoodSelector')!=-1) { 
                            divs[i].style.display='none';
                        }
                    }
                    $('advSearchTitle').innerHTML = "Advanced Search Features: ";
                }
                else {
                    var div=$("advSearch_"+_search.ListingTypeId); //get the parent div
                    var divs = div.getElementsByTagName("div"); 
                    for (var i = 0; i < divs.length; i++) { 
                        var divId = divs[i].id;
                        if(divId.indexOf('divAdvSearchTable')!=-1) { 
                            divs[i].style.display='none';
                        }
                        if(divId.indexOf('divNeighborhoodSelector')!=-1) { 
                            divs[i].style.display='block';
                        }
                    }
                    $('advSearchTitle').innerHTML = "Neighborhoods: ";
                }
                $('advSearchType').innerHTML = _search.GetListingTypeName(_search.ListingTypeId);
             }
        }
        else {
            $("advSearch_options").style.display='block';
            $('advSearchTitle').innerHTML = "";
            $('advSearchType').innerHTML = "";
        }
}