(function($){
	var Aspen = {
        
        isLoggedIn: false,
        productTeamId: false,
        
		init: function(params){
            Aspen.cascadeMenu();
            Aspen.pulseNotifications();
            Aspen.isLoggedIn = params.isli;
            Aspen.productTeamId = params.productTeamId;
            
            if(Aspen.isLoggedIn){
                Aspen.renderItemCount();
                Aspen.renderLocalRep();
            }
            
            // auto complete search fields - both homepage and product search page
            if($('#product-name').length || $('#keyword').length){
                $("#product-name, #keyword").autocomplete({
                    source: "/ajax/search",
                    minLength: 2
                }).data( "autocomplete" )._renderItem = function( ul, item ) {
                return $( "<li></li>" )
                    .data( "item.autocomplete", item )
                    .append( "<a>" + item.label + ": " + item.desc + "</a>" )
                    .appendTo( ul );
                };
            }
            
            // truncate the main indication text
            /* if($('.main-indication').length){
                $('.main-indication').expander({
                    slicePoint:       120,  // default is 100
                    widow:            5,  // default is 100
                    expandPrefix:     '',
                    expandText:       'show more indication', // default is 'read more...'
                    userCollapseText: 'show less indication'  // default is '[collapse expanded text]'
                });
            } */
            
            // auto submit the form - when an item is selected
            $( "#product-name" ).bind( "autocompleteselect", function(event, ui) {
                $('form.home-search').submit();
            });
            // auto submit the form - when an item is selected
            $( "#keyword" ).bind( "autocompleteselect", function(event, ui) {
                $('#search_products').submit();
            });
            
            $('.printPage').click(function(e){
                e.preventDefault();
                window.print();
            });
            
            $('.toggleRow').click(function(e){
                e.preventDefault();
                Aspen.toggleTr(this);
            });
            
            $('#territory_id').change(function(){
                $('#territory_form').submit();
                $('#doctors_list').before('<img src="/images/ajax_indicator.gif" alt="loading" class="loading" />').remove();
            });
            
            $('#add_sku').click(function(e){
                e.preventDefault();
                var count = $('dd.skus').size();
                var html = '<dd class="clearfix skus"><label for="sku-'+count+'-label" class="floatleft">Label<br/><input type="text" class="width165" value="" id="sku-'+count+'-label" name="sku['+count+'][label]"></label><label for="sku-'+count+'-sku" class="floatleft">SKU<br/><input type="text" class="width165" value="" id="sku-'+count+'-sku" name="sku['+count+'][sku]"></label><label for="sku-'+count+'-pharmacy-desc" class="floatleft">Pharmacy Desc<br/><input type="text" class="width165" value="" id="sku-'+count+'-pharmacy-desc" " name="sku['+count+'][pharmacy_desc]"></label><label for="sku-'+count+'-ean" class="floatleft">EAN<br/><input type="text" class="width165" value="" id="sku-'+count+'-ean" name="sku['+count+'][ean]"></label></dd>';
                $(html).insertBefore($('#add_sku'));
            });
            
            $('#add_edetail').click(function(e){
                e.preventDefault();
                var count = $('dd.edetails').size();
                var html = '<dd class="clearfix edetails"><label for="edetails-'+count+'-label" class="floatleft">Label<br/><input type="text" class="width165" value="" id="edetails-'+count+'-label" name="edetails['+count+'][label]"></label><label for="edetails-'+count+'-url" class="floatleft">URL<br/><input type="text" class="width165" value="" id="edetails-'+count+'-url" name="edetails['+count+'][url]"></label></dd>';
                $(html).insertBefore($('#add_edetail'));
            });
            
            $('#login_link').click(function(e){
                e.preventDefault();
                Aspen.toggleLogin();
            });
            
            $('#results_category').change(function(e){
                e.preventDefault();
                $('#search_catgory').val($(this).val());
                $('#search_products').submit();
            });
            
            $("#jump").change(function() {
                var href = $('#jump option:selected').val()
                if (href !== '' || href !== undefined) {
                    location.href = href;
                }
            });
            
            $('.position_readmore').live('click',function(e){
                e.preventDefault();
                var id = $(this).attr('positionId');
                if($(this).parent().hasClass('read-more')){
                    $(this).text('Close Job Description');
                    $(this).parent().removeClass('read-more').addClass('read-closed');
                    $('#outline-'+id).show();
                    $('#application-'+id).show();
                } else {
                    $(this).text('Read Job Description');
                    $(this).parent().removeClass('read-closed').addClass('read-more');
                    $('#outline-'+id).hide();
                    $('#application-'+id).hide();
                }
            });
            
            // add to cart button
            $('.add_to_cart').click(function(e){
                e.preventDefault();
                var This = this;
                var item_id = $(this).attr('itemid');
                var url = '/ajax/shopping-cart/add-to-cart';
                var params = {
                    item_id: item_id
                };
                $(this).parent().prepend('<img src="/images/ajax_indicator.gif" alt="loading" class="loading" />');
                $(This).hide();
                $.getJSON(url, params, function(data){
                   if(data.status.success){
                        $(This).parent().children('.loading').remove();
                        var items = (data.response.count > 1) ? 'items' : 'item';
                        $('#item_count').text(data.response.count + ' '+items);
                        $(This).parent().append('<span class="added">Added</span>');
                        $(This).remove();
                    } else {
                        $(This).show();
                    }
                });
            });
            
            // delete from cart button
            $('.delete_cartitem').click(function(e){
                e.preventDefault();
                var This = this;
                var row_id = $(this).attr('rowid');
                var url = '/ajax/shopping-cart/delete-from-cart';
                var params = {
                    row_id: row_id
                };
                $(this).parent().prepend('<img src="/images/ajax_indicator.gif" alt="loading" class="loading" />');
                $(This).hide();
                $.getJSON(url, params, function(data){
                   if(data.status.success){
                        var items = (data.response.count > 1) ? 'items' : 'item';
                        $('#item_count').text(data.response.count + ' '+items);
                        $('h1.fontsize34').text(data.response.count + ' '+items+' in your shopping cart');
                        // remove the row from the table
                        $(This).closest('tr').remove();
                        if($('#cart_list tr').size() == 0){
                            window.location = document.location.protocol + '//' + document.location.host + '/order';
                        }
                    } else {
                        $(This).show();
                    }
                });
            });
            
            $('#enter_details').click(function(e){
                e.preventDefault();
                $(this).parent().remove();
                $('#enter_details_cont').addClass('open').show('blind');
            });
            
            $('#promo_code_submit').click(function(e){
                e.preventDefault();
                $('#promo_code_form .error').remove();
                var code = $('#promo_code').val();
                if(code !== '' && code.length >= 1){
                    $('#promo_code_form').css('visibility', 'hidden');
                    $(this).parent().parent().prepend('<img src="/images/ajax_indicator.gif" alt="loading" class="loading" id="loading_promo_code" />');
                    var url = '/ajax/shopping-cart/add-promo-code';
                    var params = {
                        code: code
                    };
                    $.getJSON(url, params, function(data){
                        if(data.status.success){
                            var items = (data.response.count > 1) ? 'items' : 'item';
                            $('#item_count').text(data.response.count + ' '+items);
//                            $('h1.fontsize34').text(data.response.count + ' '+items+' in your shopping cart');
                            $('#loading_promo_code').remove();
                            $('#promo_cont').prepend('<p class="success">Added - <a href="/order/shopping-cart">Go to cart</a></p>');
                            $('#promo_code_form').css('visibility', 'visible');
                            $('#promo_code').val('');
                        } else {
                            if(!data.status.foundItem){
                                $('#promo_code_form').prepend('<p class="error">There was a problem finding the promo code - please check it and try again.</p>');
                            }
                            if(data.status.alreadyInCart){
                                $('#promo_code_form').prepend('<p class="error">This item is already in your cart.</p>');
                            }
                            $('#loading_promo_code').remove();
                            $('#promo_code_form').css('visibility', 'visible');
                            $('#promo_code').val('');
                        }
                    });
                } else {
                    $('#promo_code_form').prepend('<p class="error">Please enter the promo code.</p>');
                }
            });
            
            $('#postcode_submit').live('click',function(e){
                e.preventDefault();
                $('#postcode_form').prepend('<img src="/images/ajax_indicator.gif" alt="loading" class="loading" id="post_code_loading" />');
                var url = '/ajax/index/set-postcode';
                var postcode = $('#rep-postcode').val();
                params = {
                    postcode: postcode
                }
                $.getJSON(url, params, function(data){
                    if(data.status.success){
                        Aspen.renderLocalRep();
                    } else {
                        $('#postcode_form').prepend('<p class="error">Please enter a actual postcode.</p>');
                        $('#rep-postcode').val('');
                        $('#post_code_loading').remove();
                    }
                });
            });
            
            $('#edit_postcode').live('click',function(e){
                e.preventDefault();
                $('#rep_details').hide('blind');
                $('#postcode_form').show('blind');
            });
            
            $('.toggleNav').click(function(e){
                e.preventDefault();
                var This = this;
                var navToOpen = $(This).attr('targetNav');
                var alreadyOpen = ($('#'+navToOpen).hasClass('open')) ? true : false;
                if(alreadyOpen) {
                    $('#'+navToOpen).hide('blind').removeClass('open');
                    $(This).removeClass('toggleNavOpen');
                } else {
                    $('#'+navToOpen).show('blind').addClass('open');
                    $(This).addClass('toggleNavOpen');
                }
            });
            
		},

        cascadeMenu: function(){
            $('.navigation ul > li').live('mouseover',
                function(e){
                    $(this).addClass("over");
                }
                ).live('mouseout',
                function(e){
                    $(this).removeClass("over");
            });
        },
        
        toggleTr: function(e){
            var alreadyOpen = ($(e).closest('tr').hasClass('open')) ? true : false;
            if(alreadyOpen) {
                $(e).closest('tr').removeClass('open').next('tr').addClass('hide');
            } else {
                $(e).closest('tr').addClass('open').next('tr').removeClass('hide');
            }
        },
              
        toggleLogin: function(e){
            var alreadyOpen = ($('#login_ul').hasClass('login-open')) ? true : false;
            if(alreadyOpen) {
                $('#login_ul').removeClass('login-open');
            } else {
                $('#login_ul').addClass('login-open');
            }
        },
        
        pulseNotifications: function(){
            setTimeout('Aspen.removeMessages()',10000);
            $('#app_messages').effect("pulsate", {
                times:3
            }, 600);
        },
        
        removeMessages: function(){
            $('#app_messages').fadeOut("slow").hide("blind");
        },
        
        renderItemCount: function(){
            var url = '/ajax/shopping-cart/render-item-count';
            $.getJSON(url, function(data){
               if(data.status.success){
                    var items = (data.response.count > 1) ? 'items' : 'item';
                    $('#item_count').text(data.response.count + ' '+items);
                }
            });
        },
        
        renderLocalRep: function(){
            var url = '/ajax/index/render-local-rep';
            var params = {
                productTeamId: Aspen.productTeamId
            }
            $('#local_rep').html('<img src="/images/ajax_indicator.gif" alt="loading" class="loading" />');
            $('#local_rep').load(url,params,function(){
                $('#post_code_loading').remove();
            });
        }

	};
    
	window.Aspen = Aspen;
    
})(jQuery);
