// $Id: jquery_category_tree.js 10 2009-06-04 08:53:35Z Ian.H $
// Category tree (members)
function getCategoryTree(target, prefix, cat, catId, path) {
    $(function() {
        if (target.substr(0, 3) != 'ul#') {
            target = 'ul#' + target;
        }

        // Default list...
        $(target).load(path + '/categorytree.ajax.php?prefix=' + prefix + '&category=' + cat + '&category_id=' + catId + '&path=' + path);
    });
}

// Get left offset
function getLeftOffset(obj) {
    var scrolledX;
    var centreX;
    var leftOffset;

    // Get scroll position
    if (self.pageYOffset) {
        scrolledX = self.pageXOffset;
    } else if (document.documentElement && document.documentElement.scrollTop) {
        scrolledX = document.documentElement.scrollLeft;
    } else if (document.body) {
        scrolledX = document.body.scrollLeft;
    }

    // Get browser window coords
    if (self.innerHeight) {
        centreX = self.innerWidth;
    } else if (document.documentElement && document.documentElement.clientHeight) {
        centreX = document.documentElement.clientWidth;
    } else if (document.body) {
        centreX = document.body.clientWidth;
    }

    leftOffset = scrolledX + (centreX - $(obj).width()) / 2;

    return leftOffset;
}


// Get top offset
function getTopOffset(obj) {
    var scrolledY;
    var centreY;
    var topOffset;

    // Get scroll position
    if (self.pageYOffset) {
        scrolledY = self.pageYOffset;
    } else if (document.documentElement && document.documentElement.scrollTop) {
        scrolledY = document.documentElement.scrollTop;
    } else if (document.body) {
        scrolledY = document.body.scrollTop;
    }

    // Get browser window coords
    if (self.innerHeight) {
        centreY = self.innerHeight;
    } else if (document.documentElement && document.documentElement.clientHeight) {
        centreY = document.documentElement.clientHeight;
    } else if (document.body) {
        centreY = document.body.clientHeight;
    }

    topOffset = scrolledY + (centreY - $(obj).height()) / 2;

    return topOffset;
}

function getWindowTop(obj) {
    var scrolledY;

    if (self.pageYOffset) {
        scrolledY = self.pageYOffset;
    } else if (document.documentElement && document.documentElement.scrollTop) {
        scrolledY = document.documentElement.scrollTop;
    } else if (document.body) {
        scrolledY = document.body.scrollTop;
    }

    return scrolledY;
}

function addCatItem(data) {
    var dataBits = data.split('|');
    var target = 'select#' + dataBits[0];
    var title = dataBits[1];
    var catId = dataBits[2];
    var leftOffset = getLeftOffset('#new-alert-box');
    //var topOffset = getTopOffset('#new-alert-box');
    var topOffset = getWindowTop('#new-alert-box');
    var fade;

    $('#new-alert-box').css({
        'left'      : leftOffset,
        'top'       : topOffset,
        'display'   : 'block',
        'z-index'   : 999
    });
    $('#new-alert-box').removeClass('alert-box-error');

    if (!isCatAlreadyAdded(target, catId)) {
        // Add selection to box
        $(target).append('<option value="' + catId + '">' + title + '</option>');

        // Display 'added' notification
        resetAlertTimeout();
        displayNewAlert(title + ' added.');
//        $('#new-alert-box').html(title + ' added.');
//        $('#new-alert-box').fadeIn(500, function() {
//            setTimeout(function() {
//                $('#new-alert-box').fadeOut(1000);
//            }, 2000);
//        });
    } else {
        resetAlertTimeout();
        displayNewAlert(title + ' already exists in your list.');
//        $('#new-alert-box').addClass('alert-box-error');
//        $('#new-alert-box').html(title + ' already exists in your list.');
//        $('#new-alert-box').fadeIn(500, function() {
//            setTimeout(function() {
//                $('#new-alert-box').fadeOut(1000);
//            }, 2000);
//        });
    }
}

function isCatAlreadyAdded(target, catId) {
    var ret = false;

    $(function() {
        if (target.substr(0, 7) != 'select#') {
            target = 'select#' + target;
        }

        $(target + ' option').each(function() {
            if ($(this).val() == catId) {
                ret = true;
                return false;
            }
        });
    });

    return ret;
}


// Global...
$(function() {
    // Add category
    $('img.tree-add-icon').live('click', function() {
        var data = $(this).parent().attr('rel');
        addCatItem(data);
    });
    $('span.cat-item').live('click', function() {
        var data = $(this).parent().attr('rel');
        addCatItem(data);
    });

    // Expand category
    $('span.tree-branch-collapsed').live('click', function() {
        var id = $(this).attr('id');
        var idBits = id.split('-');
        var catId = idBits[4];
        var parentRelBits;
        var state = $(this).attr('rel');
        var defaultURL;

        if (state == 'collapsed') {
            // Load category data
            parentRelBits = $(this).parent().attr('rel').split('|');
            path = parentRelBits[3];
            getCategoryTree('sub-item-' + catId, 'listing_', 'ListingCategory', catId, path);

            $(this).parent().removeClass('list-collapsed').addClass('list-expanded');
            $(this).attr({
                rel     : 'expanded',
                title   : 'Collapse this category'
            });
        } else {
            $(this).parent().removeClass('list-expanded').addClass('list-collapsed');
            $(this).attr({
                rel     : 'collapsed',
                title   : 'Expand this category'
            });

            // Remove sub-item list
            $('ul#sub-item-' + catId).html('');
        }
    });

    // 'add' icon hover
    $('img.tree-add-icon').live('mouseover', function() {
        var imgId = $(this).attr('id');
        var catId = imgId.split('-')[2];

        $('img#' + imgId).attr('src', '/images/icons/icon_add3_pink.png');
        $('span#cat-item-' + catId).css({
            'color'     : '#FF99CC'
        });
    });
    $('img.tree-add-icon').live('mouseout', function() {
        var imgId = $(this).attr('id');
        var catId = imgId.split('-')[2];

        $('img#' + imgId).attr('src', '/images/icons/icon_add3_light.png');
        $('span#cat-item-' + catId).css({
            'color'     : '#000000'
        });
    });
    $('span.cat-item').live('mouseover', function() {
        var itemId = $(this).attr('id');
        var catId = itemId.split('-')[2];

        $(this).css({
            'color'     : '#FF99CC'
        });
        $('img#add-cat-' + catId).attr('src', '/images/icons/icon_add3_pink.png');
    });
    $('span.cat-item').live('mouseout', function() {
        var itemId = $(this).attr('id');
        var catId = itemId.split('-')[2];

        $(this).css({
            'color'     : '#000000'
        });
        $('img#add-cat-' + catId).attr('src', '/images/icons/icon_add3_light.png');
    });

    // Remove added categories
    $('img#cat-remove').live('click', function() {
        if (confirm('Really remove the selected categories?')) {
            $('select#tree-cats-added option:selected').each(function() {
                $(this).remove();
            });
        }
    });

    // View category path
    $('img#cat-view-path').click(function() {
        if ($('select#tree-cats-added option:selected:first').val() != undefined) {
            var catId = $('select#tree-cats-added option:selected:first').val();
            var catPath = $.get('/members/listing/category_detail.php?id=' + catId, function(catPath) {
                $('div#cat-path-viewer > span#cat-path-viewer-title').html('<img src="/images/buttons/btn_win_close.png" alt="[x]" class="win-close-icon" />Category Path');
                $('div#cat-path-viewer > span#cat-path-viewer-inner').html(catPath);
            });

            //$('div#cat-path-viewer').load('/members/listing/category_detail.php?id=' + catId);
            $('div#cat-path-viewer').fadeIn(500);
        }
    });
});

