﻿
$(document).ready(function() {
    var categoryDropdowns = $('#threeColumns div.anything select[name="catname"], #refine_search div.anything select[name="catname"]');
    var currentCategory = categoryDropdowns.val();
    showOrHideMinMaxRooms(currentCategory);
    categoryDropdowns.change(function() {
        var cat = $(this).val();
        showOrHideMinMaxRooms(cat);
        showOrHidePriceTypeRefinements();
    });

    setCurrentIdForSelectedCategory();

    showOrHidePriceTypeRefinementsFromHiddenCategoryValue();

    categoryDropdownWithinNamedElement('#RefineSearchDefaultSubmit').change(function() {
        setWeekMonthRadioButtonsVisibility();
    });

    setUpGreyedOutText();

    showOrHideExtraProperties();
    //showOrHidePriceTypeRefinements();

    setRefineLocationFieldDisplay();

    $('#refine_search select[name="catname"]').change(function() {
        showOrHideExtraProperties();
    });
});


var showOrHideMinMaxRooms = function(cat) {
    if (cat == 'PROPERTY_SERVICES' || cat == 'PROPERTY' || cat == 'FLATSHARE_HOUSESHARE' || cat == 'BEDSITS_AND_ROOMS' || cat == 'COMMERCIAL_PROPERTY_FOR_RENT' || cat == 'COMMERCIAL_PROPERTY_FOR_SALE') {
        $('#property_maxrooms,#property_minrooms').attr("disabled", "disabled");
    }
    else {
        $('#property_maxrooms,#property_minrooms').removeAttr("disabled");
    }
}

var showOrHideExtraProperties = function() {
    url = LOOT.constant.path.webservice + LOOT.constant.webservice.category.property + '/ShowProperties';
    var selectedPropertyType = selectedCategoryWithin('#RefineSearchDefaultSubmit');    
    
    if (selectedPropertyType && selectedPropertyType != undefined && selectedPropertyType.length > 0) {
        dataToBeSent = { 'categoryCode': selectedPropertyType };
        $.post(url, dataToBeSent, function(data) {
            if (data == 'true') {
                $('#category-props').show();
            }
            else {
                $('#category-props').hide();
            }
        });
    }
}

var showOrHidePriceTypeRefinementsFromHiddenCategoryValue = function() {
    var selectedPropertyType = $('#catname_hidden_hidden').val();
    showOrHidePriceTypeRefinementsGivenValue(selectedPropertyType);
}

var showOrHidePriceTypeRefinements = function() {
    var selectedPropertyType = selectedCategoryWithin('#RefineSearchDefaultSubmit');
    showOrHidePriceTypeRefinementsGivenValue(selectedPropertyType);
}

var showOrHidePriceTypeRefinementsGivenValue = function(selectedPropertyType) {
    url = LOOT.constant.path.webservice + LOOT.constant.webservice.category.property + '/ShowPriceTypes';
    dataToBeSent = { 'categoryCode': selectedPropertyType };
    $.post(url, dataToBeSent, function(data) {
        if (data == 'true') {
            $('#weekMonthButtons').show();
        }
        else {
            $('#weekMonthButtons').hide();
        }
    });
}

var setCurrentIdForSelectedCategory = function() {
    $('#category a').each(function() {
        if ($(this).attr('title') == $('#catname_hidden').val())
            $(this).parent().attr('id', 'category_tree_current');
    });
}

var setUpGreyedOutText = function() {
    var allDropdowns = categoryDropdownWithinNamedElement('#property_search').
                        add(categoryDropdownWithinNamedElement('#motors_search')).
                        add(categoryDropdownWithinNamedElement('#RefineSearchDefaultSubmit'));

    allDropdowns.mousedown(function() {
        $(this).removeClass('unselected');
    });

    allDropdowns.blur(function() {
        if ($(this).find("option:selected").hasClass("unselected")) {
            $(this).addClass('unselected');
        }
    });

    allDropdowns.each(function() {
        if ($(this).find("option:selected").hasClass("unselected")) {
            $(this).addClass('unselected');
        } else {
            $(this).removeClass('unselected');
        }
    });

    var allLocationFields = $('#motors_location, #property_location, #anything_location, #location_refine_value');
    allLocationFields.mousedown(function() {
        $(this).removeClass('unselected');
    });
    allLocationFields.blur(function() {
        if ($(this).val() == '') {
            $(this).addClass('unselected');
        }
    });
    allLocationFields.each(function() {
        if ($(this).val() == '' || $(this).val() == 'Postcode') {
            $(this).addClass('unselected');
        } else {
            $(this).removeClass('unselected');
        }
    });
}

var setWeekMonthRadioButtonsVisibility = function() {
    var selectedPropertyType = selectedCategoryWithin('#RefineSearchDefaultSubmit');
    if (selectedPropertyType == '' || selectedPropertyType == null)
        return;

    var notTimeBased = ['PROPERTY', 'FLATS_FOR_SALE', 'HOUSES_FOR_SALE', 'COMMERCIAL_PROPERTY_FOR_RENT', 'COMMERCIAL_PROPERTY_FOR_SALE'];
    var displayTimeBased = $.inArray(selectedPropertyType, notTimeBased) == -1;
    
    if (displayTimeBased)
        $('#weekMonthButtons').show();
    else {
        $('#weekMonthButtons').hide();
    }
}

// postcode click
$(document).ready(function() {
    var my_function = function() {
        if ($('#location_refine_value').val() != '') {
            $('#radius_value').removeAttr("disabled");
        } else {
            $('#radius_value').attr("disabled", "disabled");
        }
    };

    var postcode_text = 'Postcode';

    $('#location_refine_value').keyup(my_function);
    $('#location_refine_value').change(my_function);

    $('#property_location, #motors_location, #anything_location, #location_refine_value').focus(function() {
        if ($(this).val() == postcode_text) {
            $(this).val('');
        }
    });

    var replace_blank_location_text_property = function(elementId) {
        replace_blank_location_text('default_radius_value_property', 'property_location', 'this_is_flag_value_property');
    }

    var replace_blank_location_text_motoring = function(elementId) {
        replace_blank_location_text('default_radius_value_motors', 'motors_location', 'this_is_flag_value_motors');
    }

    var replace_blank_location_text_anything = function(elementId) {
        replace_blank_location_text('default_radius_value_anything', 'anything_location', 'this_is_flag_value_anything');
    }

    var replace_blank_location_text = function(hidden_radius_field, location_field, thisIsFlag) {

        var thisIsValue = $('#' + thisIsFlag).val();

        if ($('#' + hidden_radius_field).val() == '') {
            $('#' + hidden_radius_field).val(postcode_text);
        }
        else {
            var _pcode = $('#' + location_field).val();
            if (thisIsValue == _pcode) {
            }
            else {
                var _regex = LOOT.constant.regex.postcode_full_required;
                var _first_part_regex = LOOT.constant.regex.first_part_postcode;

                _match = _first_part_regex.test(_pcode);

                if (_match) {
                    _match = _regex.test(_pcode);

                    if (_match) {
                        $('#' + hidden_radius_field).val('1');
                    }
                    else {
                        $('#' + hidden_radius_field).val('5');
                    }
                } else {
                    // only override the postcode search value if a value entered by user
                    // and if the location doesn't have a predefined search radius from
                    // a this is site.

                    if (thisIsValue != _pcode) {
                        $('#' + hidden_radius_field).val('25');
                    }
                };
            };
        }
    };

    $('#motors_search').submit(replace_blank_location_text_motoring);
    $('#property_search').submit(replace_blank_location_text_property);
    $('#anything_search').submit(replace_blank_location_text_anything);

});

var hoverTimeout = 300;
var myTimer, myTimer2;
var overSubcategories;

$(document).ready(function() {
    //exclude IE browser older than IE7
    if ($.browser.msie) {
        if ($.browser.version.substr(0, 1) < 7) {
            return;
        }
    }
    //exclude mobile browsers
    if (screen.width < 500) {
        return;
    }
    clearSearchErrors();

    //load category selector
    $('#' + categoryContainer + ' div.anything').append('<div id="categorySelector"></div>');
    
    
	//position category selector for Northcliffe pages
    $('#northcliff #categorySelector').css({
    	right: 'auto',
    	left: '7%'
    });
    //reposition #categorySelector on refine pages
    var parentid = $('#categorySelector').parent().attr('id');
    if (parentid == 'refinebar_everything') {
        $('#categorySelector').css({ left: '60px', top: '180px' });
    }

    $('#categorySelector').load('/Views/Home/category_selector.html', function() {
        //replace dropdown menu with category selector button and divs:
        $('#anything_search li:first-child select').remove();
        $('#anything_search li:first-child label').after('<input type="text" name="category" value="Select a category" readonly="readonly" />');
        //set category selector button initial values:
        var selectedCategoryTitle = $('#cattitle').attr('value');
        var categoryTitle = (selectedCategoryTitle != null && selectedCategoryTitle != '') ? selectedCategoryTitle : "Select a category";
        $('#' + categoryContainer + ' input[name="category"]').attr('value', selectedCategoryTitle);
        if (parentid != 'refinebar_everything') {
            $('#' + categoryContainer + ' input[name="category"]').css('text-align', 'center');
        }
        var fadeinComplete;

        //avoid subcategory links redirection	
        // $('#categorySelector>ul>li a').click(function() { return false; });

        $('#subcategories').hover(function() {
            clearTimeout(myTimer2);
        });

        $('#categorySelector>ul>li').hover(function() {
            clearTimeout(myTimer2);
            var listitemlinkid = $(this).find('a')[0];
            var linkpos = $(this).position();
            var linktext = $.trim($(this).text());
            myTimer = setTimeout(function() { displaySubcategories(listitemlinkid, linkpos, linktext) }, hoverTimeout);

        },
				function() {
				    clearTimeout(myTimer);
				    myTimer2 = setTimeout("fadeoutSubcategories()", 600);
				});


        //   category selector
        $('#' + categoryContainer + ' input[name="category"], #' + categoryContainer + ' select[name="category"], ').click(function() {
            $('#categorySelector').fadeIn('fast', function() {

                fadeinComplete = true;
            });
        });
        //hide category selector when mouse clicked outside
        $('body').click(function() {
            if (fadeinComplete) {
                $('#subcategories').hide();
                $('#categorySelector').fadeOut('fast');
                fadeinComplete = false;
            }
        });
        $('#categorySelector').click(function(event) {
            event.stopPropagation();
            return false;
        });
        $('#' + categoryContainer + ' input[name="category"]').click(function(event) {
            event.stopPropagation();
        });


    });

    $('#anything_search_submit').click(function() {
    if ($('#anything_search > input[name=catname]').val() == '') {
            $('#anything_error').show();
            return false;
        }
    });
    $('#motors_search_submit').click(function() {
        return validateDropdown('motors_search', '', 'motors_error');
    });

    $('#property_search_submit').click(function() {
        return validateDropdown('property_search', '', 'property_error');
    });

});

var validateDropdown = function(containerDivId, defaultValue, errorId) {
    var selectedVal = selectedCategoryWithin(containerDivId);
    if (selectedVal == defaultValue) {
        $('#' + errorId).show();
        if (defaultValue == 'PROPERTY'){
            $('#' + errorId).parent().css('margin-bottom', '0');
        }
        return false;
    }
    return true;
}

var selectedCategoryWithin = function(containerDivId) {
    return categoryDropdownWithinNamedElement(containerDivId).val();
}

var categoryDropdownWithinNamedElement = function(containerDivId) {
    return $('#' + containerDivId + ' select[name="catname"]');
}

var displaySubcategories = function(linkelement, listitemposition, categoryName)
{
	clearTimeout(myTimer);
	var categoryId = linkelement.id;
	var parentElement = $("#" + categoryId).parent();
	parentElement.addClass('currentcategory');
	parentElement.siblings().removeClass('currentcategory');
	$('#parent_category').text(categoryName);

	leftpos = listitemposition.left - $('#subcategories').width() - 20;
	var toppos = listitemposition.top + 90;

	var parentLeftOffset = $('#categorySelector').offset().left;
	var leftOffset = parentLeftOffset - $('#subcategories').width();
	if (leftpos < -(parentLeftOffset))
	{
		if ((listitemposition.left + $('#subcategories').width() + 50) < $(window).width())
		{
			$('#subcategories').animate({ top: toppos, left: listitemposition.left + 50 }, 200);
		} else
		{
			$('#subcategories').animate({ top: toppos, left: listitemposition.left + parentElement.width() / 2 - $('#subcategories').width() / 2 }, 200);
		}
	} else
	{
		$('#subcategories').animate({ top: toppos, left: leftpos }, 200);
	}
	$("#subcategories_list").text("");
	$('#subcategories').fadeIn('slow', function()
	{
		url = LOOT.constant.path.webservice + LOOT.constant.webservice.category.property + '/GetChildCategories';
		
		dataToBeSent = { categoryCode: categoryId };
		
		$.post(url, dataToBeSent, function(data, textStatus)
		{
			
			$("#subcategories_list").text("");
			$.each(data, function(index, val) {
				$("#subcategories_list").append(tmpl("subcatTemplate", { path: '#', id: val.CategoryCode, title: val.Name }));
				setupSubcategoriesOnClick(categoryName, categoryId);
			});
		}, "json");
	});

	//s           return false;
}

var fadeoutSubcategories = function() {
    setLocationFieldDisplay();
    setRefineLocationFieldDisplay();
    $('#subcategories').fadeOut(600);
}

var setLocationFieldDisplay = function() {
    url = getShowAnythingLocationUrl();
    //dataToBeSent = getShowAnythingLocationCategory();
    var categoryCode = getShowAnythingLocationCategory();
    if (categoryCode != null && categoryCode != undefined && categoryCode != '') {
        $.post(url, { categoryCode: categoryCode }, function(data) {
            if (data == 'true')
                $('#anything_location,#anything_location_lb').css("visibility", "visible");
            else {
                $('#anything_location,#anything_location_lb').css("visibility", "hidden");
            }
        });
    }
}

var getShowAnythingLocationUrl = function() {
    return LOOT.constant.path.webservice + LOOT.constant.webservice.category.property + '/ShowAnythingLocation';
}

var getShowAnythingLocationCategory = function() {
    var categorycode;
    if ($('#catname').val() != undefined)
        categorycode = $('#catname').val();
    else
        categorycode = $('#categorycode').val();

    return categorycode;
}

var setRefineLocationFieldDisplay = function() {
    url = getShowAnythingLocationUrl();
    //dataToBeSent = getShowAnythingLocationCategory();
    var categoryCode = getShowAnythingLocationCategory();
    if (categoryCode != null && categoryCode != undefined && categoryCode != '') {
        $.post(url, { categoryCode: categoryCode }, function(data) {
            if (data == 'true')
                $('#location_header, #location_refine, #radius_value, #location').css("display", "block");
            else
                $('#location_header, #location_refine, #radius_value, #location').css("display", "none");
        });
    }
}

var getShowAnythingLocationUrl = function() {
    return LOOT.constant.path.webservice + LOOT.constant.webservice.category.property + '/ShowAnythingLocation';
}

var clearSearchErrors = function() {
    $('#' + categoryContainer + ' div.searcherror').hide();
}

var setupSubcategoriesOnClick = function(catName, catId) {
    $('#categorySelector ul li a').click(function() {
    $(this).css('border', 'solid thin red');
        var categoryId = this.id;
        $('#anything_search > input[name=catname]').val(categoryId);
     
        $('#' + categoryContainer + ' input[name="category"]').attr({
            'value': $(this).text(),
            'title': $(this).text()
        });

        clearSearchErrors();
        $('#subcategories').hide();
        $('#categorySelector').fadeOut('fast');
        $('#' + categoryContainer + ' input[name="category"]').css({
            'text-align': 'left',
            'padding-left': '5px'
        }); 								//s
        fadeinComplete = false; //s
        return false;
    });
    $('#categorySelector p a').click(function() {
        var categoryId = catId;
        $('#anything_search > input[name=catname]').val(catId);
        $('#' + categoryContainer + ' input[name="category"]').attr({
            'value': catName,
            'title': catName
        });

        $('#subcategories').hide();
        $('#categorySelector').fadeOut('fast');
        $('#' + categoryContainer + ' input[name="category"]').css({
            'text-align': 'center',
            'padding-left': '5px'
        });
        fadeinComplete = false; //s
        return false;
    });
}
