﻿(function($) {

    $.giftOptions = function(options) {
        return $.giftOptions.impl.init(options);
    };

    $.fn.giftOptions = function(options) {
        return $.giftOptions.impl.init(this, options);
    };

    /*
    * default options
    */
    $.giftOptions.defaults = {
        res: {}
    };

    $.giftOptions.impl = {

        /*
        * options
        */
        opts: null,

        /*
        * helper
        */
        helper: {},

        /*
        * itemId
        */
        itemId: null,

        /*
        * Initialize the control
        */
        init: function(modal, options) {

            var self = this;

            this.opts = $.extend({}, $.giftOptions.defaults, options);

            // helpers
            self.helper.modal = modal;
            self.helper.form = self.helper.modal.find('div.form');
            self.helper.subformPackaging = self.helper.form.find('div.subform-packaging');
            self.helper.subformMessage = self.helper.modal.find('div.subform-message');
            self.helper.overlay = $('<div class="overlay"></div>').insertBefore(self.helper.modal);
            self.helper.close = $('<a class="close-giftoptions" href="#">' + self.opts.res.close + '</a>').prependTo(self.helper.modal);
            self.helper.packagingOpts = self.helper.form.find('.field-giftoptions-packaging .radiobutton-collection');
            self.helper.noteOpts = self.helper.form.find('.field-giftoptions-note .radiobutton-collection');
            self.helper.message = self.helper.form.find('#giftoptions-message');

            // fix ie6
            if ($.browser.msie && ($.browser.version < 7)) {

                self.helper.overlay
                    .css({
                        position: 'absolute',
                        height: $(document).height() + 'px'
                    })
                ;
            }

            // position
            self.position();

            // events
            self.events();

            return self;
        },

        /*
        * Position
        */
        position: function() {

            var self = this;
            var $content = $('div#content');

            self.helper.modal
                .css({
                    left: '50%',
                    top: '50%',
                    marginLeft: -self.helper.modal.outerWidth() / 2 + 'px',
                    marginTop: -self.helper.modal.outerHeight() / 2 + 'px'
                })
                ;

            // fix ie6
            if ($.browser.msie && ($.browser.version < 7)) {

                self.helper.modal
                    .css({
                        position: 'absolute'
                    })
                    .bgIframe()
                    ;

                //self.fixIE();
            }

            return;
        },

        /*
        * Events
        */
        events: function() {

            var self = this;

            // packaging open
            $('a.open-giftoptions').click(function(e) {
                e.preventDefault();

                self.helper.subformPackaging
                    .css({
                        display: 'block'
                    })
                    ;

                self.helper.subformMessage
                    .css({
                        display: 'none'
                    })
                    ;

                self.itemId = $(this).attr('href').split('#')[1]
                CreateThe.Com.Web.CodeBase.WebServices.ShoppingBagService.GetGiftOptions(self.itemId, $.giftOptions.impl.get_success, $.giftOptions.impl.get_failure, self);
                self.show();
            });

            // message open
            $('a.open-giftmessage').click(function(e) {
                e.preventDefault();

                self.helper.subformMessage
                    .css({
                        display: 'block'
                    })
                    ;

                self.helper.subformPackaging
                    .css({
                        display: 'none'
                    })
                    ;

                self.itemId = null;
                CreateThe.Com.Web.CodeBase.WebServices.ShoppingBagService.GetGiftOptions(self.itemId, $.giftOptions.impl.get_success, $.giftOptions.impl.get_failure, self);
                self.show();
            });

            // close
            self.helper.close.click(function(e) {
                e.preventDefault();
                self.hide();
            });

            // cancel
            self.helper.modal.find('a.cancel-giftoptions').click(function(e) {
                e.preventDefault();
                self.hide();
            });

            // post
            self.helper.modal.find('a.post-giftoptions').click(function(e) {
                e.preventDefault();
                self.block();
                var packaging = self.helper.packagingOpts.find('input:checked').attr('value');
                var note = (self.helper.noteOpts.find('input:checked').attr('value') == 'note') ? self.helper.message.val() : self.helper.noteOpts.find('input:checked').attr('value');
                CreateThe.Com.Web.CodeBase.WebServices.ShoppingBagService.SetGiftOptions(self.itemId, note, packaging, $.giftOptions.impl.set_success, $.giftOptions.impl.get_failure, self);
            });

            // overlay
            self.helper.overlay.click(function(e) {
                e.preventDefault();
                self.hide();
            });

            // note radio button click
            self.helper.noteOpts.find('input:radio').click(function() {
                if ($(this).val() == 'note')
                    self.helper.message.parent()
                        .css({
                            display: 'block'
                        })
                        ;
                else
                    self.helper.message.parent()
                        .css({
                            display: 'none'
                        })
                        ;
            });

            return;
        },

        /*
        * Reset
        */
        reset: function(packaging, note) {

            var self = this;

            self.helper.packagingOpts.find('input:radio[value="' + packaging + '"]')
		        .attr('checked', 'checked')
		        ;

            if (note == 'null' || note == 'blank') {
                self.helper.noteOpts.find('input:radio[value="' + note + '"]')
		            .attr('checked', 'checked')
		            ;

                self.helper.message
		            .val('')
		            .parent()
		                .css({
		                    display: 'none'
		                })
		                ;
            }
            else {
                self.helper.noteOpts.find('input:radio[value="note"]')
		            .attr('checked', 'checked')
		            ;

                self.helper.message
		            .val(note)
		            .parent()
		                .css({
		                    display: 'block'
		                })
		                ;
            }

            return;
        },

        /*
        * Show
        */
        show: function() {

            var self = this;

            self.helper.form
		        .css({
		            display: 'block'
		        })
		        ;

            self.helper.overlay
		        .css({
		            opacity: '0.00',
		            display: 'block'
		        })
		        .fadeTo(1000, '0.60')
		        ;

            return;
        },

        /*
        * Hide
        */
        hide: function() {

            var self = this;

            self.helper.modal
		        .fadeOut(1000, function() {
		            self.unblock();
		        })
		        ;

            self.helper.overlay
		        .fadeOut(1000)
		        ;

            return;
        },

        /*
        * get_success
        */
        get_success: function(data, self) {

            var options = eval(data);
            var packaging = options[0];
            var note = options[1];

            self.reset(packaging, note);

            self.helper.modal
		        .fadeIn(1000)
		        ;

            return;
        },

        /*
        * set_success
        */
        set_success: function(data, self) {
            
            var options = eval(data);
            var packaging = false;
            var note = null;
            
            if (options == null)
            {
                alert(self.opts.res.giftMessageLimit);
                
                self.unblock();
                
                return;
            }
            
            // packaging
            switch (options[0])
            {
                case 'True':
                    packaging = self.opts.res.yes;
                    break;
                
                default:
                    packaging = self.opts.res.none;
            }
            
            // note
            switch (options[1])
            {
                case 'null':
                    note = self.opts.res.none;
                    break;
                
                case 'blank':
                    note = self.opts.res.blank;
                    break;
                
                default:
                    note = options[1]
            }
            
            if (options[1] == 'null')
            {
                $('.giftmessage-container .giftmessage-clickhere')
                    .css({
                        display: 'block'
                    })
                    ;
                
                $('.giftmessage-container .giftmessage-message')
                    .css({
                        display: 'none'
                    })
                    ;
            }
            else
            {
                $('.giftmessage-container .giftmessage-clickhere')
                    .css({
                        display: 'none'
                    })
                    ;
                
                $('.giftmessage-container .giftmessage-message')
                    .css({
                        display: 'block'
                    })
                    ;
            }
            
            if (self.itemId != null)
            {
                $('#itemid-' + self.itemId + ' .packaging-status')
		            .html(packaging)
		            ;
		    }
            else
            {
                $('.giftmessage-container .giftmessage-status')
		            .html(note)
		            ;
		    }
            
            self.hide();
            
            return;
        },

        /*
        * get_failure
        */
        get_failure: function(data, self) {

            var item = eval(data);

            alert('An error has occurred.');

            return;
        },

        /*
        * Block
        */
        block: function() {

            var self = this;

            self.helper.form
		        .block({
		            message: null,
		            overlayCSS: {
		                backgroundColor: '#000',
		                opacity: '0.60'
		            }
		        })
                ;

            return;
        },

        /*
        * Unblock
        */
        unblock: function() {

            var self = this;

            self.helper.form.unblock();

            return;
        },

        /*
        * Fixes IE 6--prevent select boxes from showing through dropdown
        */
        fixIE: function() {

            var self = this;
            var $iframe = $('<iframe src="javascript:false;">')
				    .css($.extend(this.opts.iframeCss, {
				        opacity: 0,
				        position: 'absolute',
				        height: wHeight,
				        width: wWidth,
				        zIndex: 1000,
				        width: '100%',
				        top: 0,
				        left: 0
				    }))
				    .hide()
				    .prependTo(self.helper.list.find('ul.ul-2'));

            return;
        }

    };
})(jQuery);
