// Ajax settings
AjaxPro.timeoutPeriod = 60000;



AjaxPro.onError = function(err) {
    if (err.Type == 'ConnectFailure') {
        document.getElementById('apartments').innerHTML = 'Connection failure';
        return;
    }

    if (err.Type == 'System.NullReferenceException') {
        window.location.reload();
        return;
    }

    apartmentsapart.Modules.AjaxApartmentList.SendError(err.Message, err.Type, err.Status, null);
}

function $Get(id) { return document.getElementById(id); }
// global variables

var als = null;
var newPage = false;
var apts = null;
var listID;
var filterExpanded = true;
var html;
// Ajax wrappers

function Load(ID) {

    if (window.location.toString().indexOf("clicktale.com") > -1 || window.location.toString().indexOf("webcache.googleusercontent.com") > -1) {

        return;
    }
    if (document.cookie == '') {
        return;
    }

    if ((version == 3 || version == 4) && window.location.toString().indexOf("anyedit") < 0) { // turn off ajax on landing apartments list
        if (!(version == 3 && window.location.toString().indexOf("apartmentsapart") > -1)) //interactivemap using als on AA
            return;
    }

    listID = ID;
    try {
        document.getElementById('paging').style.display = 'none';
    } catch (error) { }
    Build(als, true);
}


function Reload() {
    try {
        document.getElementById('paging').style.display = 'none';
        document.getElementById('apartments').innerHTML = '<center><img src="http://cachefly.apartmentsapart.com/aa/img_modules/progress.gif" /></center>';
        document.getElementById('sortingloading').style.display = 'block';
        document.getElementById('pagingloading').style.display = 'block';
    } catch (exc) { }
    Build(als, false);

}

function getPage(pageNo) {
    if (als == null && typeof(isLondonSiteLM) != 'undefined') {
        this.als = apartmentsapart.Modules.AjaxApartmentList.getListState(listID).value; 
    }
    if (pageNo >= 0 && pageNo < als.noPages) {
        als.currentPage = pageNo;
        newPage = true;
        Reload();
    }
}

function details(id, link) {
    window.location = apartmentsapart.Modules.AjaxApartmentList.saveToCookies(id, listID, link).value;

}

function hideApartment(aptID, cityID) {
    if (typeof (FilterRestrictions) == "undefined") {
        var buttons = document.getElementsByTagName('span');
        for (i = 0; i < buttons.length; ++i) {
            if (buttons.item(i).className == 'close')
                buttons.item(i).style.display = 'none';
        }
    }
    else {
        //var answer = confirm(listphrases["dont_show_apt"]);
        //if (answer) {
            if (document.getElementById('hiddenApts') != null)
                document.getElementById('hiddenApts').style.display = 'none';

            FilterRestriction('ApartmentHide', aptID + "," + cityID, null);
            GetFilterForServer();
            //Build(this.als, false);
        //}
    }
}


function Redirect(res) {
    window.location.href = res.value;
}


function sort() {
    var newOrder = document.getElementsByName('sortdd')[0].options[document.getElementsByName('sortdd')[0].selectedIndex].value;
    
    if (newOrder != als.sortOrderBy) {
        if (newOrder == 'CustomersRating' || newOrder == 'Quality')
            als.sortOrderByDesc = true;
        else
            als.sortOrderByDesc = false;
    }
    else
        als.sortOrderByDesc = !als.sortOrderByDesc;

    als.sortOrderBy = newOrder;
    als.currentPage = 0;

    Reload();
}

function sortLM(li) {
    var newOrder = '';
    switch (li.id) {
        case "1": newOrder = 'DateFrom'; break;
        case "2": newOrder = 'DiscountedPrice'; break;
        case "3": newOrder = 'NumberOfPeople'; break;
        case "4": newOrder = 'CustomersRating'; break;        
    }
    
    if (newOrder != als.sortOrderBy) {
        if (newOrder == 'CustomersRating' || newOrder == 'Quality')
            als.sortOrderByDesc = true;
        else
            als.sortOrderByDesc = false;
    }
    else
        als.sortOrderByDesc = !als.sortOrderByDesc;

    als.sortOrderBy = newOrder;
    als.currentPage = 0;

    Reload();
}

function filterLM(el) {
    var d = 0, m = 0, y = 0;
    if (el.id == 'monthyeardd') {
        var myValue = document.getElementsByName('monthyeardd')[0].options[document.getElementsByName('monthyeardd')[0].selectedIndex].value;
        if (myValue == '0') {
            jQuery('#daydd').html('');
            jQuery('#daydd').html('<option value="0">' + listphrases["any"] + '</option>');
            jQuery("#daydd").attr("disabled", true);
        }
        else {
            var my = myValue.split('/');
            m = my[0];
            y = my[1];

            var beginDay = 1;
            var today = new Date();
            if (parseInt(today.getFullYear(), 10) == parseInt(y, 10) && parseInt(today.getMonth() + 1, 10) == parseInt(m, 10)) {
                beginDay = parseInt(today.getDate(), 10);
            }
            var monthLength = new Date(parseInt(y, 10), parseInt(m, 10), 0).getDate();
            var options = '<option value="0">' + listphrases["any"] + '</option>';
            for (i = beginDay; i <= monthLength; ++i) {
                options += '<option value="' + i + '">' + i + '</option>';
            }
            jQuery("#daydd").attr("disabled", false);
            jQuery('#daydd').html(options);
        }      
    }
    else if (el.id == 'daydd') {
        my = document.getElementsByName('monthyeardd')[0].options[document.getElementsByName('monthyeardd')[0].selectedIndex].value.split('/');
        m = my[0];
        y = my[1];
        d = document.getElementsByName('daydd')[0].options[document.getElementsByName('daydd')[0].selectedIndex].value;
    }
    FilterRestriction('LastMinuteDate', d + '/' + m + '/' + y);
}

function GetLastMinuteFilter() {
    if (jQuery('#lm_button')[0].className == 'fbutton') {
        GetFilterForServer();
        if (FilterRestrictions.Count > 0 && GetTotalApartmentCount() > 0) {
            jQuery('#lm_filterAlert').html("<div class=\"filterAlert\">" + listphrases["filtered_results"] + "<div class=\"sfrb sfrb2\" onclick=\"FilterRestriction(null);jQuery('#lm_filterAlert').html('');Reload();\">" + listphrases["remove_filters"] + '</div></div>');
        }
        else {
            jQuery('#lm_filterAlert').html('');
        }
    }
}

function RemoveLastMinuteFilter() {
    FilterRestriction(null);
    jQuery('#lm_filterAlert').html('');
    jQuery("#monthyeardd option[value='0']").attr("selected", "selected");
    jQuery("#daydd option[value='0']").attr("selected", "selected");
    jQuery('#daydd').html('');
    jQuery('#daydd').html('<option value="0">' + listphrases["any"] + '</option>');
    jQuery("#daydd").attr("disabled", true);
}

function changeCurrency() {
    als.currency = document.sortform.currencydd.options[document.sortform.currencydd.selectedIndex].value;
    Reload();
}

function changeUnit() {
    als.unit = document.sortform.unitdd.options[document.sortform.unitdd.selectedIndex].value;
    Reload();
}

function showFilterAlertForCity() {
    if (document.getElementById('HiddenAptsPlaceHolder') == undefined || document.getElementById('HiddenAptsPlaceHolder').style.display == 'none')
        return false;
    else
        return true;
        
        
}

// Html code buildiers

function Build(als, firstTime) {


    try {

        if (als == null)
            this.als = apartmentsapart.Modules.AjaxApartmentList.getListState(listID).value;
        else
            this.als = als;
            
        var h = '';

        if ((this.als.noPages != 0 || (typeof(FilterRestrictions) != "undefined" &&  FilterRestrictions.Count > 0))) {
            if (document.getElementById('pagingloading') != null)
                document.getElementById('pagingloading').style.display = 'none';
            if (document.getElementById('pagingseo') != null)
                document.getElementById('pagingseo').style.display = 'none';
            apts = $Get('apartments');
            
            //if (FilterRestrictions.Count == 0)
            //    GetFilterForServer();
            //if (FilterRestrictions.Count > 0)
            //    h = "<div class=\"filterAlert\">" + listphrases["filtered_results"] + "</div>";
            //GetFilterForServer();
             if ((h == '' || h == null) && typeof (FilterRestrictions) != "undefined" && FilterRestrictions.Count > 0) {
                if (FilterRestrictions.IsSomeAptsExclulded()) {
                    if (FilterRestrictions.Count == 1 && FilterRestrictions.GetFilter('ApartmentHide') != null && GetFilterApartmentHideCount() == 0) {
                        //this.apts.innerHTML = aptsHTML;
                    }
                    else if (typeof (NewLMFilters) == 'undefined' || (typeof (NewLMFilters) != 'undefined' && NewLMFilters == false)) {
                        FilterRestrictions.RemoveFilter("LastMinuteDate");
                        if (GetFilterApartmentHideCount() == 0) {
                            h = "<div class=\"filterAlert\">" + listphrases["filtered_results"] + "</div>";
                            if (typeof (FVer) != 'undefined' && FVer == 2) {
                                h = "<div class=\"filterAlert\">" + listphrases["filtered_results"] + '<div class="sfrb sfrb2" onclick="FilterRestriction(null)">' + listphrases["remove_filters"] + '</div></div>';
                            } else {
                                h = "<div class=\"filterAlert\">" + listphrases["filtered_results"] + "</div>";
                            }
                        }
                        else {
                            //var hid = "<div class=\"hidcontainer\" onclick=\"showHiddenApartments(event)\"><div class=\"back\"><b>" + phrases["hidden_apartments"] + "</b></div><div class=\"rev\"></div></div><div style=\"clear:both;\"></div>";
                            //h = "<div class=\"filterAlert\">" + listphrases["filtered_results"] + hid + "</div>";
                            var hid = '';
                            if (typeof (FVer) != 'undefined' && FVer == 2) {
                                hid = '<div class="sfrb sfrb2" onclick="FilterRestriction(null)">' + listphrases["remove_filters"] + '</div>';
                            } else {
                                hid = "<div class=\"hidcontainer\" onclick=\"showHiddenApartments(event)\"><div class=\"back\"><b>" + phrases["hidden_apartments"] + "</b></div><div class=\"rev\"></div></div><div style=\"clear:both;\"></div>";
                            }
                            h = "<div class=\"filterAlert\">" + listphrases["filtered_results"] + hid + "</div>";
                        }
                    }
                    else if (typeof (NewLMFilters) != 'undefined' && NewLMFilters == true) {
                        if (FilterRestrictions.Count > 0 && GetTotalApartmentCount() > 0) {
                            jQuery('#lm_filterAlert').html("<div class=\"filterAlert\">" + listphrases["filtered_results"] + "<div class=\"sfrb sfrb2\" onclick=\"RemoveLastMinuteFilter();\">" + listphrases["remove_filters"] + '</div></div>');
                            var filterDateLastMinute = FilterRestrictions.GetFilter("LastMinuteDate");
                            if (filterDateLastMinute != null && filterDateLastMinute.GetFiltersCount() > 0) {
                                var tmpDate = filterDateLastMinute.Value[filterDateLastMinute.Name].split('/');
                                var beginDay = 1;
                                var today = new Date();
                                if (parseInt(today.getFullYear(), 10) == parseInt(tmpDate[2], 10) && parseInt(today.getMonth() + 1, 10) == parseInt(tmpDate[1], 10)) {
                                    beginDay = parseInt(today.getDate(), 10);
                                }
                                var monthLength = new Date(parseInt(tmpDate[2], 10), parseInt(tmpDate[1], 10), 0).getDate();
                                var options = '<option value="0">' + listphrases["any"] + '</option>';
                                for (i = beginDay; i <= monthLength; ++i) {
                                    options += '<option value="' + i + '">' + i + '</option>';
                                }
                                jQuery("#daydd").attr("disabled", false);
                                jQuery('#daydd').html(options);
                                jQuery("#monthyeardd option[value='" + tmpDate[1] + "/" + tmpDate[2] + "']").attr("selected", "selected");
                                jQuery("#daydd option[value='" + tmpDate[0] + "']").attr("selected", "selected");                              
                            }                                                                           
                        }
                        else {
                            jQuery('#lm_filterAlert').html('');
                        }            
                    }
                }
            }

                  
            h += apartmentsapart.Modules.AjaxApartmentList.getHtml(this.als, firstTime).value;

          //  else if (h == '' || h == null)
          //      throw "Error";
          //  else
                apts.innerHTML = h;

            if (!this.als.landingtoprated) {

                if (this.als.noPages != 0) {
                    BuildPaging();
                    $Get('paging').style.display = 'block';
                }
                else if (typeof(FilterRestrictions) != "undefined" &&  FilterRestrictions.Count > 0);
                else {
                    $Get('paging').style.display = 'none';
                    $Get('apartments').innerHTML = noresult;
                }
                if ($Get('sorting').style.display != 'block') {
                    if (document.getElementsByName('sortdd')[0] != null) {
                        BuildSorting();
                    }
                    else {
                        BuildDD();
                    }
                }
                document.getElementById('sortingloading').style.display = 'none';

            }
            if (version == 12 && this.als.noPages == 1) {
                document.getElementById('paging').style.display = 'none';
            }
            if (this.newPage) {
                this.nextPage = false;
                window.location.href = '#listtop';
            }
        }
        else {
            if (jQuery('.lm_apartmentlist').length == 1) {
                jQuery('.lm_apartmentlist').css('display', 'none');
            }
            else {
                $Get('apartments').innerHTML = noresult;
                if(typeof (MapEngine))
                    window.location.href = '#noavb';
            }
            
        }
    } catch (errr) {
        window.location.reload();
        return;
    }
}
function Buil(res) {

    if (res.error != null)
        return;

    apts.innerHTML = res.value;
}
function BuildSorting() {
    var className;
    if (als.sortOrderByDesc)
        className = 'down';
    else
        className = 'up';
    document.getElementById('sortorder').className = className;
    document.getElementsByName('sortdd')[0].value = als.sortOrderBy;

    BuildDD();
    if (typeof (FVer) != 'undefined' && FVer != 2) {
        document.getElementById('sorting').style.display = 'block';
    }    
}
function BuildSortingLM() {
    var num = 0;
    
    switch (als.sortOrderBy) {
        case 'DateFrom': num = 0; break;
        case 'DiscountedPrice': num = 1; break;
        case 'NumberOfPeople': num = 2; break;
        case 'CustomersRating': num = 3; break;
    }
    if (num != 0) {    
        var el = new Object();
        el.id = (num + 1).toString();
        sortLM(el);
        jQuery(jQuery("table#sortorder td")[num]).addClass('active');
        for (i = 0; i < 4; ++i) {
            if (i != num) {
                jQuery(jQuery("table#sortorder td")[i]).removeClass('active');
            }
        }
    }  
}
function BuildDD() {
    if ($Get('currencydd').innerHTML == '') {
        var html = '<select name="currencydd" onchange="changeCurrency();">';
        for (var i = 0; i < currencyNames.length; i++) {
            var selected = (currencyNames[i] == als.currency) ? ' selected="selected"' : '';
            html += '<option value="' + currencyNames[i] + '"' + selected + '>' + currencyNames[i] + '</option>';
        }
        html += '</select>';

        document.getElementById('currencydd').innerHTML = html;
    }
    document.sortform.unitdd.selectedIndex = als.unit;
}


function BuildPaging() {
    var split = 8;
    if (als.currentPage + split >= 100)
        split = 6;
    var left = als.currentPage - split;
    var right = als.currentPage + split;

    if (left < 0) {
        right += Math.abs(left);
        left = 0;
    }

    if (right > als.noPages - 1) {
        left -= right - als.noPages + 1;
        right = als.noPages - 1;
    }

    if (left < 0)
        left = 0;

    var html = '';
    if (left > 0) {
        html += '<a id="ApartListPaging0" class="unavaliable" href="javascript:void(0);" onclick="getPage(0);">1</a>\n';
        if (left > 1)
            html += '<span class="more">...</span>\n';
    }
    for (var i = left; i <= right; i++) {
        html += '<a id="ApartListPaging' + i + '" class="unavaliable" href="javascript:void(0);" onclick="getPage(' + i + ');">' + (i + 1) + '</a>\n';
    }
    if (right < als.noPages - 1) {
        if (right < als.noPages - 2)
            html += '<span class="more">...</span>\n';
        html += '<a id="ApartListPaging' + (als.noPages - 1) + '" class="unavaliable" href="javascript:void(0);" onclick="getPage(' + (als.noPages - 1) + ');">' + als.noPages + '</a>\n';
    }

    document.getElementById('ApartListPaging').innerHTML = html;


    $Get('ApartListPagingPrev').className = 'unavaliable';


    if (als.currentPage == 0) {
        $Get('ApartListPagingPrev').className = 'unavaliable';
        $Get('ApartListPagingPrev').href = 'javascript:void(0)';
    }
    else {
        $Get('ApartListPagingPrev').className = '';
        $Get('ApartListPagingPrev').href = 'javascript:void(0)';
    }

    if (als.currentPage == als.noPages - 1) {
        $Get('ApartListPagingNext').className = 'unavaliable';
        $Get('ApartListPagingNext').href = 'javascript:void(0)';
    }
    else {
        $Get('ApartListPagingNext').className = '';
        $Get('ApartListPagingNext').href = 'javascript:void(0)';
    }

    $Get('ApartListPaging' + als.currentPage).className = '';
}

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 onlyFloat(event) {
    if (!event) event = window.event;

    var charCode = (event.charCode != undefined) ? event.charCode : event.keyCode;
    if (charCode == 0 || charCode == 46) return true; //enter, escape, tab, '.'
    var keychar = String.fromCharCode(charCode);

    reg = /[\d+|\.]/;
    return reg.test(keychar);


}
function floatValidation(element) {
    var text = $Get(element).value;
    reg = /^\d{1,2}([\.]\d{1,2})?$/;
    if (!reg.test(text)) {
        n = text.indexOf(".");
        $Get(element).value = text.substring(0, n);

    }
}



