// all
dispatcher('^' + global.baseUrl, function () {
               // colorboxの設定
               if(typeof $.colorbox == 'function') {
                   $('.floatingbox').colorbox();
               }
           });

// /shop
dispatcher('^' + global.baseUrl + 'shop', function () {
               $(function () {
                     $('#ui-tab > ul').tabs({fx: {opacity: 'toggle', duration: 'normal'}}).tabs('rotate', 6000);

                     /**
                      *  検索ボタンのマウスオーバー
                      */
                     $('#input_search_product').hover(
                         function() {
                             var self = this;
                             self.src = self.src.replace(/_off\.gif$/, '_on.gif');
                         },
                         function() {
                             var self = this;
                             self.src = self.src.replace(/_on\.gif$/, '_off.gif');
                         }
                     );

                     /**
                      * 商品カテゴリプルダウン
                      */
                     $('select#select_categories').change(function() {
                                                              var $self = $(this);
                                                              var category_id = $self.val();
                                                              if (category_id) {
                                                                  var url = global.baseUrl + 'shop/products/index/category_id:' + category_id;
                                                                  location.href = url;
                                                              }
                                                          });

                     /**
                      * 商品数量プルダウン
                      */
                     $('select.cart_in_select').change(function(){
                                                           var $self = $(this);
                                                           var product_code = $self.attr('id').replace(/^cart_in_select_/, '');
                                                           var amount = $self.val();
                                                           $('a#cart_in_' + product_code).attr('href', $('a#cart_in_' + product_code).attr('href') + '/' + amount);
                                                       }).val(1);

                 });
           });

// /admin/shop_images
dispatcher('^' + global.baseUrl + 'admin/shop_images', function () {
               $('#ui-tab > ul').tabs({fx: {opacity: 'toggle', duration: 'normal'}}).tabs('rotate', 6000);
           });

/**
 * reset
 */
dispatcher('^' + global.baseUrl + 'factory_tours'
           + '|^' + global.baseUrl + 'forms',
           function () {
               // reset
               $('#btnReset').css({cursor:'pointer'}).click(function() {
                                                                $('form').each(function() {
                                                                                   this.reset();
                                                                               });
                                                            });
           });

/**
 * paginate
 * /products/index
 * /shop/products/index
 * /voices/index
 * /faqs/index
 * /messages
 * /factory_tours
 */
dispatcher('^' + global.baseUrl + 'products/index'
           + '|^' + global.baseUrl + 'shop/products/index'
           + '|^' + global.baseUrl + 'shop/products/search'
           + '|^' + global.baseUrl + 'voices/index'
           + '|^' + global.baseUrl + 'faqs/index'
           + '|^' + global.baseUrl + 'messages'
           + '|^' + global.baseUrl + 'factory_tours',
           function () {
               // paginate
               $('span.current').parent().addClass('select');
               $('span.current').wrapInner('<a href="#"></a>');
           });

// shop/carts/delivery_address
dispatcher('^' + global.baseUrl + 'shop/carts/delivery_address|'+
           '^' + global.baseUrl + 'shop/addresses/add|'+
           '^' + global.baseUrl + 'shop/addresses/edit/', function () {
               function createHidden(name, value) {
                   var objHidden = $(document.createElement('INPUT'));
                   objHidden.attr({
                                      'type':'hidden',
                                      'name':name,
                                      'value':value
                                  });
                   return objHidden;
               }

               // 海外発送チェックボックスのトグル処理
               //                function overseasShipmentToggle(overseas_shipment) {
               //                    if ( overseas_shipment.checked ) {
               //                        $('#zipcode').attr({
               //                            'disabled':'disabled',
               //                            'value':''
               //                        });
               //                        $('#address1').attr('disabled', 'disabled');
               //                        $('#address3').attr('disabled', 'disabled');
               //                        $('#address4').attr('disabled', 'disabled');
               //                        $('#ZipcodeSearch').attr('disabled', 'disabled');
               //
               //                        $('#overseas_shipment_hidden').append(
               //                            createHidden('data[' + global.model + '][delivery_zip_code]', '0000000')
               //                        );
               //                        $('#overseas_shipment_hidden').append(
               //                            createHidden('data[' + global.model + '][delivery_address1]', '海外発送')
               //                        );
               //                        $('#overseas_shipment_hidden').append(
               //                            createHidden('data[' + global.model + '][delivery_address3]', '')
               //                        );
               //                        $('#overseas_shipment_hidden').append(
               //                            createHidden('data[' + global.model + '][delivery_address4]', '')
               //                        );
               //                    } else {
               //                        $('#zipcode').removeAttr('disabled');
               //                        $('#address1').removeAttr('disabled');
               //                        $('#address3').removeAttr('disabled');
               //                        $('#address4').removeAttr('disabled');
               //                        $('#ZipcodeSearch').removeAttr('disabled');
               //                        $('#overseas_shipment_hidden').empty();
               //                    }
               //                }
               //
               //                // 読み込み時に実行
               //                overseasShipmentToggle($("#overseas_shipment")[0]);
               //
               //                // チェックボックスクリック時に実行
               //                $('#overseas_shipment').click(function(){overseasShipmentToggle(this);});
           });


// shop/addresses
dispatcher('^' + global.baseUrl + 'shop/addresses/add$|'+
           '^' + global.baseUrl + 'shop/addresses/edit/', function () {

                function createHidden(name, value) {
                   var objHidden = $(document.createElement('INPUT'));
                   objHidden.attr({
                                      'type':'hidden',
                                      'name':name,
                                      'value':value
                                  });
                   return objHidden;
                }

                // 海外発送チェックボックスのトグル処理
                function overseasShipmentToggle(overseas_shipment) {
                    if ( overseas_shipment.checked ) {
                        $('#zipcode').attr({
                            'disabled':'disabled',
                            'value':''
                        });
                        $('#address1').attr('disabled', 'disabled');
                        $('#address3').attr('disabled', 'disabled');
                        $('#address4').attr('disabled', 'disabled');
                        $('#ZipcodeSearch').attr('disabled', 'disabled');

                        $('#overseas_shipment_hidden').append(
                            createHidden('data[' + global.model + '][delivery_zip_code]', '0000000')
                        );
                        $('#overseas_shipment_hidden').append(
                            createHidden('data[' + global.model + '][delivery_address1]', '海外発送')
                        );
                        $('#overseas_shipment_hidden').append(
                            createHidden('data[' + global.model + '][delivery_address3]', '')
                        );
                        $('#overseas_shipment_hidden').append(
                            createHidden('data[' + global.model + '][delivery_address4]', '')
                        );
                    } else {
                        $('#zipcode').removeAttr('disabled');
                        $('#address1').removeAttr('disabled');
                        $('#address3').removeAttr('disabled');
                        $('#address4').removeAttr('disabled');
                        $('#ZipcodeSearch').removeAttr('disabled');
                        $('#overseas_shipment_hidden').empty();
                    }
                }

                // 読み込み時に実行
                overseasShipmentToggle($("#overseas_shipment")[0]);

                // チェックボックスクリック時に実行
                $('#overseas_shipment').click(function(){overseasShipmentToggle(this);});
           });

/**
 * /products/sort
 */
dispatcher('^' + global.baseUrl + 'admin/products/sort',
    function () {
        $("#table_products").tableDnD();
    }
);

/**
 * /carts/bulkorder
 */
dispatcher('^' + global.baseUrl + 'shop/carts/bulkorder',
    function () {
        // json.products はbulkorder.ctpで生成
        $('.autocomplete').ajaxSuggest(json.products,{'is_ajax':false});
    }
);

/**
 * /carts/bulkorder
 */
dispatcher('^' + global.baseUrl + 'shop/carts/detail',
    function () {

        /**
         * [todo] Ajaxで金額更新する処理はとりあえずPENDING
         */
        /*
        function number_string(str) {
            var num = new String(str).replace(/,/g, "");
            while(num != (num = num.replace(/^(-?\d+)(\d{3})/, "$1,$2")));
            return num;
        }
        $('.carts_product_qty').change(function(){
            var cartsProductId = $(this).attr('rel');
            var qty = $(this).val();
            var priceInc = $('#price_inc_'+cartsProductId).val();
            var totanInc = qty * priceInc;
            $('#total_inc_'+cartsProductId).val(totanInc);
            $('#label_qty_'+cartsProductId).empty().html(qty+'個');
            $('#label_total_inc_'+cartsProductId).empty().html(number_string(totanInc)+'円');
        });
        */
        $('.carts_product_qty').change(function(){
            var url = $(this).attr('rel');
            var qty = $(this).val();
            url += '/'+qty;
            window.location.href = url;
        });
    }
);

/**
 * dispatcher
 */
function dispatcher (path, func) {
    dispatcher.path_func = dispatcher.path_func || [];
    if (func) return dispatcher.path_func.push([path, func]);
    for(var i = 0, l = dispatcher.path_func.length; i < l; ++i) {
        var p_func = dispatcher.path_func[i];
        var match = path.match(p_func[0]);
        match && p_func[1](match);
    };
    return null;
};
dispatcher(location.pathname);

