YAHOO.wishlist = function(){
	var $D = YAHOO.util.Dom;
	var $E = YAHOO.util.Event;
    var picker;
    var container;
    var container_first_child;
    var moved_from_cart_id;
 	return {
        init:function(){
            var moved_from_cart_id = null;
            var wishlist_links = YAHOO.util.Dom.getElementsByClassName('add_to_wishlist', 'a');
            for(var g=0;g<wishlist_links.length;g++) {
                $E.on(wishlist_links[g], 'click', YAHOO.wishlist.showPicker);
            }
            $E.on('add_to_wishlist', 'click', YAHOO.wishlist.showPicker);
            $E.on('wlp_cancel', 'click', YAHOO.wishlist.hidePicker);
            $E.on('wishlist_picker_form', 'submit', YAHOO.wishlist.addToWishlist);
            $E.on('wlp_wishlist', 'change', YAHOO.wishlist.displayNewListFields);
            picker = document.getElementById('wishlist_picker_container');
            if (picker) {
                picker.parentNode.removeChild(picker);
                container = document.getElementById('container');
                container_first_wrap = container.firstChild;
                while (container_first_wrap.nodeType != 1) {
                    container_first_wrap = container_first_wrap.nextSibling;
                }
                if (container_first_wrap) {
                    container_first_wrap.insertBefore(picker, container_first_wrap.firstChild);
                }
            }
            $E.on('my_wishlists', 'submit', YAHOO.wishlist.confirmDelete);
            var remove_links = YAHOO.util.Dom.getElementsByClassName('wishlist_remove', 'a');
            for(var g=0;g<remove_links.length;g++) {
                $E.on(remove_links[g], 'click', YAHOO.wishlist.confirmRemove);
            }
        },
        confirmDelete:function(e){
            if (! confirm('Are you sure you want to delete the selected wishlists?')) {
                $E.stopEvent(e);
            }
        },
        confirmRemove:function(e){
            if (! confirm('Are you sure you want to remove this item from your wishlist?')) {
                $E.stopEvent(e);
            }
        },
        displayNewListFields:function(){
            var wishlist = document.getElementById('wlp_wishlist');
            if (wishlist.value == 'new') {
                $D.setStyle('new_list_fields', 'display', 'block');
            } else {
                $D.setStyle('new_list_fields', 'display', 'none');
            }
        },
        showPicker:function(e) {
            YAHOO.wishlist.moved_from_cart_id = this.getAttribute('id').replace(/add_to_wishlist_/,'')
            var id_parts = YAHOO.wishlist.moved_from_cart_id.split(/_/);
            var product_id = id_parts[0];
            var size;
            if (id_parts.length > 1) {
                size = id_parts[1];
                size = size == 0 ? '' : size;
            } else {
                size = YAHOO.product.checkRing();
                if (size === true) {
                    size = '';
                } else if (! size) {
                    $E.stopEvent(e);
                    return;
                }
            }
            if (picker) {
                $E.stopEvent(e);
                var x = $E.getPageX(e);
            	var y = $E.getPageY(e);

                var container_region = YAHOO.util.Dom.getRegion(container);
                var container_height = container_region.bottom - container_region.top;
                var container_region = YAHOO.util.Dom.getRegion(container_first_wrap);
                $D.setStyle('wishlist_picker_overlay', 'opacity', .6);
                $D.setStyle(picker, 'opacity', 0);
                $D.setStyle(picker, 'display', 'block');
                $D.setStyle(picker, 'height', container_height  + 'px');

                var picker_form = document.getElementById('wishlist_picker');
                if (picker_form) {
                    var picker_region = YAHOO.util.Dom.getRegion(picker_form);
                    var elmWidth = picker_region.right - picker_region.left;
                    var elmHeight = picker_region.bottom - picker_region.top;
                    $D.setStyle(picker_form, 'margin-top', (Math.max(y - container_region.top - Math.floor(elmHeight / 2), 10)) + 'px');
                    $D.setStyle(picker_form, 'margin-left', (Math.max(x - container_region.left - Math.floor(elmWidth / 2), 10)) + 'px');
                }
                document.getElementById('wlp_product_id').value = product_id;
                document.getElementById('wlp_ring_size').value = size;
                YAHOO.wishlist.displayNewListFields();
                $D.setStyle('browse_by', 'visibility', 'hidden');
                $D.setStyle('wishlist_picker', 'opacity', 1);
                var AnimObj1;
                AnimObj1 = new YAHOO.util.Anim(picker,{opacity:{from:0,to:1}});
                AnimObj1.duration = .2;
                AnimObj1.animate();
            }
        },
        hidePicker:function(e) {
            if (picker) {
                var AnimObj1;
                AnimObj1 = new YAHOO.util.Anim(picker,{opacity:{from:1,to:0}});
                AnimObj1.duration = .2;
                AnimObj1.onComplete.subscribe(function() {$D.setStyle(picker, 'display', 'none')});
                AnimObj1.onComplete.subscribe(function() {$D.setStyle('browse_by', 'visibility', 'visible')});
                AnimObj1.animate();
            }
        },
        addedNewWishlist:function(o){
            var error = 'Unknown error';
            var id;
            var name;
            if (o.responseText) {
                try {
                    var data = eval("(" + unescape(o.responseText) +")");
                    error = data.error;
                    id = data.wishlist_id;
                    name = data.wishlist_name;
                } catch (e) {
                }
            }
            if (error > '') {
                alert(error);
            } else {
                var wishlist = document.getElementById('wlp_wishlist');
                var option = document.createElement('option');
                wishlist.options[wishlist.selectedIndex].selected = false;
                option.value = id;
                option.appendChild(document.createTextNode(name));
                wishlist.appendChild(option);
                option.selected = 'selected';
                YAHOO.wishlist.addToWishlistSubmit();
            }
        },
        addToWishlist:function(e){
            $E.stopEvent(e);
            var wishlist = document.getElementById('wlp_wishlist');
            if (wishlist) {
                var id = wishlist.value;
                if (id == 'new') {
                    YAHOO.util.Connect.setForm(this);
                    var cObj = YAHOO.util.Connect.asyncRequest('GET', '/account/wishlists', {success: YAHOO.wishlist.addedNewWishlist});
                } else {
                    YAHOO.wishlist.addToWishlistSubmit();
                }
            }
        },
        addToWishlistSubmit:function(wishlist_id){
            var formObject = document.getElementById('wishlist_picker_form');
            YAHOO.util.Connect.setForm(formObject);
            // This example facilitates a POST transaction.
            // An HTTP GET can be used as well.
            var cObj = YAHOO.util.Connect.asyncRequest('POST', formObject.getAttribute('action'), {success: YAHOO.wishlist.added});
            YAHOO.wishlist.hidePicker();
        },
        added:function(o){
            var success = false;
            if (o.responseText) {
                try {
                    success = eval("(" + unescape(o.responseText) +")");
                } catch (e) {
                }
            }
            if (success) {
                alert('Product successfully added to your wishlist');
                var remove_link = document.getElementById('remove_' + YAHOO.wishlist.moved_from_cart_id);
                if (remove_link) {
                    window.location.href = remove_link.getAttribute('href');
                }
            } else {
                alert('Error adding to your wishlist');
            }
        }
    };
}();

YAHOO.util.Event.addListener(window, "load", YAHOO.wishlist.init);

