var save_listing = (function($){

    var default_options = {
        listings : [],  //array of saved listings [mls#]
        ci_root  : ''   //Codeigniter root address, for ajax
    };

    return {
        submit_tour: function(form) {
            var self = this;
            var data = form.serialize();
            var listings = JSON.stringify(self.o.listings);
            
            
            $.post(
                self.o.ci_root+'index.php/public/email/tour',   //url
                data+'&listings='+listings,                     //data
                function(data,stat,req) {                       //callback
                    self.show_thank_you();
                }
            );
        },
        submit_info: function(form) {
            var self = this;
            var data = form.serialize();
            var listings = JSON.stringify(self.o.listings);
            
            
            $.post(
                self.o.ci_root+'index.php/public/email/info',   //url
                data+'&listings='+listings,                     //data
                function(data,stat,req) {                       //callback
                    self.show_thank_you();
                }
            );
        },
        show_tour_form: function() {
            if ($('.modal-wrap').is(':hidden')) {
                $('.modal-bg').fadeIn('fast');
                $('.modal-wrap').fadeIn('fast', function() {
                    if ($('.tour-wrap').is(':hidden')) {
                        $('.listing-action div').hide();
                        $('.tour-wrap').fadeIn('fast');
                    }
                });
            }
            else {
                if ($('.tour-wrap').is(':hidden')) {
                    $('.listing-action div').hide();
                    $('.tour-wrap').fadeIn('fast');
                }
            }
        },
        show_info_form: function() {
            if ($('.modal-wrap').is(':hidden')) {
                $('.modal-bg').fadeIn('fast');
                $('.modal-wrap').fadeIn('fast', function() {
                    if ($('.info-wrap').is(':hidden')) {
                        $('.listing-action div').hide();
                        $('.info-wrap').fadeIn('fast');
                    }
                });
            }
            else {
                if ($('.info-wrap').is(':hidden')) {
                    $('.listing-action div').hide();
                    $('.info-wrap').fadeIn('fast');
                }
            }
        },
        show_action_list: function() {
            if ($('.modal-wrap').is(':hidden')) {
                $('.modal-bg').fadeIn('fast');
                $('.modal-wrap').fadeIn('fast', function() {
                    if ($('.action-wrap').is(':hidden')) {
                        $('.listing-action div').hide();
                        $('.action-wrap').fadeIn('fast');
                    }
                });
            }
            else {
                if ($('.action-wrap').is(':hidden')) {
                    $('.listing-action div').hide();
                    $('.action-wrap').fadeIn('fast');
                }
            }
        },
        show_thank_you: function() {
            if ($('.thank-wrap').is(':hidden')) {
                $('.listing-action div').hide();
                $('.thank-wrap').fadeIn('fast');
            }
        },
        remove_listing: function(mls_no) {
            var self = this;
            
            var return_val = false;
            $.ajax({
                type: 'POST',
                async:false,
                url: self.o.ci_root+'index.php/public/ajax_listings/remove/'+mls_no+'/',
                success: function(data) {
                    return_val = true;
                }
            });
            
            return return_val;
        },
        save_listing: function(mls_no) {
            var self = this;
            
            var return_val = false;
            $.ajax({
                type: 'POST',
                async:false,
                url: self.o.ci_root+'index.php/public/ajax_listings/save/'+mls_no+'/',
                success: function(data) {
                    return_val = true;
                }
            });
            
            return return_val;
        },
        update_list: function() {
            var self = this;
            
            $.ajax({
                type: 'POST',
                dataType: 'json',
                url: self.o.ci_root+'index.php/public/ajax_listings/get_all/',
                success: function(listings) {
                    if (listings.length > 0) {
                        var html = '';
                        self.o.listings = listings;
                        for(i in listings) {
                            html += '<li><span class="address strong">'+listings[i].address+'</span><span class="city">'+listings[i].city+' ,'+listings[i].state+'</span>$'+listings[i].price+'</span><input type="button" name="'+listings[i].mls_no+'" class="remove right" value="Remove" /></li>'+"\n";
                        }
                        $('#saved-list').html(html);
                        $('p.list strong').text(listings.length);
                        $('span.total strong').text(listings.length);
                        $('.save-listing-nav-wrap').fadeIn('fast');
                    }
                    else {
                        $('.save-listing-nav-wrap').fadeOut('fast');
                        $('#saved-list').empty();
                    }
                }
            });
        },
        init: function(options) {
            var self = this;
            self.o = $.extend(default_options, options);
            
            self.update_list();
            
            $('.save').live('click',function() {
                if(self.save_listing($(this).attr('name'))) {
                    $(this).val('Remove Listing');
                    self.update_list();
                    $(this).addClass('remove');
                    $(this).removeClass('save');
                }
            });
            
            $('.remove').live('click',function() {
                if(self.remove_listing($(this).attr('name'))) {
                    $(this).val('Save Listing');
                    self.update_list();
                    $(this).addClass('save');
                    $(this).removeClass('remove');
                }
            });
            
            $('.hide, .modal-bg').click(function() {
                $('.modal-bg').fadeOut('fast');
                $('.modal-wrap').fadeOut('fast');
                return false;
            });
            
            $(window).keydown(function(e) {
                if (e.which === 27) {
                    $('.modal-bg').fadeOut('fast');
                    $('.modal-wrap').fadeOut('fast');
                    return false;
                }
            });
            
            $('.edit').click(function() {
                var modal_top = $('.modal-wrap').position().top + 40;
                $('.modal-wrap').css('top', modal_top + 'px');
                self.show_action_list();
                return false;
            });
            
            $('.info').click(function() {
                var modal_top = $('.modal-wrap').position().top + 40;
                $('.modal-wrap').css('top', modal_top + 'px');
                self.show_info_form();
                return false;
            });
            
            $('.tour').click(function() {
                var modal_top = $('.modal-wrap').position().top + 40;
                $('.modal-wrap').css('top', modal_top + 'px');
                self.show_tour_form();
                return false;
            });
            
            $('.cancel-action').click(function() {
                self.show_action_list();
                return false;
            });
            
            $('form.save-listings-forms').submit(function(e) {
                if(this.id == "request-tour") {
                    self.submit_tour($(this));
                }
                else if (this.id == "request-info") {
                    self.submit_info($(this));
                }
                e.preventDefault();
            });
        }
   };

})(jQuery);

