
function FilterJS(name, value) {
    this.Name = name;
    this.Value = value;
    this.GetFiltersCount = function() {
        var count = 0;
        for (var key in this.Value) {
            if (this.Value[key] != null) {
                count++;
            }
        }
        return count;

    }
}
function FilterCollcetion() {
    this.Count = 0;
    this.Filters = new Object();
    this.AddFilter = function(filter) {
        if (filter.Value == "" || filter.Value == null)
            return;
        if (this.Filters[filter.Name] == null) {
            this.Count++;
        }

        this.Filters[filter.Name] = filter;
    };
    this.GetFilter = function(filterName) {
        return this.Filters[filterName];
    };
    this.RemoveFilter = function(filterName) {
        if (this.Filters[filterName] != null) {
            this.Count--;
        }
        //this.Filters[filterName] = null;
        delete this.Filters[filterName];
    };
    this.ToXML = function() {

        var xml2 = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>";
        xml2 += "<Object>";
        xml2 += this._ToXML(this);
        xml2 += "</Object>";
        return xml2;
    };
    this._ToXML = function(obj) {
        var xml = "";
        if (obj == null)
            obj = this;
        for (var p in obj) {
            if (obj[p] == null || typeof (obj[p]) == 'function')
                continue;
            var prfixForInt = "_";
            
                if (typeof (obj[p]) != 'object') {
                    xml += '<' + prfixForInt + p + '>' + obj[p] + '</' + prfixForInt + p + '>';

                }
                else{
                    xml += '<' + prfixForInt + p + '>';
                    xml += this._ToXML(obj[p])
                    xml += '</' + prfixForInt + p + '>';
                }
            
        }
        return xml;
    };
    this.LoadFromXML = function(xml) {
        var xmlDoc;
        try //Internet Explorer
        {
            xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
            xmlDoc.async = "false";
            xmlDoc.loadXML(xml);
        }
        catch (e) {
            parser = new DOMParser();
            xmlDoc = parser.parseFromString(xml, "text/xml");
        }
        var xmlObj = xmlDoc.documentElement;

        var b = new Object();        
        this._LoadFromXML(xmlObj, b);
        
        //FilterRestrictions.Count = b.Count;
        for (var filter in b.Filters) {
            var jsFilter = new FilterJS(b.Filters[filter].Name, b.Filters[filter].Value);
            this.AddFilter(jsFilter);

        }
        // alert(b);

    };
    this._LoadFromXML = function(xmlObject, parentObject) {
        for (var i = 0; i < xmlObject.childNodes.length; i++) {

            if (xmlObject.childNodes[i].hasChildNodes() && xmlObject.childNodes[i].childNodes[0].hasChildNodes()) {

                var tmpObj = new Object();

                tmpObj = this._LoadFromXML(xmlObject.childNodes[i], tmpObj);
                var tmp1 = xmlObject.childNodes[i].tagName;
                parentObject[tmp1.substr(1, tmp1.length - 1)] = tmpObj;

            } else {
                var tmp1 = xmlObject.childNodes[i].tagName;
                var value = xmlObject.childNodes[i].textContent;
                if (value == null)
                    value = xmlObject.childNodes[i].text;
                parentObject[tmp1.substr(1, tmp1.length - 1)] = value;
            }
        }
        return parentObject;
    }
}
function RemoveFromFilters(filter) {
    FilterRestrictions.RemoveFilter(filter);
}
function FilterRestriction(filterName, value, htmlObject) {
    var filter = FilterRestrictions.GetFilter(filterName);
    if (filter == null) {
        filter = new FilterJS(filterName, new Object());
    }
    /*special code for LM filters*/
    if (filterName == 'DateFrom' || filterName == 'DateTo' || filterName == 'PriceFrom' || filterName == 'PriceTo' || filterName=='LOS' || filterName=='LSFrom' || filterName=='LSTo') {
        var checked = htmlObject.checked.toString();
        if (document.getElementById(value).value == '') {
            htmlObject.checked = false;
            return;
        }
        if (checked=="true") {
            filter.Value[filterName] = document.getElementById(value).value;
        } else {
            filter.Value[filterName] = null;
            delete filter.Value[filterName];
            FilterRestrictions.RemoveFilter(filter.Name);
        }
        if (filter.GetFiltersCount() > 0)
            FilterRestrictions.AddFilter(filter);
        GetTotalApartmentCount();
        return;
    }
    /*end special code for LM filters*/
    if (htmlObject.type.toString() == "checkbox") {
        var checked = htmlObject.checked.toString();
        if (checked == "true") {
            filter.Value[value] = 1;

        } else {
        filter.Value[value] = null;
        delete filter.Value[value];
        if (filter.GetFiltersCount() == 0) {
            FilterRestrictions.RemoveFilter(filter.Name);
        }
        }
       
    } else if (htmlObject.type.toString() == "select-one") {
        if (htmlObject.value == "0") {
            filter.Value[value] = null;
            delete filter.Value[value];
            if (filter.GetFiltersCount() == 0) {
                FilterRestrictions.RemoveFilter(filter.Name);
            }
        } else {
            filter.Value[value] = parseInt(htmlObject.value);
        }

    }
    if(filter.GetFiltersCount()>0)
        FilterRestrictions.AddFilter(filter);
    GetTotalApartmentCount();


}
function GetTotalApartmentCount() {
    var totalapts = 0;
    for (i in AllApartments) {
        var addApt = true;

        apt = AllApartments[i];
        if (typeof (apt) != 'object')
            continue;
        /*var freeNetFilter = FilterRestrictions.GetFilter("FreeNet");
        if (freeNetFilter != null && freeNetFilter.GetFiltersCount() > 0) {
            if (apt.HasFreeInternet == true) {
            }
            else {
                addApt = false;
            }
        }*/
        var filterLSFrom = FilterRestrictions.GetFilter("LSFrom");
        if (addApt && filterLSFrom != null && filterLSFrom.GetFiltersCount() > 0) {
            if (ConvertUnit(apt.LivingSpace) < filterLSFrom.Value[filterLSFrom.Name]) {
                addApt = false;
            }
        }
        var filterLSTo = FilterRestrictions.GetFilter("LSTo");
        if (addApt && filterLSTo != null && filterLSTo.GetFiltersCount() > 0) {
            if (ConvertUnit(apt.LivingSpace) > filterLSTo.Value[filterLSTo.Name]) {
                addApt = false;
            }
        }
        
        var filterLOS = FilterRestrictions.GetFilter("LOS");
        if (addApt && filterLOS != null && filterLOS.GetFiltersCount() > 0) {
            if (apt.LengthOfStay != filterLOS.Value[filterLOS.Name]) {
                addApt = false;
            }
        }
        var filterPriceFrom = FilterRestrictions.GetFilter("PriceFrom");
        if (addApt && filterPriceFrom != null && filterPriceFrom.GetFiltersCount() > 0) {
            if (ConvertPrice(apt.DiscountedPrice, null) < filterPriceFrom.Value[filterPriceFrom.Name]) {
                addApt = false;
            }
        }
        var filterPriceTo = FilterRestrictions.GetFilter("PriceTo");
        if (addApt && filterPriceTo != null && filterPriceTo.GetFiltersCount() > 0) {
            if (ConvertPrice(apt.DiscountedPrice, null) > filterPriceTo.Value[filterPriceTo.Name]) {
                addApt = false;
            }
        }
        var filterDateFrom = FilterRestrictions.GetFilter("DateFrom");
        if (addApt && filterDateFrom != null && filterDateFrom.GetFiltersCount() > 0) {
            var aptDate = new Date();
            tmpDate = apt.DateFromStr.split('/');
            aptDate.setFullYear(tmpDate[2], tmpDate[1] - 1, tmpDate[0]);
            var filtDate = new Date();
            tmpDate = filterDateFrom.Value[filterDateFrom.Name].split('/');
            filtDate.setFullYear(tmpDate[2], tmpDate[1] - 1, tmpDate[0]);
            if (aptDate < filtDate) {
                addApt = false;
                
            }
        }
        var filterDateTo = FilterRestrictions.GetFilter("DateTo");
        if (addApt && filterDateTo != null && filterDateTo.GetFiltersCount() > 0) {
            var aptDate = new Date();
            tmpDate = apt.DateToStr.split('/');
            aptDate.setFullYear(tmpDate[2], tmpDate[1] - 1, tmpDate[0]);
            var filtDate = new Date();
            tmpDate = filterDateTo.Value[filterDateTo.Name].split('/');
            filtDate.setFullYear(tmpDate[2], tmpDate[1] - 1, tmpDate[0]);
            if (aptDate > filtDate) {
                addApt = false;

            }
        }
        
        var filterIcons = FilterRestrictions.GetFilter("Icons");
        if (addApt && filterIcons != null && filterIcons.GetFiltersCount() > 0) {
            var tmpAddApt = false;
            for (var icon in filterIcons.Value) {
                var tmp2AddApt = false;
                for (icons in apt.AdditionalAttributesForFilter) {
                    tmpItem = apt.AdditionalAttributesForFilter[icons];
                    if (typeof (tmpItem) == 'string') {
                        if (tmpItem == icon) {
                            tmp2AddApt = true;
                            break;
                        }
                    }
                }
                if(tmp2AddApt)
                {
                tmpAddApt=true;                
                }
                else
                {
                    tmpAddApt=false;
                    break;
                }
            }
            /*for (icons in apt.AdditionalAttributesForFilter) {
                //if(apt.AdditionalAttributesForFilter
                for (var icon in filterIcons.Value) {
                    if (apt.AdditionalAttributesForFilter[icons] == icon) {
                        tmpAddApt = true;
                        break;
                    }
                }

            }*/
            if (tmpAddApt == false) {
                addApt = false;
            }
        }
        var filterBedding = FilterRestrictions.GetFilter("Bedding");
        if (addApt && filterBedding != null && filterBedding.GetFiltersCount() > 0) {
            //filter bedding
            var tmpAddApt = false;
            for (beds in apt.Bedding) {
                bed = apt.Bedding[beds];
                if (typeof (bed) != 'string')
                    continue;
                if (filterBedding.Value[bed] != null) {
                    tmpAddApt = true;
                    break;
                }
            }
            if (tmpAddApt == false) {
                addApt = false;
            }



        }
        var filterBeddingV2 = FilterRestrictions.GetFilter("BeddingV2");
        if (addApt && filterBeddingV2 != null && filterBeddingV2.GetFiltersCount() > 0) {
            //filter bedding
            var tmpAddAptSignle = true;
            var tmpAddAptDouble = true;
            for (beds in apt.Bedding) {
                bed = apt.Bedding[beds];
                if (typeof (bed) != 'string')
                    continue;
                var tab = bed.split('_');
                var Aptsgl = parseInt(tab[0]);
                var Aptdbl = parseInt(tab[1]);
                if (filterBeddingV2.Value['Single'] != null) {
                    filtSingle = filterBeddingV2.Value['Single'];
                    if (Aptsgl < filtSingle)
                        tmpAddAptSignle = false;
                    else
                        tmpAddAptSignle = true;
                }
                if (filterBeddingV2.Value['Double'] != null) {
                    filtDouble = filterBeddingV2.Value['Double'];
                    if (Aptdbl >= filtDouble && tmpAddAptSignle)
                        tmpAddAptDouble = true;
                    else
                        tmpAddAptDouble = false;
                }
                if (tmpAddAptSignle && tmpAddAptDouble)
                    break;
            }
            if (!tmpAddAptSignle || !tmpAddAptDouble) {
                addApt = false;
            }



        }
        
        
        var aptTypeFilter = FilterRestrictions.GetFilter("AptTypes");
        if (addApt && aptTypeFilter != null && aptTypeFilter.GetFiltersCount() > 0) {
            var AptType = aptTypeFilter.Value;
            var wasType = false;
            for (var key in AptType) {
                if (AptType[key] != null) {
                    if (GetApartmentType(apt) == key) {
                        //totalapts++;
                        wasType = true;
                        break;
                    }
                }
            }
            if (!wasType)
                addApt = false;

        } else {
            //totalapts++;

        }
        if (addApt) {
            totalapts++;
        }
    }
    document.getElementById('totalapts').innerHTML = totalapts;
    if (totalapts == 0) {
        document.getElementById("narrBut").className = "FilterDisabled";
    } else {
        document.getElementById("narrBut").className = "doFilter";
    }
    return totalapts;

}
function GetFilterForServer() {
    if (GetTotalApartmentCount() == 0 ) {
        return;
    }
    var array = [];
    var fillsf = FilterRestrictions.GetFilter("LSFrom");
    if (fillsf != null) {
        var filter = GetFilterObject();
        filter.Name = "LSFrom";
        if (fillsf.Value[fillsf.Name] != null) {
            filter.Value = fillsf.Value[fillsf.Name];
            array.push(filter);
        }
    }

    var fillst = FilterRestrictions.GetFilter("LSTo");
    if (fillst != null) {
        var filter = GetFilterObject();
        filter.Name = "LSTo";
        if (fillst.Value[fillst.Name] != null) {
            filter.Value = fillst.Value[fillst.Name];
            array.push(filter);
        }
    }
    FilterRestrictions.RemoveFilter("Unit");
    if (fillsf != null || fillst != null) {
        document.sortform.unitdd.disabled = true;
        var filter = GetFilterObject();
        filter.Name = "Unit";
        filter.Value = document.sortform.unitdd.options[document.sortform.unitdd.selectedIndex].value;
        array.push(filter);
    }
    else {
        document.sortform.unitdd.disabled = false;
    }

    var fildf = FilterRestrictions.GetFilter("DateFrom");
    if ( fildf!= null) {
        var filter = GetFilterObject();
        filter.Name = "DateFrom";        
        if (fildf.Value[fildf.Name] != null) {
            filter.Value = fildf.Value[fildf.Name];
            array.push(filter);
       }
    }
    var fildt = FilterRestrictions.GetFilter("DateTo");
    if ( fildt!= null) {
        var filter = GetFilterObject();
        filter.Name = "DateTo";        
        if (fildt.Value[fildt.Name] != null) {
            filter.Value = fildt.Value[fildt.Name];
            array.push(filter);
            }
    }
    var filpf = FilterRestrictions.GetFilter("PriceFrom");
    FilterRestrictions.RemoveFilter("Currency");
    if (filpf != null) {
        var filter = GetFilterObject();
        filter.Name = "PriceFrom";
        if (filpf.Value[filpf.Name] != null) {
            filter.Value = filpf.Value[filpf.Name];
            array.push(filter);
            
        }
    }
    var filpt = FilterRestrictions.GetFilter("PriceTo");
    if (filpt != null) {
        var filter = GetFilterObject();
        filter.Name = "PriceTo";        
        if (filpt.Value[filpt.Name] != null) {
            filter.Value = filpt.Value[filpt.Name];
            array.push(filter);
            }
    }
    if (filpf != null || filpt != null) {
        document.sortform.currencydd.disabled = true;
        var filter = GetFilterObject();
        filter.Name = "Currency";
        filter.Value = document.sortform.currencydd.options[document.sortform.currencydd.selectedIndex].text;
        array.push(filter);
    } else {
        document.sortform.currencydd.disabled = false;
    }
    var fillos = FilterRestrictions.GetFilter("LOS");
    if ( fillos!= null) {
        var filter = GetFilterObject();
        filter.Name = "LOS";
        if (fillos.Value[fillos.Name] != null) {
            filter.Value = fillos.Value[fillos.Name];
            array.push(filter);
        }
    }
    //AptTypes
    if (FilterRestrictions.GetFilter("AptTypes") != null) {
        var filter = GetFilterObject();
        filter.Name = "AptTypes";
        var tmp = "";
        var AptType = FilterRestrictions.GetFilter("AptTypes").Value;
        for (var key in AptType) {
            if (AptType[key] != null) {
                tmp += key + ";";
            }
        }
        if (tmp.length > 0) {
            tmp = tmp.substr(0, tmp.length - 1);
            filter.Value = tmp;
            array.push(filter);
        }


    }
    if (FilterRestrictions.GetFilter("Icons") != null) {
        var filter = GetFilterObject();
        filter.Name = "Icons";
        var Icons = FilterRestrictions.GetFilter("Icons").Value;
        var tmp = "";
        for (var icon in Icons) {
            if (Icons[icon] != null) {
                tmp += icon+";";
            }
        }
        if (tmp.length > 0) {
            tmp = tmp.substr(0, tmp.length - 1);
            filter.Value = tmp;
            array.push(filter);
        }
            
    }
    if (FilterRestrictions.GetFilter("Bedding") != null) {
        var filter = GetFilterObject();
        filter.Name = "Bedding";
        var Bedding = FilterRestrictions.GetFilter("Bedding").Value;
        var tmp = "";
        for (var bed in Bedding) {
            if (Bedding[bed] != null) {
                tmp += bed + ";";
            }
        }
        if (tmp.length > 0) {
            tmp = tmp.substr(0, tmp.length - 1);
            filter.Value = tmp;
            array.push(filter);
        }
    }
    if (FilterRestrictions.GetFilter("BeddingV2") != null) {
        var filter = GetFilterObject();
        filter.Name = "BeddingV2";
        var Bedding = FilterRestrictions.GetFilter("BeddingV2").Value;
        var tmp = "";
        for (var bed in Bedding) {
            if (Bedding[bed] != null) {
                tmp += bed + ":" + Bedding[bed] + ";";
            }
        }
        if (tmp.length > 0) {
            tmp = tmp.substr(0, tmp.length - 1);
            filter.Value = tmp;
            array.push(filter);
        }
    }
    /*if (FilterRestrictions.GetFilter("FreeNet") != null) {
        var filter = GetFilterObject();
        filter.Name = "FreeNet";
        if (FilterRestrictions.GetFilter("FreeNet").Value["FreeNet"] != null) {
            filter.Value = "1";
            array.push(filter);
        }

    }*/
    try {
        document.getElementById('sorting').style.visibility = 'hidden';
        document.getElementById('paging').style.visibility = 'hidden';
        document.getElementById('apartments').innerHTML = '<center><img id="PW_IMG" src="/img_modules/progress.gif" alt="" /></center>';


    } catch (err2) { }
    try {

        var xml = FilterRestrictions.ToXML();
        if (Type == 'static') {
            apartmentsapart.Modules.AjaxApartmentList.SaveJavascriptFilter(xml, strSLID);
        } else {
            apartmentsapart.Modules.AjaxApartmentListSearch.SaveJavascriptFilter(xml, strSLID);
        }
        LogFilter(xml, strSLID);
    } catch (err3) {
    var abc = err3;
    }
    if (Type == 'static') {
        apartmentsapart.Modules.AjaxApartmentList.PutFilters(array, strSLID, ShowFilteredApartments);
    } else {
        apartmentsapart.Modules.AjaxApartmentListSearch.PutFilters(array, strSLID, ShowFilteredApartments);
    }



}
function LogFilter(filter, strSLID) {
    if (Type == 'static') {
        apartmentsapart.Modules.AjaxApartmentList.LogFilters(filter, strSLID, null);
    }else
    {
        apartmentsapart.Modules.AjaxApartmentListSearch.LogFilters(filter, strSLID, null);
    }
}
function Comparer(a, b) {
    var tmp = a.split('_');
    var aCount = parseInt(tmp[0]) + 2 * parseInt(tmp[1]);
    tmp = b.split('_');
    var bCount = parseInt(tmp[0]) + 2 * parseInt(tmp[1]);
    /*if (aCount == bCount) {
    
    }*/
    return bCount - aCount;
}
function ShowFilteredApartments(res) {
    try {
        //als variable is defined in AjaxApartmentListSearch javascript
        var total = GetTotalApartmentCount();
        als.currentPage = 0;
        als.noPages = (total / als.AptsPerPage) | 0; //integer cast
        if (total % als.AptsPerPage > 0)
            als.noPages++;

        Build(als, false);
        try {
            document.getElementById('sorting').style.visibility = 'visible';
            document.getElementById('paging').style.visibility = 'visible';
        } catch (err2) { }
    } catch (erro) {
        window.location.reload();
    }
}
function GetFilterObject() {
    if (Type != 'static') {
        return apartmentsapart.Modules.AjaxApartmentListSearch.GetFilterObject().value;
    } else {
        return apartmentsapart.Modules.AjaxApartmentList.GetFilterObject().value;
    }
}
function addSingleEvent(obj, type, fn) {
    if (obj.attachEvent) {
        obj['e' + type + fn] = fn;
        obj[type + fn] = function() { obj['e' + type + fn](window.event); }
        obj.attachEvent('on' + type, obj[type + fn]);
    } else {
        obj.addEventListener(type, fn, false);
    }
}
function changeLSUnit() {
    try {
        
        FilterRestrictions.RemoveFilter("Unit");
        FilterRestrictions.AddFilter(new FilterJS("Unit",document.sortform.unitdd.options[document.sortform.unitdd.selectedIndex].value));
        document.getElementById("sfu").innerHTML = document.sortform.unitdd.options[document.sortform.unitdd.selectedIndex].text;
        var xml = FilterRestrictions.ToXML();
        if (Type == 'static') {
            apartmentsapart.Modules.AjaxApartmentList.SaveJavascriptFilter(xml, strSLID);
        } else {
            apartmentsapart.Modules.AjaxApartmentListSearch.SaveJavascriptFilter(xml, strSLID);
        }        
        
    } catch (e) { }
}
function changeCurrencyUnit() {
    try {
        /*var oldCurr = document.getElementById("sfc").innerHTML;
        if (oldCurr != document.sortform.currencydd.options[document.sortform.currencydd.selectedIndex].text) {
            var filpf = FilterRestrictions.GetFilter("PriceFrom");
            if (filpf != null && filpf.Value[filpf.Name] != null) {
                var pfInp = document.getElementById('filtertbPF');
                filpf.Value[filpf.Name] = ConvertPrice(pfInp.value, oldCurr);
                pfInp.value = filpf.Value[filpf.Name];

            }
            var filpt = FilterRestrictions.GetFilter("PriceTo");
            if (filpt != null && filpt.Value[filpt.Name] != null) {
                var ptInp = document.getElementById('filtertbPT');
                filpt.Value[filpt.Name] = ConvertPrice(ptInp.value, oldCurr);
                ptInp.value = filpt.Value[filpt.Name];

            }
        }*/
        FilterRestrictions.RemoveFilter("Currency");
        FilterRestrictions.AddFilter(new FilterJS("Currency",document.sortform.currencydd.options[document.sortform.currencydd.selectedIndex].text));
        document.getElementById("sfc").innerHTML = document.sortform.currencydd.options[document.sortform.currencydd.selectedIndex].text;
        addSingleEvent(document.sortform.currencydd, "change", changeCurrencyUnit);
        var xml = FilterRestrictions.ToXML();
        if (Type == 'static') {
            apartmentsapart.Modules.AjaxApartmentList.SaveJavascriptFilter(xml, strSLID);
        } else {
            apartmentsapart.Modules.AjaxApartmentListSearch.SaveJavascriptFilter(xml, strSLID);
        }
    } catch (e) { }
}
function addEventsForDD() {
    try {

        addSingleEvent(document.sortform.unitdd, "change", changeLSUnit);
        addSingleEvent(document.sortform.currencydd, "change", changeCurrencyUnit);        
    } catch (exc) {
    }
}
function GetFilteredApartments(listID, type) {
    addEventsForDD();
    strSLID = listID;
    Type = type;

    if (AllApartments == null) {
        if (type == 'static') {            
            apartmentsapart.Modules.AjaxApartmentList.GetApartmentsFromSession(listID, GetFilteredApartmentsCallBack);
        } else {
            apartmentsapart.Modules.AjaxApartmentListSearch.GetApartmentsFromSession(listID, GetFilteredApartmentsCallBack);
        }
    }
    
}
function GetFilteredApartmentsCallBack(res) {

    try {
        if (Type == 'static') {
            filterFromSessionXml = apartmentsapart.Modules.AjaxApartmentList.GetJavascriptFilter(strSLID).value;
        } else {
            filterFromSessionXml = apartmentsapart.Modules.AjaxApartmentListSearch.GetJavascriptFilter(strSLID).value;
        }
        
        
        if (filterFromSessionXml != null) {
            FilterRestrictions.LoadFromXML(filterFromSessionXml);
        }
        

    } catch (e2) { }
    AllApartments = res.value;
    var AptTypes = new Object();
    var FreeNet = new Object();
    var Bedding = new Object();
    var Icons = new Object();
    for (i in AllApartments) {

        apt = AllApartments[i];
        if (typeof (apt) != 'object')
            continue;
        //TotalApartments++;
        /*if (apt.HasFreeInternet == true) {
            if (FreeNet["FreeNet"] == null) {
                FreeNet["FreeNet"] = 1;
            } else {
                FreeNet["FreeNet"] = FreeNet["FreeNet"] + 1;
            }
        }*/
        for (beds in apt.Bedding) {
            bed = apt.Bedding[beds];
            if (typeof (bed) != 'string')
                continue;
            if (Bedding[bed] == null) {
                Bedding[bed] = 1;
            } else {
                Bedding[bed] = Bedding[bed] + 1;
            }
        }
        for (icons in apt.AdditionalAttributesForFilter) {

            icon = apt.AdditionalAttributesForFilter[icons];
            if (typeof (icon) != 'string')
                continue;
            if (Icons[icon] == null) {
                Icons[icon] = 1;
            } else {
                Icons[icon] = Icons[icon] + 1;
            }
            
        }

        var tmpAptType = GetApartmentType(apt);

        if (AptTypes[tmpAptType] == null) {
            AptTypes[tmpAptType] = 1;
        } else {
            AptTypes[tmpAptType] = AptTypes[tmpAptType] + 1;
        }


    }
    if (ObjectHasProperties(Bedding)) {
        //var filterBedding = new FilterJS("Bedding", Bedding);
        //Filters.AddFilter(filterBedding);
        var filterBeddingV2 = new FilterJS("BeddingV2", Bedding);
        Filters.AddFilter(filterBeddingV2);
    }
    if (ObjectHasProperties(Icons)){
        var filterIcons = new FilterJS("Icons", Icons);
        Filters.AddFilter(filterIcons);
    }
    if (Type!='static' && ObjectHasProperties(AptTypes)) {
        var filterTypes = new FilterJS("AptTypes", AptTypes);
        Filters.AddFilter(filterTypes);
    }
    if (ObjectHasProperties(FreeNet)) {
        var filterFreeNet = new FilterJS("FreeNet", FreeNet);
        Filters.AddFilter(filterFreeNet);
    }
    if (Filters.Count > 0) {
        BuildFilters(Filters);
        GetTotalApartmentCount();
    }
    
    if (FilterRestrictions.Count>0) {
        GetFilterForServer();
    }

}

function ObjectHasProperties(object) {
    for (var key in object) {
        //if (key != "0_0")//fix for apts without bedding
            return true;
    }
    return false;
}
function GetApartmentType(apt) {
    var tmpAptType;
    if (apt.IsXmlApt == true) {
        tmpAptType = "XML";
    }
    else if (apt.isMultiStay == true) {
        tmpAptType = "Multi";
    }
    else if (apt.isCombinedStay == true) {
        tmpAptType = "Combined";
    }
    else {
        tmpAptType = apt.ApartmentTypeID;
    }
    return tmpAptType;
}
function BuildFilters(filters) {

    if (Type=='static' && LMFilters==true) {
        BuildLMFilter();
    }
    BuildLivingSpace();
    
    var filterTypes = filters.GetFilter("AptTypes");
    if (filterTypes != null) {
        BuildAptTypesFilter(filterTypes);
    }
    /*var filterFreeNet = filters.GetFilter("FreeNet");
    if (filterFreeNet != null && filterFreeNet.GetFiltersCount() > 0) {
        BuildFreeNetFilter(filterFreeNet);
    }*/
    var filterBedding = filters.GetFilter("Bedding");
    if (filterBedding != null && filterBedding.GetFiltersCount() > 0) {
        BuildBedding(filterBedding);
    }
    var filterBedding = filters.GetFilter("BeddingV2");
    if (filterBedding != null && filterBedding.GetFiltersCount() > 0) {
        BuildBeddingV2(filterBedding);
    }
    var filterIcons = filters.GetFilter("Icons");
    if(filterIcons!=null && filterIcons.GetFiltersCount() > 0) {
        BuildIcons(filterIcons);
    }
    
    
    document.getElementById('modSearchFilter').style.display = "block";


}
function BuildLMFilter() {
    var Builder = "<div class=\"headFilType\">" + phrases["date"] + "</div>";
     var filterRestr = FilterRestrictions.GetFilter("DateFrom");
     if (filterRestr == null) {
         filterRestr = new FilterJS("", "");
     }
     var checked = "";
     var d = new Date();
     var curr_date = d.getDate();
    var curr_month = d.getMonth();
    curr_month++;
    if (curr_month < 10) {
        curr_month = '0' + curr_month;
    }
    var curr_year = d.getFullYear();
    var strDF = '';  //curr_date+ "/" + curr_month + "/" + curr_year;
     
     if (filterRestr.Value["DateFrom"] != null) {
        checked = "checked=\"true\"";
        strDF = filterRestr.Value["DateFrom"];
    }
    Builder += "<div class=\"lm sfilter\"><b>" + phrases["from"] + ":</b><input type=\"text\" onblur=\"gfPop_1.check_date(this);\" onclick=\"gfPop_1.fPopMulti(this,null,null,null,null,true);return false\" onfocus=\"UnCheck('filterchDF','DateFrom')\" name=\"filtertbDF\" maxlength=\"10\" size=\"10\" id=\"filtertbDF\" value=\"" + strDF + "\" class=\"date\"/>" + "<input id=\"filterchDF\" type=\"checkbox\" " + checked + " onclick=\"FilterRestriction('DateFrom','filtertbDF', this)\" />" + "</div>";
    filterRestr = FilterRestrictions.GetFilter("DateTo");
    if (filterRestr == null) {
        filterRestr = new FilterJS("", "");
    }
    d.setDate(d.getDate() + 1);
    curr_date = d.getDate();
    curr_month = d.getMonth();
    curr_month++;
    if (curr_month < 10) {
        curr_month = '0' + curr_month;
    }
    curr_year = d.getFullYear();

    var strDT = ''; //curr_date + "/" + curr_month + "/" + curr_year;
    var checked2 = "";
    if (filterRestr.Value["DateTo"] != null) {
        checked2 = "checked=\"true\"";
        strDT = filterRestr.Value["DateTo"];
    }

    Builder += "<div class=\"lm sfilter\"><b>" + phrases["to"] + ":</b><input type=\"text\" onblur=\"gfPop_1.check_date(this);\" onclick=\"gfPop_1.fPopMulti(this,null,document.getElementById('filtertbDF'),null,null,true);return false\" onfocus=\"UnCheck('filterchDT','DateTo')\" value=\"" + strDT + "\" maxlength=\"10\" name=\"filtertbDT\" size=\"10\" id=\"filtertbDT\" class=\"date\"/><input id=\"filterchDT\" type=\"checkbox\" " + checked2 + " onclick=\"FilterRestriction('DateTo','filtertbDT' , this)\" /></div>";


    filterRestr = FilterRestrictions.GetFilter("PriceFrom");
    if (filterRestr == null) {
        filterRestr = new FilterJS("", "");
    }
    var valuePF = "";
    var checkedPF = "";
    if (filterRestr.Value["PriceFrom"] != null) {
        checkedPF= "checked=\"true\"";
        valuePF = filterRestr.Value["PriceFrom"];
    }
    var curr = document.sortform.currencydd.options[document.sortform.currencydd.selectedIndex].text;
    Builder += "<div class=\"headFilType\">" + phrases["price"] +"  (<b id=\"sfc\">"+curr+"</b>)</div>";
    Builder += "<div class=\"lm sfilter\"><b>" + phrases["from"] + ":</b><input onkeypress=\"return numbersOnly(event)\" type=\"text\" onfocus=\"UnCheck('filterchPF','PriceFrom')\" class=\"price\" id=\"filtertbPF\" value=\"" + valuePF + "\" /><input id=\"filterchPF\" type=\"checkbox\" " + checkedPF + " onclick=\"FilterRestriction('PriceFrom','filtertbPF' , this)\" /></div>";

    filterRestr = FilterRestrictions.GetFilter("PriceTo");
    if (filterRestr == null) {
        filterRestr = new FilterJS("", "");
    }
    var valuePT = "";
    var checkedPT = "";
    if (filterRestr.Value["PriceTo"] != null) {
        checkedPT= "checked=\"true\"";
        valuePT = filterRestr.Value["PriceTo"];
    }
    Builder += "<div class=\"lm sfilter\"><b>" + phrases["to"] + ":</b><input onkeypress=\"return numbersOnly(event)\" type=\"text\" onfocus=\"UnCheck('filterchPT', 'PriceTo')\" class=\"price\" id=\"filtertbPT\" value=\"" + valuePT + "\" /><input id=\"filterchPT\" type=\"checkbox\" " + checkedPT + " onclick=\"FilterRestriction('PriceTo','filtertbPT' , this)\" /></div>";

    Builder += "<div class=\"headFilType\">" +  phrases["length_of_stay"] + "</div>";
    filterRestr = FilterRestrictions.GetFilter("LOS");
    if (filterRestr == null) {
        filterRestr = new FilterJS("", "");
    }
    var valueLOS = "1";
    var checkedLOS = "";
    if (filterRestr.Value["LOS"] != null) {
        checkedLOS= "checked=\"true\"";
        valueLOS = filterRestr.Value["LOS"];
    }
        
    Builder += "<div class=\"lm sfilter\"><b class=\"los losm\" onclick=\"addLOS(-1)\">-</b><input disabled=\"true\" type=\"text\" class=\"tblos\" id=\"filtertbLOS\" value=\""+valueLOS+"\" /><b class=\"los\" onclick=\"addLOS(1)\">+</b><input id=\"filterchLOS\" type=\"checkbox\" " + checkedLOS + " onclick=\"FilterRestriction('LOS','filtertbLOS' , this)\" /></div>";
    
    document.getElementById('sffilter').innerHTML += Builder;
}
function BuildLivingSpace() {
    var Builder = "";
    filterRestr = FilterRestrictions.GetFilter("LSFrom");
    if (filterRestr == null) {
        filterRestr = new FilterJS("", "");
    }
    var valueLSF = "";
    var checkedLSF = "";
    if (filterRestr.Value["LSFrom"] != null) {
        checkedLSF = "checked=\"true\"";
        valueLSF = filterRestr.Value["LSFrom"];
    }
    var unit = document.sortform.unitdd.options[document.sortform.unitdd.selectedIndex].text;
    Builder += "<div class=\"headFilType\">" + phrases["living_space"] + "  (<b id=\"sfu\">"+unit+"</b>)</div>";
    Builder += "<div class=\"lm sfilter\"><b>" + phrases["from"] + ":</b><input onkeypress=\"return numbersOnly(event)\" type=\"text\" onfocus=\"UnCheck('filterchLSF','LSFrom')\" class=\"price\" id=\"filtertbLSF\" value=\"" + valueLSF + "\" /><input id=\"filterchLSF\" type=\"checkbox\" " + checkedLSF + " onclick=\"FilterRestriction('LSFrom','filtertbLSF' , this)\" /></div>";
    filterRestr = FilterRestrictions.GetFilter("LSTo");
    if (filterRestr == null) {
        filterRestr = new FilterJS("", "");
    }
    var valueLST = "";
    var checkedLST = "";
    if (filterRestr.Value["LSTo"] != null) {
        checkedLST = "checked=\"true\"";
        valueLST = filterRestr.Value["LSTo"];
    }
    Builder += "<div class=\"lm sfilter\"><b>" + phrases["to"] + ":</b><input onkeypress=\"return numbersOnly(event)\" type=\"text\" onfocus=\"UnCheck('filterchLST','LSTo')\" class=\"price\" id=\"filtertbLST\" value=\"" + valueLST + "\" /><input id=\"filterchLST\" type=\"checkbox\" " + checkedLST + " onclick=\"FilterRestriction('LSTo','filtertbLST' , this)\" /></div>";
    document.getElementById('sffilter').innerHTML += Builder;

    
}
function addLOS(value) {
    UnCheck('filterchLOS', 'LOS');
    var input = document.getElementById('filtertbLOS')
    var los = parseInt(input.value);
    var result = los + value;
    if (result < 1) {
        result = 1
    }
    input.value = result;
    
}
function UnCheck(id, filter) {
    try {
        if (document.getElementById(id).checked) {
            RemoveFromFilters(filter)
            GetTotalApartmentCount();
        }
        document.getElementById(id).checked = false;
    } catch (E1) { }
}
function BuildBedding(filterBedding) {
    var Builder = "<div class=\"headFilType\">" + phrases["bedding_beds"] + "</div>";
    var filterRestr = FilterRestrictions.GetFilter("Bedding");
    if (filterRestr == null)
        filterRestr = new FilterJS("", "");
    var bedConfig = new Array();
    var i = 0;
    for (var beds in filterBedding.Value) {
        bedConfig[i] = beds;
        i++;
    }
    bedConfig.sort(Comparer);
    for (var i=0; i<bedConfig.length;i++) {
        var tab = bedConfig[i].split('_');
        var checkedStr = "";
        if (filterRestr.Value[bedConfig[i]] != null)
            checkedStr = "checked=\"true\"";
        Builder += "<div class=\"bed sfilter\"><b>" + tab[0] + " x " + phrases["SingleBed"] + tab[1] + " x " + phrases["DoubleBed"] + "</b><input type=\"checkbox\" "+checkedStr+" onclick=\"FilterRestriction('Bedding','" + bedConfig[i] + "', this)\" value=\"" + bedConfig[i] + "\"></div>";

    }
    document.getElementById('sffilter').innerHTML += Builder;
}
function BuildBeddingV2(filterBedding) {
    var Builder = "<div class=\"headFilType\">" + phrases["bedding_beds"] + "</div>";
    var filterRestr = FilterRestrictions.GetFilter("BeddingV2");
    if (filterRestr == null)
        filterRestr = new FilterJS("", "");
    //var bedConfig = new Array();    
    var singlemax = 0;
    var doublemax = 0;
    for (var beds in filterBedding.Value) {
        var tab = beds.split('_');
        var currentSmax = parseInt(tab[0]);
        var currentDmax = parseInt(tab[1]);
        if(currentSmax>singlemax)
            singlemax = currentSmax;
        if (currentDmax > doublemax)
            doublemax = currentDmax;
        
    }

    Builder += "<div class=\"bed sfilter\"><b>" + phrases["min"]+"<select onchange=\"FilterRestriction('BeddingV2','Single', this)\" >";
    var selectedSingle = parseInt(filterRestr.Value["Single"]);
    var selectedDouble = parseInt(filterRestr.Value["Double"]);    
    //build single
    for (var i = 0; i <= singlemax; i++) {
        if (i == 0)
            Builder+="<option value=\""+i+"\">-</option>";
        else if (i == selectedSingle)
            Builder += "<option value=\"" + i + "\" selected=\"true\">" + i + "</option>";
        else
            Builder += "<option value=\"" + i + "\">"+i+"</option>";

    }
    Builder += "</select>" + phrases["SingleBed"] + "</b></div>";
    //build double
    Builder += "<div class=\"bed sfilter\"><b>" + phrases["min"]+"<select onchange=\"FilterRestriction('BeddingV2','Double', this)\" >";
    for (var i = 0; i <= doublemax; i++) {
        if (i == 0)
            Builder += "<option value=\"" + i + "\">-</option>";
        else if (i == selectedDouble)
            Builder += "<option value=\"" + i + "\" selected=\"true\">" + i + "</option>";
        else
            Builder += "<option value=\"" + i + "\">" + i + "</option>";

    }
    Builder += "</select>" + phrases["DoubleBed"] + "</b></div>";
    document.getElementById('sffilter').innerHTML += Builder;
}
function BuildIcons(filterIcons){
    
    var Builder = "<div class=\"headFilType\">" + phrases["amenities"] + "</div>"
    var icons = FilterRestrictions.GetFilter("Icons");    
    if (icons == null)
        icons = new FilterJS("", "");
    for (var icon in filterIcons.Value) {


        Builder += "<div class=\" sfilter\"><b class=\"ic_"+icon+" ic\">&nbsp</b><b class=\"pad\">" + phrases["icon_"+icon] + "</b><input type=\"checkbox\" " + IconFilterChecked(icons, icon) + " onclick=\"FilterRestriction('Icons','" + icon + "', this)\" value=\"" + icon + "\"></div>";
    }
    document.getElementById('sffilter').innerHTML += Builder;
}
function IconFilterChecked(restriction, icon) {
    var result = "";
    if (restriction.Value[icon] != null) {
        result = "checked=\"true\"";
    }
    return result;
}
function BuildFreeNetFilter(filterFreeNet) {
    var phrase = phrases["free_internet"];
    var Builder = "<div class=\"headFilType\">" + phrases["amenities"] + "</div>";
    //filterFreeNet.Value["FreeNet"] - number of apts with free net
    var freeNetFilter = FilterRestrictions.GetFilter("FreeNet");
    var checked = "";
    if (freeNetFilter != null && freeNetFilter.GetFiltersCount() > 0) {
        checked = "checked=\"true\"";
    }
    
    Builder += "<div class=\"freenetFilt sfilter\"><b>" + phrase + "</b><input type=\"checkbox\" "+checked+" onclick=\"FilterRestriction('FreeNet','FreeNet', this)\" value=\"" + filterFreeNet.Value["FreeNet"] + "\"></div>";
    document.getElementById('sffilter').innerHTML += Builder;
}
function BuildAptTypeDiv(phrase, AptCount, value, checked) {
    var checkedStr = "";
    if (checked)
        checkedStr = "checked=\"true\"";
    return "<div class=\"apttypeFilt sfilter\"><b>" + phrase + "</b>  <input type=\"checkbox\" "+checkedStr+" onclick=\"FilterRestriction('AptTypes','" + value + "', this)\" value=\"" + value + "\"></div>";

}
function BuildAptTypesFilter(filter) {
    var Builder = "<div class=\"headFilType\">" + phrases["apartment_type"] + "</div>";
    var filterRestr = FilterRestrictions.GetFilter("AptTypes");
    if (filterRestr == null)
        filterRestr = new FilterJS("", "");
    if (filter.Value[1] != null) {
        //	add studio
        if(filterRestr.Value[1]!=null)
            Builder += BuildAptTypeDiv(phrases["aparType_1"], filter.Value[1], 1, true);
        else
            Builder += BuildAptTypeDiv(phrases["aparType_1"], filter.Value[1], 1, false);
        
    }
    if (filter.Value[2] != null) {
        //add 1 bed
        if (filterRestr.Value[2] != null)
            Builder += BuildAptTypeDiv(phrases["aparType_2"], filter.Value[2], 2, true);
        else
            Builder += BuildAptTypeDiv(phrases["aparType_2"], filter.Value[2], 2, false);
    }
    if (filter.Value[3] != null) {
        //add 2 bed
        if (filterRestr.Value[3] != null)
            Builder += BuildAptTypeDiv(phrases["aparType_3"], filter.Value[3], 3, true);
        else
            Builder += BuildAptTypeDiv(phrases["aparType_3"], filter.Value[3], 3, false);
    }
    if (filter.Value[4] != null) {
        //	add 3 bed
        if (filterRestr.Value[4] != null)
            Builder += BuildAptTypeDiv(phrases["aparType_4"], filter.Value[4], 4, true);
        else
            Builder += BuildAptTypeDiv(phrases["aparType_4"], filter.Value[4], 4, false);
    }
    if (filter.Value[5] != null) {
        //	add 3 bed
        if (filterRestr.Value[5] != null)
            Builder += BuildAptTypeDiv(phrases["aparGroup_5"], filter.Value[5], 5, true);
        else
            Builder += BuildAptTypeDiv(phrases["aparGroup_5"], filter.Value[5], 5, false);
        
    }
    if (filter.Value[11] != null) {
        //	add 5 bed
         if (filterRestr.Value[11] != null)
             Builder += BuildAptTypeDiv(phrases["aparType_11"], filter.Value[11], 11, true);
        else
            Builder += BuildAptTypeDiv(phrases["aparType_11"], filter.Value[11], 11, false);
    }
    if (filter.Value[12] != null) {
        //	add 4 bed
         if (filterRestr.Value[12] != null)
             Builder += BuildAptTypeDiv(phrases["aparType_12"], filter.Value[12], 12, true);
        else
            Builder += BuildAptTypeDiv(phrases["aparType_12"], filter.Value[12], 12, false);
    }
    /*if(filter.Value[100]!=null)
    {
    //add 3-5 bed
    Builder+=BuildAptTypeDiv(phrases["apargroup_100"],filter.Value[100],100);
    }*/
    if (filter.Value["Multi"] != null) {
        //add multi
         if (filterRestr.Value["Multi"] != null)
             Builder += BuildAptTypeDiv(phrases["Multi"], filter.Value["Multi"], "Multi", true);
        else
            Builder += BuildAptTypeDiv(phrases["Multi"], filter.Value["Multi"], "Multi", false);
    }
    if (filter.Value["Combined"] != null) {
        //add combined
         if (filterRestr.Value["Combined"] != null)
             Builder += BuildAptTypeDiv(phrases["Combined"], filter.Value["Combined"], "Combined", true);
        else
            Builder += BuildAptTypeDiv(phrases["Combined"], filter.Value["Combined"], "Combined", false);
    }
    if (filter.Value["XML"] != null) {
        //add XML
         if (filterRestr.Value["XML"] != null)
             Builder += BuildAptTypeDiv(phrases["XML"], filter.Value["XML"], "XML", true);
        else
            Builder += BuildAptTypeDiv(phrases["XML"], filter.Value["XML"], "XML", false);
    }
    document.getElementById('sffilter').innerHTML += Builder;

}
function numbersOnly(event) {
    if (!event) event = window.event;
    var charCode = (event.charCode != undefined) ? event.charCode : event.keyCode;
    if (charCode == 0) return true; //enter, escape, tab
    var keychar = String.fromCharCode(charCode);


    reg = /\d/;
    return reg.test(keychar);
}
function ConvertPrice(amount, curr) {
    if (curr == null) {
        curr = orgC;
    }
    var zlval = currrates[curr] * amount;
    return Math.round(zlval / currrates[document.sortform.currencydd.options[document.sortform.currencydd.selectedIndex].text]);
}
function ConvertUnit(value) {
//var unitConv = new Array();
//unitConv[0] =0.0929;
//unitConv[1] = 10.7643;
var index = document.sortform.unitdd.options[document.sortform.unitdd.selectedIndex].value;
if (index == 1) {
    return Math.round(value * 10.7643);
} else {
    return value;
}
  
}