function trim(str, chars) {
	chars = chars || "\\s";
	str = str.replace(new RegExp("^[" + chars + "]+", "g"), "");
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}
 
function getoffset(elem) {    
    var t = elem.offsetTop, l = elem.offsetLeft;
    while(elem = elem.offsetParent)
        t += elem.offsetTop,l += elem.offsetLeft;
    return [t, l];
}

function viewcollections(elem) {
    var coll = document.getElementById('collAjax');
    coll.style.display = 'block';
}

var ajax_url = '/search_setting_ajax/';
function get_data_and_replace(with_page_index) {
    $(".ajax_content").ajaxStart(function(){
        $('.ajax_content').html('<div style="background:#FFFFFF;width:732px;position:static;" class="loading_preview"><img src="/media/images/ico/ajax-loader.gif" style="margin-top:150px;" /></div>'); });
 
    var data_string = $('#setting_search_form').serialize();
    if (with_page_index != undefined)
        data_string = data_string + "&page=" + $("#page_index_input").val();
    $.get(ajax_url, data_string, function(data) {
        $('.ajax_content').html(data);
        if (over_lay_flag != undefined && over_lay_flag == 'True')
        {   
            $(".ajax_content .choose-setting-list").addClass("ring-choose-setting-list"); 
            $.getScript('/media/js/cdn_powerreviews/customized.js');
            var did = $("#setting_search_form input[name='did']").val()
            var xhr;
            $(".choose-setting-list.ring-choose-setting-list li").mouseenter(function()
            {
                //abort the last ajax request if it was not completed
                if (xhr && xhr.readystate != 4){
                    xhr.abort();
                }
                $.ajaxSetup({global:false});
                var ajax_url_overlay = '/product_details_overlay/' + $(this).attr("id") + '/';
                if (did != "") {ajax_url_overlay = ajax_url_overlay + '?did=' + did;}
                xhr = $.get(ajax_url_overlay, function(data){
                    $('#info-overlay').html(data);
                    $('#info-overlay').css("display", "block");});
                var pic_pos = $(this).offset();
                if (pic_pos.left > 610) {
                    $("#info-overlay").css({"left":pic_pos.left - 263,"top":pic_pos.top});
                }
                else {
                    $("#info-overlay").css({"left":pic_pos.left + 236,"top":pic_pos.top});
                }
                var height = $(this).height();
                $("#info-overlay").css("min-height", height + 30);
            });

            $(".choose-setting-list.ring-choose-setting-list li").mouseleave(function()
            {
                //abort the last ajax request if it was not completed
                if (xhr && xhr.readystate != 4){
                    xhr.abort();
                }
                $.ajaxSetup({global:true});
                $("#info-overlay").css("display", "none"); 
            });

            $(".thumb-lean img").mouseenter(function()
            {
                var img_id= $(this).attr("id").slice(0, -6);
                $("#" + img_id).attr("style", "display:none");
                $('#' + img_id + '_side').attr("style", "display:inline");
            });

            $(".thumb-lean img").mouseleave(function()
            {
                var img_id= $(this).attr("id").slice(0,-6);
                $('#' + img_id + '_side').attr("style", "display:none");
                $("#" + img_id).attr("style", "display:inline");
            });
        }
    });
}

function sendajax(obj){
    // change input button status first
    if (obj.type == "checkbox")
        change_checkbox_status(obj);
    else // for radio
        change_radio_status(obj);
    
    get_data_and_replace();
}

//Only for CYO search settings
function _sort(sortby){
    $("form#setting_search_form input[name='sortby']").val(sortby);
    get_data_and_replace();
    return false;
}

function update_carat_range(obj) {
    var carat_range = $('#setting_search_form input[name=carat_range]').val();
    if (obj.checked) {
        if (carat_range.indexOf(obj.value) == -1) {
            carat_range = trim(carat_range, ",") + "," + obj.value;
        }
        $('.error-tip').hide();
    }
    else {
        if (carat_range.indexOf("-") != -1 && carat_range.replace(obj.value).indexOf("-") == -1) {
            $('.error-tip').html('Please select at least one Carat Range to view our available settings. <a href="/contact/" class="td_u">Contact us</a> for assistance.');
            $('.error-tip').show();
            window.location.hash = "error_info";
            obj.checked = true;
            return false;
        }
        else {
            if (carat_range.indexOf("-") == -1)
                carat_range = "0-p5,p5-1,1-1p5,1p5-2,2-";
            carat_range = carat_range.replace(obj.value, "");
        }
    }
    $('#setting_search_form input[name=carat_range]').val(carat_range);
}

function update_price_range(obj) {
    var price_range = $('#setting_search_form input[name=price_range]').val();
    if (obj.checked) {
        if (price_range.indexOf(obj.value) == -1) {
            price_range = trim(price_range, ",") + "," + obj.value;
        }
        $('.error-tip').hide();
    }
    else {
        if (price_range.indexOf("-") != -1 && price_range.replace(obj.value).indexOf("-") == -1) {
            $('.error-tip').html('Please select at least one Price Range to view our available settings. <a href="/contact/" class="td_u">Contact us</a> for assistance.');
            $('.error-tip').show();
            window.location.hash = "error_info";
            obj.checked = true;
            return false;
        }
        else {
            if (price_range.indexOf("-") == -1)
                price_range = "0-499,500-999,1000-1999,2000-2999,3000-";
            price_range = price_range.replace(obj.value, "");
        }
    }
    $('#setting_search_form input[name=price_range]').val(price_range);
}

function update_gift_price_range(obj) {
    var price_range = $('#setting_search_form input[name=gift_price_range]').val();
    if (obj.checked) {
        if (price_range.indexOf(obj.value) == -1) {
            price_range = trim(price_range, ",") + "," + obj.value;
        }
        $('.error-tip').hide();
    }
    else {
        if (price_range.indexOf("-") != -1 && price_range.replace(obj.value).indexOf("-") == -1) {
            $('.error-tip').html('Please select at least one Price Range to view our available settings. <a href="/contact/" class="td_u">Contact us</a> for assistance.');
            $('.error-tip').show();
            window.location.hash = "error_info";
            obj.checked = true;
            return false;
        }
        else {
            if (price_range.indexOf("-") == -1)
                price_range = "0-249,250-499,500-999,1000-1999,2000-2999,3000-";
            price_range = price_range.replace(obj.value, "");
        }
    }
    $('#setting_search_form input[name=gift_price_range]').val(price_range);
}

function ajaxsenddata(obj) {
    // Reset page index on every clicking.
    $("#page_index_input").val('1');

    var val = '';
    var name = obj.name.substring(2);
    if (name == 'shape' || name == 'match_set') {
        val = obj.value;
    }
    else if (name == 'collection'){
        val = obj.value;
        $('input[name=collection]').val(val);
        sendajax(obj);
        return true;
    }
    else if (name == 'availability'){
        val = obj.value;
        $('input[name=availability]').val(val);
        sendajax(obj);
        return true;
    }
    else if (name == 'carat') {
        update_carat_range(obj);
        sendajax(obj);
        return true;
    }
    else if (name == 'price') {
        update_price_range(obj);
        sendajax(obj);
        return true;
    }
    else if (name == 'gift_price'){
        update_gift_price_range(obj);
        sendajax(obj);
        return true;
    }
    else if (name == 'jewelry') {
        val = obj.value;
        $('input[name=jewelry]').val(val);
        sendajax(obj);
        return true;
    }
    else {
        var list = $('#l_' + name + ' input:checkbox');
        for(i = 0; i < list.length; i++) {
            if(list[i].checked) {
                if(val != '') {
                    val += ',';
                }
                val += list[i].value;
            }
        }
    }

    //Type conversion, convert val to string.
    val = val + '';
    if (val !== '' || name == 'match_set' || name == 'collection') {
        $('input[name=' + name + ']').val(val);
        $('.error-tip').hide();
    } 
    else {
        var error = '';
        if (name == 'metal') {
            error = 'METAL TYPE'; 
        } 
        else if (name == 'selected_category') {
            error = 'PRODUCT CATEGORY';
        }
        else if (name == 'selected_style') {
            error = $(obj).parent().parent().parent().find("dt").html();
        }
        else if (name == 'design_era') {
            error = 'DESIGN ERA';
        }
        else if (name == 'eternity_style') {
            error = 'ETERNITY STYLE';
        }
        else if (name == 'gemstone_color') {
            error = 'COLOR';
        }
        else if (name == 'gemstone_shape') {
            error = 'SHAPE';
        }
        else if (name == 'colored_gemstone') {
            error = 'GEMSTONE';
        }

        if (error != '') {
            $('.error-tip').html('Please select at least one ' + error + ' to view our available settings. <a href="/contact/" class="td_u">Contact us</a> for assistance.');
            $('.error-tip').show();
            window.location.hash = "error_info";
            obj.checked = true;
            return false;
        } 
        else {
            $('.error-tip').hide();
        }
    }

    sendajax(obj);
}

function changecollection(obj) {
    var val = $(obj).attr("name");
    if (val == 'all') val = '';
    $('input[name=collection]').val(val);
    $('#setting_search_form').submit();
}

function change_radio_status(obj) {
    // Remove all radio's checked status
    $(obj).parent().parent().parent().find("dd").each(function() { 
            $(this).find("label").removeClass("checkboxAreaChecked").addClass("checkboxArea");
        });
    $(obj).parent().removeClass("checkboxArea").addClass("checkboxAreaChecked");
}

function change_checkbox_status(obj) {
    if (obj.checked) {
        $(obj).parent().removeClass("checkboxArea").addClass("checkboxAreaChecked");
    }
    else {
        $(obj).parent().removeClass("checkboxAreaChecked").addClass("checkboxArea");
    }
}

function init_search_area() {
    var checkboxes = ['metal', 'selected_style', 'selected_category', 'match_set', 'eternity_style', 'design_era', 'colored_gemstone', 'gemstone_color', 'gemstone_shape'];
    var name = null, search_value = null, search_value_list = null, input_list = null;

    for (i = 0; i < checkboxes.length; i++) {
        name = checkboxes[i];
        search_value = $('#setting_search_form input[name=' + name + ']').val();
        if (!search_value) continue;

        search_value_list = search_value.split(',');
        input_list = $('#l_' + name + ' input');
        for (j = 0; j < input_list.length; j++) {
            for (k = 0; k < search_value_list.length; k++) {
                if (input_list[j].value == search_value_list[k]) {
                    input_list[j].checked = 'checked';
                }
            }
        }
    }

    // Init Shape condition
    var shape = $('input[name=shape]').val();
    $('input[value=' + shape + ']').attr('checked', true);

    // Init Collection condition
    var collection = $('#setting_search_form input[name=collection]').val();
    if (collection == '') collection = 'all';
    $('#l_collection input[value=' + collection + ']').attr('checked', true);

    // Init Matched Sets condition
    var match_set = $("#setting_search_form input[name=match_set]").val();
    if (match_set == "") match_set = "all";
    $('#l_match_set input[value=' + match_set + ']').attr('checked', true);

    // Init Jewelry condition
    var jewelry = $("#setting_search_form input[name=jewelry]").val();
    $('input[value=' + jewelry + ']').attr('checked', true);

    // Init Availability condition
    var availability = $("#setting_search_form input[name=availability]").val();
    $('input[value=' + availability + ']').attr('checked', true);

    // Init price range condition
    if ($("#setting_search_form input[name=price_range]").length > 0) {
        var price_range = $("#setting_search_form input[name=price_range]").val();
        if (price_range.indexOf("-") != -1)
        {
            if (price_range.indexOf("0-499") != -1)
                $('input[value=0-499]').attr('checked', true);
            if (price_range.indexOf("500-999") != -1)
                $('input[value=500-999]').attr('checked', true);
            if (price_range.indexOf("1000-1999") != -1)
                $('input[value=1000-1999]').attr('checked', true);
            if (price_range.indexOf("2000-2999") != -1)
                $('input[value=2000-2999]').attr('checked', true);
            if (price_range.indexOf("3000-") != -1)
                $('input[value=3000-]').attr('checked', true);
        }
        else {
            $("#setting_search_form input[name=price_range]").val("");
            $('input[value=0-499]').attr('checked', true);
            $('input[value=500-999]').attr('checked', true);
            $('input[value=1000-1999]').attr('checked', true);
            $('input[value=2000-2999]').attr('checked', true);
            $('input[value=3000-]').attr('checked', true);
        }
    }

    // Init gift_price_range condition
    if ($("#setting_search_form input[name=gift_price_range]").length > 0) {
        var price_range = $("#setting_search_form input[name=gift_price_range]").val();
        if (price_range.indexOf("-") != -1)
        {
            if (price_range.indexOf("0-249") != -1)
                $('input[value=0-249]').attr('checked', true);
            if (price_range.indexOf("250-499") != -1)
                $('input[value=250-499]').attr('checked', true);
            if (price_range.indexOf("500-999") != -1)
                $('input[value=500-999]').attr('checked', true);
            if (price_range.indexOf("1000-1999") != -1)
                $('input[value=1000-1999]').attr('checked', true);
            if (price_range.indexOf("2000-2999") != -1)
                $('input[value=2000-2999]').attr('checked', true);
            if (price_range.indexOf("3000-") != -1)
                $('input[value=3000-]').attr('checked', true);
        }
        else {
            $("#setting_search_form input[name=gift_price_range]").val("");
            $('input[value=0-299]').attr('checked', true);
            $('input[value=250-499]').attr('checked', true);
            $('input[value=500-999]').attr('checked', true);
            $('input[value=1000-1999]').attr('checked', true);
            $('input[value=2000-2999]').attr('checked', true);
            $('input[value=3000-]').attr('checked', true);
        }
    }

    // Init colored gemstone carat range condition
    if ($("#setting_search_form input[name=carat_range]").length > 0) {
        var price_range = $("#setting_search_form input[name=carat_range]").val();
        if (price_range.indexOf("-") != -1)
        {
            if (price_range.indexOf("0-p5") != -1)
                $('#l_carat input[value=0-p5]').attr('checked', true);
            if (price_range.indexOf("p5-1") != -1)
                $('#l_carat input[value=p5-1]').attr('checked', true);
            if (price_range.indexOf("1-1p5") != -1)
                $('#l_carat input[value=1-1p5]').attr('checked', true);
            if (price_range.indexOf("1p5-2") != -1)
                $('#l_carat input[value=1p5-2]').attr('checked', true);
            if (price_range.indexOf("2-") != -1)
                $('#l_carat input[value=2-]').attr('checked', true);
        }
        else {
            $("#setting_search_form input[name=carat_range]").val("");
            $('#l_carat input[value=0-p5]').attr('checked', true);
            $('#l_carat input[value=p5-1]').attr('checked', true);
            $('#l_carat input[value=1-1p5]').attr('checked', true);
            $('#l_carat input[value=1p5-2]').attr('checked', true);
            $('#l_carat input[value=2-]').attr('checked', true);
        }
    }

    // Change the style of checked items
    $(".niceform input:checked").each(function(){$(this).parent().removeClass("checkboxArea").addClass("checkboxAreaChecked");});
}

$(".sortBy-a").live("mouseover", function(){$("#sortByOptions").show();})
$(".sortBy-a").live("mouseout",  function(){$("#sortByOptions").hide();})

function close_collection(e) {
    var el = document.getElementById("collAjax");
    if(!el.contains(e.toElement || e.fromElement)) {
        el.style.display = 'none';
        var collection = get_collection_value()
        $(el).find("li").removeClass("BgOff").addClass("BgOn");
        $("li[name='" + collection + "']").removeClass("BgOn").addClass("BgOff");
    }
    return false;
}

function highlight_collection(ev) {
    var collection = $(this);
    var default_col = get_collection_value();
    collection.parent().find("li[name!='" + default_col +"']").removeClass("BgOff").addClass("BgOn");
    collection.removeClass("BgOn").addClass("BgOff");
    return false;
}

function get_collection_value(){
    var collection = $('input[name=collection]').val();
    if (collection == '') 
        collection = 'all';
    return collection;
}

(function (bool) {
//hack in Firefox
    var html;
 
    if (bool) {
    
        html = window.HTMLElement.prototype;
        
        window.__defineGetter__("event", function () {
            var o = arguments.callee;
            
            do {
            
                if (o.arguments[0] instanceof Event) return o.arguments[0];
            
            } while (o = o.caller);
            
            return null;
        
        });
        
        Event.prototype.__defineGetter__("fromElement", function () {
            return this.relatedTarget;

        });
        
        html.contains = function (o) {
            do {
                if (o == this) return true;
                if (!o.parentNode) return false;
            } while (o = o.parentNode);
            return false;
        };    
    }

})($.browser.mozilla);

