/**
 * Created by jf on 2015/9/11.
 * Modified by bear on 2016/9/7.
 */
$(function () {

  var choosedImg = null;
  var serverId = null;
  var recordLocalId = null;
  var resData = null;
  var resCommandData = null;

  window.invoker = {
    // 拍照或从手机相册中选图接口
    chooseImage: function () {
      mtl.chooseImage({
        count: 3, // 默认9
        sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图，默认二者都有
        sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机，默认二者都有
        success: function (res) {
          var localIds = res.localIds; // 返回选定照片的本地ID列表，localId可以作为img标签的src属性显示图片
          // 获取本地图片接口
          if (mtl.getLocalImgData) {
            mtl.getLocalImgData({
              localId: localIds[0], // 图片的localID
              success: function (res) {
                var localData = res.localData; // localData是图片的base64数据，可以用img标签显示    
                var src = (localData.startsWith('data:') ? "" : "data:image/png;base64,") + localData;
                window.pageManager.go('imgdisplay');
                window.img_display_innerHTML = '<img style="width:100%; height:100%;" src="' + src + '" />';
              }
            });
          }
          else {
            document.getElementById('image').innerHTML = document.getElementById('image').innerHTML + '<img style="width:100%; height:100%;" src="' + localId + '" />'
          }
          choosedImg = localIds[0];
        },
        fail:function (res) {
            alert(JSON.stringify(res))
        }
      });
    },

    // 预览图片
    previewImage: function () {
      mtl.previewImage({
        current: 'https://wx2.sinaimg.cn/mw690/70396e5agy1g0leayhrhoj211418gq9q.jpg', // 当前显示图片的http链接
        urls: [
          // 需要预览的图片http链接列表
          'https://wx3.sinaimg.cn/mw690/70396e5agy1g0leax4owvj211418gk2j.jpg',
          'https://wx4.sinaimg.cn/mw690/70396e5agy1g0leay2ymtj211418gk11.jpg',
          'https://wx2.sinaimg.cn/mw690/70396e5agy1g0leayhrhoj211418gq9q.jpg',
          'https://wx3.sinaimg.cn/mw690/70396e5agy1g0leazeikxj211418gqdc.jpg'
        ]
      });
    },

    // 上传图片
    uploadImage: function () {
      if (choosedImg) {
        mtl.uploadImage({
          localId: choosedImg, // 需要上传的图片的本地ID，由chooseImage接口获得
          isShowProgressTips: 1, // 默认为1，显示进度提示
          success: function (res) {
            serverId = res.serverId; // 返回图片的服务器端ID
            alert('serverId:' + serverId)
          }
        });
      }
      else {
        alert('未选择照片，请先调用拍照或相册选择照片');
      }
    },

    // 下载图片接口
    downloadImage: function () {
      if (serverId) {
        mtl.downloadImage({
          serverId: serverId, // 需要下载的图片的服务器端ID，由uploadImage接口获得
          isShowProgressTips: 1, // 默认为1，显示进度提示
          success: function (res) {
            var localId = res.localId; // 返回图片下载后的本地ID
            window.location.href = './preview/imagepreview.html?localIds=' + localId;
          }
        });
      }
      else {
        alert('未上传照片')
      }
    },

    // 开始录音接口
    startRecord: function () {
      alert('开始录音');
      mtl.startRecord();
    },

    // 停止录音接口
    stopRecord: function () {
      mtl.stopRecord({
        success: function (res) {
          recordLocalId = res.localId;
          alert('停止录音, localId:' + recordLocalId)
        }
      });
    },

    // 监听录音自动停止接口
    onVoiceRecordEnd: function () {
      alert('开启监听，请点击开始录音，录音时间超过一分钟会自动停止');
      mtl.onVoiceRecordEnd({
        // 录音时间超过一分钟没有停止的时候会执行 compvare 回调
        compvare: function (res) {
          recordLocalId = res.localId;
          alert('自动停止, localId:' + recordLocalId)
        }
      });
    },

    // 播放语音接口
    playVoice: function () {
      if (recordLocalId) {
        mtl.playVoice({
          localId: recordLocalId // 需要播放的音频的本地ID，由stopRecord接口获得
        });
      }
      else {
        alert('未录音，请先调用录音接口')
      }
    },

    // 暂停播放接口
    pauseVoice: function () {
      if (recordLocalId) {
        mtl.pauseVoice({
          localId: recordLocalId // 需要暂停的音频的本地ID，由stopRecord接口获得
        });
      } else {
        alert('未录音，请先调用录音接口')
      }
    },

    // 停止播放接口
    stopVoice: function () {
      if (recordLocalId) {
        mtl.stopVoice({
          localId: recordLocalId // 需要停止的音频的本地ID，由stopRecord接口获得
        });
      } else {
        alert('未录音，请先调用录音接口')
      }
    },

    // 监听语音播放完毕接口
    onVoicePlayEnd: function () {
      alert('开启监听，播放完毕后触发回调');
      mtl.onVoicePlayEnd({
        success: function (res) {
          var localId = res.localId; // 返回音频的本地ID
          alert('播放完毕, localId:' + localId)
        }
      });
    },

    // 上传语音接口
    uploadVoice: function () {
      if (recordLocalId) {
        mtl.uploadVoice({
          localId: recordLocalId, // 需要上传的音频的本地ID，由stopRecord接口获得
          isShowProgressTips: 1, // 默认为1，显示进度提示
          success: function (res) {
            recordServerId = res.serverId; // 返回音频的服务器端ID
            alert('上传成功, serverId:' + recordServerId)
          }
        });
      } else {
        alert('未录音，请先调用录音接口')
      }
    },

    // 下载语音接口
    downloadVoice: function () {
      if (recordServerId) {
        mtl.downloadVoice({
          serverId: recordServerId, // 需要下载的音频的服务器端ID，由uploadVoice接口获得
          isShowProgressTips: 1, // 默认为1，显示进度提示
          success: function (res) {
            recordLocalId = res.localId; // 返回音频的本地ID
            alert('下载完成：' + recordLocalId)
          }
        });
      }
      else {
        alert('请先上传语音')
      }
    },

    // 识别音频并返回识别结果接口
    translateVoice: function () {
      if (recordLocalId) {
        alert('开始语音识别')
        mtl.translateVoice({
          localId: recordLocalId, // 需要识别的音频的本地Id，由录音相关接口获得
          isShowProgressTips: 1, // 默认为1，显示进度提示
          success: function (res) {
            alert(res.translateResult); // 语音识别的结果
          }
        });
      }
      else {
        alert('未录音，请先调用录音接口')
      }
    },

    // 获取网络状态接口
    getNetworkType: function () {
      mtl.getNetworkType({
        success: function (res) {
          var networkType = res.networkType; // 返回网络类型2g，3g，4g，wifi
          alert('networkType:' + networkType)
        }
      });
    },
  // 接口
  request: function () {
    mtl.request({
        url: 'http://172.20.4.61:8080/console/login',
        method: 'POST',  // 默认值
        params: {
                __: '4581559542825607',
        },
        data: {
                username: 'design',
                password: 'yonyou@1',
                domainCode: '00000',
                moduleCode: 'BQ',
                lauguage: 'zh-CN'
        },
        header: {
                'X-Requested-With': 'XMLHttpRequest',// 默认值
                'Content-Type' : 'multipart/form-data',
        },
        timeout: 30000,
        responseType: 'json', // 默认值
         success: (res) => {
            alert(JSON.stringify(res)),
            mtl.request({
                url: 'http://172.20.4.61:8080/bq_self/dt/login/userLoginInfo',
                method: 'GET',  // 默认值
                params: {
                    __: '4311559698549804',
                },
                timeout: 30000,
                responseType: 'json', // 默认值
                success: function (res) {
                    alert(JSON.stringify(res))
                }
            });
         }
     });
  },
  getrequest :function () {
      mtl.request({
          url: 'http://172.20.4.61:8080/bq_self/dt/login/userLoginInfo',
          method: 'GET',  // 默认值
          params: {
                  __: '4311559698549804',
          },
          timeout: 30000,
          responseType: 'json', // 默认值
          success: function (res) {
                alert(JSON.stringify(res))
          }
      });
  },

    // 获取地理位置接口
    getLocation: function () {
      mtl.getLocation({
        type: 'wgs84', // 默认为wgs84的gps坐标，如果要返回直接给openLocation用的火星坐标，可传入'gcj02'
        success: function (res) {
          locationInfo = res;
          var latitude = res.latitude; // 纬度，浮点数，范围为90 ~ -90
          var longitude = res.longitude; // 经度，浮点数，范围为180 ~ -180。
          var speed = res.speed; // 速度，以米/每秒计
          var accuracy = res.accuracy; // 位置精度
          alert(JSON.stringify(res))
        },
        fail: function (err) {
          alert(err)
        }
      });
    },

    // 使用微信内置地图查看位置接口
    openLocation: function () {
      if (locationInfo) {
        mtl.openLocation({
          latitude: locationInfo.latitude, // 纬度，浮点数，范围为90 ~ -90
          longitude: locationInfo.longitude, // 经度，浮点数，范围为180 ~ -180。
          name: '', // 位置名
          address: '', // 地址详情说明
          scale: 1, // 地图缩放级别,整形值,范围从1~28。默认为最大
          infoUrl: '' // 在查看位置界面底部显示的超链接,可点击跳转
        });
      }
      else {
        alert('请先调用获取定位接口')
      }
    },

    // 调起扫一扫接口
    scanQRCode: function () {
      mtl.scanQRCode({
        needResult: 1, // 默认为0，扫描结果由微信处理，1则直接返回扫描结果，
        scanType: ["qrCode", "barCode"], // 可以指定扫二维码还是一维码，默认二者都有
        success: function (res) {
          alert(JSON.stringify(res));
          resultStr = res.resultStr; // 当needResult 为 1 时，扫码返回的结果
          if (mtl.getDeviceInfo) {
            mtl.getDeviceInfo({
              openId: resultStr, //二维码ID
              success: function (res) {
                res.allPermissions = true;
                alert(JSON.stringify(res));
                if (mtl.requestAccessTo) {
                  mtl.requestAccessTo({
                    appId: res.appId,
                    userId: res.userId,
                    clientIdentify : res.clientIdentify,
                    permissions : res.permissions,
                    allPermissions : res.allPermissions,
                    success: function (res) {
                      alert(JSON.stringify(res));
                    }
                  })
                }
              }
            })
          }
        }
      });
    },

    // 人脸注册
    faceRegister: function () {
      mtl.faceRegister({
        userId: 'c12c408c-4558-48e6-a63d-8e69c6e6d4dc',
        tenantId: 'gu7619oi',//
        group_id: '001',//组ID
        success: function (res) {
          alert(JSON.stringify(res));
        }
      });
    },

    // 人脸识别
    faceVerify: function () {
      mtl.faceVerify({
        group_id: '397a546045454397bfa68c918df3bb18',
        success: function (res) {
          alert(JSON.stringify(res));
        }
      });
    },

    // OCR发票识别
    scanInvoice: function () {
      mtl.scanInvoice({
        appCode: '397a546045454397bfa68c918df3bb18',//阿里云申请的appcode
        image: '',//图片的base64数据
        success: function (res) {
          alert(JSON.stringify(res));
        }
      });
    },

    // OCR身份证识别
    scanIDCard: function () {
      mtl.scanIDCard({
        appCode: '397a546045454397bfa68c918df3bb18',//阿里云申请的appcode
        side: 'face',
        image: '',//图片的base64数据
        success: function (res) {
          alert(JSON.stringify(res));
        }
      });
    },

    // OCR银行卡识别
    scanBankCard: function () {
      mtl.scanBankCard({
        appCode: '397a546045454397bfa68c918df3bb18',//阿里云申请的appcode
        image: '',//图片的base64数据
        success: function (res) {
          alert(JSON.stringify(res));
        }
      });
    },

    // 多端 初始化服务器信息
    mtl_Serverinitialize: function () {
      mtl.initialize({
        server: 'im-pre.yyuap.com',//长连接地址
        restServer: 'im-pre.yyuap.com',//短连接地址
        resourceUploadServer: 'im-pre.yyuap.com', //资源上传服务器地址
        resourceDownloadServer: 'im-pre.yyuap.com',//资源下载服务器地址
        serverPort: 5227,//服务器端口
        serverSSLPort: 5223,//SSL端口
        serverEnableSSL: true,//是否开启SSL端口
        serverHttps: true,//是否是https
        appId: 'mttest02',//应用ID
        etpId: 'yonyou'//租户ID
      });
    },
    // 多端 登录
    mtl_Login: function () {
      mtl.login({
        userId: 'hb',//用户ID
        password: '1234',//密码
        success: function (res) {
          if (mtl.getOpenId) {
            mtl.getOpenId({
              success: function (res) {
                var localData = res.image
                var src = (localData.startsWith('data:') ? "" : "data:image/png;base64,") + localData;
                window.pageManager.go('imgdisplay');
                window.img_display_innerHTML = '<img style="width:100%; height:auto;" src="' + src + '" />';
              }
            });
          }
        }
      });
    },
    // 多端 退出
    mtl_Logout: function () {
      mtl.logout({
        success: function (res) {
          alert(JSON.stringify(res));
        }
      });
    },

    mtl_getOpenIdQR: function () {
      mtl.getOpenId({
        success: function (res) {
          alert(JSON.stringify(res));
          var imageString = res.image;//二维码图片的base64
          document.getElementById('image').innerHTML = '<img style="width:100%; height:100%;" src="data:image/png;base64,' + imageString + '" />'
        }
      });
    },

    mtl_getPermissionsWithOpenId: function () {
      mtl.getDeviceInfo({
        openId: resultStr, //二维码ID
        success: function (res) {
          alert(JSON.stringify(res));
          if (mtl.mtl_bindDevice) {
            mtl.mtl_bindDevice({
              data: res,
              success: function (res) {
                alert(JSON.stringify(res));
              }
            });
          }
        }
      });
    },

    // 多端 注册权限申请监听
    mtl_registerDeviceApplyListener: function () {
      mtl.receiveAccessRequest({
        success: function (res) {
          alert(JSON.stringify(res));
          resData = res;
        }
      });
    },
    // 多端 获取我绑定的设备列表
    mtl_myBindDevices: function () {
      mtl.getAccessibleDevices({
        group_id: '397a546045454397bfa68c918df3bb18',
        success: function (res) {
          alert(JSON.stringify(res));
        }
      });
    },
    // 多端 获取绑定我的设备列表
    mtl_bindMeDevices: function () {
      mtl.getAuthorizedDevices({
        success: function (res) {
          alert(JSON.stringify(res));
        }
      });
    },
    // 多端 获取我的设备列表
    mtl_myDevices: function () {
      mtl.getMyDevices({
        success: function (res) {
          alert(JSON.stringify(res));
        }
      });
    },
    // 多端 获取所有绑定设备列表
    mtl_allBindDevices: function () {
      mtl.getAllDevices({
        success: function (res) {
          alert(JSON.stringify(res));
        }
      });
    },
    // 多端  发送一条指令
    mtl_sendCommand: function () {
      mtl.sendCommand({
        commandType: '测试类型',//命令类型，可自定义
        to : {
              userId: 'hb',//命令接收设备的用户Id
              appId: 'mttest02',//命令接收设备的应用Id
              clientIdentify: 'B537629F-2342-433A-B670-88F205C7B32C',//命令的接收设备Id
        },
        commandParams: {'key' : '这是一条测试消息'},//用户自定义参数，json
        success: function (res) {
          alert(JSON.stringify(res));
        }
      });
    },
    // 多端 回复一条指令
    mtl_answerCommand: function () {
      mtl.replyCommand({
        sourceCommandId: resCommandData.commandId,//接收到指令的commandId
        to : resCommandData.from,
        commandParams: {'key' : '这是一条测试回复消息'},//用户自定义参数，要回复的数据，json
        success: function (res) {
          alert(JSON.stringify(res));
        }
      });
    },
    // 多端  删除申请绑定设备
    mtl_removeBinding: function () {
      mtl.removeAccessibleDevice({
        clientIdentify: 'B537629F-2342-433A-B670-88F205C7B32C',//设备表示
        appId: 'mttest02',//应用Id
        userId: 'hb',//用户Id
        success: function (res) {
          alert(JSON.stringify(res));
        }
      });
    },
    // 多端  删除被申请绑定设备
    mtl_removeByBinding: function () {
      mtl.removeAuthorizedDevice({
        clientIdentify: 'B537629F-2342-433A-B670-88F205C7B32C',//设备表示
        appId: 'mttest02',//应用Id
        userId: 'hb',//用户Id
        success: function (res) {
          alert(JSON.stringify(res));
        }
      });
    },
    // 多端 删除我的设备
    mtl_removeMyDevice: function () {
      mtl.removeMyDevice({
        clientIdentify: 'CF01A4AE-8563-4A87-B5E6-43108F04604C',//设备表示
        success: function (res) {
          alert(JSON.stringify(res));
        }
      });
    },
    // 多端 处理申请指令
    mtl_procesApply: function () {
      mtl.agreeAccessRequest({
        commandId: resData.commandId,//接收到指令的commandId
        to: resData.from,
        commandParams: resData.commandParams,//用户自定义参数，要回复的数据
        success: function (res) {
          alert(JSON.stringify(res));
        }
      });
    },
    // 多端 注册透传监听
    mtl_registerListener: function () {
      mtl.receiveCommand({
        success: function (res) {
           resCommandData = res;
          alert(JSON.stringify(res));
        }
      });
  },
  // VUI 初始化
  initSpeech: function () {
    mtl.initSpeech({
       latitude: 42.111,//纬度(可选)
       longitude: 161.111,//经度（可选）
       tenantId:'test',//AI租户id
       appCode:'test',//AI APPCODE
       userId:'chenqm',//用户ID
       sessionId:'',
       aiUrl:'http://robottest.ublinker.com',//ai接口url
       aiToken:'b28e71f4-6654-4a02-9de6-0c6523ac1c1c',//ai token
       deviceId: null,//设备标识  (可选)
       success: function (res) {
         alert(JSON.stringify(res));
       }
     });
  },
  // VUI 打开小友
  openSpeechPage: function () {
    mtl.openSpeechPage({
         success: function (res) {
             alert(JSON.stringify(res));
         }
     });
  },
  // VUI 语音合成
  startSpeechSyn: function () {
      mtl.startSpeechSyn({
                        text:'庄子说，人生天地之间，若白驹过隙，忽然而已。人生就是一场抵达，我们总以为来日方长，可来日并不方长，我们总是在向往明天，而忽略了一个个今天，我们总是在仰望天空，却忘记要走好脚下的路。人生的路，总会有高低浮沉，山谷沟壑，风霜雨雪，内心强大的人，总会走的从容不迫，将困难当做历练，内心丰盈的人，总是行走的不慌不忙，将自然美景尽收眼底。人生就是一场抵达，这一路上会遇到不同的风景，不同的人，生命的驿站，有的人是来温暧你的，有的人是来给你经历的，不管怎样的遇见，都是值得珍惜的，佛说，笑着面对，不去埋怨。',
         success: function (res) {
             alert(JSON.stringify(res));
         }
     });
  },
  // VUI 停止语音合成
  stopSpeechSyn: function () {
    mtl.stopSpeechSyn({
         success: function (res) {
             alert(JSON.stringify(res));
         }
     });
  },
  // VUI 语音识别
  startSpeechRecog: function () {
      mtl.startSpeechRecog({
         analyse: true,//是否需要AI分析并返回结果
         success: function (res) {
           if (res.action == 'EndRecognizing') {
             alert(JSON.stringify(res));
           }
         }
     });
  },
  // VUI 停止语音识别
  stopSpeechRecog: function () {
      mtl.stopSpeechRecog({
         success: function (res) {
             alert(JSON.stringify(res));
         }
     });
  },
  // VUI release
  releaseSpeech: function () {
      mtl.releaseSpeech({
         success: function (res) {
             alert(JSON.stringify(res));
         }
     });
  },
  
  cancelAITask: function () {
      mtl.cancelAITask({
        success: function (res) {
            alert(JSON.stringify(res));
        }
    });
  },

    // 页面跳转
    // mtl.navigateTo({ url: '../index2/index2' })
  };

  var pageManager = {
    $container: $('#container'),
    _pageStack: [],
    _configs: [],
    _pageAppend: function () { },
    _defaultPage: null,
    _pageIndex: 1,
    setDefault: function (defaultPage) {
      this._defaultPage = this._find('name', defaultPage);
      return this;
    },
    setPageAppend: function (pageAppend) {
      this._pageAppend = pageAppend;
      return this;
    },
    init: function () {
      var self = this;

      $(window).on('hashchange', function () {
        var state = history.state || {};
        var url = location.hash.indexOf('#') === 0 ? location.hash : '#';
        var page = self._find('url', url) || self._defaultPage;
        if (state._pageIndex <= self._pageIndex || self._findInStack(url)) {
          self._back(page);
        } else {
          self._go(page);
        }
      });

      if (history.state && history.state._pageIndex) {
        this._pageIndex = history.state._pageIndex;
      }

      this._pageIndex--;

      var url = location.hash.indexOf('#') === 0 ? location.hash : '#';
      var page = self._find('url', url) || self._defaultPage;
      this._go(page);
      return this;
    },
    push: function (config) {
      this._configs.push(config);
      return this;
    },
    go: function (to) {
      var config = this._find('name', to);
      if (!config) {
        return;
      }
      location.hash = config.url;
    },
    _go: function (config) {
      this._pageIndex++;

      history.replaceState && history.replaceState({ _pageIndex: this._pageIndex }, '', location.href);

      var html = $(config.template).html();
      var $html = $(html).addClass('slideIn').addClass(config.name);
      $html.on('animationend webkitAnimationEnd', function () {
        $html.removeClass('slideIn').addClass('js_show');
      });
      this.$container.append($html);
      this._pageAppend.call(this, $html);
      this._pageStack.push({
        config: config,
        dom: $html
      });

      if (!config.isBind) {
        this._bind(config);
      }

      return this;
    },
    back: function () {
      history.back();
    },
    _back: function (config) {
      this._pageIndex--;

      var stack = this._pageStack.pop();
      if (!stack) {
        return;
      }

      var url = location.hash.indexOf('#') === 0 ? location.hash : '#';
      var found = this._findInStack(url);
      if (!found) {
        var html = $(config.template).html();
        var $html = $(html).addClass('js_show').addClass(config.name);
        $html.insertBefore(stack.dom);

        if (!config.isBind) {
          this._bind(config);
        }

        this._pageStack.push({
          config: config,
          dom: $html
        });
      }

      stack.dom.addClass('slideOut').on('animationend webkitAnimationEnd', function () {
        stack.dom.remove();
      });

      return this;
    },
    _findInStack: function (url) {
      var found = null;
      for (var i = 0, len = this._pageStack.length; i < len; i++) {
        var stack = this._pageStack[i];
        if (stack.config.url === url) {
          found = stack;
          break;
        }
      }
      return found;
    },
    _find: function (key, value) {
      var page = null;
      for (var i = 0, len = this._configs.length; i < len; i++) {
        if (this._configs[i][key] === value) {
          page = this._configs[i];
          break;
        }
      }
      return page;
    },
    _bind: function (page) {
      var events = page.events || {};
      for (var t in events) {
        for (var type in events[t]) {
          this.$container.on(type, t, events[t][type]);
        }
      }
      page.isBind = true;
    }
  };

  function fastClick() {
    var supportTouch = function () {
      try {
        document.createEvent("TouchEvent");
        return true;
      } catch (e) {
        return false;
      }
    }();
    var _old$On = $.fn.on;

    $.fn.on = function () {
      if (/click/.test(arguments[0]) && typeof arguments[1] == 'function' && supportTouch) { // 鍙墿灞曟敮鎸乼ouch鐨勫綋鍓嶅厓绱犵殑click浜嬩欢
        var touchStartY, callback = arguments[1];
        _old$On.apply(this, ['touchstart', function (e) {
          touchStartY = e.changedTouches[0].clientY;
        }]);
        _old$On.apply(this, ['touchend', function (e) {
          if (Math.abs(e.changedTouches[0].clientY - touchStartY) > 10) return;

          e.preventDefault();
          callback.apply(this, [e]);
        }]);
      } else {
        _old$On.apply(this, arguments);
      }
      return this;
    };
  }

  function setPageManager() {
    var pages = {}, tpls = $('script[type="text/html"]');

    for (var i = 0, len = tpls.length; i < len; ++i) {
      var tpl = tpls[i], name = tpl.id.replace(/tpl_/, '');
      pages[name] = {
        name: name,
        url: '#' + name,
        template: '#' + tpl.id
      };
    }
    pages.home.url = '#';

    for (var page in pages) {
      pageManager.push(pages[page]);
    }
    pageManager
      .setPageAppend(function ($html) {
        var $foot = $html.find('.page__ft');
        if ($foot.length < 1) return;

        var winH = $(window).height();
        if ($foot.position().top + $foot.height() < winH) {
          $foot.addClass('j_bottom');
        } else {
          $foot.removeClass('j_bottom');
        }
      })
      .setDefault('home')
      .init();
  }

  function init() {
    fastClick();
    setPageManager();

    window.pageManager = pageManager;
    window.home = function () {
      location.hash = '';
    };
  }
  init();
});

$(function () {
  var winH = $(window).height();
  var categorySpace = 10;

  $('.js_item').on('click', function () {
    var page = $(this).data('page')
    if (page) {
      window.pageManager.go(page);
    }
    else {
      var id = $(this).data('id');
      window.invoker[id]();
    }
  });
  $('.js_category').on('click', function () {
    var $this = $(this),
      $inner = $this.next('.js_categoryInner'),
      $page = $this.parents('.page'),
      $parent = $(this).parent('li');
    var innerH = $inner.data('height');
    bear = $page;

    if (!innerH) {
      $inner.css('height', 'auto');
      innerH = $inner.height();
      $inner.removeAttr('style');
      $inner.data('height', innerH);
    }

    if ($parent.hasClass('js_show')) {
      $parent.removeClass('js_show');
    } else {
      $parent.siblings().removeClass('js_show');

      $parent.addClass('js_show');
      if (this.offsetTop + this.offsetHeight + innerH > $page.scrollTop() + winH) {
        var scrollTop = this.offsetTop + this.offsetHeight + innerH - winH + categorySpace;

        if (scrollTop > this.offsetTop) {
          scrollTop = this.offsetTop - categorySpace;
        }

        $page.scrollTop(scrollTop);
      }
    }

    var winH = $(window).height();
    var $foot = $('body').find('.page__ft');
    if ($foot.length < 1) return;

    if ($foot.position().top + $foot.height() < winH) {
      $foot.addClass('j_bottom');
    } else {
      $foot.removeClass('j_bottom');
    }
  });
});
