define("index", ["jquery","handlebars","source-map","index","lazyload","dot","jquery.placeholder"], function(require, exports, module){
var webYohobuy;

//通用
require("js/common");

//头部
require("js/header");

//简化头部
require("js/simple-header");

//商品(列表、搜索、商品详情)
require("js/product/entry");

//频道页
require("js/index/index");

//品牌一览
require("js/brand/index");

//登录注册找回密码
require("js/passport/entry");

//购物车
require("js/cart/cart");

//个人中心
require("js/home/entry");

//订单确认
require("js/order/ensure");

module.exports = webYohobuy;

});
define("js/common", ["jquery"], function(require, exports, module){
/**
 * 页面公共逻辑和接口
 * @author: xuqi<qi.xu@yoho.cn>
 * @date: 2015/11/23
 */
var $ = require("jquery");


var $body = $('body');

require("js/footer");

function cookie(name) {
    var re = new RegExp(name + '=([^;$]*)', 'i'),
        matchPattern = '$1';

    return re.test(decodeURIComponent(document.cookie)) ? RegExp[matchPattern] : '';
}

function setCookie(name, value, options) {
    var expires = '',
        path,
        domain,
        secure,
        date;

    if (typeof value !== 'undefined') {
        options = options || {};
        if (value === null) {
            value = '';
            options.expires = -1;
        }

        if (options.expires &&
            (typeof options.expires === 'number' || options.expires.toUTCString)) {
            if (typeof options.expires === 'number') {
                date = new Date();
                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
            } else {
                date = options.expires;
            }
            expires = '; expires=' + date.toUTCString();
        }
        path = options.path ? '; path=' + options.path : '';
        domain = options.domain ? '; domain=' + options.domain : '';
        secure = options.secure ? '; secure' : '';
        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
    }
}

function getUser() {
    var c = cookie('_UID'),
        user;

    if (typeof c === 'undefined') {
        return 0;
    }

    user = c.split('::');

    if (typeof user === 'undefined' || user.length < 4) {
        return 0;
    }

    return user;
}

function getUid() {
    var user = getUser();

    if (user === 0) {
        return 0;
    }

    return user[1];
}

function getShoppingKey() {
    var c = cookie('_g');

    if (typeof c === 'undefined') {
        return '';
    }

    return JSON.parse(c).k;
}

//YAS统计代码
(function(w, d, s, j, f) {
    var a = d.createElement(s);
    var m = d.getElementsByTagName(s)[0];

    w.YohoAcquisitionObject = f;

    w[f] = function() {
        w[f].p = arguments;
    };

    a.async = 1;
    a.src = j;
    m.parentNode.insertBefore(a, m);
})(window, document, 'script', 'http://cdn.yoho.cn/yas-jssdk/1.0.14/yas.js', '_yas');

(function() {
    var uid = getUid();

    uid = uid === 0 ? '' : uid;

    window._ozuid = uid; //暴露ozuid

    if (window._yas) {
        window._yas(1 * new Date(), '1.0.14', 'yohobuy_web', uid, '', '');
    }
}());

//window.resize在width<1180时适配成990
$(window).on('resize', function() {
    var w = $(this).width();

    //return top
    if (w < 1360) {
        $('.return-top').addClass('min');
    } else {
        $('.return-top').removeClass('min');
    }

    //body
    if (w < 1180) {
        $body.addClass('min-screen');
    } else {
        $body.removeClass('min-screen');
    }
}).trigger('resize');

function queryString() {
    var vars = {},
        hash,
        i,
        search = window.location.search,
        hashes = search ? decodeURIComponent(search).slice(1).split('&') : [];

    for (i = 0; i < hashes.length; i++) {
        hash = hashes[i].split('=');
        vars[hash[0]] = hash[1];
    }
    return vars;
}

//个人中心左侧栏头像加载失败后,显示默认头像
(function() {
    $(window).load(function() {
        var thumb = document.getElementById('user-thumb');
        var img;

        if (!thumb) {
            return;
        }

        img = new Image();

        img.src = thumb.src;

        img.onerror = function() {
            $(thumb).parent().append('<div class="default-user-thumb"></div>').end().remove();
        };
    });
}());

window.cookie = cookie;

window.setCookie = setCookie;

window.getUser = getUser;

window.getUid = getUid;

window.getShoppingKey = getShoppingKey;

window.queryString = queryString;

});
define("js/footer", ["jquery"], function(require, exports, module){
/**
 * 尾部
 * @author: wangqing<robin.wang@yoho.cn>
 * @date: 2015/12/01
 */

var $ = require("jquery");

var $returnTop = $('.return-top');

/**
 * 订阅
 * @return {[type]} [description]
 */
function actionSubscription() {
    var $subscriberBox = $('#subscriber-box'),
        $subscriberBtn = $('#subscriber-btn'),
        emailReg = /^[.\-_a-zA-Z0-9]+@[\-_a-zA-Z0-9]+\.[a-zA-Z0-9]/;

    var iconCode = {
        mail: '&#xe61b;',
        tick: '&#xe61a'
    };

    $subscriberBox.focus(function() {
        $(this).val('').css('color', '');
        $subscriberBtn.removeClass('done').html(iconCode.mail);
    });

    $subscriberBtn.click(function() {
        var email = $.trim($subscriberBox.val());

        if (email !== '' && emailReg.test(email)) {
            try {
                $.ajax({
                    url: 'http://new.yohobuy.com/common/emailsubscriber',
                    dataType: 'jsonp',
                    data: {
                        email: email,
                        tmp: Math.random(),
                        uid: window.getUid()
                    },
                    success: function(data) {
                        if (data.data.result === 1) {
                            $subscriberBox.val('已订阅到:' + email);
                            $subscriberBtn.addClass('done').html(iconCode.tick);
                        } else {
                            $subscriberBox.css('color', 'red');
                        }
                    }
                });
            } catch (e) {
                console.log(e.message);
            }
        } else {
            $subscriberBox.css('color', 'red');
        }
    });
}

function actionhomeFootChange() {
    var $vote = $('.vote'),
        $feedBackPage = $('#feed-back-page'),
        count = $vote.children('li').length;

    //意见反馈
    $feedBackPage.on('click', 'span', function() {
        var $this = $(this);

        if ($this.hasClass('cur')) {
            return;
        }

        $this.siblings('.cur').removeClass('cur');
        $this.addClass('cur');

        $vote.children().not('.hide').addClass('hide')
            .end()
            .eq($this.index()).removeClass('hide');
    });

    $vote.on('click', '.feed-back-btn', function() {
        var $this = $(this),
            $li = $this.closest('li'),
            index = $li.index(),
            _solution = [];

        var _answer = $li.find('.feedback-answer').val(),
            _feedback = $li.find('.feedback-id').val(),
            _question = $li.find('.question-id').val();

        $li.find(':checked').each(function() {
            _solution.push($(this).val());
        });

        $.ajax({
            url: 'http://new.yohobuy.com/common/suggestfeedback',
            dataType: 'jsonp',
            data: {
                feedback_id: _feedback || 0,
                question_id: _question || 0,
                answer: _answer || '',
                solution: _solution.join(',')
            },
            success: function(data) {
                var next = index + 1;

                if (~~data.data.result === 1) {
                    if (index === count - 1) {
                        alert('感谢您的参与!');
                        return;
                    }

                    $li.addClass('hide');

                    $vote.children(':eq(' + (index + 1) + ')').removeClass('hide');
                    $feedBackPage.children('.cur').removeClass('cur');
                    $feedBackPage.children(':eq(' + next + ')').addClass('cur');
                }
            }
        });
    });
}

function rePosReturn() {
    if ($(window).height() > $(document).height()) {
        $returnTop.addClass('hide');
    }

    // 只在窗口高度大于文档高度的时候,隐藏返回顶部
    // else {
    //     $returnTop.removeClass('hide');
    // }
}

//返回顶部
$returnTop.click(function() {
    $('html,body').animate({
        scrollTop: 0
    }, 500);
});

$(window).scroll(function() {
    if ($(window).scrollTop() === 0) {
        $returnTop.addClass('hide');
    } else {
        $returnTop.removeClass('hide');
    }
});

//如果初始是隐藏的,监听图片加载,重新确定return-top的高度
if ($returnTop.hasClass('hide')) {
    $('img').load(rePosReturn);
}

//初始化
actionSubscription();
actionhomeFootChange();

//暴露给有可能通AJAX改变内容的页面去用
window.rePosReturnTop = rePosReturn;

});
define("js/header", ["jquery","handlebars","source-map","index"], function(require, exports, module){
/**
 * 头部
 * @author: wangqing<robin.wang@yoho.cn>
 * @date: 2015/12/01
 */
var $ = require("jquery");
var handlebars = require("handlebars");
var json2 = require("index");
var vipInfoCombine = null; //用户信息编译模板
var loginInfoCombine = null; //登录信息编译模板
var apiDomain = $('#api-domain').val(); //获取数据的地址
var cartTpl = ''; //购物车模板
/**
 * 搜寻的时候过滤非法字符(+-/:等非法字符单独出现)
 * @type {RegExp}
 */
var reg = /^[\^\!\+\-\(\)\:\[\]\\\{\}\~\*\?\|\&\;\/]{0,}$/g;
var keyword = '';
var link = '';
var dataLayer = [];
var requestFrame = null;
var logoanimationstart = 0;
var $logotrans = $('.icon-logo');
var isen = true;
var loopdurationtime = 500;
var globaltimeout;
var onetimeoout;
/**
 * banner和地址的映射
 * @type {Object}
 */
var bannerMap = {
    listboys: '4f78b0f418fc42314d8b6e791cfb7fa8',
    listgirls: '00c1f025a51b6b597dc37925951ea27d',
    listkids: 'b02df11184727701ade1b6de9737d08c',
    listlifestyle: 'fd35c52dced0c880976ba858346d1fc5',
    searchboys: '9fb8986ea700cc27a8057361c3924394',
    searchgirls: 'e3e207a1443ca60c8037fe52a5560c18',
    searchkids: '620fc77f479da8feaeb06f2324e5d0bb',
    searchlifestyle: 'a3c93301c6ffaf3ed0f36a4a451be36d',
    uniquebrandboys: '2ebb0810c0d1a67e5229149c9c3aba7d',
    uniquebrandgirls: '99e23385f4ba4b65f406b7e2968ac821',
    uniquebrandkids: 'a74ebc9b17840c91b9ea46568111fe6b',
    uniquebrandlifestyle: '0e8c81ead53f56302baa4d0ad967f527',
    brandsboys: '77b352db07129c76a9d532acad149f9f',
    brandsgirls: 'bf047f16e52ebc38be5ce9c7623831e6',
    brandskids: 'e3ae1ce9b5e13c6d271ef3eccb831652',
    brandslifestyle: 'e4ac8029c30f65d7f1af030980d140fe',
    newboys: '869d3c5f3b450fb52101d00a61ce87cb',
    newgirls: 'd953b6dfdac02483d1dcce8d96055954',
    newkids: '0874cb6d75df8e0e78f2d475e53ecc08',
    newlifestyle: '43e8fc8e178115c262bbce2bd0012db7',
    saleboys: 'c846e3165c994769b4201d8c32f3ae9b',
    salegirls: '52b1d389edcbc62d65de71b80c4d6ad0',
    salekids: 'ad8b1703c761ba00973868ab5199cc27',
    salelifestyle: '7acc64905c70ac91846f43fb2cec4bbd',
    homeboys: 'b0856a771ef1b59ab1234c74688fa42d',
    homegirls: '2bd61fa12e4933211518f70fe5ce3c48',
    homekids: '895c59e8c64b40399c9533509507320c',
    homelifestyle: '2e037d4e25d2767352ca3e0a4627f7bd',
    indexboys: '0c911d3000f52e8ca7cffb74f5864c29',
    indexgirls: 'b645b8980c423ab30485e0a9d08c2ef7',
    indexkids: '17f6d5d5d454d2c507bc5fcbc90f7756',
    indexlifestyle: '735cd393e841762af8793c346abbbc36'
};
var cookieMap = {};

var bannerApi = 'http://new.yohobuy.com/common/getbanner?content_code=';

$('#api-domain').remove(); //删除信息表单

function getSource(column, postition, event) {
    try {
        dataLayer.push({
            louceng: column,
            weizhi: postition,
            event: event
        });
    } catch (e) {}
}


window.submitSearch = function() {
    var $keywordinput = $('#query_key').val();
    var $defaultsearch = $('#defaultsearch').val();
    var column = 'Search';
    var postition = 'Head Search';
    var event = 'Search';
    var $formatkeyword,
        $formatkeywordinput;

    $formatkeyword = $.trim(keyword.toLowerCase());
    $formatkeywordinput = $.trim($keywordinput.toLowerCase());
    getSource(column, postition, event);
    if (link !== '' && keyword !== '' && $formatkeyword === $formatkeywordinput) {
        location.href = link.replace('\'', '');
    } else {
        if (reg.test($keywordinput) && $keywordinput !== '') {
            location.href = 'http://search.yohobuy.com/error?query=' + $keywordinput + '&result=error';
        } else {
            if ($keywordinput === '') {
                $('#query_key').val($defaultsearch);
            }
            $('#searchForm').submit();
            return false;
        }
    }
};
/**
 * 增加关键字
 * @return {[type]} [description]
 */
function actionAddKeyWords() {
    var $keywords = $('#nav_keyword').text();
    var defaultsearch = 'vans';
    var $querykey = $('#query_key');

    if ($keywords !== '') {
        $querykey.css({
            color: '#000'
        });
        $querykey.val($keywords);
    } else {
        $querykey.css({
            color: '#e0e0e0'
        });
        $querykey.val(defaultsearch);
        $querykey.on('focus', function(e) {
            $querykey.css({
                color: '#000'
            });
            $querykey.val('');
        });
    }
}
/**
 * 定义购物车扩展
 */

function actionGoodsCart() {
    var defaults = {
        cookie: '_g',
        cartNum: ''
    };
    var params = '';
    var cartInfo = '';
    var queryNum = 0;
    var listIndex = 0;
    var tmpList = 0;
    var totalNum = 0;
    var text = '';

    $.fn.miniCart = function(options) {
        params = $.extend(defaults, options);
        if (typeof window.cookie(params.cookie) === 'undefined') {
            cartInfo = null;
        } else {
            if (params.cookie) {
                try {
                    cartInfo = json2.parse(window.cookie(params.cookie));
                } catch (e) {

                }

            }

        }
        if (cartInfo !== null && cartInfo !== '') {
            totalNum = parseInt(cartInfo._nac) + parseInt(cartInfo._ac);
            if (totalNum === 0) {
                $('#icart-num').attr('class', 'icart-num icart-none');
            } else {
                $('#icart-num').attr('class', 'icart-num');
            }
            $(params.cartNum).html(totalNum);
        }
    };
    $.fn.search = function(searchDomain) {

        function getKeywords(obj) {
            var key = $.trim($(obj).val());

            key = key.replace(new RegExp('\'', 'gm'), ''); //去掉特殊字符
            if (key === '') {
                $('.search-list').hide();
                return false;
            }
            key = encodeURI(key);
            $.get(searchDomain + '?query=' + key, function(htmlData) {
                $('.search-list').html(htmlData.data);
                queryNum = $('.search-list').children('li').length;
                listIndex = -1;
                if (queryNum > 0) {
                    $('.search-list').show();
                } else {
                    $('.search-list').hide();
                }
                $('.search-list').find('a').hover(function() {
                    $(this).css('background-color', '#eee');
                }, function() {
                    $(this).css('background-color', '#fff');
                });
            }, 'jsonp');
        }

        function getText(obj) {
            $('.search-list li:eq(' + tmpList + ')').children('a').css('background-color', '#fff');
            $('.search-list li:eq(' + listIndex + ')').children('a').css('background-color', '#eee');
            text = $('.search-list li:eq(' + listIndex + ')').children('a').attr('title');
            $('#query_key').val(text);
        }
        return this.each(function() {
            $(this).keyup(function(event) {
                if (event.which === 38) {
                    if (queryNum === 0) {
                        return false;
                    }
                    if (listIndex === -1) {
                        listIndex = 0;
                    }
                    tmpList = listIndex;
                    listIndex = (listIndex - 1 + queryNum) % queryNum;
                    getText(this);
                } else if (event.which === 40) {
                    if (queryNum === 0) {
                        return false;
                    }
                    tmpList = listIndex;
                    listIndex = (listIndex + 1) % queryNum;
                    getText(this);
                } else if (event.which === 13) {
                    window.submitSearch();
                } else {
                    getKeywords(this);
                }
            });
        });
    };
    $.extend({
        getData: function(domain, options, onSuccess) {
            var defaults = {
                page: 1,
                method: '',
                v: 1,
                return_type: 'jsonp',
                open_key: '12345',
                tmp: Math.random()
            };
            var params = '';

            if (typeof (domain) === undefined || domain === '') {
                return false;
            }
            params = $.extend(defaults, options);
            params.page = params.page || 1;
            if (params.method === '') {
                return false;
            }
            try {
                $.getJSON(domain + '/?callback=?', params, function(_data) {
                    if (onSuccess !== '') {
                        if (typeof onSuccess(_data.data) !== 'undefined') {
                            json2.parse(onSuccess(_data.data));
                        }
                        return false;
                    }
                });
            } catch (e) {
                console.log(e.message);
            }
        },
        getShoppingKey: function() {
            var shoppingInfo = window.cookie('_g');
            var shoppingData = json2.parse(shoppingInfo);
            var spk;

            if (typeof shoppingInfo === 'undefined' || shoppingInfo === null) {
                spk = window.cookie('_SPK');
                return spk ? spk : '';
            }
            return shoppingData._k;
        }
    });
}

/**
 * 时间戳
 * @param  {[type]} v1       [description]
 * @param  {[type]} options) {               if (v1 [description]
 * @return {[type]}          [description]
 */
handlebars.registerHelper('timestamp', function() {
    return new Date().getTime();
});
/**
 * 头像
 * @param  {[type]} v1       [description]
 * @param  {[type]} options) {               if (v1 [description]
 * @return {[type]}          [description]
 */
handlebars.registerHelper('headerimg', function(headerimg) {

    if (headerimg === '') {
        return 'http://img10.static.yhbimg.com/headimg/2013/11/28/09/01cae078abe5fe320c88cdf4c220212688.gif' +
            '?imageView/2/w/100/h/100';
    } else {
        return headerimg;
    }

});
/**
 * 判断等级为3的helper
 * @param  {[type]} v1       [description]
 * @param  {[type]} options) {               if (v1 [description]
 * @return {[type]}          [description]
 */

handlebars.registerHelper('equallevelthree', function(v1, options) {

    if (v1 === '3') {
        return options.fn(this);
    } else {
        return options.inverse(this);
    }
});

/**
 * 判断不为'0'的helper
 * @param  {[type]} v1       [description]
 * @param  {[type]} options) {               if (v1 [description]
 * @return {[type]}          [description]
 */

handlebars.registerHelper('notzero', function(v1, options) {
    if (v1 !== '0') {
        return options.fn(this);
    } else {
        return options.inverse(this);
    }
});

/**
 * 获取头部banner的回调函数
 * @param {[type]} data [description]
 */
function JsonPCallBack(data) {
    var topbanner;

    if (+data.code === 200) {
        if (typeof data.data === 'object') {
            if (data.data.url !== '') {
                topbanner = '<a target="_blank" href="' + data.data.url + '" class="page-top-banner"' +
                    'style="height:36px;border:none;background-image:url(' + window.unescape(data.data.src) + ');' +
                    'background-position: center;display:block;">&nbsp;</a>';
            } else {
                topbanner = '<div class="noticewrapper">' +
                    '<div class="noticecontainer">' +
                    '<h1 class="noticetitle">关于系统升级的公告</h1>' +
                    '<div class="noticecontent">' +
                    '<p class="tips">尊敬的顾客:</p>' +
                    '<p class="detail">您好!为了向您提供更优质的服务,目前系统正在升级,请耐心等待。</p>' +
                    '<p class="detail">' +
                    '系统升级期间,部分地区用户体验会有暂时中断,如遇紧急事宜,欢迎垂询客服热线:400-889-9646 09:00-22:30(周一至周日)。稍后系统将恢复正常' +
                    '</p>' +
                    '<p class="detail">使用,欢迎您继续光顾YOHO!BUY有货!带来不便之处深表歉意,请您谅解!</p>' +
                    '</div>' +
                    '</div>' +
                    '</div>';
            }
            $('body').prepend(topbanner);
        }
    }
}

window.JsonPCallBack = JsonPCallBack;


/**
 * 获得banner数据
 * @param  {[string]} code [banner对应的编码]
 * @return {[type]}      [description]
 */
function getBannerData(code) {
    var script = document.createElement('script');

    script.src = bannerApi + code + '&client_type=web&callback=JsonPCallBack';
    document.getElementsByTagName('head')[0].appendChild(script);
}

/**
 * 显示和隐藏
 * @param  {[type]} sourceClass [description]
 * @param  {[type]} targetClass [description]
 * @return {[type]}             [description]
 */
function toggleDisplay(sourceClass, targetClass) {
    var $that,
        targetobj;

    $(sourceClass).hover(function(e) {
        e.preventDefault();
        $that = $(this);
        targetobj = $(targetClass)[0];
        if (targetobj.style.display === '') {
            $that.addClass('acttags');
            targetobj.style.display = 'block';
        } else {
            $that.removeClass('acttags');
            targetobj.style.display = '';
        }
    });
}

/**
 * 执行顶部显示和隐藏
 * @return {[type]} [description]
 */
function actionTopTagToggle() {
    var tags = [{
            sourceClass: '.myyoho',
            targetClass: '.myyoho-info'
        }, {
            sourceClass: '.phone',
            targetClass: '.qr'
        }],
        obj,
        i;

    for (i = 0; i < tags.length; i++) {
        obj = tags[i];
        toggleDisplay(obj.sourceClass, obj.targetClass);
    }
}
/**
 * 执行顶部群组鼠标交互
 * @return {[type]} [description]
 */
function actionYoHoGroup() {
    var $this;

    $('.yohogroup').mouseenter(function() {
        $this = $(this);
        $this.text($this.attr('cn'));
    });
    $('.yohogroup').mouseleave(function() {
        $this = $(this);
        $this.text($this.attr('en'));
    });
}

/**
 * 检测是否支持css3的动画
 * @return {Boolean} [description]
 */
function isSupportCss3Animation() {
    var thisFunc,
        prefixList = ['webkit', 'moz', 'ms'],
        i;

    for (i = 0; i < prefixList.length; i++) {
        thisFunc = prefixList[i] + 'RequestAnimationFrame';
        if (window[thisFunc]) {
            return true;
        } else {
            return false;
        }
    }

}
/**
 * css3动画
 * @param  {Array}  ) {               var thisFunc, prefixList [description]
 * @return {[type]}   [description]
 */
function requestFrameAct() {
    var prefixList = ['webkit', 'moz', 'ms'];
    var func1 = prefixList[0] + 'RequestAnimationFrame';
    var func2 = prefixList[1] + 'RequestAnimationFrame';
    var func3 = prefixList[2] + 'RequestAnimationFrame';

    if (window[func1]) {
        return function(callback) {
            requestAnimationFrame(callback);
        };
    }
    if (window[func2]) {
        return function(callback) {
            window[func2](callback);
        };
    }
    if (window[func3]) {
        return function(callback) {
            window[func3](callback);
        };
    }
    return function(callback) {
        window.setTimeout(callback, 67);
    };
}


/**
 * css3动画
 * @return {[type]} [description]
 */

function tsAnimate() {
    logoanimationstart += 10;
    $logotrans.css({
        transform: 'rotateX(' + logoanimationstart + 'deg)',
        '-webkit-transform': 'rotateX(' + logoanimationstart + 'deg)',
        '-moz-transform': 'rotateX(' + logoanimationstart + 'deg)'
    });
    if (logoanimationstart / 90 % 2 === 1) {
        if (isen) {
            $logotrans.css('background-image', 'url(http://static.yohobuy.com/newheader/img/logo1.png)');
            isen = false;
        } else {
            $logotrans.css('background-image', 'url(http://static.yohobuy.com/newheader/img/logo_e.png)');
            isen = true;
        }
    }
    if (logoanimationstart / 90 % 2 === 0 && logoanimationstart % 360 !== 0) {
        window.setTimeout(tsAnimate, 3000);
    } else {
        if (logoanimationstart % 360 === 0) {
            window.setTimeout(tsAnimate, 1 * 60 * 1000);
        } else {
            requestFrame(function() {
                tsAnimate();
            });
        }
    }
}

/**
 * 淡出
 * @return {[type]} [description]
 */
function fadeAnimate() {
    if (globaltimeout) {
        window.clearTimeout(globaltimeout);
    }
    $logotrans.fadeOut(loopdurationtime, function() {
        isen = false;

        $logotrans.css('background-image', 'url(http://static.yohobuy.com/newheader/img/logo.png)');
        $logotrans.fadeIn(loopdurationtime, function() {
            onetimeoout = window.setTimeout(function() {
                $logotrans.fadeOut(loopdurationtime, function() {
                    window.clearTimeout(onetimeoout);
                    isen = true;
                    $logotrans.css('background-image',
                        'url(http://static.yohobuy.com/newheader/img/logo_e.png)');
                    $logotrans.fadeIn(loopdurationtime, function() {
                        globaltimeout = window.setTimeout(fadeAnimate, 1 * 60 * 1000);
                    });
                });
            }, 3000);
        });
    });
}
/**
 * 执行头部logo动画
 * @return {[type]} [description]
 */
function actionTopLogoAnimate() {
    if (isSupportCss3Animation()) {
        requestFrame = requestFrameAct();
        window.setTimeout(tsAnimate, 3000);
    } else {
        window.setTimeout(fadeAnimate, 3000);
    }
}
window.newArr = [];
window.wrapperindex = 0;
window.gindex = 0;
window.targetArr1 = [];
window.targetArr2 = [];
window.targetArr3 = [];
window.oh1 = 0;
window.oh2 = 0;
window.oh3 = 0;
window.valueIndex = 0;
window.nowIndex = 0;
window.inner1 = '';
window.inner2 = '';
window.inner3 = '';
window.finalresult = '';

function createNewArray(obj) {
    var $thirdnavpanel = $(obj);

    $thirdnavpanel.find('.thirdnavbar').each(function() {
        var $that = $(this);
        var $alink = $that.find('a');
        var _href = $alink.attr('href');
        var hottag = $alink.attr('hot') === 'hot' ? true : false;
        var objt = {};

        if ($that.hasClass('category-title')) {
            objt = {
                type: 'title',
                height: 49,
                content: $that.text(),
                index: window.valueIndex,
                href: _href,
                hot: false
            };
        } else {
            objt = {
                type: 'catlist',
                height: 36,
                content: $alink.text(),
                index: window.valueIndex,
                href: _href,
                hot: hottag
            };
        }
        window.valueIndex++;
        window.newArr.push(objt);
    });
}

function createWrapper() {
    var arrlength = window.newArr.length;
    var i = 0;
    var objnew = [];
    var aobj = [];
    var bobj = [];
    var cobj = [];
    var final1 = '',
        final2 = '',
        final3 = '';
    var a = 0;
    var b = 0;
    var c = 0;

    for (i; i < arrlength; i++) {
        objnew = window.newArr[i];
        if (window.gindex === 0) {
            window.oh1 = (window.oh1 + objnew.height);
            if (window.oh1 >= 340 && i !== (arrlength - 1)) {
                window.targetArr1 = window.newArr.slice(0, objnew.index + 1);
                window.nowIndex = objnew.index + 1;
                window.gindex++;
            }
            if (i === (arrlength - 1)) {
                window.targetArr1 = window.newArr.slice(0, arrlength + 1);
                break;
            }
        }
        if (window.gindex === 1) {
            window.oh2 = (window.oh2 + objnew.height);
            if (window.oh2 >= 340 && i !== (arrlength - 1)) {
                window.targetArr2 = window.newArr.slice(window.nowIndex, objnew.index + 1);
                window.nowIndex = objnew.index + 1;
                window.gindex++;
            }
            if (i === (arrlength - 1)) {
                window.targetArr2 = window.newArr.slice(window.nowIndex, arrlength + 1);
                break;
            }
        }
        if (window.gindex === 2) {
            window.oh3 = (window.oh3 + objnew.height);
            if (window.oh3 >= 340 && i !== (arrlength - 1)) {
                window.targetArr3 = window.newArr.slice(window.nowIndex, objnew.index + 1);
                window.nowIndex = objnew.index + 1;
                window.gindex++;
                break;
            }
            if (i === (arrlength - 1)) {
                window.targetArr3 = window.newArr.slice(window.nowIndex, arrlength + 1);
                break;
            }
        }
    }
    for (a; a < window.targetArr1.length; a++) {
        aobj = window.targetArr1[a] || {};
        if (aobj.type === 'title') {
            window.inner1 = window.inner1 +
                '<li class="cattitle"><h3><a  href="' +
                aobj.href +
                '">' +
                aobj.content +
                '</a></h3></li>';
        } else {
            if (aobj.hot === true) {
                window.inner1 = window.inner1 +
                    '<li class="catdetail"><a  class="thirdcatelink hot" href="' +
                    aobj.href +
                    '">' +
                    aobj.content +
                    '</a></li>';
            } else {
                window.inner1 = window.inner1 +
                    '<li class="catdetail"><a  class="thirdcatelink" href="' +
                    aobj.href + '">' +
                    aobj.content +
                    '</a></li>';
            }

        }
    }
    for (b; b < window.targetArr2.length; b++) {
        bobj = window.targetArr2[b] || {};
        if (bobj.type === 'title') {
            window.inner2 = (window.inner2 +
                '<li class="cattitle"><h3><a  href="' +
                bobj.href + '">' +
                bobj.content +
                '</a></h3></li>');
        } else {
            if (bobj.hot === true) {
                window.inner2 = (window.inner2 +
                    '<li class="catdetail"><a  class="thirdcatelink hot" href="' +
                    bobj.href + '">' + bobj.content + '</a></li>');
            } else {
                window.inner2 = (window.inner2 +
                    '<li class="catdetail"><a  class="thirdcatelink" href="' +
                    bobj.href + '">' + bobj.content + '</a></li>');
            }

        }
    }
    for (c; c < window.targetArr3.length; c++) {
        cobj = window.targetArr3[c] || {};
        if (cobj.type === 'title') {
            window.inner3 = (window.inner3 +
                '<li class="cattitle"><h3><a  href="' +
                cobj.href +
                '">' +
                cobj.content +
                '</a></h3></li>');
        } else {
            if (cobj.hot === true) {
                window.inner3 = (window.inner3 +
                    '<li class="catdetail"><a  class="thirdcatelink hot" href="' +
                    cobj.href + '">' +
                    cobj.content +
                    '</a></li>');
            } else {
                window.inner3 = (window.inner3 +
                    '<li class="catdetail"><a  class="thirdcatelink" href="' +
                    cobj.href + '">' +
                    cobj.content +
                    '</a></li>');
            }

        }
    }
    if (window.inner1 !== '') {
        final1 = '<ul class="cate_row1 cate_row">' +
            window.inner1 +
            '</ul>';
    }
    if (window.inner2 !== '') {
        final2 = '<ul class="cate_row2 cate_row">' +
            window.inner2 +
            '</ul>';
    }
    if (window.inner3 !== '') {
        final3 = '<ul class="cate_row3 cate_row">' +
            window.inner3 +
            '</ul>';
    }
    window.finalresult = final1 + final2 + final3;
    $('#' + window.wrapperindex).empty().append(window.finalresult);
}

function actionNav() {
    $('.categorywrapper').each(function(index) {
        window.wrapperindex = $(this).attr('id');
        window.newArr = [];
        window.gindex = 0;
        window.targetArr1 = [];
        window.targetArr2 = [];
        window.targetArr3 = [];
        window.oh1 = 0;
        window.oh2 = 0;
        window.oh3 = 0;
        window.valueIndex = 0;
        window.nowIndex = 0;
        window.inner1 = '';
        window.inner2 = '';
        window.inner3 = '';
        createNewArray($(this).find('.category'));
        createWrapper();
    });
}

/**
 * 获取三级导航的tip图标
 * @return {[type]} [description]
 */
function actionTipPic() {
    var tipscode = {};
    var $contentcode = '';
    var $img = '';
    var $title = '';
    var $link = '';
    var logolink = '';

    $(document).on('mouseenter', '.sub-nav-item', function() {
        $contentcode = $(this).find('.showdetail').attr('data-code');
        if ($contentcode) {
            if (!tipscode[$contentcode]) {
                tipscode[$contentcode] = $contentcode;
                $img = $(this).find('.showdetail').find('img');
                $title = $(this).find('.showdetail').find('.title');
                $link = $(this).find('.showdetail').find('a');
                $.get(bannerApi + $contentcode + '&width=337&height=250&client_type=web', function(rsdata) {
                    $img.attr('src', rsdata.data.src);
                    $link.attr('href', rsdata.data.url);
                    $title.text(rsdata.data.title);
                }, 'jsonp');
            }
        }
    });
    logolink = $('.cure').find('.name-cn').find('a').attr('href');
    $('.main-link').attr('href', logolink);
}



function closeCover() {
    var $cover = $('#cover');

    $cover.remove();
}
/**
 * 首次进入有弹窗
 * @return {[type]} [description]
 */
function actionCover() {
    var gender = window.cookie('_Gender');
    var newMask = '';
    var windowheight = '';
    var selfheight = '';
    var containertop;
    var length = '';

    if (window.location.href === 'http://www.yohobuy.com/' &&
        (typeof gender === 'undefined' || gender === '' || gender === null)) {
        $.get('http://www.yohobuy.com/index/guide', function(data) {
            newMask = document.createElement('div');
            newMask.id = 'cover';
            newMask.innerHTML = data;
            document.body.appendChild(newMask);
            windowheight = $(window).height();
            selfheight = $('.guide-box').height();
            containertop = windowheight / 2 - selfheight / 2;
            length = $('.guide-box .clear').find('li').length;
            $('.guide-box').css({
                width: (200 * length) + 'px',
                top: containertop + 'px'
            });
            $('#cover').bind('click', function(event) {
                window.setCookie('_Gender', '1,3', {
                    path: '/',
                    domain: '.yohobuy.com',
                    expires: 90
                });
                window.setCookie('_Channel', 'boys', {
                    path: '/',
                    domain: '.yohobuy.com',
                    expires: 7
                });
                closeCover();
            });
            $('#cover .guide-box .close').bind('click', function(event) {
                getSource('弹窗', 'CLOSE', 'homepage_man');
                window.setCookie('_Gender', '1,3', {
                    path: '/',
                    domain: '.yohobuy.com',
                    expires: 90
                });
                window.setCookie('_Channel', 'boys', {
                    path: '/',
                    domain: '.yohobuy.com',
                    expires: 7
                });
                closeCover();
            });
            $('.boys img , .boys .go').bind('click', function(event) {
                getSource('弹窗', 'BOYS', 'homepage_man');
                window.setCookie('_Gender', '1,3', {
                    path: '/',
                    domain: '.yohobuy.com',
                    expires: 90
                });
                window.setCookie('_Channel', 'boys', {
                    path: '/',
                    domain: '.yohobuy.com',
                    expires: 7
                });
                closeCover();
            });
            $('.girls img, .girls .go').bind('click', function(event) {
                getSource('弹窗', 'GIRLS', 'homepage_woman');
                window.setCookie('_Gender', '2,3', {
                    path: '/',
                    domain: '.yohobuy.com',
                    expires: 90
                });
                window.setCookie('_Channel', 'girls', {
                    path: '/',
                    domain: '.yohobuy.com',
                    expires: 7
                });
            });
            $('.lifestyle img, .lifestyle .go').bind('click', function(event) {
                window.setCookie('_Channel', 'lifestyle', {
                    path: '/',
                    domain: '.yohobuy.com',
                    expires: 7
                });
                getSource('弹窗', 'LIEFSTYLE', 'homepage_lifestyle');
            });
            $('#cover .guide-box').bind('click', function(event) {
                event.stopPropagation();
            });
        });
    }
}
/**
 * 查询跳转后保留关键字
 * @return {[type]} [description]
 */
function actionAddKeyWords() {
    var $keywords = $('#nav_keyword').text();
    var defaultsearch = $('#defaultsearch').val();
    var $querykey = $('#query_key');

    if ($keywords !== '') {
        $querykey.css({
            color: '#000'
        });
        $querykey.val($keywords);
    } else {
        $querykey.css({
            color: '#e0e0e0'
        });
        $querykey.val(defaultsearch);
        $querykey.on('focus', function(e) {
            $querykey.css({
                color: '#000'
            });
            $querykey.val('');
        });
    }
}


/**
 * cookie 初始化
 * @return {[type]} [description]
 */
function actionInitCookie() {
    var $cookieGender = window.cookie('_Gender');
    var $target = $('.cure');

    if (typeof $cookieGender !== 'undefined' && $cookieGender !== '') {
        window.setCookie('_Gender', 1, {
            path: '/',
            domain: '.yohobuy.com',
            expires: 7
        });
    }
    if ($target.find('.name-cn a').text() === '男生') {
        window.setCookie('_Gender', '1,3', {
            path: '/',
            domain: '.yohobuy.com',
            expires: 7
        });
        window.setCookie('_Channel', 'boys', {
            path: '/',
            domain: '.yohobuy.com',
            expires: 7
        });
    }
    if ($target.find('.name-cn a').text() === '女生') {
        window.setCookie('_Gender', '2,3', {
            path: '/',
            domain: '.yohobuy.com',
            expires: 7
        });

        // window.setCookie('_Channel', 'girls', {
        //     path: '/',
        //     domain: '.yohobuy.com',
        //     expires: 7
        // });
    }
    if ($target.find('.name-cn a').text() === '创意生活') {
        window.setCookie('_Channel', 'lifestyle', {
            path: '/',
            domain: '.yohobuy.com',
            expires: 7
        });
    }
    if ($target.find('.name-cn a').text() === '潮童') {
        window.setCookie('_Channel', 'kids', {
            path: '/',
            domain: '.yohobuy.com',
            expires: 7
        });
    }
}
/**
 * 提前设置好频道的cookie
 */
function setChannelCookie() {
    $('.first-nav-item').click(function() {
        var _cookieGender = window.cookie('_Gender');

        if (typeof _cookieGender !== 'undefined' && _cookieGender !== '') {
            window.setCookie('_Gender', 1, {
                path: '/',
                domain: '.yohobuy.com',
                expires: 7
            });
        }
        if ($(this).find('.name-cn a').text() === '男生') {
            window.setCookie('_Gender', '1,3', {
                path: '/',
                domain: '.yohobuy.com',
                expires: 7
            });
            window.setCookie('_Channel', 'boys', {
                path: '/',
                domain: '.yohobuy.com',
                expires: 7
            });
        }
        if ($(this).find('.name-cn a').text() === '女生') {
            window.setCookie('_Gender', '2,3', {
                path: '/',
                domain: '.yohobuy.com',
                expires: 7
            });
            window.setCookie('_Channel', 'girls', {
                path: '/',
                domain: '.yohobuy.com',
                expires: 7
            });
        }
        if ($(this).find('.name-cn a').text() === '创意生活') {
            window.setCookie('_Channel', 'lifestyle', {
                path: '/',
                domain: '.yohobuy.com',
                expires: 7
            });
        }
        if ($(this).find('.name-cn a').text() === '潮童') {
            window.setCookie('_Channel', 'kids', {
                path: '/',
                domain: '.yohobuy.com',
                expires: 7
            });
        }
    });

}
/**
 * cookie集合
 * @type {Object}
 */
function actionExeCookieMap() {
    var cookies = document.cookie;
    var cookiearr = cookies.split(';');
    var i;
    var temparr;
    var key;

    for (i = 0; i < cookiearr.length; i++) {
        temparr = cookiearr[i].split('=');
        if (typeof temparr[0] !== 'undefined') {
            key = temparr[0].replace(/\s/g, '');
            cookieMap[key] = temparr[1];
        }
    }
}


/**
 * 购物车商品数量
 * @return {[type]} [description]
 */
function actionUpdateCartNum() {
    $('#miniCartBox').miniCart({
        cartNum: '.ic-infomation'
    });
}
/**
 * 加载购物车数据
 * @return {[type]} [description]
 */
function loadCartData() {
    var shoppingInfo,
        shoppingData,
        strK;

    $.getData(apiDomain, {
        method: 'open.Shoppingcart.getCartData',
        shopping_key: $.getShoppingKey()
    }, function(jsonData) {
        if (cartTpl === '') {
            cartTpl = handlebars.compile($('#mini-cart-tpl').html());
        }
        $('#miniCartBox').children('.gobuy-wrapper').html(cartTpl({
            carData: jsonData
        }));
        if (parseInt($('.ic-infomation').html()) === 0) {
            $('#miniCartBox .gobuy-wrapper').html('<div class="gobuy-empty">' +
                '<h3 class="information">您的购物车暂无商品</h3></div>');
        }
        if ($('#miniCartBox .goods-list li').length < 1) {
            shoppingInfo = window.cookie('_g');
            shoppingData = json2.parse(shoppingInfo);
            if (shoppingData !== null) {
                strK = '{"_k":"' + shoppingData._k + '","_nac":0' + ',"_ac":0,"_r":0}';
                window.setCookie('_g', strK, {
                    path: '/',
                    domain: '.yohobuy.com'
                });
            }
            $('.ic-infomation').html(0);
            $('#miniCartBox .gobuy-wrapper').html('<div class="gobuy-empty">' +
                '<h3 class="information">您的购物车暂无商品</h3></div>');
        }
    });
}
/**
 * 删除购物车数据
 * @param  {[type]}  id        [description]
 * @param  {Boolean} isreduce [description]
 * @return {[type]}            [description]
 */
function delCartGoods(id, isreduce) {
    $.getData(apiDomain, {
        method: 'open.Shoppingcart.delone',
        shopping_key: $.getShoppingKey(),
        id: id,
        isreduce: isreduce
    }, function(jsonData) {
        var shoppingInfo = window.cookie('_g');
        var shoppingData = json2.parse(shoppingInfo);
        var strK = '{"_k":"' + shoppingData._k + '","_nac":' + jsonData.total_goods_num + ',"_ac":0,"_r":0}';

        window.setCookie('_g', strK, {
            path: '/',
            domain: '.yohobuy.com'
        });
        loadCartData();
        actionUpdateCartNum();
    });
}


/**
 * 监听购物车删除
 * @return {[type]} [description]
 */
function actionListenDelCarGoods() {
    var $delcargoods;
    var goodsid,
        cheapest;

    $(document).on('click', '.goodscardelete', function(e) {
        $delcargoods = $(this);
        goodsid = $delcargoods.attr('goodsid');
        cheapest = $delcargoods.attr('cheapest');
        delCartGoods(goodsid, cheapest);
    });
}
/**
 * 监听点击更多打折商品
 * @return {[type]} [description]
 */
function actionListenCartMore() {
    var $morecart;

    $(document).on('click', '.mycart_i_down', function(e) {
        $morecart = $(this);
        $morecart.toggleClass('mycart_i_up');
        $('#mycartmore').slideToggle(300);
    });
}
/**
 * 点击购物车
 * @return {[type]} [description]
 */
function actionClickMiniCartBox() {
    var $target;
    var shopcarurl = 'http://www.yohobuy.com/shopping/cart';

    $('#miniCartBox').on('click', function(e) {
        $target = $(e.target);
        if ($target.hasClass('gobuy')) {
            window.location.href = shopcarurl;
        }
    });
}

/**
 * 显示购物车效果
 * @param  {Boolean} isShow [description]
 * @return {[type]}         [description]
 */
function showMiniCart(isShow) {
    if (isShow === 1) {
        $('#miniCartBox').addClass('list-cur');
        $('.gobuy-wrapper').show();
        if (parseInt($('.ic-infomation').html()) !== 0) {
            $('#miniCartBox .gobuy-wrapper').html('<div class="gobuy-loading">' +
                '<h3 class="information">加载中,请稍后</h3></div>');
            loadCartData();
        } else {
            $('#miniCartBox .gobuy-wrapper').html('<div class="gobuy-empty">' +
                '<h3 class="information">您的购物车暂无商品</h3></div>');
        }
    } else {
        $('#miniCartBox').removeClass('list-cur');
        $('.gobuy-wrapper').hide();
    }
}


/**
 * 鼠标购物车的滑入滑出效果
 * @return {[type]} [description]
 */
function actionGoodsCarMouseEffect() {
    var $target;

    $('#miniCartBox').mouseenter(function(e) {
        $target = $(e.target);
        if ($target.attr('id') === 'miniCartBox' || $target.attr('class') === 'ic-infomation') {
            showMiniCart(1);
        }
    });
    $('#miniCartBox').mouseleave(function(e) {
        showMiniCart(0);
    });
}
/**
 * 获得banner & 异常通知
 * @return {[type]} [description]
 */
function actionGetBannerAndNotice() {
    var INDEXKIDS = 'indexkids',
        INDEXLIFESTYLE = 'indexlifestyle',
        INDEXBOYS = 'indexboys',
        INDEXWOMAN = 'indexgirls',
        UNIQUEBRAND = 'uniquebrand';
    var url = window.location.href;
    var host = window.location.host;
    var code = '';
    var firstarea;

    if (url.indexOf('search') !== -1) {
        code = bannerMap['search' + cookieMap._Channel];
    }
    if (url.indexOf('list') !== -1) {
        code = bannerMap['list' + cookieMap._Channel];
    }
    if (url.indexOf('brands') !== -1) {
        code = bannerMap['brands' + cookieMap._Channel];
    }
    if (url.indexOf('new') !== -1) {
        code = bannerMap['new' + cookieMap._Channel];
    }
    if (url.indexOf('sale') !== -1) {
        code = bannerMap['sale' + cookieMap._Channel];
    }
    if (url.indexOf('home') !== -1) {
        code = bannerMap['home' + cookieMap._Channel];
    }
    if (url.indexOf('kids') !== -1) {
        code = bannerMap[INDEXKIDS];
    }
    if (url.indexOf('woman') !== -1 || url.indexOf('girls') !== -1) {
        code = bannerMap[INDEXWOMAN];
    }
    if (url.indexOf('lifestyle') !== -1) {
        code = bannerMap[INDEXLIFESTYLE];
    }
    if (url.indexOf('www.yohobuy.com') !== -1 && window.location.pathname === '/') {
        code = bannerMap[INDEXBOYS];
    }
    firstarea = host.split('.')[0];
    if (firstarea !== 'list' && firstarea !== 'search' && firstarea !== 'www' &&
        firstarea !== 'new' && firstarea !== 'item' && firstarea !== 'guang') {
        code = bannerMap[UNIQUEBRAND + cookieMap._Channel];
    }

    getBannerData(code); //获得banner信息

}

function brandSwitch(index) {
    $('.hot-brands').find('ul').stop().animate({
        opacity: 0,
        'z-index': 1
    }, 200).eq(index).animate({
        opacity: 1,
        'z-index': 2
    }, 200);
}
/**
 * 品牌左右切换
 * @return {[type]} [description]
 */
function actionBrandChange() {
    var activeIndex = 0,
        swiperLen;

    if ($('.hot-brands').size() > 0) {
        swiperLen = $('.hot-brands').find('ul').size();
        $('.hot-brands').find('ul').eq(0).css({
            opacity: 1,
            'z-index': 2
        });
        $('.brands-control').on('click', '.next', function() {
            if (activeIndex === swiperLen - 1) {
                activeIndex = 0;
            } else {
                activeIndex++;
            }
            brandSwitch(activeIndex);
        });
        $('.brands-control').on('click', '.prev', function() {
            if (activeIndex === 0) {
                activeIndex = swiperLen - 1;
            } else {
                activeIndex--;
            }
            brandSwitch(activeIndex);
        });


    }
}
/**
 * 循环检测购物车数量
 * @return {[type]} [description]
 */
function actionLoopUpdCartNum() {
    setInterval(actionUpdateCartNum, 2000);
}
/**
 * 处理模板
 * @return {[type]} [description]
 */
function actionExeTemplate() {
    var $goodcartempwarpper = $('#goodcartempwarpper');
    var resulthtml = '';

    if ($goodcartempwarpper) {
        if ($goodcartempwarpper.html()) {
            resulthtml = $('#goodcartempwarpper').html().replace(/\\/g, '');
            $('#goodcartempwarpper').html(resulthtml);
            vipInfoCombine = handlebars.compile($('#tmpl-my-login-new').html());
        }
    }
}
/**
 * 执行搜索
 * @return {[type]} [description]
 */
function actionSearch() {
    var searchDomain = 'http://search.yohobuy.com/api/suggest';

    $('#query_key').search(searchDomain);
}
/**
 * 获取登录状态
 * @return {[type]} [description]
 */
function actionLoginState(_data) {
    var timestamp = new Date().getTime();
    var noLoginHtml = '<span>Hi~</span>[<a href="http://www.yohobuy.com/signin.html" class="list-a login-out ">' +
        '请登录</a>]&nbsp;' +
        '[<a href="http://www.yohobuy.com/reg.html" class="list-a login-out" onclick="">免费注册</a>]';
    var loginHtml = '<span>Hi~<a href="http://www.yohobuy.com/home?t=' + timestamp +
        '">{{user_name}}</a></span>&nbsp;' +
        '{{#if islogin}}' +
        '[<a href="{{logout}}" class="list-a login-out">退出</a>]' +
        '{{/if}}{{#unless islogin}}' +
        '[<a href="http://www.yohobuy.com/signin.html" class="list-a login-out">请登录</a>]&nbsp;' +
        '[<a href="http://www.yohobuy.com/reg.html" onclick="" class="list-a login-out">免费注册</a>]' +
        '{{/unless}}';
    var $boxObj = $('#loginBox');
    var info = window.cookie('_UID');
    var name = _data.data.profile_name;
    var _length = 0;
    var t = 0;
    var char = '';
    var user = info.split('::');
    var userName = user[0] || ' ';
    var _logout = 'http://www.yohobuy.com/logout_';
    var islogin = '1';
    var _num = 0;
    var data = {
        user_name: name,
        logout: _logout + _data.data.token + '.html',
        random: Math.random()
    };


    loginInfoCombine = handlebars.compile(loginHtml);
    if (typeof info === 'undefined' || info === null) {
        $boxObj.html(noLoginHtml);
        return false;
    }
    if (typeof user === 'undefined' || user.length < 4) {
        $boxObj.html(noLoginHtml);
        return false;
    }

    for (t; t < userName.length; t++) {
        char = userName.substr(t, 1);
        if (/.*[\u4e00-\u9fa5]+.*$/.test(char)) {
            _length += 2;
        } else {
            _length += 1;
        }
    }
    if (_length <= 10) {
        name = userName;
    } else {
        _num = 0;
        for (t; t < userName.length; t++) {
            if (_num < 10) {
                char = userName.substr(t, 1);
                if (char !== '*') {
                    if (/.*[\u4e00-\u9fa5]+.*$/.test(char)) {
                        _num += 2;
                    } else {
                        _num += 1;
                    }
                }
                name += char;
            }
        }
        if (name.length < userName.length) {
            name += '...';
        }
    }


    if (/http:\/\//.test(user[3])) {
        _logout = user[3].replace('www.yohobuy.com', 'www.yohobuy.com');
    } else {
        _logout = 'http://www.yohobuy.com/logout_' + user[3] + '.html';
    }
    if (_data.result === -1) {
        islogin = '-1';
    }
    data.islogin = islogin;
    $boxObj.html(loginInfoCombine(data));
}
/**
 * 获得vip用户信息
 * @return {[type]} [description]
 */
function actionVipInfo(_data) {
    var vipInfo = _data.data;
    var headUrl = '';

    if (_data.result === 1) {
        if (typeof vipInfo === undefined || vipInfo.length < 1) {
            return false;
        }
        if (vipInfo.vip.curVipInfo.curLevel === '3') {
            vipInfo.vip3 = true;
        }

        $('#myYohoBox').mouseenter(function() {
            $(this).addClass('acttags');
            $('#myYohoBox .myyoho-info').show().html(vipInfoCombine(vipInfo));
            headUrl = $('.myyoho-photo img').attr('data-url');
            if ($._checkUrlState === 1) {
                $('.myyoho-photo').show().find('img').attr('src', headUrl);
                return;
            }
            if (headUrl === '' || $._checkUrl !== '') {
                return;
            }
            $.ajax({
                url: headUrl,
                type: 'GET',
                complete: function(response) {
                    if (response.status === 200 || response.status === 0) {
                        $('.myyoho-photo').show().find('img').attr('src', headUrl);
                        $._checkUrlState = 1;
                    }
                    $._checkUrl = headUrl;
                }
            });
        });
        $('#myYohoBox').mouseleave(function() {
            $(this).removeClass('acttags');
            $('#myYohoBox .myyoho-info').hide();
        });
    }
}
/**
 * 获取登录信息
 * @return {[type]} [description]
 */
function actionLoginInfo() {
    var param = {
        method: 'open.passport.get'
    };

    $.getData(apiDomain, param, function(_data) {
        if (_data.result !== -1) {
            actionLoginState(_data); // 更改登录状态
            actionVipInfo(_data); //获得vip;
        } else {
            window.setCookie('_UID', '', {
                domain: '.yohobuy.com',
                expires: -1
            });
        }
    });
}
/**
 * 初始化函数
 * @return {[type]} [description]
 */
function init() {
    actionNav(); //处理导航
    actionTipPic(); //鼠标移入后查询
    actionExeTemplate(); //处理模板
    actionCover(); //初次登录弹框
    actionInitCookie(); //初始化cookie
    setChannelCookie(); //设置频道缓存
    actionExeCookieMap(); //格式化cookie
    actionGoodsCart(); //初始化购物车插件
    actionYoHoGroup(); // yoho集团鼠标效果
    actionTopTagToggle(); // yoho上部分开关
    actionTopLogoAnimate(); //yoho logo动画
    actionGetBannerAndNotice(); // 获取banner和服务器维护提示
    actionBrandChange(); //切换品牌
    actionAddKeyWords(); //跳转后增加关键字
    actionGoodsCarMouseEffect(); //鼠标滑入滑出效果
    actionUpdateCartNum(); //更新购物车数量
    actionLoopUpdCartNum(); //循环检测购物车数量
    actionSearch(); //搜索执行
    actionClickMiniCartBox(); //点击购物车跳转
    actionListenDelCarGoods(); //监听购物车删除
    actionListenCartMore(); //
    actionLoginInfo(); //获取登录信息
    actionAddKeyWords(); //增加关键字
}
init();
});
define("js/simple-header", ["jquery"], function(require, exports, module){
var $ = require("jquery");

var $apiDom = $('#api-domain');

var apiDomain = $apiDom.val(); //获取数据的地址

$apiDom.remove(); //删除API信息

if ($('.simple-header').size() > 0) {
    $('.tool-options').on('mouseenter', function() {
        $(this).find('.tool-select').fadeIn();
    }).on('mouseleave', function() {
        $(this).find('.tool-select').fadeOut();
    });
}

/**
 * 格式化用户名
 * @return {[type]} [description]
 */
function formatUsernName(userName) {
    var name,
        char,
        _num = 0,
        _length = 0,
        t;

    for (t = 0; t < userName.length; t++) {
        char = userName.substr(t, 1);
        if (/.*[\u4e00-\u9fa5]+.*$/.test(char)) {
            _length += 2;
        } else {
            _length += 1;
        }
    }
    if (_length <= 10) {
        name = userName;
    } else {
        _num = 0;
        name = '';
        for (t = 0; t < userName.length; t++) {
            if (_num < 10) {
                char = userName.substr(t, 1);
                if (char !== '*') {
                    if (/.*[\u4e00-\u9fa5]+.*$/.test(char)) {
                        _num += 2;
                    } else {
                        _num += 1;
                    }
                }
                name += char;
            }
        }
        if (name.length < userName.length) {
            name += '...';
        }
    }
    return name;
}

/**
 * 设置简单头部登陆状态
 * @return {[type]} [description]
 */
function setLoginStatus(data) {
    var info = data.data,
        loginHtml,
        name;

    if (data.result !== -1) {
        name = formatUsernName(info.profile_name);
        loginHtml = '<span>Hi~</span>' +
                    '<a href="http://www.yohobuy.com/home?t=' + info.random + '">' + name + '</a>&nbsp;' +
                    '<a href="http://www.yohobuy.com/logout_' + info.token + '.html">[退出]</a>';
    } else {
        loginHtml = '<span>Hi~</span>&nbsp;' +
                    '<a href="http://www.yohobuy.com/signin.html">[请登录]</a>&nbsp;' +
                    '<a href="http://www.yohobuy.com/reg.html">[免费注册]</a>';
    }
    $('.header-tool li').eq(0).html(loginHtml);
}

/**
 * 获取登录信息
 * @return {[type]} [description]
 */
function actionLoginInfo() {
    var param = {
            return_type: 'jsonp',
            method: 'open.passport.get'
        };

    $.getJSON(apiDomain + '/?callback=?', param, function(_data) {
        if (_data && _data.data) {
            setLoginStatus(_data.data);
        }
    });
}

actionLoginInfo(); //获取登录信息


});
define("js/product/entry", ["jquery","handlebars","source-map","lazyload","index"], function(require, exports, module){
/**
 * 商品页面打包入口文件
 * @auhtor: xuqi<qi.xu@yoho.cn>
 * @date: 2015/12/28
 */

require("js/product/list");

require("js/product/brand");

require("js/product/hotrank");

require("js/product/item");

});
define("js/product/list", ["jquery","handlebars","source-map","lazyload"], function(require, exports, module){
/**
 * 商品列表页
 * @author: xuqi<qi.xu@yoho.cn>
 * @date: 2015/11/23
 */

require("js/product/filter");

require("js/product/sort-pager");

require("js/product/latest-walk");

require("js/product/product");
});
define("js/product/filter", ["jquery","handlebars","source-map"], function(require, exports, module){
/**
 * 商品筛选逻辑
 * @author: xuqi<qi.xu@yoho.cn>
 * @date: 2015/12/4
 */

var $ = require("jquery"),
    Handlebars = require("handlebars");

var checkUnicode = {
    unchecked: '&#xe635;',
    checked: '&#xe636;'
},
moreUnicode = {
    up: '&#xe610;',
    down: '&#xe600;'
};

//品牌相关变量
var $brandDefault = $('.brand .default'),
    $brandInput = $('#brand-search-input'),
    $brandPanel = $('.brand .brand-panel'),
    $brandAttrs = $brandPanel.find('.attr'),
    $brandMore = $('#brand-more'),
    $brandMulti = $('#brand-multi'),
    $brandsIndex = $('.brands-index');

var $brandMoreTxt, $brandMoreIcon;

//价格相关变量
var $udPrice = $('.ud-price-range'),
    interReg = /^\d+$/,
    $limit, $min, $max, $btn;

//分类相关变量
var $sortSub = $('.sort-sub-wrap');

//高级选项相关变量
var $seniorSubWrap = $('.senior-sub-wrap'),
    $seniorAttrWrap = $('.senior-attr-wrap');

var seniorHoverTime, hoveredIndex;

// 尺寸 handlebars 模板
var sizeTmpl = '{{# size}}<a class="attr {{#if checked}}checked{{/if}}" href="{{href}}">{{name}}</a>{{/ size}}',
    sizeCache = {}, // 缓存一下尺寸信息
    $sizeWrap = $('.filter-box .size');

sizeTmpl = Handlebars.compile(sizeTmpl);

//清除checkbox选中状态[页面默认checked不清空]
function clearChecked($checkbox, $checked) {
    $checkbox.each(function() {
        if ($(this).closest('.attr').hasClass('checked')) {
            return;
        }
        $(this).removeClass('checked').html(checkUnicode.unchecked);
    });
    $checked.find('.checkbox').addClass('checked').html(checkUnicode.checked);
}

//显示更多品牌面板
function brandShowMore() {
    $brandDefault.addClass('hide');
    $brandPanel.removeClass('hide');
}

//隐藏更多品牌面板
function brandHideMore() {
    $brandPanel.addClass('hide');
    $brandDefault.removeClass('hide');

    //清除索引状态
    $brandsIndex.children('span').removeClass('hover');
}

//url构造&跳转
function uriLoc(attr, val) {
    var qs = window.queryString(),
        newHref;

    qs[attr] = val;
    newHref = '?' + decodeURIComponent($.param(qs));
    window.location.href = newHref;
}

//隐藏高级选项面板
function hideSeniorPanel(index) {
    $seniorSubWrap.children('.senior-sub:eq(' + hoveredIndex + ')').addClass('hide');
    $seniorAttrWrap.children('.attr:eq(' + hoveredIndex + ')').removeClass('hover');
    hoveredIndex = -1;
}

//屏蔽筛选项双击文字选中
$('.filter-box').on('selectstart', '.attr, .brands-index span', function() {
    return false;
});

//【分类】
$('.sort-pre').on('click', 'li', function() {
    var $this = $(this),
        index = $this.index(),
        id = $this.data('id');

    if ($this.hasClass('active')) {

        // 选中时,再次点击取消选中
        $this.removeClass('active');
        $sortSub.children(':eq(' + index + ')').addClass('hide');
        $sizeWrap.addClass('hide');
        return;
    }

    $this.siblings('.active').removeClass('active');
    $this.addClass('active');

    $sortSub.children(':not(.hide)').addClass('hide');
    $sortSub.children(':eq(' + index + ')').removeClass('hide');

    if (!$sizeWrap.data('load')) {
        if (sizeCache[id]) {
            $sizeWrap.find('.attr-content').html(sizeCache[id]);
            $sizeWrap.removeClass('hide');
        } else {
            $.ajax({
                url: '/product/search/sortSize',
                data: {
                    msort: id
                }
            }).then(function(res) {
                if ($.type(res) === 'array' && res.length) {
                    sizeCache[id] = sizeTmpl({
                        size: res
                    });
                    $sizeWrap.find('.attr-content').html(sizeCache[id]);
                    $sizeWrap.removeClass('hide');
                } else {
                    $sizeWrap.addClass('hide');
                }
            });
        }
    }
});

//【品牌】
if ($brandMore.length > 0) {
    $brandMoreTxt = $brandMore.children('em');
    $brandMoreIcon = $brandMore.children('.iconfont');
}

//【品牌】多选
$brandMulti.click(function() {
    if ($brandPanel.css('display') === 'none') {

        //显示品牌面板
        $brandMore.trigger('click');
    }

    brandShowMore();
    $brandPanel.removeClass('hide').addClass('multi'); //显示出checkbox
    $(this).addClass('hide');

    //隐藏更多按钮
    $brandMore.addClass('hide');
});

//【品牌】更多
$brandMore.click(function() {
    var $this = $(this);

    if ($this.hasClass('more')) {
        brandHideMore();

        $brandMoreTxt.text('更多');
        $brandMoreIcon.html(moreUnicode.down);

        //清空搜索框和搜索结果
        $brandInput.val('').trigger('keyup');
    } else {
        brandShowMore();

        $brandMoreTxt.text('收起');
        $brandMoreIcon.html(moreUnicode.up);
    }

    $(this).toggleClass('more');
});

//【品牌】索引
$brandsIndex.on('mouseenter', 'span', function() {
    var $this = $(this),
        index = $this.data('index');

    if ($this.hasClass('hover')) {
        return;
    }
    setTimeout(function() {
        $this.siblings('span.hover').removeClass('hover');
        $this.addClass('hover');

        if ($this.index() === 0) {

            //全部
            $brandAttrs.removeClass('hide');
        } else {
            $brandAttrs.addClass('hide').filter('[data-index=' + index + ']').removeClass('hide');
        }
    }, 120);
});

//【品牌】搜索
$brandInput.keyup(function() {
    var val = $(this).val().toLowerCase();

    if (val === '') {
        $brandAttrs.removeClass('hide');
    } else {
        $brandAttrs.addClass('hide').filter('[data-key*="' + val + '"]').removeClass('hide');
    }
});

//【品牌】多选确定
$('#brand-multi-ok').click(function() {
    var val = [];

    if ($(this).hasClass('dis')) {
        return;
    }

    $brandPanel.find('span.checked').each(function() {
        val.push($(this).data('id'));
    });

    uriLoc('brand', val.join(','));
});

//【品牌/高级选项】多选取消
$('.multi-select-cancel').click(function() {
    var $panel = $(this).closest('.multi');

    if ($panel.hasClass('brand-panel')) {

        $brandMulti.removeClass('hide'); //显示多选按钮
        $brandMore.trigger('click');

        //显示出更多按钮
        $brandMore.removeClass('hide');

        //清空搜索框和搜索结果
        $brandInput.val('').trigger('keyup');
        brandHideMore();
    }

    $panel.addClass('hide').removeClass('multi');
    clearChecked($panel.find('.checkbox.checked'), $panel.find('.attr.checked')); //清除选中状态

    //确定按钮状态恢复dis
    $(this).siblings('.multi-select-ok').addClass('dis');
});

//【品牌/高级选项】checkbox
$('.check-container').on('click', '.attr', function() {
    var $this = $(this),
        $check = $this.find('.checkbox'),
        $btnOk = $this.closest('.brand-panel, .senior-sub').find('.multi-select-ok');

    $check.toggleClass('checked');

    if ($check.hasClass('checked')) {
        $check.html(checkUnicode.checked);
    } else {
        $check.html(checkUnicode.unchecked);
    }

    //更新按钮状态
    if ($check.hasClass('checked') ||
        $this.siblings('.attr').find('.checked').length > 0) {
        $btnOk.removeClass('dis');
    } else {
        $btnOk.addClass('dis');
    }
});

//【品牌/高级选项】当多选时阻止链接默认跳转
$('.brand, .senior').on('click', '.attr > a', function(e) {
    if ($(this).closest('.multi').length > 0) {
        e.preventDefault();
    }
});

// 已选中的条件,点击不刷新
$('.filter-box').on('click', 'li.checked, a.checked', function(e) {
    e.preventDefault();
});

//【价格】用户定义价格处理
if ($udPrice.length > 0) {
    $limit = $udPrice.find('.limit');
    $min = $limit.filter('.min');
    $max = $limit.filter('.max');
    $btn = $udPrice.find('.price-sure');

    //【价格】输入
    $limit.keyup(function() {
        var thisPrice = $.trim($(this).val()),
            isPriInt = interReg.test(thisPrice),
            intPrice,
            min,
            max;

        if (!isPriInt) {
            intPrice = parseInt(thisPrice, 10);
            $(this).val(isNaN(intPrice) ? '' : intPrice);
        }

        min = $.trim($min.val());
        max = $.trim($max.val());

        if (min !== '' || max !== '') {
            $btn.removeClass('hide');
        } else {
            $btn.addClass('hide');
        }
    });

    //【价格】多项查询
    $btn.click(function() {
        var min = $.trim($min.val()),
            max = $.trim($max.val()),
            tmp;

        //对于min大于max的情况,交换位置
        if (min !== '' && max !== '' && +min > +max) {
            tmp = max;
            max = min;
            min = tmp;
        }

        uriLoc('price', min + ',' + max);
    });
}

//【高级选项】鼠标移入显示子项
$seniorAttrWrap.on('mouseenter', '.attr', function() {
    var $this = $(this);
    var index = $this.index();

    if ($this.hasClass('no-sub')) {
        return;
    }
    $this.addClass('hover').siblings().removeClass('hover');

    $seniorSubWrap.children('.senior-sub:eq(' + index + ')').removeClass('hide').siblings().addClass('hide');
}).on('mouseleave', '.attr', function() {
    var $this = $(this),
        index = $this.index();

    if ($this.hasClass('no-sub')) {
        return;
    }

    hoveredIndex = index;

    seniorHoverTime = setTimeout(function() {
        hideSeniorPanel();
    }, 100);
});

//【高级选项】多选
$('.senior-sub').on('click', '.multi-select', function() {
    $(this).closest('.senior-sub').addClass('multi');
}).on('click', '.multi-select-ok', function() {
    var $btn = $(this),
        $sub = $btn.closest('.senior-sub'),
        val = [];

    if ($btn.hasClass('dis')) {
        return;
    }

    $sub.find('span.checked').each(function() {
        val.push($(this).data('id'));
    });

    uriLoc($sub.data('attr'), val.join(','));
}).on('mouseenter', function() {
    clearTimeout(seniorHoverTime);
}).on('mouseleave', function() {
    hideSeniorPanel();
});

});
define("js/product/sort-pager", ["jquery"], function(require, exports, module){
/**
 * 筛选页和列表页操作banner中的每页N个商品选择逻辑
 * @author: xuqi<qi.xu@yoho.cn>
 * @date: 2015/12/4
 */

var $ = require("jquery");

var $countPerPage = $('#count-per-page'),
    $countChose = $countPerPage.next('ul');

var SLIDETIME = 200;

$(document).click(function(e) {
    if ($(e.target).closest('.page-count').length > 0) {
        return;
    }

    $countChose && $countChose.slideUp(SLIDETIME);
});

$countPerPage.click(function() {
    if ($countChose.css('display') === 'none') {
        $countChose.slideDown(SLIDETIME);
    } else {
        $countChose.slideUp(SLIDETIME);
    }
});
});
define("js/product/latest-walk", ["jquery","handlebars","source-map","lazyload"], function(require, exports, module){
/**
 * 最近浏览取接口渲染模板
 * @author: xuqi<qi.xu@yoho.cn>
 8 @date: 2016/1/20
 */

var $ = require("jquery");
var Handlebars = require("handlebars");
var lazyLoad = require("lazyload");

var $latestWalkCount = $('#latest-walk-count');

(function() {
    var tpl;

    if ($latestWalkCount.length === 0) {
        return;
    }

    tpl = Handlebars.compile($('#latest-walk-tpl').html());

    $.ajax({
        url: 'http://itemapi.yohobuy.com/item/item/recentreview',
        dataType: 'jsonp',
        data: {
            limit: $latestWalkCount.val()
        },
        success: function(data) {
            var latestWalk = [],
                res, i, cur;

            if (data.code === 200) {
                res = data.data;

                //若无最近浏览,请隐藏容器
                if (res.length === 0) {
                    $('.latest-walk').addClass('hide');
                    return;
                }
                for (i = 0; i < res.length; i++) {
                    cur = res[i];

                    latestWalk.push({
                        href: cur.url,
                        img: cur.pic_url,
                        name: cur.product_name,
                        salePrice: cur.price,
                        marketPrice: cur.market_price
                    });
                }

                if (latestWalk.length > 0) {
                    $('#latest-walk-goods').html(tpl({
                        latestWalk: latestWalk
                    }));

                    lazyLoad($('#latest-walk-goods .lazy'));
                }
            }
        }
    });
}());
});
define("js/product/product", ["jquery","lazyload"], function(require, exports, module){
/**
 *Description: 商品列表页
 *Author: chenglong.wang@yoho.cn
 *Date: 2015/12/2
 */

var $ = require("jquery"),
    lazyLoad = require("lazyload"),
    productEvent = require("js/common/product-event");

var $goodsContainer = $('.goods-container'),
    $goodItem = $goodsContainer.find('.good-info'),
    $goodItemWrapper = $goodsContainer.find('.good-item-wrapper'),
    $goodInfoMain = $goodsContainer.find('.good-info-main'),
    $goodSelectColor = $goodsContainer.find('.good-select-color'),
    $productListNav = $('.product-list-nav'),
    productList;

lazyLoad($('img.lazy'));

/**
 * @description 初始化鼠标移入商品列表弹层效果
 * @num 每列存放商品的个数
 */
exports.init = function(num) {

    productList = null;

    $goodItem.unbind();

    productList = productEvent($goodItem, num);

    /**
     * @description 构造商品颜色列表的html结构
     * @param data 商品颜色的数组,[url: '',src: '']
     * @return json {'colorListStr': '', 'ulNum': ''}
     * */
    function createColorList(data, _from) {
        var colorListStr = '',
            len = data.length,
            row = 4, //每列ul放4个li
            col = Math.ceil(len / row), //需要几**列**ul
            i,
            j,
            index,
            ulNum = 0;

        for (i = 0; i < col; i++) {
            colorListStr += '<ul>';
            for (j = 0; j < row; j++) {
                index = i * row + j;
                if (index === len) {
                    break;
                }
                colorListStr +=
                    '<li>' +
                    '<a target="_blank" href="' + data[i * row + j].url + _from + '">' +
                    '<img src="' + data[i * row + j].src + '" data-cover="' + data[i * row + j].coverImg + '" />' +
                    '</a>' +
                    '</li>';

                if (j === row - 1) {
                    colorListStr += '</ul>';
                    ulNum++;
                }
            }
        }
        if (ulNum < col) {
            colorListStr += '</ul>';
        }
        return {
            colorListStr: colorListStr,
            ulNum: col
        };
    }

    function removeHtmlFn() {
        $goodInfoMain.html('');
        $goodSelectColor.html('');
        $goodItemWrapper.css({
            display: 'none'
        });
    }

    productList.addHandler('MouseEnter', function(event) {
        var itemMr = 10, //list的右边距
            itemMb = 35, //list的下边距
            ulStr = '',
            ulNum,
            wrapperWidth,
            diffWidth,
            wrapperX,
            wrapperY,
            wrapperPl, //鼠标移入时弹层的左内边距
            wrapperPt, //鼠标移入时弹层的上内边距
            containerPt, //商品列表容器的上内边距
            _from = event.target.attr('data-from') || '';

        $.ajax({
            type: 'POST',
            url: '/product/list/getProductPic',
            dataType: 'jsonp',
            jsonp: 'callback',
            data: {
                skn: event.target.attr('data-skn')
            }
        }).then(function(res) {
            var data = res.data,
                colorList = createColorList(data.pics, _from);

            removeHtmlFn();

            ulStr = colorList.colorListStr; //ajax请求的颜色列表
            ulNum = colorList.ulNum;//ajax请求的颜色的数量

            $goodInfoMain.append(event.targetDuplicate);
            $goodSelectColor.append($(ulStr));

            // 点击收藏商品不需要了
            // if (data.isFavorite) {
            //     $goodInfoMain.find('.col-btn').addClass('coled');
            // } else {
            //     $goodInfoMain.find('.col-btn').removeClass('coled');
            // }

            wrapperPl = $goodItemWrapper.css('paddingLeft');
            wrapperPt = $goodItemWrapper.css('paddingTop');
            containerPt = $goodsContainer.css('paddingTop');

            wrapperWidth = 10 + (15 + 50) * ulNum + event.targetWidth;

            //wrapperWidth = $goodItemWrapper.width();

            wrapperX = (event.targetX - 1) * (event.targetWidth + itemMr) - (parseInt(wrapperPl) + 1);
            wrapperY = (event.targetY - 1) *
            (event.targetHeight + itemMb) + parseInt(containerPt) - (parseInt(wrapperPt) + 1);

            //todo
            //event.offsetR表示当前列表距离浏览器右侧边缘的距离
            diffWidth = event.offsetR - ((15 + 50) * ulNum + 25);

            if (diffWidth <= 0) {
                wrapperX = wrapperX + diffWidth - 25;
            }
            $goodItemWrapper.css({
                width: wrapperWidth,
                left: wrapperX,
                top: wrapperY,
                display: 'inline-block'
            });

            // 鼠标悬浮获取到商品信息后显示第一张图片
            if (data.pics[0] && data.pics[0].src) {
                $goodInfoMain.find('.good-thumb img').attr('src', data.pics[0].src);
            }
        });
    });

    $goodItemWrapper.mouseleave(function() {

        removeHtmlFn();
    });

};

//鼠标放在颜色列表上效果
$(document).on('hover', '.good-select-color li', function() {
    var coverImg = $(this).find('img').attr('data-cover'),
        $coverImg = $(this).closest('.good-item-wrapper').find('.good-detail-img').find('img');

    $coverImg.attr('src', coverImg);
});

// 后端不做接口,杨阳和产品确认过,点击收藏商品不需要了。2016.2.23
// $goodInfoMain.on('click', '.col-btn', function() {
//     var $this = $(this);
//
//     $.ajax({
//         type: 'POST',
//         url: '/product/list/changeFavorite',
//         dataType: 'jsonp',
//         data: {
//             skn: $this.closest('.good-info').data('skn'),
//             isFavorite: $this.hasClass('coled')
//         }
//     }).then(function(res) {
//         if (res.code === 200) {
//             $this.toggleClass('coled');
//         } else if (res.code === 403) {
//             location.href = 'http://www.yohobuy.com/signin.html?refer=' + encodeURIComponent(location.href);
//         }
//     });
// });

// 左侧导航
$productListNav.find('h3').click(function(event) {
    var $this = $(this).closest('.product-list-nav');

    if ($this.hasClass('active')) {

        $this.find('.sort-child-list').stop(true, true).slideUp();

    } else {

        $this.find('.sort-child-list').stop(true, true).slideDown();
    }

    $this.toggleClass('active');
});

});
define("js/common/product-event", ["jquery"], function(require, exports, module){
/**
 *Description: 商品自定义事件
 *Author: chenglong.wang@yoho.cn
 *Date: 2015/12/3
 */

var $ = require("jquery");

function ProductEvent() {

    this.handlers = {};

}

ProductEvent.prototype = {

    constructor: ProductEvent,

    addHandler: function(type, handler) {
        if (typeof this.handlers[type] === 'undefined') {
            this.handlers[type] = [];
        }
        this.handlers[type].push(handler);
    },

    fire: function(event) {
        var handlers,
            i;

        if (!event.target) {

            event.target = this;
        }
        if (this.handlers[event.type] instanceof Array) {
            handlers = this.handlers[event.type];
            for (i = 0; i < handlers.length; i++) {
                handlers[i](event);
            }
        }
    },

    removeHandler: function(type, handler) {
        var handlers,
            i;

        if (this.handlers[type] instanceof Array) {
            handlers = this.handlers[type];
            for (i = 0; i < handlers.length; i++) {
                if (handlers[i] === handler) {
                    break;
                }
            }
            handlers.splice(i, 1);
        }
    }
};

module.exports = function($o, rowWidth) {

    var pMouseHover = new ProductEvent();

    var targetWidth = $o.eq(0).width(),
        targetHeight = $o.eq(0).height(),
        winW = $(window).width();

    function handleEvent(event) {
        var $target,
            targetX = 0,
            targetY = 0,
            rowW = rowWidth,
            activeIndex = 0,
            $targetDuplicate = '',
            offsetL = 0,
            offsetR = 0;


        switch (event.type) {
            case 'mouseenter':

                $target = $(this);
                $targetDuplicate = $target.clone();
                activeIndex = $target.index() + 1;
                targetX = (activeIndex % rowW) === 0 ? rowW : activeIndex % rowW;
                targetY = Math.ceil(activeIndex / rowW);
                offsetL = $target.offset().left;
                offsetR = winW - (offsetL + targetWidth);

                pMouseHover.fire({
                    type: 'MouseEnter',
                    target: $target,
                    targetWidth: targetWidth,
                    targetHeight: targetHeight,
                    targetX: targetX,
                    targetY: targetY,
                    rowWidth: rowW,
                    activeIndex: activeIndex,
                    targetDuplicate: $targetDuplicate,
                    offsetL: offsetL,
                    offsetR: offsetR
                });
                break;
            case 'mouseleave':
                pMouseHover.fire({
                    type: 'MouseLeave'
                });
                break;
        }
    }

    $o.bind('mouseenter', handleEvent);

    return pMouseHover;
};
});
define("js/product/brand", ["jquery"], function(require, exports, module){
/**
 * 品牌页面
 * @auhtor: bikai<kai.bi@yoho.cn>
 * @date: 2016/1/21
 */

var $ = require("jquery");

var $brandFavor = $('#brand-favor'),
    id = $brandFavor.data('id');

$brandFavor.on('click', function() {
    $.ajax({
        type: 'post',
        url: '/product/index/favoriteBrand',
        data: {
            brandId: id
        }
    }).then(function(res) {
        if (res.code === 200) {
            if (res.message === 'add') {
                $brandFavor.find('i').addClass('coled');
            } else {
                $brandFavor.find('i').removeClass('coled');
            }
        } else if (res.code === 403) {
            location.href = 'http://www.yohobuy.com/signin.html?refer=' + encodeURIComponent(location.href);
        }
    });
});

//页面进入更新收藏状态
$.ajax({
    type: 'POST',
    url: '/product/index/isFavoriteBrand',
    data: {
        brandId: id
    }
}).then(function(data) {
    if (data.code === 200) {

        //已收藏
        $brandFavor.find('i').addClass('coled');
    } else if (data.code === 404) {

        //未收藏
        $brandFavor.find('i').removeClass('coled');
    }
});

});
define("js/product/hotrank", ["jquery","handlebars","source-map","lazyload"], function(require, exports, module){
/**
 * 首页
 * @author: liuyue<yue.liu@yoho.cn>
 * @date: 2015/12/17
 */

var $ = require("jquery"),
    Handlebars = require("handlebars"),
    lazyLoad = require("lazyload");

require("js/common/slider");
require("js/common/logo-brand");

lazyLoad($('img.lazy'));
$('.slide-container').slider();
$('.logo-brand').logoBrand({
    showNum: 10,
    url: $('.logo-brand').data('url')
});

/*
 * 一周热卖
 */
(function($) {
    var floatlayer = $('.hot-week').find('.floatlayer'),
        sid = $('.hot-cate').find('li').eq(0).data('sid'),
        weekOffsetTop,
        source,
        template,
        page = 1,
        hotCateW = 0,
        weekEnd = false;

    source = '\{{# list}}' +
        '<div class="good-info">' +
            '<div class="item-img">' +
                '<a class="good-thumb" target="_blank" href="\{{url}}">' +
                    '<img class="lazy" data-original="\{{thumb}}">' +
                '</a>' +
            '</div>' +
            '<div class="good-detail-text">' +
                '<a target="_blank" href="{{url}}">{{name}}</a>' +
                '<p class="price">' +
                    '{{# marketPrice}}<span class="market-price">¥{{.}}</span>{{/ marketPrice}} ' +
                    '<span class="sale-price{{#unless marketPrice}}prime-cost{{/unless}}">' +
                    '¥{{salePrice}}</span>' +
                '</p>' +
            '</div>' +
        '</div>' +
        '{{/ list}}';

    //监听滚动事件,控制浮层样式及下拉加载更多
    $(window).on('scroll', function() {
        var maxH = weekOffsetTop + $('.hot-week').outerHeight(),
            sid;

        //热卖右侧浮动导航位置
        weekOffsetTop = $('.hot-week').offset().top;
        if ($(this).scrollTop() >= weekOffsetTop - $(window).height() / 2) {
            if (floatlayer.offset().top + floatlayer.outerHeight() >= maxH) {
                floatlayer.css({
                    position: 'absolute',
                    marginTop: 0,
                    top: $('.hot-week').outerHeight() - floatlayer.outerHeight()
                });
            } else {
                floatlayer.css({
                    marginTop: -floatlayer.height() / 2
                }).stop().animate({
                    opacity: 1
                }, 200, function() {
                    floatlayer.show();
                });
            }

        } else {
            floatlayer.stop().animate({
                opacity: 0
            }, 200, function() {
                floatlayer.hide();
            });
        }

        if (floatlayer.offset().top >= $(this).scrollTop() + ($(window).height() - floatlayer.outerHeight()) / 2) {
            floatlayer.css({
                position: 'fixed',
                marginTop: -floatlayer.height() / 2,
                top: '50%'
            });
        }

        //下拉加载
        if ($(this).scrollTop() >= weekOffsetTop + $('.hot-week').height() - $(window).height()) {
            if (!weekEnd) {
                sid = $('.hot-cate').find('li.current').data('sid');
                page++;
                weekEnd = true; //防止多次请求
                weekAjax(sid, page);
            }
        }

    });

    //热卖横导航及竖导航的超出显示控制
    $('.hot-cate').find('li').each(function(i) {
        var maxW = $('.hot-cate').width();

        if (hotCateW <= maxW) {
            hotCateW = hotCateW + $(this).width();
            if (hotCateW >= maxW) {
                $('.floatlayer').find('li').eq(i).hide().nextAll().hide();
            }
        }

    });

    //热卖横导航点击事件处理
    $('.hot-cate').on('click', 'li', function() {
        var nowIndex = $(this).index(),
            sid = $(this).data('sid');

        if ($(this).hasClass('current')) {
            return;
        }

        //处理current样式
        $(this).addClass('current').siblings().removeClass('current');
        $('.floatlayer').find('li').removeClass('current').eq(nowIndex).addClass('current');

        //返回热卖顶部,110为floor-header所占高度
        $('body,html').stop().animate({
            scrollTop: weekOffsetTop - 110
        }, 500);

        //调用ajax请求函数,重置page,weekEnd
        weekAjax(sid);
        page = 1;
    });

    //热卖右侧悬浮导航点击事件处理
    $('.floatlayer').on('click', 'li', function() {
        var nowIndex = $(this).index();

        if ($(this).hasClass('current')) {
            return;
        }

        $('.hot-cate').find('li').eq(nowIndex).trigger('click');

        //处理current样式
        $(this).addClass('current').siblings().removeClass('current');
        $('.hot-cate').find('li').removeClass('current').eq(nowIndex).addClass('current');
    });

    /*
     * 热卖内容ajax请求
     * param: sid(ajax请求的id), page(ajax请求的页码)
     */
    function weekAjax(sid, page) {
        var param = {};

        if (page) {
            param = {
                sid: sid,
                page: page
            };
        } else {
            param = {
                sid: sid
            };
        }
        $.ajax({
            type: 'GET',
            dataType: 'json',
            url: '/product/index/getdata',
            data: param,
            success: function(res) {
                var data;

                if (res.code === 200) {
                    data = {
                        list: res.data
                    };

                    //mustache渲染数据,并替换原内容
                    template = Handlebars.compile(source);
                    if (page) {
                        $('.hot-week-list').append(template(data));
                        floatlayer.css({
                            position: 'fixed',
                            marginTop: -floatlayer.height() / 2,
                            top: '50%'
                        });
                    } else {
                        $('.hot-week-list').html(template(data));
                    }

                    lazyLoad($('img.lazy'));
                    weekEnd = false;
                }
            }
        });
    }

    //热卖中导航current类处理
    $('.hot-cate').find('li').eq(0).addClass('current');
    $('.floatlayer').find('li').eq(0).addClass('current');
})($);

});
define("js/common/slider", ["jquery","lazyload"], function(require, exports, module){
/**
 * 首页banner轮播
 * @author: liuyue(yue.liu@yoho.cn)
 * @date: 2015/12/04
 */

var $ = require("jquery"),
    lazyLoad = require("lazyload");

(function($) {
    var Slider = function(element, options) {
        this.$element = $(element);
        this.options = $.extend({}, $.fn.slider.defaults, options);
        this.bigItem = this.$element.find('.slide-wrapper').find('li');
        this.smallItem = null;
        this.len = this.bigItem.size();
        this.index = 0;
        this.timer = null;
        this.init();
    };

    Slider.prototype = {
        init: function() {
            if (!this.$element) {
                return;
            }

            if (this.len <= 1) {
                lazyLoad(this.$element.find('img.lazy'));
                return;
            }
            if (!!this.options.pagination) {
                this.smallItem = $(this.options.pagination).find('li');
            } else {
                this._createPage();
            }

            if (this.options.orient) {
                this._createOrient();
            }
            this._slideShow();
            this._bindEvent();
            this._autoplay();
        },
        _createOrient: function() {

            var orientHtml = '<div class="slide-switch">' +
                    '<a class="prev" href="javascript:;"><span class="iconfont">&#xe60c;</span></a>' +
                    '<a class="next" href="javascript:;"><span class="iconfont">&#xe60b;</span></a>' +
                '</div>';

            if (this.$element.find('.slide-switch').length > 0) {
                return;
            }

            this.$element.append(orientHtml);
        },
        _createPage: function() {
            var pageHtml = '<div class="slide-pagination"><div class="slide-pagination-inner">' +
                            '<div class="slide-shade"></div><div class="slide-pagination-last">',
                i = 0;

            if (this.len <= 1) {
                return;
            }
            for (i = 0; i < this.len; i++) {
                pageHtml += '<span></span>';
            }
            pageHtml += '</div></div></div>';
            this.$element.append($(pageHtml));
            this.smallItem = this.$element.find('.slide-pagination-inner span');
        },
        _bindEvent: function() {
            var that = this;

            this.$element.find('.slide-switch').on('click', '.next', function() {
                that._nextSlide();
                clearInterval(that.timer);
                that.timer = setInterval(function() {
                    that._nextSlide();
                }, that.options.time);
            }).on('click', '.prev', function() {
                that._prevSlide();
                clearInterval(that.timer);
                that.timer = setInterval(function() {
                    that._nextSlide();
                }, that.options.time);
            });

            this.smallItem.on('mouseenter', function() {
                that.index = $(this).index();
                clearInterval(that.timer);
                that._slideShow();
            }).on('mouseleave', function() {
                that._autoplay();
            });

            this.$element.on('mouseenter', function() {
                $(this).find('.slide-switch').addClass('show');
            }).on('mouseleave', function() {
                $(this).find('.slide-switch').removeClass('show');
            });
        },
        _nextSlide: function() {
            if (this.index === this.len - 1) {
                this.index = 0;
            } else {
                this.index++;
            }
            this._slideShow();
        },
        _prevSlide: function() {
            if (this.index === 0) {
                this.index = this.len - 1;
            } else {
                this.index--;
            }
            this._slideShow();
        },
        _slideShow: function() {
            var $img = this.bigItem.eq(this.index).find('img.lazy');

            //未加载图片的及时显示
            if ($img.attr('src') !== $img.data('original')) {
                lazyLoad($img, {
                    event: 'sporty'
                });
                $img.trigger('sporty');
            }

            this.smallItem.eq(this.index).addClass('focus').siblings().removeClass('focus');
            this.bigItem.eq(this.index).show().stop().animate({
                opacity: 1
            }, function() {

                //修正IE下切换时文字会重叠的问题
                $(this).find('.slide-tips > p').removeClass('hide');
            }).siblings().stop().animate({
                opacity: 0
            }, function() {
                $(this).hide().find('.slide-tips > p').addClass('hide');
            });
        },
        _autoplay: function() {
            var that = this;

            clearInterval(this.timer);
            this.timer = setInterval(function() {
                that._nextSlide();
            }, this.options.time);
        }
    };
    $.fn.slider = function(option) {
        return this.each(function() {
            var $this = $(this),
                data = $this.data('Slider'),
                options = typeof option === 'object' && option;

            if (!data) {
                $this.data('Slider', (data = new Slider(this, options)));
            }
            if (typeof option === 'string') {
                data[option]();
            }
        });
    };
    $.fn.slider.Constructor = Slider;
    $.fn.slider.defaults = {
        time: 5000,
        orient: true, //左右切换箭头的显示
        pagination: null
    };
})($);
});
define("js/common/logo-brand", ["jquery","handlebars","source-map","lazyload"], function(require, exports, module){
/**
 * 首页优选品牌js
 * @author: liuyue(yue.liu@yoho.cn)
 * @date: 2015/12/08
 */

var $ = require("jquery"),
    Handlebars = require("handlebars"),
    lazyLoad = require("lazyload");

(function($) {
    var LogoBrand = function(element, options) {
        this.$element = $(element);
        this.options = $.extend({}, $.fn.logoBrand.defaults, options);

        this.init();
    };

    LogoBrand.prototype = {
        init: function() {
            this.$element.addClass('logos-' + this.options.showNum);
            this._sendRequest();
        },
        _createHelper: function() {
            var showNum = this.options.showNum;

            Handlebars.registerHelper('brandList', function(items, options) {
                var out = '<ul>',
                    i = 0,
                    item = null,
                    fillNum = 0;

                //不是每页显示个数的倍数,填充数据
                if (items.length % showNum !== 0) {
                    fillNum = showNum - (items.length % showNum);
                    for (i = 0; i < fillNum; i++) {
                        items.push({
                            href: 'javascript:;',
                            img: ''
                        });
                    }
                }

                for (i = 0; i < items.length; i++) {
                    item = options.fn(items[i]);

                    if (i % showNum === 5 || i === 5) {

                        //插入切换按钮的位置
                        out = out + '<li class="logo-brand-switch" data-page="' + Math.floor(i / showNum) + '">' +
                                    '<a class="prev iconfont" href="javascript:;">&#xe60f;</a>' +
                                    '<a class="next iconfont" href="javascript:;">&#xe60e;</a></li>' +
                                    '<li data-page="' + Math.floor(i / showNum) + '">' + item + '</li>';
                    } else if (i !== 0 && i % showNum === 0) {

                        //插入more的位置,more占的是下一页第一个brand的位置,所以page是i/17
                        out = out + '<li class="brand-more" data-page="' + Math.floor(i / (showNum + 1)) + '">' +
                                    '<a href="javascript:;" target="_blank">MORE ></a></li>' +
                                    '<li data-page="' + Math.floor(i / showNum) + '">' + item + '</li>';
                    } else {
                        out = out + '<li data-page="' + Math.floor(i / showNum) + '">' + item + '</li>';
                    }
                }

                //加上最后一个more, more占的是下一页第一个brand的位置,这里已经循环不到brand,所以加在末尾
                return out + '<li class="brand-more" data-page="' + Math.floor(i / (showNum + 1)) + '">' +
                            '<a href="javascript:;" target="_blank">MORE ></a></li></ul>';

            });
        },
        _sendRequest: function() {
            var that = this;

            $.ajax({
                type: 'GET',
                url: that.options.url,
                dataType: 'json',
                success: function(data) {
                    var brandTpl,
                        brandHtml;

                    if (!data || data.length === 0) {
                        return;
                    }

                    that._createHelper();
                    brandHtml = '\{{#brandList logoBrand}}' +
                        '<a href="\{{href}}" target="_blank"><img class="lazy" data-original="\{{img}}" alt=""></a>' +
                        '\{{/brandList}}';
                    brandTpl = Handlebars.compile(brandHtml);
                    that.$element.html(brandTpl(data));
                    that.$element.find('.brand-more a').attr('href', data.moreBrand);
                    lazyLoad(that.$element.find('img.lazy'));
                    that._bindEvent();
                }
            });
        },
        _brandShow: function(hidePage, showPage) {
            var that = this;

            lazyLoad($('li[data-page=' + showPage + ']').find('img.lazy').trigger('appear'));
            that.$element.find('li[data-page=' + hidePage + ']').find('img').fadeOut('normal', function() {
                that.$element.find('li').hide();
                that.$element.find('li[data-page=' + showPage + ']').show().find('img').fadeIn();
            });
        },
        _bindEvent: function() {
            var that = this;

            that.$element.on('click', '.next', function() {
                var page = $(this).parent().data('page'),
                    nextPage = 0,
                    totalPage = Math.ceil(that.$element.find('li').size() / (that.options.showNum + 2)) - 1;

                if (page === totalPage) {
                    nextPage = 0;
                } else {
                    nextPage = page + 1;
                }
                that._brandShow(page, nextPage);
            });

            that.$element.on('click', '.prev', function() {
                var page = $(this).parent().data('page'),
                    prevPage = 0,
                    totalPage = Math.ceil(that.$element.find('li').size() / (that.options.showNum + 2)) - 1;

                if (page === 0) {
                    prevPage = totalPage;
                } else {
                    prevPage = page - 1;
                }
                that._brandShow(page, prevPage);
            });
        }
    };
    $.fn.logoBrand = function(option) {
        return this.each(function() {
            var $this = $(this),
                data = $this.data('LogoBrand'),
                options = typeof option === 'object' && option;

            if (!data) {
                $this.data('LogoBrand', (data = new LogoBrand(this, options)));
            }
            if (typeof option === 'string') {
                data[option]();
            }
        });
    };
    $.fn.logoBrand.Constructor = LogoBrand;
    $.fn.logoBrand.defaults = {
        showNum: 16,
        url: '/boys/getBrand'
    };
})($);
});
define("js/product/item", ["jquery","lazyload","handlebars","source-map","index"], function(require, exports, module){
/**
 * 商品详情页
 * @author: xuqi<qi.xu@yoho.cn>
 * @date: 2015/12/23
 */

var $ = require("jquery"),
    lazyLoad = require("lazyload"),
    Handlebars = require("handlebars"),
    JSON2 = require("index");

var $imgShow = $('#img-show'),
    $thumbs = $('#thumbs > .thumb-wrap');

var $size = $('#sizes'),
    $sizes = $size.children('.size'),
    $sizeWarn = $size.find('.size-warn'),
    $colorSizeTip = $size.children('.color-size-tip');

var $num = $('#num'),
    $plusNum = $('#plus-num'),
    $minusNum = $('#minus-num');

var $addToCart = $('#add-to-cart'),
    $soldOut = $('#sold-out');

var $lcContainer = $('.lc-container'),
    $itemBuy = $('.item-buy');

var $descColor = $('#desc-color');

var thumbsLoaded = {};

var $main = $('.main'),
    id = $main.data('id');

var maxStock = -1; //记录当前选中的颜色-尺码的库存量,若为-1,代表未选择尺码

var SLIDETIME = 200;

var colTxt = {
    def: '收藏商品',
    coled: '已收藏',
    hover: '取消收藏'
};

var Alert = require("js/common/dialog").Alert;

require("js/product/latest-walk");

require("js/common/share");

function imgShow(src) {
    $imgShow.attr('src', src);
}

/**
 * 获取当前选择的商品数目
 * @return [Number]
 */
function getNum() {
    return +$num.text();
}

//重置Num显示为1
function resetNum() {
    $num.text('1');

    //+-按钮状态重置
    if (maxStock === 1 || maxStock === 0) {

        //数目为1/0时
        $plusNum.addClass('dis');
        $minusNum.addClass('dis');
    } else {
        $plusNum.removeClass('dis');
        $minusNum.addClass('dis');
    }
}

//加入购物车和已售罄状态控制
function switchBtnStatus($color) {
    if ($itemBuy.length === 0) {

        //全部售罄,按钮状态不变
        return;
    }

    //选中的商品存量为0或者某个颜色的total为0
    if (maxStock === 0 || ($color && ~~$color.data('total') === 0)) {
        $itemBuy.addClass('hide'); //隐藏加入购物车、即将开始、立即购买等相同位置的按钮
        $soldOut.removeClass('hide');
    } else {

        //包括默认的-1情况下
        $itemBuy.removeClass('hide');
        $soldOut.addClass('hide');
    }
}

//size warn
function showSizeWarn() {
    $sizes.not('.hide').children('.size-warn').removeClass('hide');
}

//size title
(function() {
    var $sizeTitleJson = $('#size-title-json'),
        jsonHtml = $sizeTitleJson.html(),
        sizeTitle;

    if (jsonHtml === '') {
        return;
    }

    sizeTitle = JSON2.parse(jsonHtml);

    //数据获取后删除
    $sizeTitleJson.remove();

    $sizes.children('li').each(function() {
        var $this = $(this),
            key = $this.data('name');

        $this.data('title', sizeTitle[key]);
    });
}());

//初始化thumbsLoaded
thumbsLoaded[$('.colors .focus').index()] = true;

//品牌收藏
$('#brand-favour').click(function() {
    var $this = $(this);

    $.ajax({
        type: 'POST',
        url: '/product/index/favoriteBrand',
        data: {
            brandId: $this.data('id')
        }
    }).then(function(data) {
        if (data.code === 200) {
            $this.toggleClass('coled');
        } else if (data.code === 403) {
            location.href = data.data.url;
        }
    });
});

//颜色
$('.colors').on('click', 'li', function() {
    var $this = $(this),
        index = $this.index();

    var $imgs;

    //初始化color-size显示或隐藏
    $colorSizeTip.addClass('hide');

    //隐藏尺码提示
    $sizeWarn.addClass('hide');

    maxStock = -1;

    if ($this.hasClass('focus')) {

        //已获取焦点的颜色再次点击,清除尺码的选中
        $sizes.eq(index).children('li').removeClass('focus');
    } else {

        //未获取焦点,选择尺码
        $this.siblings('.focus').removeClass('focus');
        $this.addClass('focus');

        //切换图片显示
        $thumbs.not('.hide').addClass('hide');
        $imgs = $thumbs.eq(index).removeClass('hide').find('img');

        if (typeof thumbsLoaded[index] === 'undefined') {

            //trigger layLoad
            lazyLoad($imgs, {
                event: 'sporty'
            });

            $imgs.trigger('sporty');

            thumbsLoaded[index] = true;
        }

        imgShow($imgs.first().data('shower'));

        //切换详细信息的颜色显示
        $descColor.text($this.data('color'));

        //切换尺码显示
        $sizes.not('.hide').addClass('hide');
        $sizes.eq(index).removeClass('hide').children('li').removeClass('focus');
    }

    resetNum();
    switchBtnStatus($this);
});

//缩略图鼠标移入显示
$('#thumbs').on('mouseenter', '.thumb', function() {
    imgShow($(this).data('shower'));
});

//尺码
$size.on('click', 'li', function() {
    var $this = $(this);

    if ($this.hasClass('focus')) {
        return;
    }

    maxStock = +$this.data('num');

    $this.siblings('.focus').removeClass('focus');
    $this.addClass('focus');

    $colorSizeTip.html($this.data('title')).removeClass('hide');

    $sizeWarn.addClass('hide');

    switchBtnStatus();

    resetNum();
}).on('click', '.size-ruler', function() {

    //尺码帮助

    $('body,html').animate({
        scrollTop: $('.size-info').offset().top
    }, 300);
});

//数量
$plusNum.click(function() {
    var num = getNum();

    if ($(this).hasClass('dis')) {
        return;
    }

    if (maxStock === -1) {
        showSizeWarn();//显示选择尺码提示
        return;
    }

    //已售罄
    if (maxStock === 0) {
        return;
    }

    if (num === maxStock - 1) {

        //+按钮不可点
        $(this).addClass('dis');
    }

    //数目为1时点+则移除-不可点状态
    if (num === 1) {
        $minusNum.removeClass('dis');
    }

    $num.text(num + 1 > maxStock ? maxStock : num + 1);
}).on('selectstart', function() {
    return false;
});

$minusNum.click(function() {
    var num = getNum();

    if ($(this).hasClass('dis')) {
        return;
    }

    if (num === 2) {
        $(this).addClass('dis');
    }

    if (num === maxStock) {

        //恢复+可点
        $plusNum.removeClass('dis');
    }

    $num.text(num - 1 < 0 ? 0 : num - 1);
}).on('selectstart', function() {
    return false;
});

//限购码
$('.get-lc:not(.dis)').hover(function() {
    $lcContainer.removeClass('hide');
}, function() {
    $lcContainer.addClass('hide');
});

//加入购物车
$addToCart.click(function() {
    if (maxStock === -1) {
        showSizeWarn();
        return;
    }

    $.ajax({
        type: 'POST',
        url: '/cart/index/add',
        data: {
            productSku: $('.size li.focus').data('sku'),
            buyNumber: getNum()
        }
    }).then(function(data) {
        var code = data.code;

        if (code === 200) {
            $('#type-chose').slideUp(SLIDETIME);
            $('#balance').slideDown(SLIDETIME);

            $('#cart-num').text(data.data.goods_count); //更新数目
        }
    });
});

//收藏
$('#collect-product').click(function() {
    var $this = $(this),
        cancel;

    if ($this.hasClass('coled')) {
        cancel = true;
    }

    $.ajax({
        type: 'POST',
        url: '/product/item/togglecollect',
        data: {
            productId: id,
            type: cancel ? 'cancel' : 'add'
        }
    }).then(function(data) {
        var code = data.code;

        if (code === 200) {

            $this.toggleClass('coled');

            if (cancel) {
                $this.find('em').text(colTxt.def);
            } else {
                $this.find('em').text(colTxt.coled);
            }
        } else if (code === 403) {
            location.href = data.data.url;
        }
    });
}).hover(function() {
    var $this = $(this);

    if ($this.hasClass('coled')) {
        $this.find('em').text(colTxt.hover);
    }
}, function() {
    var $this = $(this);

    if ($this.hasClass('coled')) {
        $this.find('em').text(colTxt.coled);
    }
});

//继续购物
$('#keep-shopping').click(function() {
    $('#type-chose').slideDown(SLIDETIME);
    $('#balance').slideUp(SLIDETIME);
});

//立即购买
$('#buy-now').click(function() {
    var sku,
        base,
        myAlert;

    if (maxStock === -1) {
        showSizeWarn();
        return;
    }

    if ($(this).hasClass('dis')) {
        return;
    }

    base = $(this).data('base');

    //潮流尖货
    if (!base) {
        myAlert = new Alert('打开APP可抢购该商品哦~~');
        myAlert.show();
        return;
    }

    sku = $sizes.find('.focus').data('sku');

    if (sku && base) {
        location.href = base + '?product_sku=' + sku;
    }
});

//按钮鼠标移入效果【dis状态的按钮状态不变】
$('.buy-btn').mouseover(function() {
    if ($(this).hasClass('dis')) {
        return;
    }

    $(this).addClass('hover');
}).mouseleave(function() {
    $(this).removeClass('hover');
});

//商品详情/材质洗涤切换
$('.description-material').on('click', '.title', function() {
    var $this = $(this),
        index = $this.index();

    var $description = $('.description-content'),
        $material = $('.material-content');

    if ($this.hasClass('cur')) {
        return;
    }

    $this.addClass('cur');
    $this.siblings('.cur').removeClass('cur');

    if (index === 0) {

        //商品信息
        $description.slideDown(SLIDETIME);
        $material.slideUp(SLIDETIME);
    } else {
        $description.slideUp(SLIDETIME);
        $material.slideDown(SLIDETIME);
    }
});

//售后服务
$('.after-service-switch').click(function() {
    var $this = $(this),
        $content = $this.next('.after-service-content');

    var html = {
        def: '&#xe604;',
        spread: '&#xe603;'
    };

    if ($content.css('display') === 'none') {
        $content.slideDown(SLIDETIME);

        $this.find('.triangle').html(html.spread);
    } else {
        $content.slideUp(SLIDETIME);

        $this.find('.triangle').html(html.def);
    }
});


//商品详情区的热点
$.ajax({
    type: 'GET',
    url: '/product/item/hotarea',
    data: {
        productId: id
    }
}).then(function(html) {
    $('#details-html').prepend(html);

    //Bind Hover event
    $('.hot-point').hover(function() {
        $(this).addClass('hover');
    }, function() {
        $(this).removeClass('hover');
    });
});

//商品详情懒加载
lazyLoad($('#details-html img'));

//只有一个尺码(多个或一个颜色)时默认选中
(function() {
    var hasOnlyOneSize = true,
        i;

    for (i = 0; i < $sizes.length; i++) {
        if ($sizes.eq(i).find('li').length !== 1) {
            hasOnlyOneSize = false;
            break;
        }
    }

    if (hasOnlyOneSize) {
        $sizes.find('li').click();
    }
}());

//咨询和评价
(function() {
    var commentPage = 1,
        consultPage = 1;

    var commentsTpl = Handlebars.compile($('#comments-tpl').html()),
        consultsTpl = Handlebars.compile($('#consults-tpl').html());

    var $commentsUl = $('#comments-ul'),
        $consultsUl = $('#consults-ul');

    var $commentNum = $('.comment-num'),
        $consultNum = $('.consult-num');

    //购买评价
    function loadComments() {
        $.ajax({
            type: 'GET',
            url: '/product/item/comments',
            data: {
                productId: id,
                page: commentPage
            }
        }).then(function(data) {
            var res;

            if (data.code === 200) {
                res = data.data;

                if (res.length === 0) {
                    $commentsUl.next('.more-wrap').addClass('hide');
                    return;
                }

                //更新总数显示
                $commentNum.text(res[0].total);

                $commentsUl.append(commentsTpl({
                    comments: res
                }));
                commentPage++;
            }
        });
    }

    //顾客咨询
    function loadConsults() {
        $.ajax({
            type: 'GET',
            url: '/product/item/consults',
            data: {
                productId: id,
                page: consultPage
            }
        }).then(function(data) {
            var res;

            if (data.code === 200) {
                res = data.data;

                if (res.length === 0) {
                    $consultsUl.next('.more-wrap').addClass('hide');
                    return;
                }

                //更新总数显示
                $consultNum.text(res[0].total);

                $consultsUl.append(consultsTpl({
                    consults: res
                }));
                consultPage++;
            }
        });
    }

    //评价和咨询切换
    $('.consult-comment').on('click', '.title', function() {
        var $this = $(this),
            index = $this.index();

        var $comments = $('.comments'),
            $consults = $('.consults');

        if ($this.hasClass('cur')) {
            return;
        }

        $this.addClass('cur');
        $this.siblings('.cur').removeClass('cur');

        if (index === 0) {

            //咨询
            $consults.slideDown(SLIDETIME);
            $comments.slideUp(SLIDETIME);
        } else {
            $consults.slideUp(SLIDETIME);
            $comments.slideDown(SLIDETIME);
        }
    }).on('click', '.load-more', function() {
        var $this = $(this);

        if ($this.hasClass('load-more-comments')) {
            loadComments();
        } else {
            loadConsults();
        }
    });

    //我要咨询
    $('#consults-btn').click(function() {

        //TODO:点击我要资讯的时候更新验证码显示
        $('.new-consult').removeClass('hide');
        $('.consult-success').addClass('hide');
    });

    //提交咨询
    $('#submit-consult').click(function() {
        var $this = $(this),
            $parent = $this.closest('.new-consult'),
            $textarea = $parent.find('.my-consult'),
            content = $.trim($textarea.val());

        var $consultWarn = $parent.find('.consult-warn');

        var pass = true;

        if (content === '') {
            $textarea.addClass('error');
            $consultWarn.removeClass('hide');

            pass = false;
        } else {
            $textarea.removeClass('error');
            $consultWarn.addClass('hide');
        }

        if (pass === false) {
            return;
        }

        $.ajax({
            type: 'POST',
            url: '/product/item/addconsult',
            data: {
                productId: id,
                content: content
            }
        }).then(function(data) {
            var code = data.code;

            if (code === 200) {
                $parent.addClass('hide');

                $parent.siblings('.consult-success').removeClass('hide');

                //清空输入
                $textarea.val('');
            } else if (code === 403) {

                //跳转登录页
                location.href = data.data.url;
            }
        });
    });

    loadComments();
    loadConsults();
}());
});
define("js/common/dialog", ["jquery","handlebars","source-map"], function(require, exports, module){
/**
 * 弹框公共组件
 * @author: xuqi<qi.xu@yoho.cn>
 * @date: 2016/2/24
 */

var $ = require("jquery"),
    Handlebars = require("handlebars");

var defaultOptions = {
    mask: true,
    closeIcon: true
};

var tpl =
    '<div class="yoho-dialog {{className}} hide">' +
        '{{#if closeIcon}}' +
            '<span class="close">' +
                '<i class="iconfont">&#xe602;</i>' +
            '</span>' +
        '{{/if}}' +
        '<div class="content">' +
            '{{{content}}}' +
        '</div>' +
        '<div class="btns">' +
            '{{# btns}}' +
                '<span {{#if id}}id="dialog-{{id}}"{{/if}} class="btn{{#each btnClass}} {{.}}{{/each}}">' +
                    '{{name}}' +
                '</span>' +
            '{{/ btns}}' +
        '</div>' +
    '</div>';

var tplFn = Handlebars.compile(tpl);

//背景蒙版
function createMask() {
    if ($('.body-mask').length === 0) {
        $('body').append('<div class="body-mask hide"></div>');
    }

    return $('.body-mask').css({
        height: $(document).height(),
        width: $(document).width()
    });
}

function createDialog(data) {
    $('body').append(tplFn(data));

    return $('.yoho-dialog');
}

function Dialog(options) {
    var opt = $.extend({}, defaultOptions, options);
    var that = this,
        i;

    if (opt.mask) {
        that.$mask = createMask();
    }
    that.$el = createDialog(opt);

    //绑定x关闭事件
    that.$el.find('.close').click(function() {
        that.close();
    });

    function bindBtnEvt(index) {
        that.$el.find('#dialog-' + opt.btns[index].id).on('click', function() {
            opt.btns[index].cb && opt.btns[index].cb();
        });
    }

    //绑定按钮事件
    if (!!opt.btns) {
        for (i = 0; i < opt.btns.length; i++) {
            bindBtnEvt(i);
        }
    }
}

Dialog.prototype.close = function() {
    this.$mask && this.$mask.addClass('hide');
    this.$el.remove();
};

Dialog.prototype.show = function() {
    this.$mask && this.$mask.removeClass('hide');
    this.$el.removeClass('hide').css({
        'margin-top': -this.$el.height() / 2,
        'margin-left': -this.$el.width() / 2
    });
};

exports.Dialog = Dialog;

//Alert
function Alert(content) {
    var that = this;
    var option = {
        content: content,
        className: 'alert-dialog',
        btns: [
            {
                id: 'alert-sure',
                btnClass: ['alert-sure'],
                name: '确定',
                cb: function() {
                    that.close();
                }
            }
        ]
    };

    Dialog.call(this, option);
}

Alert.prototype = new Dialog();
Alert.prototype.constructor = Alert;
exports.Alert = Alert;

//Confirm
function Confirm(opt) {
    var that = this;

    var option = {
        content: opt.content,
        className: 'confirm-dialog',
        btns: [
            {
                id: 'confirm-sure',
                btnClass: ['confirm-sure'],
                name: '确定',
                cb: opt.cb
            },
            {
                id: 'confirm-cancel',
                btnClass: ['confirm-cancel'],
                name: '取消',
                cb: function() {
                    that.close();
                }
            }
        ]
    };

    Dialog.call(this, option);
}

Confirm.prototype = new Dialog();
Confirm.prototype.constructor = Confirm;
exports.Confirm = Confirm;
});
define("js/common/share", ["jquery"], function(require, exports, module){
/**
 * 分享
 * @author: xuqi<qi.xu@yoho.cn>
 * @date: 2016/3/1
 */

var $ = require("jquery");

function shareBase(options) {
    var openUrl = '';
    var defOption = {
        title: '',
        url: window.location.href,
        weixinUrl: '',
        image: '',
        desc: '',
        channel: ''
    };
    var shareChannels = ['weibo', 'tweibo', 'qzone', 'renren', 'qq', 'douban','weixin'];
    var sharebox;
    var shareCon = '<em><i></i></em>';

    defOption = $.extend(defOption, options);

    if ($.inArray(defOption.channel, shareChannels) === -1) {
        alert('不存在的分享平台!');
        return false;
    }

    switch (defOption.channel) {
        case 'weibo':
            openUrl = 'http://service.weibo.com/share/share.php?url=' + defOption.url + '&title=' +
                defOption.title + '&appkey=3739328910&searchPic=true&pic=' + defOption.image;
            break;
        case 'tweibo':
            openUrl = 'http://share.v.t.qq.com/index.php?c=share&a=index&url=' + defOption.url + '&title=' +
                defOption.title + '&appkey=c0af9c29e0900813028c2ccb42021792&pic=' + defOption.image;
            break;
        case 'qzone':
            openUrl = 'http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=' + defOption.url + '&title=' +
                defOption.title + '&desc=&summary=' + defOption.desc + '&site=YOHO!有货&pics=' + defOption.image;
            break;
        case 'renren':
            openUrl = 'http://widget.renren.com/dialog/share?resourceUrl=' + defOption.url + '&srcUrl=' +
                defOption.url + '&desc=' + defOption.desc + '&title=' + defOption.title + '&description=' +
                defOption.desc + '&pic=' + defOption.image;
            break;
        case 'qq':
            openUrl = 'http://connect.qq.com/widget/shareqq/index.html?url=' + defOption.url + '&desc=' +
                defOption.desc + '&title=' + defOption.title.replace('%', '') + '&desc=&summary=' +
                defOption.desc + '&site=YOHO!有货&pics=' + defOption.image;
            break;
        case 'weixin':
            openUrl = 'http://s.jiathis.com/qrcode.php?url=' + defOption.weixinUrl + '&desc=' +
                defOption.desc + '&title=' + defOption.title + '&description=' +
                defOption.desc + '&pic=' + defOption.image;
            break;
        case 'douban':
            openUrl = 'http://www.douban.com/share/service?href=' + defOption.url + '&text=' +
                defOption.desc + '&image=' + defOption.image + '&title=' + defOption.title + '&comment=';
            break;
    }

    if (defOption.channel === 'weixin') {
        if (!defOption.self) {
            return;
        }

        sharebox = defOption.self.closest('.share-to').find('.weixin-share-box');

        if (sharebox.length > 0) {
            shareCon += '<div class="con"><h2>分享到微信朋友圈</h2><p class="pic">' +
            '<img src="' + openUrl + '" /></p><p class="w">打开微信,点击底部得“发现”,使用<br/>“扫一扫“即可将网页分享到我的朋友圈。</p>' +
            '<a href="javascript:void(0)" class="close">x</a></div>';
            sharebox.find('div').length > 0 ? sharebox.show() : sharebox.html(shareCon).show();

            sharebox.find('.close').click(function() {
                $(this).closest('.weixin-share-box').hide();
            });
        }
    } else {
        window.open(encodeURI(openUrl));
    }
}

function share(channel, self) {
    var title = document.title.replace(/(^\s*)|(\s*$)/g, '');
    var desc = $('#share-desc').val();
    var image = $('#share-img').val();
    var weixinUrl = $('#weixin-url').val();


    if (channel === 'weibo' || channel === 'tqq') {
        shareBase({
            channel: channel,
            title: title,
            image: image
        });
    } else {
        shareBase({
            channel: channel,
            title: title,
            desc: desc,
            image: image,
            self: self,
            weixinUrl: weixinUrl
        });
    }
}

$('.share-wrapper').on('click', 'i', function() {
    var $el = $(this),
        type = $el.data('type');

    if (type === 'weixin') {
        share(type, $el);
    } else {
        share(type);
    }
});
});
define("js/index/index", ["jquery","lazyload","handlebars","source-map"], function(require, exports, module){
/**
 * 首页
 * @author: xuqi<qi.xu@yoho.cn>
 * @date: 2015/11/23
 */

var $ = require("jquery"),
    lazyLoad = require("lazyload"),
    homePage = $('.home-page').data('page'),
    brandUrl = $('.logo-brand').data('url');


require("js/common/slider");
require("js/common/slider2");
require("js/common/logo-brand");

require("js/common/accordion");

$(document).on('mouseenter', '.imgopacity a img', function() {
    $(this).css('opacity', 0.8);
});
$(document).on('mouseout', '.imgopacity a img', function() {
    $(this).css('opacity', 1);
});



if ($.inArray(homePage, ['boys','girls','kids','lifestyle']) > -1) {
    require("js/common/new-arrivls")({
        type: homePage,
        url: '/common/getNewArrival',
        count: (homePage === 'boys') || (homePage === 'lifestyle') ? 5 : 4,
        rows: [5,3]
    });
    window.setCookie('_Channel', homePage, {
        domain: '.yohobuy.com',
        path: '/',
        expires: 365
    });
}



lazyLoad($('img.lazy'));
if (homePage === 'boys') {
    $('.slide-container').slider({
        pagination: '.thumb-pagination'
    });
} else {
    $('.center-col').slider();
    $('.slide-container').slider();
}

if (homePage === 'boys') {
    $('.logo-brand').logoBrand({
        url: brandUrl
    });
    $('.img-brand').slider2();
} else {
    $('.logo-brand').logoBrand({
        showNum: 10,
        url: brandUrl
    });
    $('.img-slider-wrapper').slider2();
}



});
define("js/common/slider2", ["jquery"], function(require, exports, module){
/**
 * (品牌优选)图片幻灯片插件
 * @author: wangqing(robin.wang@yoho.cn)
 * @date: 205/7/2
 */
var $ = require("jquery");

(function($) {
    $.fn.slider2 = function(options) {
        function autoplay(index, limit, toright) {
            if (toright === true) {
                $('.next').trigger('click');
                if (index === (limit - 3)) {
                    autoplayrecycle(--index, limit, false);
                } else {
                    autoplayrecycle(++index, limit, true);
                }
            } else {
                $('.prev').trigger('click');
                if (index === 0) {
                    autoplayrecycle(++index, limit, true);
                } else {
                    autoplayrecycle(--index, limit, false);
                }
            }
        }

        function autoplayrecycle(index, limit, toright) {
            window.setTimeout(autoplay, $.fn.slider2.defaults.delaytime, index, limit, toright);
        }

        function changePic(index, width, callback) {
            var offersetleft = -(index * width);

            $('.img-list')
                .animate({
                    'margin-left': offersetleft + 'px'
                }, 'slow', callback);

        }
        $.fn.slider2.defaults = {
            index: 0,
            shownum: 3,
            autoplay: false,
            delaytime: 3000
        };
        return this.each(function() {
            var opts = $.extend({}, $.fn.slider2.defaults, options);
            var mr = parseInt($('.img-item').css('margin-right'));
            var $banneritems = $('.img-item');
            var bannerarr = [];
            var _width = $banneritems.outerWidth() + mr,
                _size = $banneritems.length,
                j = 0;

            if (_size <= 3) {
                $(this).find('.img-brand-switch').hide();
                return;
            }
            for (j = 0; j < $banneritems.length; j++) {
                bannerarr.push($banneritems[j]);
            }
            _size = bannerarr.length;
            $(this).find('.img-list').css({
                width: (_width * _size)
            });
            $(this).find('.next').on('click', function(e) {
                var i = 0,
                    _obj = null;

                e.preventDefault();

                changePic(3, _width, function() {
                    for (i = 0; i < 3; i++) {
                        _obj = bannerarr.shift();

                        $('.img-item').parent().append(_obj.outerHTML);
                        bannerarr.push(_obj);
                    }
                    $('.img-item').first().remove();
                    $('.img-item').first().remove();
                    $('.img-item').first().remove();
                    $('.img-list').css({
                        'margin-left': '0'
                    });
                });
            });
            $(this).find('.prev').on('click', function(e) {
                var i = 0,
                    _obj = null,
                    offersetleft = '';

                e.preventDefault();
                for (i = 0; i < 3; i++) {
                    _obj = bannerarr.pop();

                    $('.img-item').parent().prepend(_obj.outerHTML);
                    bannerarr.unshift(_obj);
                }
                offersetleft = 3 * _width;
                $('.img-item').last().remove();
                $('.img-item').last().remove();
                $('.img-item').last().remove();
                $('.img-list').css({
                    'margin-left': -offersetleft + 'px'
                });
                changePic(0, _width);
            });
            if (opts.autoplay === true) {
                autoplayrecycle(opts.index, _size, true);
            }
        });

    };

}($));
});
define("js/common/accordion", ["jquery"], function(require, exports, module){
var Slide = require("js/common/yohoui/YH.slide");
var $ = require("jquery");

var $contain = $('.slide-accordion');
var $item = $contain.find('li');

var $width = $item.width();
var $spn = parseInt($('.home-page').width()) === 1150 ? (120 + 5) : (102 + 5);
var slide;

function switchfun(to) {
    $item.each(function(index) {
        $(this).css('zIndex', index);
        if (index <= to) {
            $(this).stop().animate({
                left: index * $spn
            }, 400);
        } else {
            $(this).stop().animate({
                left: (to) * $spn + $width + $spn * (index - to - 1)
            }, 400);
        }
    });
}

switchfun(0);

slide = new Slide({
    length: 5,
    loop: false,
    auto: false,
    timeout: 2,
    index: 0
});

slide.on('change', function(data) {
    switchfun(data.to);
});

$item.mouseover(function() {
    slide.go($(this).index());
});

slide.init();
});
define("js/common/yohoui/YH.slide", [], function(require, exports, module){
var me = require("js/common/yohoui/YH.base");

var slide = function(options) {
    this.__lastTime = null;
    this.__isStop = false;
    options = me.extend(this.defaults, options);
    slide.superclass.constructor.call(this, options);
};

me.inherit(slide, me.assembly);

slide.prototype.oninit = function() {
    var __self = this,
        _o = __self.options;

    if (_o.auto) {
        __self.play();
    }
    __self.go(_o.index);
    return this;
};

slide.prototype.go = function(_to, _from) {
    var __self = this,
        _o = __self.options;
    var _direction,_loop,_current,_index,_originalto,o,key,_e;

    if (__self.__lastTime) {
        clearTimeout(__self.__lastTime);
        __self.__lastTime = null;
    }
    _from = 'undefined' === typeof _from ? _o.index : _from;
    _direction = _to === _from ? 0 : _to > _from ? 1 : -1;
    _loop = _o.loop, _index = _o.length - 1, _originalto = _to;
    if (_loop) {
        if (_to > _index) {
            _to = _to - _index - 1;
        } else {
            if (0 > _to) {
                _to = _to + _index + 1;
            } else {
                _to = _to;
            }
        }
    } else {
        if (_to > _index) {
            _to = _index;
        } else {
            if (0 > _to) {
                _to = 0;
            } else {
                _to = _to;
            }
        }
    }
    _current = _o.index = _to;

    o = {
        from: _from,
        to: _to,
        originalto: _originalto,
        direction: _direction
    };

    for (key in __self.registerEvent) {
        if (__self.registerEvent[key].length > 0) {
            for (_e in __self.registerEvent[key]) {
                if (__self.registerEvent[key].hasOwnProperty(_e)) {
                    __self.registerEvent[key][_e](o);
                }
            }
        }
    }

    if (_current !== _index || _to) {
        if (!__self.__isStop && _o.auto) {
            __self.play();
        }
    } else {
        if (__self.__lastTime) {
            clearTimeout(__self.__lastTime);
        }
    }
};

slide.prototype.play = function() {
    var __self = this,
        _o = __self.options;

    __self.__lastTime = setTimeout(function() {
        __self.next();
    }, 1000 * _o.timeout);
    return this;
};

slide.prototype.next = function() {
    var __self = this,
    _o = __self.options;
    var _from = _o.index;
    var _to = _from + _o.step;

    __self.go(_to, _from);
};

slide.prototype.prev = function() {
    var __self = this,
        _o = __self.options;
    var _from = _o.index;
    var _to = _from - _o.step;

    __self.go(_to, _from);
};

slide.prototype.pause = function() {
    var __self = this;

    if (__self.__lastTime) {
        clearTimeout(__self.__lastTime);
    }
    __self.__isStop = true;
};

slide.prototype.resume = function() {
    var __self = this;

    __self.__isStop = false;
    __self.play();
};

slide.prototype.defaults = {
    index: 0,
    timeout: 5,
    step: 1,
    per: 1,
    auto: false,
    loop: false
};

module.exports = slide;
});
define("js/common/yohoui/YH.base", [], function(require, exports, module){
var assembly;
var classtype = {
        '[object Array]': 'array',
        '[object Boolean]': 'boolean',
        '[object Date]': 'date',
        '[object Function]': 'function',
        '[object Number]': 'number',
        '[object Object]': 'object',
        '[object RegExp]': 'regexp',
        '[object String]': 'string'
    };
var me = {
    __Index: 0,
    list: [],
    get: function(id) {
        return id === undefined ? this.list : this.list[id];
    },
    fn: function() { },
    inherit: function(childClass, parentClass) {
        var Constructor = me.fn;

        Constructor.prototype = parentClass.prototype;
        childClass.prototype = new Constructor();

        childClass.prototype.constructor = childClass;
        childClass.superclass = parentClass.prototype;

        if (childClass.prototype.constructor === Object.prototype.constructor) {
            childClass.prototype.constructor = parentClass;
        }
    },
    extend: function(obj, newProperties) {
        var key;

        for (key in newProperties) {
            if (newProperties.hasOwnProperty(key)) {
                obj[key] = newProperties[key];
            }
        }
        return obj;
    },
    copy: function(TargetClass, obj, newProperties) {
        var value,o,key;

        if (typeof obj !== 'object') {
            return obj;
        }
        value = obj.valueOf();
        if (obj !== value) {
            return new obj.constructor(value);
        }
        if (obj instanceof obj.constructor && obj.constructor !== Object) {
            if (TargetClass) {
                o = new TargetClass();
            } else {
                o = me.clone(obj.constructor.prototype);
            }

            for (key in obj) {
                if (TargetClass || obj.hasOwnProperty(key)) {
                    o[key] = obj[key];
                }
            }
        } else {
            o = {};
            for (key in obj) {
                if (o.hasOwnProperty(key)) {
                    o[key] = obj[key];
                }
            }
        }
        if (newProperties) {
            for (key in newProperties) {
                if (o.hasOwnProperty(key)) {
                    o[key] = newProperties[key];
                }
            }
        }

        return o;
    },
    clone: function(obj) {
        me.__cloneFunc.prototype = obj;
        return new me.__cloneFunc();
    },
    __cloneFunc: function() {
    },
    delegate: function(func, scope) {
        var args;

        scope = scope || window;

        if (arguments.length > 2) {
            args = Array.prototype.slice.call(arguments, 2);

            return function() {
                return func.apply(scope, args);
            };
        } else {
            return function() {
                return func.call(scope);
            };
        }
    },
    dom: function($select, classCss) {
        var wrap = $select;
        var name, DOM = {
            wrap: wrap
        },
            els = wrap[0].getElementsByTagName('*'),
            elsLen = els.length;
        var i;

        for (i = 0; i < elsLen; i++) {
            name = els[i].className;
            if (name.indexOf(classCss) > -1) {
                name = name.split(classCss)[1];
            }
            if (name) {
                DOM[name] = wrap.find(els[i]);
            }
        }
        return DOM;
    },

    //模板引擎
    template: function() {
        var result, key, reg,i;
        var args = arguments;

        if (args.length > 0) {
            if (me.isString(args[0])) {
                result = args[0];
                if (args.length === 2 && me.isObject(args[1])) {
                    for (key in args[1]) {
                        if (args[1][key] !== undefined) {
                            reg = new RegExp('({' + key + '})', 'g');

                            result = result.replace(reg, args[1][key]);
                        }
                    }
                } else {
                    for (i = 1; i < args.length; i++) {
                        if (args[i] !== undefined) {
                            reg = new RegExp('({[' + (i - 1) + ']})', 'g');

                            result = result.replace(reg, args[i]);
                        }
                    }
                }
            }
        }
        return result;
    },
    __type: function(obj) {
        return obj == null ? String(obj) : classtype[Object.prototype.toString.call(obj)] || 'object';
    },
    isObject: function(obj) {
        return this.isFunction(obj) || !!(obj && 'object' === typeof obj);
    },
    isFunction: function(obj) {
        return this.__type(obj) === 'function';
    },
    isArray: Array.isArray || function(obj) {
        return this.__type(obj) === 'array';
    },
    isNum: function(obj) {
        return !isNaN(parseFloat(obj)) && isFinite(obj);
    },
    isString: function(obj) {
        return this.__type(obj) === 'string';
    },
    each: function(data, callback, args) {
        var i, len;

        if (me.isArray(data)) {
            for (i = 0, len = data.length; i < len; i++) {
                if (callback.call(data[i], i, data[i], args) === false) {
                    break;
                }
            }
        } else {

            for (i in data) {
                if (callback.call(data[i], i, data[i], args) === false) {
                    break;
                }
            }
        }
    },
    funManager: {
        __loadList: {},
        __loadFun: function(item, callback, win) {

            if (item.methord && me.isFunction(item.methord())) {
                win = win || window;
                item.methord()(item, function() {
                    callback();
                }, win);
            }
        },
        load: function(fns, statechange, win, __index) {
            __index = __index || 0;

            if (fns[__index]) {
                me.funManager.__loadFun(fns[__index], function() {
                    me.funManager.load(fns, statechange, win, __index + 1);
                }, win);
            }
            statechange(__index, win);
        },
        get: function(id) {
            return this.__loadList[id];
        }
    },
    log: function(msg) {
        var console = window.console || {
            log: function() { }
        };

        console.log(msg);
    },
    Event: {
        mousewheel: function(e) {
            var _eoe = e.originalEvent;
            var _de = _eoe.detail ? _eoe.detail * -1 : _eoe.wheelDelta / 40;
            var _direction = _de < 0 ? -1 : 1;

            return {
                direction: _direction,
                unit: _de
            };
        },
        __: function(_e, el, event, handle) {
            var key;

            for (key in _e) {
                if (window[_e[key].validator]) {
                    el[_e[key].validator](_e[key].prefix + event, handle, false);
                    break;
                }
            }
        },
        add: function(el, event, handle) {
            var _e = [
                {
                    validator: 'addEventListener',
                    prefix: ''
                },
                {
                    validator: 'attachEvent',
                    prefix: 'on'
                }
                            ];

            this.__(_e, el, event, handle);
        },
        remove: function(el, event, handle) {
            var _e = [
                {
                    validator: 'removeEventListener',
                    prefix: ''
                },
                {
                    validator: 'detachEvent',
                    prefix: 'on'
                }
                            ];

            this.__(_e, el, event, handle);
        }
    },
    getUid: function(_name) {
        return me.template('me-{0}{1}-{2}', _name, new Date().getTime(), me.__Index++);
    },
    Browser: {
        isTouch: function() {
            var msGesture = window.navigator && window.navigator.msPointerEnabled && window.MSGesture;

            return (('ontouchstart' in window) || msGesture || window.DocumentTouch) ? true : false;
        },
        Prefix: function() {
            var i;

            var props = ['perspectiveProperty', 'WebkitPerspective', 'MozPerspective', 'OPerspective', 'msPerspective'];
            var obj = document.createElement('div');

            for (i in props) {
                if (obj.style[props[i]] !== undefined) {
                    return me.template('-{0}-', props[i].replace('Perspective', '').toLowerCase());
                }
            }
        },
        parseURL: function(url) {
            var a = document.createElement('a');
            var ret,seg,len,i,s;

            a.href = url;
            return {
                source: url,
                protocol: a.protocol.replace(':', ''),
                host: a.hostname,
                port: a.port,
                query: a.search,
                params: (function() {
                    ret = {},
                    seg = a.search.replace(/^\?/, '').split('&'),
                    len = seg.length, i = 0, s;

                    for (; i < len; i++) {
                        if (!seg[i]) {
                            continue;
                        }
                        s = seg[i].split('=');
                        ret[s[0]] = s[1];
                    }
                    return ret;
                })(),
                file: (a.pathname.match(/\/([^\/?#]+)$/i) || [null, ''])[1],
                hash: a.hash.replace('#', ''),
                path: a.pathname.replace(/^([^\/])/, '/$1'),
                relative: (a.href.match(/tps?:\/\/[^\/]+(.+)/) || [null, ''])[1],
                segments: a.pathname.replace(/^\//, '').split('/')
            };
        }
    },
    Array: {
        indexOf: function(array, val) {
            var i;

            for (i = 0; i < array.length; i++) {
                if (this[i] === val) {
                    return i;
                }
            }
            return -1;
        },
        remove: function(array, val) {
            var index = this.indexOf(array, val);

            if (index > -1) {
                array.splice(index, 1);
            }
            return array;
        }
    }
};

assembly = function(options) {
    this.initialized = false;
    this.registerEvent = {
        before: [],
        change: [],
        after: []
    };
    this.options = options;

    this.init(options);
};

assembly.output = function() {
    me.log(me.list);
};
assembly.prototype.oninit = me.fn;

assembly.prototype.init = function(cfg) {
    this.initialized = true;

    // function _getClassName(_constructor, _constr) {
    //     var _constr = _constr || "";
    //     if (_constructor.superclass) {
    //         var args = /(\w+)\.superclass/.exec(_constructor.arguments.callee);
    //         if (args != null) {
    //             _constr += args[1] + "-";
    //             // return _getClassName(_constructor.superclass.constructor, _constr);
    //         }
    //     }
    //     return _constr;
    // }
    this.__Uid = me.getUid('me');
    this.oninit(cfg);
    me.list[this.__Uid] = this;
};
assembly.prototype.destory = function() {
    this.initialized = false;
    delete me.list[this.__Uid];
};
assembly.prototype.getUid = function() {
    return this.__Uid;
};
assembly.prototype.getOptions = function() {
    return this.options;
};
assembly.prototype.config = function() {
    if (arguments.length > 0) {
        if (typeof (arguments[0]) === 'string') {
            if (arguments.length > 1) {
                this.options[arguments[0]] = arguments[1];
            } else {
                return this.options[name];
            }
        }
    } else {
        return this.options;
    }
};
assembly.prototype.on = function(name, callback) {
    var __self = this;
    var _e = __self.registerEvent[name];

    if (_e) {
        _e.push(callback);
    }
    return _e;
};
assembly.prototype.off = function(name, callback) {
    var __self = this;
    var _e = __self.registerEvent[name];
    var e = [];

    me.each(_e, function(name, _callback) {

        if (_callback === callback) {
            e.push(name);
        }
    });

    me.each(e.reverse(), function(name, _callback) {
        _e.splice(_callback, 1);
    });
};
me.assembly = assembly;

module.exports = me;
});
define("js/common/new-arrivls", ["jquery","lazyload","handlebars","source-map"], function(require, exports, module){
var $ = require("jquery"),
        lazyload = require("lazyload");
var Handlebars = require("handlebars");

function InfiniteLoad(options) {
    var defaults = {
        index: 0,
        isload: true,//是否正在加载
        isrun: true,//判断是否执行
        offset: {
            height: null,
            width: null
        }
    };

    this.registerEvent = {
        before: [],
        change: [],
        after: []
    };

    this.options = $.extend(true, {}, defaults, options);

    return this;
}

InfiniteLoad.prototype.on = function(name, callback) {
    var g = this;
    var _e = g.registerEvent[name];

    if (_e) {
        _e.push(callback);
    }
    return _e;
};

InfiniteLoad.prototype.exect = function(key, params) {
    var g = this;
    var e;

    if (g.registerEvent[key] && g.registerEvent[key].length > 0) {
        for (e in g.registerEvent[key]) {
            if (g.registerEvent[key].hasOwnProperty(e)) {
                g.registerEvent[key][e](params);
            }
        }
    }
};

InfiniteLoad.prototype.init = function() {
    var g = this;
    var p = this.options;

    function __loadMore() {

        if (p.isrun && p.isload && g.__directionCalculation()) {
            p.isload = false;
            p.index++;
            g.exect('after', p);
        }

        g.exect('change', p);
    }

    g.exect('before', p);

    $(window).scroll(__loadMore);
};

InfiniteLoad.prototype.emit = function() {
    var p = this.options;

    p.isload = true;
};

InfiniteLoad.prototype.stop = function() {
    var p = this.options;

    p.isrun = false;
    p.isload = false;
};

InfiniteLoad.prototype.__directionCalculation = function() {
    var p = this.options;

    if (p.offset.height && p.offset.height() > 0 && $(window).scrollTop() + $(window).height() >= p.offset.height()) {
        return true;
    }
    return false;
};

module.exports = function(data) {
    var $container = $('#newarrivals .goods-container');
    var $load = $('.loading a');
    var load = new InfiniteLoad({
        index: 1,
        isload: false,
        offset: {
            height: function() {
                return parseFloat($container.offset().top) + parseFloat($container.height()) - 200;
            }
        }
    });
    var loadAjax;
    var url = data.url,
        count = data.count,
        rows = data.rows;

    data.pageIndex = 0;

    delete data.url;
    delete data.count;
    delete data.rows;

    loadAjax = function(url, data, count) {

        var options = {
            type: 'POST',
            url: url,
            success: function(result) {
                var code = result.code;
                var myTemplate,len,pos;

                if (code === 200) {
                    len = result.goods.length % count;
                    pos = result.goods.length - len - 1;

                    result.goods.splice(pos, len);

                    myTemplate = Handlebars.compile(load.tpl);

                    $container.append(myTemplate(result.goods));
                    data.pageIndex = data.pageIndex + result.goods.length;

                    //懒加载插件貌似有点问题,图片先直接展示
                    lazyload($container.find('img.lazy'));

                    load.emit();
                } else {

                    load.stop();
                    $load.html('查看更多');
                }
            },
            error: function() {

                load.stop();
                $load.html('网络断开连接了~');
            }
        };

        options.data = data;
        $.ajax(options);
    };


    load.on('after', function(p) {

        data.pageCount = count * rows[1];

        loadAjax(url, data);
    });

    load.on('before', function(p) {


        load.tpl = '{{#each this}}';
        load.tpl += '<div class="good-info imgopacity" data-skn="{{skn}}">';
        load.tpl += '    <div class="tag-container clearfix">';
        load.tpl += '        {{# tags}}';
        load.tpl += '            {{# isNew}}';
        load.tpl += '                <span class="good-tag new-tag">NEW</span>';
        load.tpl += '            {{/ isNew}}';
        load.tpl += '            {{# isReNew}}';
        load.tpl += '                <span class="good-tag renew-tag">再到着</span>';
        load.tpl += '            {{/ isReNew}}';
        load.tpl += '            {{# isSale}}';
        load.tpl += '                <span class="good-tag sale-tag">SALE</span>';
        load.tpl += '            {{/ isSale}}';
        load.tpl += '            {{# isNewFestival}}';
        load.tpl += '                <span class="good-tag new-festival-tag">新品节</span>';
        load.tpl += '            {{/ isNewFestival}}';
        load.tpl += '            {{# isLimit}}';
        load.tpl += '                <span class="good-tag limit-tag">限量商品</span>';
        load.tpl += '            {{/ isLimit}}';
        load.tpl += '            {{# isYearEndPromotion}}';
        load.tpl += '                <span class="good-tag yep-tag">年终大促</span>';
        load.tpl += '            {{/ isYearEndPromotion}}';
        load.tpl += '            {{# isYearMidPromotion}}';
        load.tpl += '                <span class="good-tag ymp-tag">年中热促</span>';
        load.tpl += '            {{/ isYearMidPromotion}}';
        load.tpl += '        {{/ tags}}';
        load.tpl += '    </div>';
        load.tpl += '    <div class="good-detail-img">';
        load.tpl += '        <a class="good-thumb" href="{{url}}" target= "_blank">';
        load.tpl += '            <img class="lazy" data-original="{{thumb}}">';
        load.tpl += '        </a>';
        load.tpl += '        {{# isFew}}';
        load.tpl += '            <p class="few-tag">即将售罄</p>';
        load.tpl += '        {{/ isFew}}';

        load.tpl += '        {{#if showColBtn}}';
        load.tpl += '            <span class="col-btn iconfont{{#if coled}} coled{{/if}}">&#xe616;</span>';
        load.tpl += '        {{/if}}';
        load.tpl += '    </div>';
        load.tpl += '    <div class="good-detail-text">';
        load.tpl += '        <a href="{{url}}" target= "_blank">{{name}}</a>';
        load.tpl += '        <p class="price">';
        load.tpl += '            <span class="sale-price{{#unless marketPrice}}prime-cost{{/unless}}">';
        load.tpl += '                ¥{{salePrice}}';
        load.tpl += '            </span>';
        load.tpl += '            {{# marketPrice}}';
        load.tpl += '                <span class="market-price">¥{{.}}</span>';
        load.tpl += '            {{/ marketPrice}}';
        load.tpl += '        </p>';
        load.tpl += '    </div>';
        load.tpl += '</div>';
        load.tpl += '{{/each}}';


        data.pageCount = count * rows[0];

        loadAjax(url, data, data.count);

        //load.emit();
    });

    load.init();

};
});
define("js/brand/index", ["jquery","lazyload","handlebars","source-map","dot"], function(require, exports, module){
/**
 * 首页
 * @author: xuqi<qi.xu@yoho.cn>
 * @date: 2015/11/23
 */

var $ = require("jquery"),
    lazyLoad = require("lazyload");


require("js/common/slider");
require("js/brand/brands");

lazyLoad($('img.lazy'));
$('.slide-container').slider({
    orient: true
});
});
define("js/brand/brands", ["jquery","handlebars","source-map","dot"], function(require, exports, module){
var $ = require("jquery"),
    Handlebars = require("handlebars"),
    dot = require("dot");

var $tabs = $('.brands-tabs');
var $list = $('.brands-list');
var $gory = $('.brands-category');
var $news = $('.news-txt ul');
var $clearfix = $list.find('dl.clearfix');
var $brand = $list.find('li>a');
var $category = $gory.find('a');
var $tab = $tabs.find('li>a');
var $arr = $tabs.find('.hoverarr');
var $thisTab;

var categoryHeight = $category.height();
var categoryTop = $category.offset() ? $category.offset().top : 0;
var newsHeight = $news.height();
var newsTop = $news.offset() ? $news.offset().top : 0;
var timeout, _id;


//用于临时存储数据
var tempdata = {};

var templete = '<div class="brands-dialog">';

templete += '    <div class="brands-layer">';
templete += '        <div class="layer-content">';
templete += '            <div class="title">{{title}}</div>';
templete += '            <div class="clearfix desc">';
templete += '                <img src="{{icon}}">';
templete += '                <p class="right">{{content}}</p>';
templete += '            </div> ';
templete += '            <div class="featured">';
templete += '                <p>{{subtitle}}</p> ';
templete += '                <div class="clearfix"> ';
templete += '                    {{#each imgs}}';
templete += '                    <img src="{{src}}">';
templete += '                    {{/each}}';
templete += '                </div>';
templete += '            </div>';
templete += '        </div>';
templete += '    </div>';
templete += '</div>';

dot($('.brand-desc'));

$.easing.easeOutQuint = function(x, t, b, c, d) {
    return c * ((t = t / d - 1) * t * t * t * t + 1) + b;
};

function getQueryString(name) {
    var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)');
    var r = window.location.search.substr(1).match(reg);

    if (r != null) {
        return window.unescape(r[2]);
    }
    return null;
}

// 格式化资讯NEWS标题数量
if ($news.length) {
    $news.find('li').each(function() {
        var $dom = $(this);
        var domHeight = $dom.offset().top - newsTop + $dom.height();

        if (domHeight > newsHeight) {
            $dom.hide();
        }
    });
}

//头部图片TAB切换展示
$tab.eq(0).parent('li').find('.brands-content').css('z-index', '1');

_id = getQueryString('id') ? getQueryString('id') : 0;

// 设置对应TAB选中
$thisTab = $tab.eq(_id);
$thisTab.find('.g-mask').addClass('g-mask-on');

if (_id && $thisTab.length) {
    $arr.css({
        left: parseFloat($thisTab.offset().left) - parseFloat($tabs.offset().left)
    });
}
$tab.hover(function() {
    var $this = $(this);

    clearTimeout(timeout);
    timeout = setTimeout(function() {
        var targetLeft = parseFloat($this.offset().left) - parseFloat($tabs.offset().left);

        $arr.animate({
            left: targetLeft
        }, 200, 'easeOutQuint');
    }, 50);
    $tabs.find('.brands-content').removeAttr('style');
    $this.parent('li').find('.brands-content').css('z-index', '1');

}, function() {
    clearTimeout(timeout);
});

//品牌类别滚动事件
$(window).scroll(function() {
    if ($(this).scrollTop() >= categoryTop) {
        $gory.addClass('category-fix');
    } else {
        $gory.removeClass('category-fix');
    }
});

//点击字母,页面滚动到相关区域
$category.click(function() {
    var name = $(this).attr('href').split('#')[1];
    var targetTop = $list.find('[name=' + name + ']').offset().top - categoryHeight;

    if (!$gory.hasClass('category-fix')) {
        targetTop -= categoryHeight;
    }

    $('html,body').animate({
        scrollTop: targetTop
    }, 200);
    return false;
});


//浮层代码
function bindTemplete($select, data, templete) {
    var $this = $select;
    var offset = {
        width: $this.width(),
        left: $this.offset().left,
        right: parseFloat($(window).width()) - parseFloat($this.offset().left) - parseFloat($this.width())
    };

    var $parent = $this.parent('li');
    var myTemplate;

    $list.find('.brands-dialog').remove();
    myTemplate = Handlebars.compile(templete);
    $parent.append(myTemplate(data));
    dot($parent.find('.right'));

    if (offset.right - 350 < 0) {
        $parent.find('.brands-layer')
                .addClass('brands-layer-right').css('left', -330 - offset.width);
    }
}

//鼠标悬浮品牌,请求数据,并且展示
function bindHoverEvent() {
    $brand.unbind('mouseenter').unbind('mouseleave').hover(function() {
        var $this = $(this);
        var key = $this.attr('data-key');

        var options = {
            url: '/brands/brandinfo',
            type: 'get',
            data: {
                brandId: key
            },
            success: function(_data) {

                if (_data.code === 200 && _data.brand) {
                    if (!tempdata.hasOwnProperty(_data.brand.key)) {
                        tempdata[_data.brand.key] = _data.brand;
                    }
                    bindTemplete($this, tempdata[_data.brand.key], templete);
                }
            }
        };

        clearTimeout(timeout);
        timeout = setTimeout(function() {
            if (!tempdata.hasOwnProperty(key)) {
                $.ajax(options);
            } else {
                bindTemplete($this, tempdata[key], templete);
            }
        }, 200);
    }, function() {
        clearTimeout(timeout);
        $list.find('.brands-dialog').remove();
    });
}

if ($clearfix.length < 26) {
    $.ajax({
        url: '/brands/brandList',
        type: 'POST',
        data: {
            start: $clearfix.length ? ($clearfix.length + 1) : 1
        },
        success: function(_data) {
            if (_data) {
                $list.append(_data);
                $brand = $list.find('li>a');
                bindHoverEvent();
            }
        }
    });
}

bindHoverEvent();
});
define("js/passport/entry", ["jquery","jquery.placeholder"], function(require, exports, module){
/*
 * 密码中心打包入口文件
 */

require("js/passport/reg");
require("js/passport/back");
require("js/passport/login");
require("js/passport/reset");
require("js/passport/vertification");
require("js/passport/thirdlogin");
require("js/passport/third-pwd");
});
define("js/passport/reg", ["jquery","jquery.placeholder"], function(require, exports, module){
/*
 * @description 注册页js
 * @time 2015/12/14
 */

var $ = require("jquery"),
    regValidate = require("js/passport/mail-phone-regx"),
    computeComplex = require("js/passport/pwd-strength");

var $registerPage = $('.register-page'),
    $pwdTips = $('#pwd-tips'),
    $pwdTip1 = $pwdTips.find('#pwd-tip1'),
    $errTip = $('#err-tip'),
    $registerBtn = $('#register-btn'),
    $countDown = $('#count-down'),
    $successBtn = $('.success-btn'),
    countDown = 5,
    clearT;

var $sendCaptcha = $('#send-captcha'),
    caCount = 4,
    validateResult = [];

var $pn = $('#phone-num'),
    $mc = $('#msg-captcha'),
    $pwd = $('#pwd'),
    $repwd = $('#repwd'),
    $ca = $('#captcha'),
    timeResidue = 0;

// 密码强度验证
var $pwdIntensity = $('.pwd-intensity'),
    $pwdParent = $pwdIntensity.closest('.pwd-intensity-container');

//signup验证
var $region = $('#country-code'),
    $regionSelect = $('#region'),
    isPwd = false,
    pwdVal;

var pwdReg = regValidate.pwdValidateRegx;

var $curErrContainer;

var oldPhone = ''; //如果手机号改变时刷新验证码

require("jquery.placeholder");

setTimeout(function() {
    $pn.val('');
    $mc.val('');
    $pwd.val('');
    $repwd.val('');
    $ca.val('');
}, 0);

//验证码位数
$ca.attr('maxlength', caCount);

//密码规则提示
$pwd.focus(function(event) {
    $pwdTips.removeClass('hide');
    isPwd = true;
    pwdVal = $(this).val();
}).blur(function() {
    $pwdTips.addClass('hide');
    isPwd = false;
});


//IE8 placeholder
$('[placeholder]').placeholder();

// 存储校验信息
validateResult = [
    {
        id: 'phone-num',
        message: '', //错误信息
        status: false //当前的状态
    },
    {
        id: 'captcha',
        message: '',
        status: false
    },
    {
        id: 'msg-captcha',
        message: '',
        status: false
    },
    {
        id: 'pwd',
        message: '',
        status: false
    },
    {
        id: 'repwd',
        message: '',
        status: false
    }
];

//刷新图形验证码
function refreshPic() {
    var time = new Date(),
        $captchaImg = $('.captcha-img'),
        captchaImgSrc = $captchaImg.attr('src').split('?')[0];

    $captchaImg.attr('src', captchaImgSrc + '?t=' + time.getTime());
}

//手机号ajax校验
function phoneAjaxFn(page, callback) {
    var url,
        data;

    if (page === 'reg') {
        url = '/passport/register/checkmobile';
        data = {
            mobile: $pn.val(),
            area: $region.text().split('+')[1]
        };
    } else if (page === 'third') {
        url = '/passport/autouserinfo/bindCheck';
        data = {
            mobile: $pn.val(),
            area: $region.text().split('+')[1],
            openId: $('#open-id').val(),
            sourceType: $('#source-type').val()
        };
    }

    validateResult[0].message = 'err';
    validateResult[0].status = false;

    $.ajax({
        url: url,
        type: 'POST',
        data: data
    }).then(function(data) {
        if (!data) {
            return;
        }

        switch (data.code) {
            case 200:

                if ($pn.val() !== oldPhone && oldPhone !== '') {

                    // 如果手机号发生改变则刷新验证码并且更新状态
                    refreshPic();
                    $sendCaptcha.addClass('disable').attr('disabled', 'disabled');
                    validateResult[1].message = '图形验证码错误';
                    validateResult[1].status = false;
                }

                oldPhone = $pn.val();

                validateResult[0].message = '';
                validateResult[0].status = true;
                break;
            case 400:
                refreshPic();
                validateResult[0].message = data.message;
                validateResult[0].status = false;
                break;
        }

        callback();
    });
}

//图形验证码ajax校验
function picCaptchaAjaxFn(page, callback) {
    var url;

    if (page === 'reg') {
        url = '/passport/register/piccaptcha';
    } else if (page === 'third') {
        url = '/passport/autouserinfo/checkPicCode';
    }
    $.ajax({
        type: 'POST',
        url: url,
        data: {
            verifyCode: $ca.val()

            //mobile: $pn.val(),
            //area: $region.text().split('+')[1]
        }
    }).then(function(data) {
        if (!data) {
            return;
        }

        switch (data.code) {
            case 200:
                validateResult[1].message = '';
                validateResult[1].status = true;
                break;
            case 400:
                refreshPic();
                validateResult[1].message = '图形验证码错误';
                validateResult[1].status = false;
                break;
        }
        callback();
    });
}

//短信验证码ajax校验
function msgCaptchaAjaxFn(page, callback) {
    var url;

    if (page === 'reg') {
        url = '/passport/register/msgcaptcha';
    } else if (page === 'third') {
        url = '/passport/autouserinfo/checkBindMsg';
    }
    $.ajax({
        type: 'POST',
        url: url,
        data: {
            code: $mc.val(),
            mobile: $pn.val(),
            area: $region.text().split('+')[1]
        }
    }).then(function(data) {
        if (!data) {
            return;
        }

        switch (data.code) {
            case 200:
                validateResult[2].message = '';
                validateResult[2].status = true;
                break;
            case 400:
                validateResult[2].message = '短信验证码错误';
                validateResult[2].status = false;
                break;
        }

        callback();
    });
}

// 验证
function validateRule(page, $element, callback) {

    var val = $.trim($element.val()),
        regionCode;



    // 根据需求http://redmine.yoho.cn/issues/3117改成上边的正则
    // 对应的错误提示语也改了,感觉要不了多久就会改回来
    // pwdReg = /^([a-zA-Z0-9\-\+_!@\#$%\^&\*\(\)\:\;\.=\[\]\\\',\?]){6,20}$/gi;

    //手机号校验
    if ($element.hasClass('phone-num')) {

        regionCode = $region.text();


        if (val === '') {
            validateResult[0].message = '请输入手机号码';
            validateResult[0].status = false;
            callback();

        } else if (!regValidate.phoneRegx[regionCode].test(val)) {
            validateResult[0].message = '手机号码格式不正确,请重新输入';
            validateResult[0].status = false;
            callback();

        } else {
            phoneAjaxFn(page, callback);
        }

    //图形验证码校验
    } else if ($element.hasClass('captcha')) {
        if (val === '') {
            validateResult[1].message = '请输入图形验证码';
            validateResult[1].status = false;
            callback();

        } else if (val.length <= 3) {
            validateResult[1].message = '图形验证码为4位';
            validateResult[1].status = false;
            callback();

        } else {

            // 并且手机号正确
            if (validateResult[0].status) {
                picCaptchaAjaxFn(page, callback);
            } else {
                validateResult[1].message = '图形验证码错误';
                validateResult[1].status = false;
                callback();
            }

        }

    //短信验证码校验
    } else if ($element.hasClass('msg-captcha')) {

        if (val === '') {
            validateResult[2].message = '请输入短信验证码';
            validateResult[2].status = false;
            callback();

        } else if (val.length <= 3) {
            validateResult[2].message = '短信验证码错误';
            validateResult[2].status = false;
            callback();

        } else {

            // 并且图形验证码正确
            if (validateResult[1].status) {
                msgCaptchaAjaxFn(page, callback);
            } else {
                validateResult[2].message = '短信验证码错误';
                validateResult[2].status = false;
                callback();
            }
        }

    //密码校验
    } else if ($element.hasClass('pwd')) {
        if (val === '') {
            validateResult[3].message = '请输入密码';
            validateResult[3].status = false;

        } else if (val.length < 6 || val.length > 20) {
            validateResult[3].message = '密码只支持6-20位字符';
            validateResult[3].status = false;

        } else if (!pwdReg.test($element.val())) {
            validateResult[3].message = '密码须字母和数字组合';
            validateResult[3].status = false;

        } else {
            validateResult[3].message = '';
            validateResult[3].status = true;
        }
        callback();

    //二次密码校验
    } else if ($element.hasClass('repwd')) {
        if (val === '') {
            validateResult[4].message = '请输入密码确认';
            validateResult[4].status = false;

        } else if ($pwd.val() !== val) {
            validateResult[4].message = '与密码不一致,请重新输入';
            validateResult[4].status = false;

        } else {
            validateResult[4].message = '';
            validateResult[4].status = true;

        }

        callback();
    }
}

function posErrTip() {
    var tipPos = $curErrContainer.offset();

    return $errTip.css({
        top: tipPos.top - 40,
        left: tipPos.left
    });
}

//显示提示信息
function showErrTip() {

    var show = false,
        i,
        validateResultLen = validateResult.length;

    for (i = 0; i < validateResultLen; i++) {
        if (!show) {

            //不可以通过status判断
            if (!!validateResult[i].message && validateResult[i].message !== 'err') {

                //显示错误提示
                $errTip.find('span').text(validateResult[i].message);
                $curErrContainer = $('#' + validateResult[i].id);
                posErrTip().removeClass('hide');

                show = true; //停止判断
            } else {
                $errTip.addClass('hide');
            }
        }
    }
}

//显示红色边框
function showBorder() {

    var $errInput,
        i,
        validateResultLen = validateResult.length;

    for (i = 0; i < validateResultLen; i++) {
        if (!!validateResult[i].message) {

            //显示红色边框
            $errInput = $('#' + validateResult[i].id);
            $errInput.addClass('error');

        } else {

            //去掉红色边框
            $errInput = $('#' + validateResult[i].id);
            $errInput.removeClass('error');
        }
    }
}

// 密码强度验证
function pwdFn($obj) {
    var pwd = $obj.val(),
        pwdStrength = computeComplex(pwd),
        level = 0;

    if (pwdStrength === 0) {
        level = 0;
    } else if (pwdStrength <= 10) {
        level = 1;
    } else if (pwdStrength <= 20) {
        level = 2;
    } else {
        level = 3;
    }

    switch (level) {
        case 0:
            $pwdParent.removeClass('red yellow green');
            $pwdIntensity.removeClass('color');
            break;
        case 1:
            $pwdParent.addClass('red').removeClass('yellow green');
            $pwdIntensity.filter('.low').addClass('color');
            $pwdIntensity.filter('.mid,.high').removeClass('color');
            break;
        case 2:
            $pwdParent.addClass('yellow').removeClass('red green');
            $pwdIntensity.filter('.low,.mid').addClass('color');
            $pwdIntensity.filter('.high').removeClass('color');
            break;
        case 3:
            $pwdParent.addClass('green').removeClass('yellow red');
            $pwdIntensity.addClass('color');
            break;
    }

    //提示框
    if (pwd === '') {
        $pwdTip1.removeClass('red yes no').addClass('default');
    } else if (pwd.length < 6 || pwd.length > 20) {
        $pwdTip1.removeClass('default yes').addClass('no red');
    } else {
        $pwdTip1.removeClass('default no red').addClass('yes');
    }
}

//重新定位错误提示
$(window).resize(function() {
    if ($errTip.hasClass('hide')) {
        return;
    }

    posErrTip();
});

// 失去焦点时开始校验
// Tips: 不可以在获得焦点的时候验证,获得焦点和失去焦点的间隔太小,如果中间存在ajax校验的话会出现问题
// ( ▼-▼ )注册页和信息完善页面接口不同
exports.init = function(page) {

    $('#agree-terms').click(function() {

        var $this = $(this),
            i,
            passI = 0;

        if (!!$this.attr('notchecked')) {

            $this.removeAttr('notchecked');

            //勾选
            for (i = 0; i < validateResult.length; i++) {
                if (validateResult[i].status) {
                    passI++;
                }
            }
            if (passI === 4) {
                $registerBtn.removeClass('disable').removeAttr('disabled');
            }
        } else {

            //取消勾选
            $registerBtn.addClass('disable').attr('disabled', 'disabled');
            $this.attr('notchecked', 'notchecked');
        }
    });

    // 按回车键提交
    $registerPage.on('keydown', function(e) {
        var key = e.which;

        if (key === 13) {
            $registerBtn.click();
        }
    });

    $registerPage.find('.va').keyup(function() {

        var j,
            statusLen = 0,
            vLen = validateResult.length,
            $that = $(this);

        validateRule(page, $(this), function() {
            showErrTip(); // 显示错误提示
            showBorder(); // 显示红色边框

            // 如果validateResult中有4个status为true表示验证通过
            for (j = 0; j < vLen; j++) {

                if (validateResult[j].status) {

                    statusLen++;
                }

            }

            if (statusLen === 4 && !$('#agree-terms').attr('notchecked')) {
                $registerBtn.removeClass('disable').removeAttr('disabled');
            } else {
                $registerBtn.addClass('disable').attr('disabled', 'disabled');
            }

            // 图形验证通过时,发送短信按钮可点击
            if (validateResult[1].status && timeResidue <= 0) {
                $sendCaptcha.removeClass('disable').removeAttr('disabled');
            } else {
                $sendCaptcha.addClass('disable').attr('disabled', 'disabled');
            }

            //图形验证通过时,发送短信按钮可点击 end

        });

        // 如果是密码则校验强度
        if (($that).hasClass('pwd')) {
            pwdFn($that);
        }

    }).blur(function() {

        /*validateRule($(this), function() {
            showErrTip();
            showBorder(); // 显示红色边框
        });*/
    });

    $regionSelect.change(function() {

        $region.text($('#region').val());

        validateRule(page, $pn, showErrTip); //验证
    });

    // 点击发送验证码
    $sendCaptcha.click(function() {
        var t,
            url;

        if ($(this).hasClass('disable')) {
            return;
        }

        timeResidue = 60;

        $('#msg-tip').removeClass('hide');

        $sendCaptcha.addClass('disable').attr('disabled', 'disabled');

        t = setInterval(function() {
            if (timeResidue <= 0) {
                $sendCaptcha.removeClass('disable').removeAttr('disabled').val('获取短信验证码');
                clearInterval(t);
                return;
            }
            $sendCaptcha.val(timeResidue-- + '秒可重新发送');
        }, 1000);

        if (page === 'reg') {
            url = '/passport/register/sendBindMsg';
        } else if (page === 'third') {
            url = '/passport/autouserinfo/sendBindMsg';
        }

        //todo ajax 发送验证码
        $.ajax({
            type: 'POST',
            url: url,
            data: {
                area: $region.text().split('+')[1],
                mobile: $pn.val(),
                verifyCode: $ca.val()
            }
        });
    });

    // 防止粘贴密码
    if ($('.success-box').length <= 0) {
        $pwd[0].onpaste = function() {
            return false;
        };
    }

    //ajax表单提交
    $registerBtn.click(function() {
        var url;

        if (page === 'reg') {
            url = '/passport/register/mobileregister';
        } else if (page === 'third') {
            url = '/passport/autouserinfo/bindMobile';
        }

        if ($(this).hasClass('disable')) {
            return;
        } else {

            //ajax提交
            $.ajax({
                type: 'POST',
                url: url,
                data: {
                    area: $region.text().split('+')[1],
                    mobile: $pn.val(),
                    verifyCode: $ca.val(),
                    code: $mc.val(),
                    password: $pwd.val()
                }
            }).then(function(data) {

                var time = 0,
                    t,
                    refer;

                if (data.code === 200) {

                    refer = data.data.href;

                    t = setTimeout(function() {
                        time++;
                    }, 1000);

                    $.ajax({
                        type: 'GET',
                        url: data.data.session
                    }).then(function(data) {

                        if (data.code === 200 && t < 3) {
                            clearInterval(t);
                            location.href = refer;
                        }
                    });

                    if (t >= 3) {
                        clearInterval(t);
                        location.href = refer;
                    }
                } else {

                    //todo
                    console.log('网络超时~');
                }

            });
        }
    });

    $('.change-captcha').click(function() {
        refreshPic();
    });

    //注册成功页面5秒后跳转
    if ($('.success-box').length > 0) {
        clearT = setInterval(function() {

            if (countDown === 0) {

                window.location.href = $successBtn.attr('data-url');

                clearInterval(clearT);
            }
            $countDown.text(countDown--);
        }, 1000);
    }
};
});
define("js/passport/mail-phone-regx", [], function(require, exports, module){
/**
 * 国家区号Map手机号码以及邮箱验证正则
 * @author: xuqi<qi.xu@yoho.cn>
 * @date: 2015/12/11
 */

var countryPhoneRegx = {
    '+86': /^1[35847]{1}[0-9]{9}$/,
    '+852': /^[965]{1}[0-9]{7}$/,
    '+853': /^[0-9]{8}$/,
    '+886': /^[0-9]{10}$/,
    '+65': /^[98]{1}[0-9]{7}$/,
    '+60': /^1[1234679]{1}[0-9]{8}$/,
    '+1': /^[0-9]{10}$/,
    '+82': /^01[0-9]{9}$/,
    '+44': /^7[789]{1}[0-9]{8}$/,
    '+81': /^0[9|8|7][0-9]{9}$/,
    '+61': /^[0-9]{11}$/
};

var emailRegx = /^[.\-_a-zA-Z0-9]+@[\-_a-zA-Z0-9]+\.[a-zA-Z0-9]/;

var pwdValidateRegx = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/;

exports.phoneRegx = countryPhoneRegx;

exports.emailRegx = emailRegx;

exports.pwdValidateRegx = pwdValidateRegx;
});
define("js/passport/pwd-strength", [], function(require, exports, module){
/*
 * 计算密码复杂度
 */

function gettype(str, i) {
    if (str.charCodeAt(i) >= 48 && str.charCodeAt(i) <= 57) {
        return 1;
    } else if (str.charCodeAt(i) >= 97 && str.charCodeAt(i) <= 122) {
        return 2;
    } else if (str.charCodeAt(i) >= 65 && str.charCodeAt(i) <= 90) {
        return 3;
    }

    return 4;
}

function isregular(cur, pre, type) {
    var curCode = cur.charCodeAt(0);
    var preCode = pre.charCodeAt(0);

    if (curCode - preCode === 0) {
        return true;
    }

    if (type !== 4 && (curCode - preCode === 1 || curCode - preCode === -1)) {
        return true;
    }

    return false;
}

function getcomplex(curType, preType) {
    if (preType === 0 || curType === preType) {
        return 0;
    } else if (curType === 4 || preType === 4) {
        return 2;
    } else {
        return 1;
    }
}

function computeComplex(password) {
    var complex = 0,
        length = password.length,
        pre = '',
        preType = 0,
        i = 0,
        cur,
        curType;


    for (i = 0; i < length; i++) {
        cur = password.charAt(i);
        curType = gettype(password, i);

        if (preType !== curType || !isregular(cur, pre, curType)) {
            complex += curType + getcomplex(curType, preType);
        }

        pre = cur;
        preType = curType;
    }

    return complex;
}

module.exports = computeComplex;
});
define("js/passport/back", ["jquery","jquery.placeholder"], function(require, exports, module){
/**
 * 找回密码
 * @author: xuqi<qi.xu@yoho.cn>
 * @date: 2015/12/14
 */

var $ = require("jquery"),
    regx = require("js/passport/mail-phone-regx"),
    emailReg = regx.emailRegx,
    phoneRegx = regx.phoneRegx;

var emailAc = require("js/passport/ac-email"); //邮箱自动完成

var $cr = $('#country-code-hide'),
    $phoneNum = $('#phone-num'),
    $ca = $('#captcha'),
    $ccList = $('#country-code-list'),
    $cc = $('#country-code'),
    $btn = $('#find-btn'),
    $accErr = $('#account-err'),
    $caErr = $('#captcha-err'),
    caCount = 4, //验证码位数
    hasPh = false,
    hasCa = false;


require("jquery.placeholder");

function imgcode() {
    var time = new Date(),
        $captchaImg = $('#captcha-img'),
        captchaImgSrc = $captchaImg.attr('src').split('?')[0];

    $('#captcha-img').attr('src', captchaImgSrc + '?t=' + time.getTime());
}

function enableBtn() {
    if (hasPh && hasCa) {
        $btn.removeClass('disable').prop('disabled', false);
    } else {
        $btn.addClass('disable').prop('disabled', true);
    }
}

function authcode() {
    if (!hasPh || !hasCa) {
        enableBtn();
        return;
    }

    $.ajax({
        type: 'POST',
        url: '/passport/back/authcode',
        data: {
            verifyCode: $.trim($ca.val()),
            phoneNum: $phoneNum.val(),
            area: $cr.val()
        }

    }).then(function(data) {
        if (data.code === 200) {
            hasCa = true;
        } else if (data.code === 402) {
            hasPh = false;
            hasCa = true;
            $accErr.removeClass('hide').find('em').text('该账号不存在');
            $phoneNum.addClass('error');
        } else if (data.code === 400) {
            hasCa = false;
            imgcode();
        }
        enableBtn();
    });
}

function vaPn(v) {
    var pass = true,
        errTxt = '';

    v = $.trim(v);
    if (v !== '') {
        if (/^[0-9]+$/.test(v)) {
            if (phoneRegx[$cr.val()].test(v)) {
                pass = true;
            } else {
                errTxt = '手机号码格式不正确, 请重新输入';
                pass = false;
            }
        } else {
            if (emailReg.test(v)) {
                pass = true;
            } else {
                errTxt = '邮箱格式不正确, 请重新输入';
                pass = false;
            }
        }
    } else {
        errTxt = '账户名不能为空';
        pass = false;
    }
    hasPh = pass;
    authcode();

    return {
        pass: pass,
        errTxt: errTxt
    };
}

function vaCa() {
    var v = $.trim($ca.val());

    if (v === '' || v.length < caCount) {
        hasCa = false;
        enableBtn();
        return;
    }

    hasCa = true;

    authcode();
}

emailAc($phoneNum, function() {
        var pnVa = vaPn($phoneNum.val());

        if (pnVa.pass) {
            $accErr.addClass('hide');
            $phoneNum.removeClass('error');
        } else {
            $accErr.removeClass('hide').find('em').text(pnVa.errTxt);
            $phoneNum.addClass('error');
        }
    }
);

$ca.attr('maxlength', caCount);

//IE8 placeholder
$('input').placeholder();

$('#change-captcha, #captcha-img').on('click', function() {
    imgcode();
});

$cc.on('click', function(e) {
    e.stopPropagation();
    if ($ccList.css('style') === 'block') {
        $ccList.slideUp('fast');
    } else {
        $ccList.slideDown('fast');
    }
});

$ccList.delegate('li', 'click', function(e) {
    var $cur = $(this),
        code = $cur.data('cc'),
        pnVa;

    e.stopPropagation();
    $cr.val(code);
    $cc.find('em').html($cur.text());

    //切换后验证手机号码
    if ($.trim($phoneNum.val()) !== '') {
        pnVa = vaPn($phoneNum.val());
        enableBtn();
        if (hasPh) {
            $accErr.addClass('hide');
            $phoneNum.removeClass('error');
        } else {
            $accErr.removeClass('hide').text(pnVa.errTxt);
            $phoneNum.addClass('error');
        }
    }
    $ccList.slideUp('fast');
});

$(document).click(function() {
    if ($ccList.css('display') === 'block') {
        $ccList.slideUp();
    }
});

$phoneNum.keyup(function() {
    vaPn($.trim($(this).val()));
}).focus(function() {
    $(this).removeClass('error');

    //focus隐藏错误提示
    $accErr.addClass('hide');
});

//验证码在鼠标移开后验证, keyup时不再验证
$ca.blur(function() {
    var errTxt = $.trim($ca.val()) === '' ? '验证码不能为空' : '验证码不正确';

    if (hasCa) {
        $caErr.addClass('hide');
        $ca.removeClass('error');
    } else {
        $caErr.removeClass('hide').find('em').text(errTxt);
        $ca.addClass('error');

        //验证码错误则刷新验证码
        if ($ca.val() < caCount) {

            //防止重复刷新验证码
            imgcode();
        }
    }
}).focus(function() {
    $(this).removeClass('error');

    //focus隐藏错误提示
    $caErr.addClass('hide');
}).keyup(function() {
    vaCa();
});

$('#find-btn').click(function(e) {

    if (/^[0-9]+$/.test($.trim($phoneNum.val()))) {
        $('#find-form').attr('action', '/passport/back/mobile');
    }
    if ($(this).hasClass('disable')) {
        return;
    }
    if (!hasCa || !hasPh) {
        e.preventDefault();
        return true;
    }
});
});
define("js/passport/ac-email", ["jquery"], function(require, exports, module){
/**
 * 邮箱自动补全
 * @author:xuqi<qi.xu@yoho.cn>
 * @date: 2016/2/22
 */
var $ = require("jquery");

var mailPostfix = {
    num: ['qq.com', '163.com', '126.com', 'sina.com', 'gmail.com', 'sohu.com', 'hotmail.com', '139.com', '189.com'],
    other: ['gmail.com', 'qq.com', '163.com', '126.com', 'sina.com', 'sohu.com', 'hotmail.com', '139.com', '189.com']
};

var emailAcTime;

/**
 * @param $input 需要自动完成的$对象
 * @param cb 鼠标移开/点击自动完成项后需要执行的操作(验证等)
 */
module.exports = function($input, cb) {
    var ulHtml = '<ul id="email-autocomplete" class="email-autocomplete hide"></ul>';

    var $emailAutoComplete;

    $input.parent().append(ulHtml);

    $emailAutoComplete = $('#email-autocomplete');

    $input.on('keyup', function() {
        var account = $.trim($(this).val()),
            html = '',
            accountMatch,
            matchStr,
            postfix,
            i;

        //输入@时自动补全邮箱后缀
        //此处>0非错误,用于避免输入的第一个字符为@被识别为邮箱
        if (account.indexOf('@') > 0) {
            accountMatch = account.match(/^[0-9]+@(.*)/);
            if (accountMatch) {

                //数字邮箱补全
                postfix = mailPostfix.num;
                matchStr = accountMatch[1];
            } else {
                postfix = mailPostfix.other;
                matchStr = account.match(/@(.*)/)[1];
            }

            for (i = 0; i < postfix.length; i++) {
                if (postfix[i].indexOf(matchStr) > -1) {
                    html += '<li>' + account.slice(0, account.indexOf('@')) + '@' + postfix[i] + '</li>';
                }
            }

            if (html !== '' && /.com$/.test(account) === false) {
                $emailAutoComplete.html(html).removeClass('hide');
            } else {

                //隐藏autocomplete
                $emailAutoComplete.html('').addClass('hide');
            }
        }
    }).on('blur', function() {
        emailAcTime = setTimeout(function() {

            //未点击自动完成项
            $emailAutoComplete.addClass('hide');

            cb && cb();
        }, 200);
    });

    //邮箱自动完成列表项点击
    $emailAutoComplete.on('click', 'li', function() {
        clearTimeout(emailAcTime); //清空默认关闭

        //点击自动完成项后进行验证
        $input.val($(this).text()).focus();

        $emailAutoComplete.addClass('hide');

        cb && cb();
    });
};
});
define("js/passport/login", ["jquery","jquery.placeholder"], function(require, exports, module){
/**
 * 登录
 * @author: xuqi<qi.xu@yoho.cn>
 * @date: 2015/12/11
 */
var $ = require("jquery");

var $account = $('#account'),
    $password = $('#password'),
    $captcha = $('#captcha');

var $accountTip = $account.siblings('.err-tip'),
    $passwordTip = $password.siblings('.err-tip'),
    $captchaTip = $captcha.siblings('.err-tip'),
    $capsLock = $('#caps-lock');

var $countryCodeHide = $('#country-code-hide'),
    $countryCodeEm = $('#country-code > em'),
    $countryList = $('#country-list');

var $emailAutoComplete = $('#email-autocomplete');

var mailPhoneRegx = require("js/passport/mail-phone-regx");
var mailAc = require("js/passport/ac-email"); //邮箱自动完成

var $remember = $('.remember-me');

var captchaUrl = '/passport/images?t='; // /passport/images?t=1454464125

var $captchaWrap = $('.captcha-wrap'),
    $captcha = $captchaWrap.find('#captcha'),
    $captchaImg = $captchaWrap.find('#captcha-img'),
    $captchaTip = $captchaWrap.find('.err-tip');

//checkbox status unicode
var checkbox = {
    checked: '&#xe612;',
    unchecked: '&#xe613;'
};

var authing = false;

var emailAcTime;

require("jquery.placeholder");

//验证账户名
function validateAccount() {
    var pass = false,
        account = $.trim($account.val()),
        err;

    if (account !== '') {
        if (/^[0-9]+$/.test(account)) {

            //如果是纯数字,则作为手机号码处理
            if (mailPhoneRegx.phoneRegx[$countryCodeHide.val()].test(account)) {
                pass = true;
            } else {
                pass = false;
                err = '手机号码不正确,请重新输入';
            }
        } else {
            if (mailPhoneRegx.emailRegx.test(account)) {
                pass = true;
            } else {
                pass = false;
                err = '邮箱格式不正确,请重新输入';
            }
        }
    } else {
        err = '请输入账户名';
    }

    if (pass) {
        $accountTip.addClass('hide');
        $account.removeClass('error');
    } else {
        $accountTip.removeClass('hide').children('em').text(err);
        $account.addClass('error');
    }
    return pass;
}

//验证密码
function validatePassword() {
    var pass = false,
        password = $.trim($password.val()),
        err;

    if (password !== '') {
        if (password.length < 6) {
            err = '请输入长度为6-20字符的密码';
        } else {
            pass = true;
        }
    } else {
        err = '请输入密码';
    }

    if (pass) {
        $passwordTip.addClass('hide');
        $password.removeClass('error');
    } else {
        $passwordTip.removeClass('hide').children('em').text(err);
        $password.addClass('error');
    }
    return pass;
}

//验证验证码
function validateCaptcha() {
    var pass = false,
        captcha = $.trim($captcha.val()),
        err;

    // 验证码不可见的时候不验证
    if ($captchaWrap.is(':hidden')) {
        return true;
    }

    if (captcha !== '') {
        if (captcha.length !== 4) {
            err = '请输入长度为4字符的验证码';
        } else {
            pass = true;
        }
    } else {
        err = '请输入验证码';
    }

    if (pass) {
        $captchaTip.addClass('hide');
        $captcha.removeClass('error');
    } else {
        $captchaTip.removeClass('hide').children('em').text(err);
        $captcha.addClass('error');
    }
    return pass;
}

//验证
function validate() {
    var pass = true,
        account = $.trim($account.val()),
        password = $.trim($password.val());

    if (account !== '') {
        pass = validateAccount() && validatePassword() && validateCaptcha();
    } else {
        pass = false;
        $account.addClass('error');

        if (password === '') {

            //账户名和密码都为空的情况下点击登陆,只在账户输入框后显示错误提示
            $accountTip.addClass('both-error').removeClass('hide').children('em').text('请输入账户名和密码');
            $passwordTip.addClass('hide');
            $password.addClass('error');
        } else {
            $accountTip.removeClass('hide').children('em').text('请输入账户名');
        }
    }

    return pass;
}

//密码错误次数,超过三次显示验证码
function vaAccountErrTimes() {
    $captchaImg.attr('src', captchaUrl + $.now());
    $captcha.val('');
    $captchaWrap.removeClass('hide');
}

//登录
function login() {
    var pass = validate();

    if (pass && authing === false) {
        authing = true;

        $.ajax({
            url: '/passport/login/auth',
            type: 'POST',
            data: {
                areaCode: $countryCodeHide.val().replace('+', ''),
                account: $.trim($account.val()),
                password: $.trim($password.val()),
                captcha: $.trim($captcha.val()),
                isRemember: $remember.hasClass('checked') ? true : false
            },
            success: function(res) {
                if (res.code === 200) {
                    if (res.data) {

                        //防止data.data为undefined时下行语句执行出错而导致脚本不能走到complete去处理authing
                        location.href = res.data.session;
                    }
                } else {
                    if (res.data.errorType === 'captcha') {
                        $captchaTip.removeClass('hide').children('em').html(res.message);
                        $captcha.addClass('error').val('');
                    } else {
                        $passwordTip.removeClass('hide').children('em').html(res.message);
                        $password.addClass('error').val('');
                    }

                    //验证错误次数
                    if (res.data && res.data.needCaptcha) {
                        vaAccountErrTimes();
                    }
                }
            },
            complete: function() {
                authing = false;
            }
        });
    }
}

mailAc($account, function() {
        if (validateAccount()) {
            $.ajax({
                url: '/passport/login/account',
                type: 'GET',
                data: {
                    account: $.trim($account.val())
                }
            }).then(function(res) {
                if (res.data && res.data.needCaptcha) {
                    vaAccountErrTimes();
                }
            });
        }
    }
);

$('[placeholder]').placeholder();

//展开地区列表
$('#country-code').on('click', function() {
    if ($countryList.css('display') === 'none') {
        $countryList.slideDown();
    }
});

//选中地区列表项
$countryList.on('click', 'li', function() {
    var $this = $(this),
        cc = $this.data('cc');

    $countryCodeEm.html($this.html());

    $countryCodeHide.val(cc);

    $countryList.slideUp();
});

//点击其他区域,收起区域列表
$(document).on('click', function(e) {
    if ($(e.target).closest('#country-code').length > 0) {
        return;
    }

    if ($countryList.css('display') === 'block') {
        $countryList.slideUp();
    }
});

//密码
$password.on('blur', function() {
    validatePassword();

    if ($capsLock.hasClass('hide')) {
        return;
    }

    $capsLock.addClass('hide');
}).on('keypress', function(e) {
    var code = e.which;

    //CapsLock检测
    if (code >= 65 && code <= 90) {
        $capsLock.removeClass('hide');
        return;
    }
    $capsLock.addClass('hide');
});

// 验证码
$captcha.on('blur', function() {
    validateCaptcha();
});

//邮箱自动完成列表项点击
$emailAutoComplete.on('click', 'li', function() {
    clearTimeout(emailAcTime); //清空默认关闭

    $account.val($(this).text()).focus();

    $emailAutoComplete.addClass('hide');
});

//记住登录状态
$remember.on('click', function() {
    var $this = $(this);

    $this.toggleClass('checked');

    if ($this.hasClass('checked')) {
        $this.children('i').html(checkbox.checked);
    } else {
        $this.children('i').html(checkbox.unchecked);
    }
});

//focus到输入框则隐藏错误提示和样式
$('.va').on('focus', function() {
    var $this = $(this);

    $this.removeClass('error');

    $this.siblings('.err-tip').addClass('hide');
});

// 验证码刷新
$captchaWrap.on('click', '.change-captcha, .captcha-img', function() {
    $captchaImg.attr('src', captchaUrl + $.now());
});

//登录
$('#login-btn').on('click', login);

//Enter登录
$('input.va').on('keypress', function(e) {
    if (e.which === 13) {
        login();
    }
});

// 初始:只带账户名的页面,密码输入获得焦点
if (($account.val() !== '' || $account.val() === $account.attr('placeholder')) &&
    $password.val() === '') {
    $password.focus();
}
});
define("js/passport/reset", ["jquery","jquery.placeholder"], function(require, exports, module){
/**
 * 找回密码
 * @author: xuqi<qi.xu@yoho.cn>
 * @date: 2015/12/14
 */

var $ = require("jquery");

var $pwd = $('#pwd'),
    $repwd = $('#re-input'),
    $next = $('#reset-pwd-btn'),
    $pwdErr = $('#pwd-err'),
    $repwdErr = $('#repwd-err'),
    $pwdTips = $('#pwd-tips');

var hasNoErrPw = false;

var $pwdIntensity = $('.pwd-intensity'),
    $pwdParent = $pwdIntensity.closest('.pwd-intensity-container'),
    $pwdTip1 = $('#pwd-tip1');

var pwdRegx = require("js/passport/mail-phone-regx").pwdValidateRegx;

require("jquery.placeholder");


/*
 * 计算密码复杂度
 */

function gettype(str, i) {
    if (str.charCodeAt(i) >= 48 && str.charCodeAt(i) <= 57) {
        return 1;
    } else if (str.charCodeAt(i) >= 97 && str.charCodeAt(i) <= 122) {
        return 2;
    } else if (str.charCodeAt(i) >= 65 && str.charCodeAt(i) <= 90) {
        return 3;
    }

    return 4;
}

function isregular(cur, pre, type) {
    var curCode = cur.charCodeAt(0);
    var preCode = pre.charCodeAt(0);

    if (curCode - preCode === 0) {
        return true;
    }

    if (type !== 4 && (curCode - preCode === 1 || curCode - preCode === -1)) {
        return true;
    }

    return false;
}

function getcomplex(curType, preType) {
    if (preType === 0 || curType === preType) {
        return 0;
    } else if (curType === 4 || preType === 4) {
        return 2;
    } else {
        return 1;
    }
}

function computeComplex(password) {
    var complex = 0,
        length = password.length,
        pre = '',
        preType = 0,
        i = 0,
        cur,
        curType;


    for (i = 0; i < length; i++) {
        cur = password.charAt(i);
        curType = gettype(password, i);

        if (preType !== curType || !isregular(cur, pre, curType)) {
            complex += curType + getcomplex(curType, preType);
        }

        pre = cur;
        preType = curType;
    }

    return complex;
}

function pwdKeyupEvt() {
    var pwd = $pwd.val(),
        pwdStrength = computeComplex(pwd),
        level = 0;

    //TODO:自定义密码强度规则,需要修正
    if (pwdStrength === 0) {
        level = 0;
    } else if (pwdStrength <= 10) {
        level = 1;
    } else if (pwdStrength <= 20) {
        level = 2;
    } else {
        level = 3;
    }
    switch (level) {
        case 0:
            $pwdParent.removeClass('red yellow green');
            $pwdIntensity.removeClass('color');
            break;
        case 1:
            $pwdParent.addClass('red').removeClass('yellow green');
            $pwdIntensity.filter('.low').addClass('color');
            $pwdIntensity.filter('.mid,.high').removeClass('color');
            break;
        case 2:
            $pwdParent.addClass('yellow').removeClass('red green');
            $pwdIntensity.filter('.low,.mid').addClass('color');
            $pwdIntensity.filter('.high').removeClass('color');
            break;
        case 3:
            $pwdParent.addClass('green').removeClass('yellow red');
            $pwdIntensity.addClass('color');
            break;
    }

    //提示框
    if (pwd === '') {
        $pwdTip1.removeClass('red yes no').addClass('default');
    } else if (pwd.length < 6 || pwd.length > 20) {
        $pwdTip1.removeClass('default yes').addClass('no red');
    } else {
        $pwdTip1.removeClass('default no red').addClass('yes');
    }

    if (pwdRegx.test(pwd)) {
        hasNoErrPw = true;
    } else {
        hasNoErrPw = false;
    }
}

//IE8 placeholder
$('input').placeholder();

$('.va').keyup(function() {
    var pass = true;

    if ($(this).hasClass('pwd')) {
        pwdKeyupEvt();
    } else {
        if ($(this).val() === '') {
            pass = false;
        }
    }
    if (pass && hasNoErrPw && $pwd.val() === $repwd.val()) {
        pass = true;
    } else {
        pass = false;
    }
    if (pass) {
        $next.removeClass('disable').prop('disabled', false);
    } else {
        $next.addClass('disable').prop('disabled', true);
    }
}).blur(function() {
    var $this = $(this),
        v = $this.val();

    if ($this.hasClass('pwd')) {
        if (v === '') {
            $this.addClass('error');
            $pwdErr.removeClass('hide').find('em').text('请输入密码');
        } else if (v.length < 6 || v.length > 20) {
            $this.addClass('error');
            $pwdErr.removeClass('hide').find('em').text('密码只支持6-20位');
        } else if (!pwdRegx.test(v)) {
            $this.addClass('error');
            $pwdErr.removeClass('hide').find('em').text('密码须字母和数字组合');
        } else {
            $pwdErr.addClass('hide');
            if ($repwd.val() !== '') {
                if (v !== $repwd.val()) {
                    $repwd.addClass('error');
                    $repwdErr.removeClass('hide').find('em').text('两次密码输入不一致,请重新输入');
                } else {
                    $repwd.removeClass('error');
                    $repwdErr.addClass('hide');
                }
            }
        }
    } else {
        if (v === '') {
            $this.addClass('error');
            $repwdErr.removeClass('hide').find('em').text('请输入密码确认');
        } else {
            if ($pwd.val() !== '' && v !== $pwd.val()) {
                $this.addClass('error');
                $repwdErr.removeClass('hide').find('em').text('两次密码输入不一致,请重新输入');
            } else {
                $this.removeClass('error');
                $repwdErr.addClass('hide');
            }
        }
    }
}).focus(function() {
    $(this).removeClass('error');

    //focus后错误提示隐藏
    if ($(this).hasClass('pwd')) {
        $pwdErr.addClass('hide');
    } else {
        $repwdErr.addClass('hide');
    }
});

$pwd.focus(function() {
    $pwdErr.addClass('hide');
    $pwdTips.removeClass('hide');
}).blur(function() {
    $pwdTips.addClass('hide');
});

$('#pwd, #repwd').keydown(function(e) {
    var code = e.keyCode || e.which;

    //空格输入过滤
    if (code === 32) {
        e.preventDefault();
        return;
    }
});

});
define("js/passport/vertification", ["jquery"], function(require, exports, module){
/**
 * 验证手机
 * @author: xuqi<qi.xu@yoho.cn>
 * @date: 2015/12/14
 */

var $ = require("jquery");

var $sc = $('#send-captcha'),
    $msgTip = $('#captcha-tip'),
    $errTip = $('#err-tip'),
    $next = $('#next-step'),
    seconds,
    itime;

$sc.click(function() {
    $.post('/passport/back/sendbackmobile', {
        mobile: $('#mobile').val(),
        area: $('#area').val(),
        verifyCode: $('#captchaPic').val()
    }, function(jsonData) {
        if (jsonData.code === 200) {
            $errTip.hide();
            if ($(this).hasClass('disable')) {
                return;
            }
            seconds = 60;

            //$sc.addClass('disable').prop('disabled', true);
            $sc.addClass('disable').attr('disabled', true);
            $msgTip.removeClass('hide');

            $sc.val(seconds-- + '秒后可重新操作');
            itime = setInterval(function() {
                if (seconds === 0) {
                    clearInterval(itime);

                    //$sc.val('发送验证码').removeClass('disable').prop('disabled', false);
                    $sc.val('发送验证码').removeClass('disable').removeAttr('disabled');
                } else {
                    $sc.val(seconds-- + '秒后可重新操作');
                }
            }, 1000);
        } else {
            $(this).addClass('error');
            $errTip.removeClass('hide').text('发送失败');
        }
    });
});

if ($(this).hasClass('disable')) {
    return;
}
seconds = 60;

//$sc.addClass('disable').prop('disabled', true);
$sc.addClass('disable').attr('disabled', true);
$msgTip.removeClass('hide');

$sc.val(seconds-- + '秒后可重新操作');
itime = setInterval(function() {
    if (seconds === 0) {
        clearInterval(itime);

        //$sc.val('发送验证码').removeClass('disable').prop('disabled', false);
        $sc.val('发送验证码').removeClass('disable').removeAttr('disabled');
    } else {
        $sc.val(seconds-- + '秒后可重新操作');
    }
}, 1000);


$('#captcha').keyup(function() {
    var v = $.trim($(this).val()),
        that = this;

    if (v.length === 4) {
        $.ajax({
            type: 'POST',
            url: '/passport/back/backmobile',
            dataType: 'json',
            data: {
                code: $('#captcha').val(),
                verifyCode: $("#captchaPic").val(),
                area: $('#area').val(),
                mobile: $('#mobile').val()
            },
            success: function(res) {
                if (res.code === 200) {

                    //添加验证码正确验证
                    $next.removeClass('disable').attr('href', res.data);
                    $errTip.addClass('hide');
                    $(that).removeClass('error');
                } else {
                    $next.addClass('disable');
                    $errTip.removeClass('hide').find('em').text('验证码输入错误');
                    $(that).addClass('error');
                }
            }
        });
    }
}).blur(function() {
    var v = $.trim($(this).val());

    if (v === '') {

        //添加验证码正确验证
        $(this).addClass('error');
        $errTip.removeClass('hide').text('请输入验证码');
    }
}).focus(function() {
    $(this).removeClass('error');
});
});
define("js/passport/thirdlogin", ["jquery"], function(require, exports, module){
/**
 * 第三方登录首页
 * @author: wq
 * @date: 2016/1/21
 */
var $ = require("jquery");
var phoneRegx = require("js/passport/mail-phone-regx").phoneRegx;

var nopermissionoption = $('#nopermissionmessage').html(); //倒计时dom
var sendmessagehtml = $('.validatewrapper').html(); //发送短信dom
var second = +$('.second').text(); //倒计时秒数
var dovalidate = false; //校验验证码标识
var validatecode = false; //验证码是否通过
var choosedpic = 'http://cdn.yoho.cn/yohobuy/assets/img/passport/choosed.png';//已选择图片

var $wrapper = $('.bindwrapper'),
    $phoneTip = $wrapper.find('.phone-err-tip'),
    $nextBtn = $wrapper.find('.yohobindbtn');

/**
 * 选择协议
 * @return {[type]} [description]
 */
function chooseProtocol() {
    $('.choosetag').on('change', function() {
        var btnColor = '#f02200';

        if ($(this).attr('checked') === 'checked') {
            $('.choosewrapper').css({
                'background-image': 'url("' + choosedpic + '")'
            });
        } else {
            $('.choosewrapper').css({
                'background-image': 'none'
            });
            btnColor = '#CCCCCC';
        }
        $nextBtn.css({
            'background-color': btnColor
        });
    });
}
/**
 * 判断是否同意协议
 * @return {[type]} [description]
 */
function isagree() {
    return $('.choosetag').attr('checked') === 'checked';
}
/**
 * 选择区域的开关
 * @return {[type]} [description]
 */
function chooseAreaToogle() {
    $('.optionshow').on('click', function() {
        $('.optionslist').toggleClass('hide');
    });
}

/**
 * 验证码校验
 * @return {[type]} [description]
 */
function codeValidate() {
    var validatenum = '';

    $(document).on('keyup', '#validatenum', function() {
        validatenum = $(this).val();
        if (validatenum.length === 4) {
            if (!dovalidate) {
                dovalidate = true;
                $.ajax({
                    type: 'POST',
                    url: '/passport/autouserinfo/checkBindMsg',
                    data: {
                        code: validatenum,
                        mobile: $('#mobile').val(),
                        area: $('#areacode').val()
                    }
                }).then(function(data) {
                    dovalidate = false;
                    if (data.code === 200) {
                        validatecode = true;
                    } else {
                        alert(data.message);
                    }
                });
            }
        }
    });

    $('#validatenum').focus(function() {
        $(this).removeAttr('placeholder');
    }).blur(function() {
        $(this).attr('placeholder', '验证码');
    });
}

/**
 * 选择区域
 * @return {[type]} [description]
 */
function chooseArea() {
    $('.optionitem').on('click', function() {
        var $option = $(this);
        var areanum = $option.attr('areanum');
        var areaname = $option.text();

        $('#areaname').text(areaname);
        $('#areanum').text(areanum);
        $('#areacode').val(areanum);
        $('.optionslist').addClass('hide');
    });
}
/**
 * 取消选择区域
 * @return {[type]} [description]
 */
function cancelChooseArea() {
    $(document).on('click', 'body', function(e) {
        var $target = $(e.target);

        if ($target.hasClass('yohoselectarea') ||
            $target.hasClass('areaname') ||
            $target.hasClass('righttag') ||
            $target.hasClass('optionslist') ||
            $target.hasClass('optionitem')) {
            return;
        } else {
            $('.optionslist').addClass('hide');
        }
    });
}
/**
 * 去掉区域号的加号
 * @return {[type]} [description]
 */
function fixAreaNum() {
    var $opitem = '';
    var itemarecode = '';

    $('.optionitem').each(function() {
        $opitem = $(this);
        itemarecode = $opitem.attr('areanum').replace(/\+/g, '');
        $opitem.attr('areanum', itemarecode);
    });
}

/**
 * 关闭蒙层
 * @return {[type]} [description]
 */
function closeMask() {
    var $target;

    $(document).on('click', '#alreayregist', function(e) {
        $target = $(e.target);
        if ($target.hasClass('mask') || $target.hasClass('backdrop')) {
            $('#alreayregist').hide();
            $('.backdrop').hide();
        }
    });
    $(document).on('click', '#bindconfirm', function(e) {
        $target = $(e.target);
        if ($target.hasClass('mask') || $target.hasClass('backdrop')) {
            $('#bindconfirm').hide();
            $('.backdrop').hide();
        }
    });
}
/**
 * 绑定其他手机号
 * @return {[type]} [description]
 */
function yohoBindBtn() {
    $(document).on('click', '#yohobindbtn', function(e) {
        $('.phonenum').val('');
        $('#bindconfirm').hide();
        $('.backdrop').hide();
    });
    $(document).on('click', '#yohobindbtn2', function(e) {
        $('.phonenum').val('');
        $('#alreayregist').hide();
        $('.backdrop').hide();
    });
}
/**
 * 发送短信的时间变换动画
 * @return {[type]} [description]
 */
function changeSecond() {
    second -= 1;
    if (second < 0) {
        second = 60;
        $('.validatewrapper').html(sendmessagehtml);
        return;
    } else {
        $('.second').text(second);
        window.setTimeout(changeSecond, 1000);
    }

}
/**
 * 时间循环
 * @param  {[type]} phonenum [description]
 * @return {[type]}          [description]
 */
function circleTime(phonenum) {
    $('.validatewrapper').html(nopermissionoption);
    window.setTimeout(changeSecond, 1000);
}
/**
 * 发送短信
 * @return {[type]} [description]
 */
function sendMessageValidate() {
    $(document).on('click', '#sendmessage', function() {
        if ($('#sendmessage').attr('disabled') === 'disabled') {
            return;
        }
        circleTime($('#mobile').val());
        $.ajax({
            type: 'POST',
            url: '/passport/autouserinfo/sendBindMsg',
            data: {
                mobile: $('#mobile').val(),
                area: $('#areacode').val()
            }
        }).then(function(data) {
            if (data.code !== 200) {
                alert(data.message);
            }
        });

    });
}

/**
 * 最终提交表单
 */
function actionSubmit() {
    var mobile = '';
    var area = '';

    area = $('#areacode').val();
    mobile = $('#mobile').val();
    $.ajax({
        type: 'POST',
        url: '/passport/autouserinfo/bindMobile',
        data: {
            area: area,
            openId: $('#openId').val(),
            sourceType: $('#sourceType').val(),
            mobile: mobile,
            code: $('#validatenum').val()
        }
    }).then(function(data) {
        if (data.code === 200) {
            if (data.data && data.data.refer) {
                window.location.href = data.data.refer;
            } else {
                window.location.href = '/passport/thirdlogin/bindsuccess';
            }
        } else {
            alert(data.message);
        }
    });
}

/**
 * 确认去绑定
 * @return {[type]} [description]
 */
function goToBindPhone() {
    $(document).on('click', '#gotobindphone', function() {
        if (validatecode === true) {
            $('#inarea').val($('#areacode').val());
            $('#inmobile').val($('#mobile').val());
            actionSubmit();
        } else {
            alert('请输入正确验证码');
        }
    });
}
/**
 * 点击下一步
 * @return {[type]} [description]
 */
function nextStep() {
    var openId = '';
    var sourceType = '';
    var mobile = '';
    var areaCode = '';
    var username = '';
    var headImg = '';

    $('#bindfirststep').on('click', function(e) {
        var regx;

        e.preventDefault();
        mobile = $('.phonenum').val();
        areaCode = $('#areanum').text();
        regx = phoneRegx['+' + areaCode];

        if (!isagree()) {
            return;
        }
        if (mobile === '' || !regx || !regx.test(mobile)) {
            $phoneTip.find('em').text('手机格式错误');
            $phoneTip.removeClass('hide');
            return;
        }
        openId = $('#openId').val() || '29803EC6D4AAC3AAB8ABDB6AE829D579';
        sourceType = $('#sourceType').val() || 'qq';
        $.ajax({
            type: 'post',
            url: '/passport/autouserinfo/bindCheck',
            data: {
                mobile: mobile,
                area: areaCode,
                openId: openId,
                sourceType: sourceType
            },
            dataType: 'json',
            success: function(data) {
                var winHeight = $(window).height();

                if (data.code === 200) {
                    $('#bindmobileform').attr('action', '/passport/thirdlogin/noregist');
                    $('#bindmobileform').submit();
                }
                if (data.code === 400 || data.code === 402) {
                    $phoneTip.find('em').text('手机格式错误');
                    $phoneTip.removeClass('hide');
                }
                if (data.code === 506) {
                    username = data.data.user.username;
                    headImg = data.data.user.headImg;
                    $('#registphone').text(mobile);
                    $('#username').text(username);
                    if (headImg === '') {
                        $('#userphoto').attr('src', 'http://img10.static.yhbimg.com/headimg/2013/11/28/09/' +
                            '01cae078abe5fe320c88cdf4c220212688.gif?imageView/2/w/100/h/100');
                    } else {
                        $('#userphoto').attr('src', headImg);
                    }
                    $('#logindirectly2').attr('href', data.data.user.bindLogin);
                    $('.backdrop').show();
                    $('#sendmessage').click();
                    $('#alreayregist .mask').css({
                        'padding-top': winHeight > 440 ? winHeight / 2 : 217
                    });
                    $('#alreayregist').show();
                }
                if (data.code === 505) {
                    username = data.data.user.username;
                    headImg = data.data.user.headImg;
                    $('#registphonetwo').text(mobile);
                    $('#username1').text(username);
                    if (headImg === '') {
                        $('#userphoto1').attr('src', 'http://img10.static.yhbimg.com/headimg/2013/11/28/09/' +
                            '01cae078abe5fe320c88cdf4c220212688.gif?imageView/2/w/100/h/100');
                    } else {
                        $('#userphoto1').attr('src', headImg);
                    }
                    $('#logindirectly').attr('href', data.data.user.bindLogin);
                    $('.backdrop').show();
                    $('#bindconfirm .mask').css({
                        'padding-top': winHeight > 440 ? winHeight / 2 : 217
                    });
                    $('#bindconfirm').show();
                }
            }
        });
    });
}

function init() {
    fixAreaNum(); //去掉所有区域的+
    sendMessageValidate(); //有交互的发送短信
    chooseProtocol(); //选择协议
    chooseArea(); //选择区域
    chooseAreaToogle(); //选择区域展示或关闭
    cancelChooseArea(); //取消选择区域
    nextStep();  //下一步
    closeMask(); //关闭蒙层
    yohoBindBtn(); //绑定其他手机号点击
    goToBindPhone(); //绑定手机
    codeValidate(); //验证码校验
}
init();
});
define("js/passport/third-pwd", ["jquery"], function(require, exports, module){
/**
 * 第三方绑定完善个人信息
 * @author: wq
 * @date: 2016/1/27
 */
var $ = require("jquery");
var dovalidate = false; //校验验证码的标识
var isvalidatecode = false; //是否验证成功的标识
var isvalidatepwd = false; //密码验证是否通过的标识
var second = ''; //倒计时时间
var nopermissionoption = ''; //倒计时的dom
var sendmessagehtml = ''; //发送短信的dom
var submitStatus = false; //信息提交状态

var $wrapper = $('.bindwrapper'),
    $codeTip = $wrapper.find('.code-err-tip'),
    $pwdTip = $wrapper.find('.pwd-err-tip'),
    $pwdTip2 = $('#pwd-tip2'),
    $sendMsgBtn = $('#sendmessage');
var $pwd,
    $pwdParent,
    $pwdTip1,
    $pwdIntensity;

var pwdRegx = require("js/passport/mail-phone-regx").pwdValidateRegx;
var mobile = $('#mobile').val(),
    area = $('#area').val();

nopermissionoption = $('#nopermissionmessage').html();
sendmessagehtml = $('.validatewrapper').html();
second = +$('.second').text();


function gettype(str, i) {
    if (str.charCodeAt(i) >= 48 && str.charCodeAt(i) <= 57) {
        return 1;
    } else if (str.charCodeAt(i) >= 97 && str.charCodeAt(i) <= 122) {
        return 2;
    } else if (str.charCodeAt(i) >= 65 && str.charCodeAt(i) <= 90) {
        return 3;
    }

    return 4;
}

function isregular(cur, pre, type) {
    var curCode = cur.charCodeAt(0);
    var preCode = pre.charCodeAt(0);

    if (curCode - preCode === 0) {
        return true;
    }

    if (type !== 4 && (curCode - preCode === 1 || curCode - preCode === -1)) {
        return true;
    }

    return false;
}


function getcomplex(curType, preType) {
    if (preType === 0 || curType === preType) {
        return 0;
    } else if (curType === 4 || preType === 4) {
        return 2;
    } else {
        return 1;
    }
}


/**
 * @desc: 计算密码复杂度(from:http://www.oschina.net/code/snippet_127301_17269)
 * @author: xuqi(qi.xu@yoho.cn)
 * @date: 2015/5/6
 */
function computeComplex(password) {
    var complex = 0;
    var length = password.length;
    var pre = '';
    var preType = 0;
    var i = 0;
    var cur = '';
    var curType = '';

    for (i; i < length; i++) {
        cur = password.charAt(i);
        curType = gettype(password, i);
        if (preType !== curType || !isregular(cur, pre, curType)) {
            complex += curType + getcomplex(curType, preType);
        }
        pre = cur;
        preType = curType;
    }

    return complex;
}

function showErrTip($dom, info) {
    $dom.find('em').text(info);
    $dom.removeClass('hide');
}

function changeSecond() {
    second -= 1;
    if (second < 0) {
        second = 60;
        $('.validatewrapper').html(sendmessagehtml);
        return;
    } else {
        $('.second').text(second);
        window.setTimeout(changeSecond, 1000);
    }

}
/**
 * 启动倒计时
 * @return {[type]} [description]
 */
function circleTime() {
    $('.validatewrapper').html(nopermissionoption);
    window.setTimeout(changeSecond, 1000);
}

function sendMessageValidate() {
    $(document).on('click', '#sendmessage', function() {
        circleTime();
        $.ajax({
            type: 'POST',
            url: '/passport/autouserinfo/sendBindMsg',
            data: {
                mobile: mobile,
                area: area
            }
        }).then(function(data) {
            if (data.code !== 200) {
                alert(data.message);
            }
        });

    });
}



function codeValidate() {
    var validatenum = '';

    $(document).on('keyup', '#validatenum', function() {
        $('#err-info').hide();
        validatenum = $(this).val();
        if (validatenum.length === 4) {
            if (!dovalidate) {
                dovalidate = true;
                $.ajax({
                    type: 'POST',
                    url: '/passport/autouserinfo/checkBindMsg',
                    data: {
                        code: validatenum,
                        mobile: mobile,
                        area: area
                    }
                }).then(function(data) {
                    dovalidate = false;
                    if (data.code !== 200) {
                        $('#err-info').show();
                    } else {
                        isvalidatecode = true;
                    }
                });
            }
        }
    });
}

function pwdKeyupEvt() {
    var pwd = $pwd.val(),
        pwdStrength = computeComplex(pwd),
        level = 0;

    if (pwdStrength === 0) {
        level = 0;
    } else if (pwdStrength <= 10) {
        level = 1;
    } else if (pwdStrength <= 20) {
        level = 2;
    } else {
        level = 3;
    }
    switch (level) {
        case 0:
            $pwdParent.removeClass('red yellow green');
            $pwdIntensity.removeClass('color');
            break;
        case 1:
            $pwdParent.addClass('red').removeClass('yellow green');
            $pwdIntensity.filter('.low').addClass('color');
            $pwdIntensity.filter('.mid,.high').removeClass('color');
            break;
        case 2:
            $pwdParent.addClass('yellow').removeClass('red green');
            $pwdIntensity.filter('.low,.mid').addClass('color');
            $pwdIntensity.filter('.high').removeClass('color');
            break;
        case 3:
            $pwdParent.addClass('green').removeClass('yellow red');
            $pwdIntensity.addClass('color');
            break;
    }
    if (pwd === '') {
        isvalidatepwd = false;
        $pwdTip1.removeClass('red yes no').addClass('default');
    } else {
        if (pwd.length < 6 || pwd.length > 20) {
            isvalidatepwd = false;
            $pwdTip1.removeClass('default yes').addClass('no red');
        } else {
            isvalidatepwd = true;
            $pwdTip1.removeClass('default no red').addClass('yes');
        }
        if (/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]*$/.test(pwd)) {
            $pwdTip2.removeClass('default no red').addClass('yes');
        } else {
            $pwdTip2.removeClass('default yes').addClass('no red');
        }
    }
}

function validatePwd() {
    $(document).on('keyup', '.pwdcontent', function() {
        pwdKeyupEvt($(this));
    });
    $(document).on('focus', '.pwdcontent', function() {
        $('#pwd-tips').removeClass('hide');
    });
    $(document).on('blur', '.pwdcontent', function() {
        $('#pwd-tips').addClass('hide');
    });
}

/**
 * 最终提交表单
 */
function actionSubmit() {
    var pwd = '';
    var code = '';

    // 查看提交状态,避免重复提交
    if (submitStatus) {
        return;
    }
    submitStatus = true;
    setTimeout(function() {
        submitStatus = false;
    }, 50000);

    pwd = $('#pwd').val();
    code = $('#validatenum').val();
    $.ajax({
        type: 'POST',
        url: '/passport/autouserinfo/bindMobile',
        data: {
            area: area,
            openId: $('#openId').val(),
            sourceType: $('#sourceType').val(),
            mobile: mobile,
            password: pwd,
            code: code
        }
    }).then(function(data) {
        submitStatus = false;
        if (data.code === 200) {
            if (data.data && data.data.refer) {
                window.location.href = data.data.refer;
            } else {
                window.location.href = '/passport/thirdlogin/bindsuccess';
            }
        } else {
            alert(data.message);
        }
    });
}
/**
 * 确定完善信息
 * @return {[type]} [description]
 */
function actionConfirm() {
    var validatenum = '';
    var pwd = '';

    $('#confirmsubmit').on('click', function() {
        var isAssess = true;

        validatenum = $('#validatenum').val();
        pwd = $('#pwd').val();

        if (validatenum === '') {
            showErrTip($codeTip, '短信验证码不能为空');
            isAssess = false;
        } else if (isvalidatecode === false) {
            showErrTip($codeTip, '请输入正确的验证码');
            isAssess = false;
        }

        if (pwd === '') {
            showErrTip($pwdTip, '密码不能为空');
            isAssess = false;
        } else if (pwd.length < 6 || pwd.length > 20) {
            showErrTip($pwdTip, '密码只支持6-20位字符');
            isAssess = false;
        } else if (!pwdRegx.test(pwd)) {
            showErrTip($pwdTip, '密码须由字母和数字组合');
            isAssess = false;
        } else if (isvalidatepwd === false) {
            showErrTip($pwdTip, '请输入符合强度的密码');
            isAssess = false;
        }

        if (!isAssess) {
            return;
        }

        actionSubmit();
    });
}



function init() {
    $pwd = $('#pwd');
    $pwdParent = $('.safelevel');
    $pwdIntensity = $('.pwd-intensity');
    $pwdTip1 = $('#pwd-tip1');
    sendMessageValidate();
    codeValidate();
    validatePwd();
    actionConfirm();
    if (mobile && area) {
        $sendMsgBtn.click();
    }
}

init();

});
define("js/cart/cart", ["jquery","handlebars","source-map"], function(require, exports, module){
/**
 * @description:  购物车
 * @author: chenglong.wang@yoho.cn
 * @tips: 购物车的商品计价在服务端处理,客户端只要在每次操作后刷新页面重新渲染就可以了
 */

var $ = require("jquery");
var Handlerbars = require("handlebars");
var dialog = require("js/common/dialog");

var Confirm = dialog.Confirm;
var Alert = dialog.Alert;

var $cartnewSum = $('.cartnew-sum'),
    $cartnewTips = $('.cartnew-tips'),
    $payWapper = $('.pay-wapper'),
    $goodsDetail = $('.goods-detail'),
    $histroy = $('.histroy'),
    $together = $('.together'),
    $shopCart = $('.shop-cart'),
    $detailBigpic = $('.detail-bigpic'),
    togetherProductSource,
    togetherProductTemplate,
    togetherProductStr,
    subjoinPage,
    subjoinPageNum,
    subjoinPageAll,
    pageDom,
    selected,
    pageNum = 1,
    productNum,
    goodstype,
    delUrl,
    count,
    countJSON,
    id,
    dataJSON,
    pacList = 0,
    shopNum = 1,
    shopNumAll,
    productSku,
    promotionId,
    promotionPrice,
    yetCollect,
    collect,
    isClass,
    content,
    productId,
    shopName,
    delNum,
    understock,
    selectArray = [];


// 关闭温馨提示
$cartnewTips.find('.btn_close').click(function() {
    $cartnewTips.fadeOut();
});

// checkbox提交ajax
function choiceOut(data) {
    dataJSON = {
        skuList: JSON.stringify(data)
    };
    $.ajax({
        type: 'POST',
        dataType: 'json',
        url: '/cart/index/select',
        data: dataJSON,
        beforeSend: function() {
            $('.loading').css({
                top: $(document).scrollTop() + 200
            });
            $('.loading').show();
        }
    }).then(function(d) {
        if (d.code === 200) {
            window.history.go(0);
        }
    });
}

//单选提交
$payWapper.on('click', '.common-sell-box input[type="checkbox"], .pre-sell-box input[type="checkbox"]', function() {
    selectArray = [];
    selected = $(this).attr('checked') ? 'Y' : 'N';
    id = $(this).parents('tr').data('id');
    productNum = $(this).parents('tr').data('productnum');
    goodstype = $(this).data('goodstype');
    selectArray.push({
        product_sku: id,
        selected: selected,
        buy_number: productNum,
        goods_type: goodstype
    });
    choiceOut(selectArray);
});

//多选提交
$cartnewSum.on('click', 'input[type="checkbox"]', function() {
    selectArray = [];
    selected = $(this).attr('checked') ? 'Y' : 'N';
    $('.pay-wapper:first tr').each(function() {
        if ($(this).data('id')) {
            selectArray.push({
                product_sku: $(this).data('id'),
                selected: selected,
                buy_number: $(this).data('productnum'),
                goods_type: $(this).find('input[type="checkbox"]').data('goodstype')
            });
        }
    });
    choiceOut(selectArray);
});

// 凑单商品,最近浏览异步加载
togetherProductSource = $('#togetherProduct').html();
togetherProductTemplate = Handlerbars.compile(togetherProductSource);

function getTogetherProduct($obj, url, page) {
    $.ajax({
        type: 'GET',
        dataType: 'json',
        url: url,
        data: page
    }).then(function(d) {
        if (d.code === 200) {
            if (d.data.item) {
                if (d.data.item.length > 0) {
                    $obj.html(' ');
                    togetherProductStr = togetherProductTemplate(d.data);
                    $obj.append($(togetherProductStr));
                    $('#orderProduct li:last').addClass('end');
                    $('.gift').removeClass('none');
                }
            }
        }
    });
}

// 最近浏览
getTogetherProduct($histroy, '/cart/index/getHistroyProduct');

// 凑单商品
getTogetherProduct($together, '/cart/index/getTogetherProduct');

//凑单商品翻页
$together.on('click', '.pagenext, .pageprev', function() {
    getTogetherProduct($together, '/cart/index/getTogetherProduct', {
        page: Math.ceil(Math.random() * 100) + 1
    });

});

//凑单商品,历史商品商品折叠
$shopCart.on('click', '.icon-minus, .icon-add', function() {
    if ($(this).hasClass('icon-minus')) {
        $(this).parents('.title').next('.main').hide();
        $(this).parents('h2').next('.right').hide();
    } else {
        $(this).parents('.title').next('.main').show();
        $(this).parents('h2').next('.right').show();
    }
    $(this).siblings('i').toggleClass('none');
    $(this).toggleClass('none');

});

// 最近浏览翻页
$histroy.on('click', '.pagenext, .pageprev', function() {
    if ($(this).hasClass('pagenext')) {
        pageNum++;
    } else {
        --pageNum > 0 || (pageNum = 1);
    }
    getTogetherProduct($histroy, '/cart/index/getHistroyProduct', {
        page: pageNum
    });

});


//根据id获取商品信息
function productInfo(data) {
    $.ajax({
        type: 'GET',
        dataType: 'html',
        url: '/cart/index/getProductInfo',
        data: data
    }).then(function(d) {
        $goodsDetail.html(' ');
        $goodsDetail.append(d);
        $('.bigpic :not(:first)').hide();
        $('.detail-bigpic:first .con li:first').addClass('active');
        if ($('.showSizeBox:not(.none) span:first').data('num') > 0) {
            $('.showSizeBox:not(.none) span:first').addClass('atcive');
        } else {
            $('.addcart').addClass('none');
            $('.btn_sellout').removeClass('none');
        }
        $.each($('.showSizeBox span'), function() {
            if ($(this).data('num') <= 0) {
                $(this).addClass('nullAtcivec');
            }
        });

        if (typeof promotionPrice !== 'undefined') {
            $('.oldprice').html('现价:<del>' + $('.oldprice del').html() + '</div>');
            $('.newprice').html('活动价<b class="promotion-price">' + promotionPrice + '</b>');
        }
        $goodsDetail.show();
    });
}

function removeInfo() {
    $goodsDetail.html(' ');
    $goodsDetail.css({
        top: $(document).scrollTop() + 30,
        left: $(document).width() / 2 - $goodsDetail.width() / 2
    });

}

//显示加价购商品信息
$payWapper.on('click', '.cart-add-btn', function() {
    productId = $(this).data('id');
    promotionId = $(this).parents('table').data('promotion');
    promotionPrice = $(this).parents('table').find('.subjoin-price').html();
    removeInfo();
    productInfo({
        productId: productId
    });
});

//凑单商品,历史商品商品记录
$('.clearfix').on('click', '.btn_view_s', function() {
    productId = $(this).data('id');
    promotionId = $(this).parents('table').data('promotion');
    promotionPrice = $(this).parents('table').find('.subjoin-price').html();
    removeInfo();
    productInfo({
        productId: productId
    });
});

//关闭商品信息窗口
$goodsDetail.on('click', '.colse', function() {
    $goodsDetail.hide();
    $goodsDetail.html(' ');
    shopNum = 1;
});

//展开加价购商品列表
function fold(icon) {
    icon.addClass('none').siblings('i').removeClass('none');
    icon.parents('.cart-product-num').siblings('div').toggleClass('fold');
    icon.siblings('.unfold-color').toggleClass('none');
    icon.siblings('.cart-page').toggleClass('none');
}

$payWapper.on('click', '.icon-minusCart, .icon-addCart', function() {
    fold($(this));
});


$payWapper.on('click', '.unfold-color', function() {
    fold($(this));
    $(this).siblings('.icon-minusCart').removeClass('none');
    $(this).siblings('.icon-addCart').addClass('none');
});

//加价购商品分页
$payWapper.on('click', '.cart-btn-next', function() {
    subjoinPage = $(this).siblings('p').find('.f-red');
    subjoinPageAll = Number($(this).siblings('p').find('.subjoinPageNum').html());
    subjoinPageNum = Number(subjoinPage.html());
    subjoinPage.html(subjoinPageNum + 1);
    if (subjoinPageNum >= subjoinPageAll - 1) {
        $(this).hide();
    } else {
        $(this).siblings('i').show();
    }
    pageDom = $(this).parents('.cart-product-num').siblings('div').find('table');
    pageDom.addClass('none').eq(subjoinPageNum).removeClass('none');
});

$payWapper.on('click', '.cart-btn-pre', function() {
    subjoinPage = $(this).siblings('p').find('.f-red');
    subjoinPageAll = Number($(this).siblings('p').find('.subjoinPageNum').html());
    subjoinPageNum = Number(subjoinPage.html());
    subjoinPage.html(subjoinPageNum - 1);
    if (subjoinPageNum <= 2) {
        $(this).hide();
    } else {
        $(this).siblings('i').show();
    }
    pageDom = $(this).parents('.cart-product-num').siblings('div').find('table');
    pageDom.addClass('none').eq(subjoinPageNum - 2).removeClass('none');
});

//删除购物车商品,把删除的商品移入cookie中
function cartDel(data, delUrl, cookieList) {
    dataJSON = {
            skuList: JSON.stringify(data)
        };
    $.ajax({
        type: 'POST',
        dataType: 'json',
        url: delUrl,
        data: dataJSON,
        beforeSend: function() {
            $('.loading').css({
                top: $(document).scrollTop() + 200
            });
            $('.loading').show();
        }
    }).then(function(d) {
        if (d.code === 200) {
            if (cookieList) {
                window.setCookie('cart-del-list', JSON.stringify(cookieList), {
                    domain: '.yohobuy.com',
                    path: '/'
                });
            }
            window.history.go(0);
        } else if (d.code === 300) {
            $('.loading').hide();
            new Alert(d.message).show();
        } else if (d.code === 403) {
            if (d.data.url) {
                window.location = d.data.url;
            }
        }
    });
}

//商品信息弹出框,加入收藏夹
$goodsDetail.on('click', '.fav_count', function() {
    $.ajax({
        type: 'POST',
        dataType: 'json',
        url: '/product/item/togglecollect',
        data: {
            productId: productId,
            type: 'add'
        }
    }).then(function(d) {
        if (d.code === 200) {
            new Alert(d.message).show();
        } else if (d.code === 403) {
            if (d.data.url) {
                window.location = d.data.url;
            }
        } else {
            new Alert(d.message).show();
        }
    });
});

//删除商品
$payWapper.on('click', '.cart-del-btn', function() {
    id = {};
    countJSON = {};
    isClass = $(this).attr('class');
    productNum = $(this).parents('tr').data('productnum');
    id['' + $(this).parents('tr').data('id')] = productNum;

    content = '<div><span></span>删除商品</div>' +
              '<p>确定从购物车中删除此商品?</p>';
    if (!$(this).data('gift')) {
        countJSON = {
            productPrice: $(this).parents('tr').find('.productPrice').text(),
            productTitle: $(this).parents('tr').find('.pay-pro-info a').text(),
            link: $(this).parents('tr').find('.pay-pro-info a').attr('href'),
            productNum: $(this).parents('tr').data('productnum'),
            productSku: $(this).parents('tr').data('id')
        };
    }
    delUrl = '/cart/index/remove';
    new Confirm({
        content: content,
        cb: function() {
                cartDel(id, delUrl, countJSON);
            }
    }).show();
});

//移入收藏夹
$payWapper.on('click', '.cart-remove-btn', function() {
    id = {};
    isClass = $(this).attr('class');
    productNum = $(this).parents('tr').data('productnum');
    id['' + $(this).parents('tr').data('id')] = productNum;
    cartDel(id, '/cart/index/fav');
});

//批量删除商品
$cartnewSum.on('click', '.delAll', function() {
    id = {};
    selectArray = [];
    $('.pay-wapper:first tr').each(function() {
        if ($(this).data('id')) {
            if ($(this).find('input[type="checkbox"]').attr('checked')) {
                id['' + $(this).data('id')] = $(this).data('productnum');
                countJSON = {
                    productPrice: $(this).find('.productPrice').text(),
                    productTitle: $(this).find('.pay-pro-info a').text(),
                    link: $(this).find('.pay-pro-info a').attr('href'),
                    productNum: $(this).data('productnum'),
                    productSku: $(this).data('id')
                };
                selectArray.push(countJSON);
            }
        }
    });
    delUrl = '/cart/index/remove';
    content = '<div><span></span>删除商品</div>' +
              '<p>确定从购物车中删除所有选中商品?</p>';
    if (!$.isEmptyObject(id)) {
        new Confirm({
            content: content,
            cb: function() {
                    cartDel(id, delUrl, selectArray);
                }
        }).show();
    } else {
        new Alert('请至少选择一件商品').show();
    }
});

//批量移入收藏夹商品
$cartnewSum.on('click', '.removeAll', function() {
    id = {};
    $('.pay-wapper:first tr').each(function() {
        if ($(this).data('id')) {
            if ($(this).find('input[type="checkbox"]').attr('checked')) {
                id['' + $(this).data('id')] = $(this).data('productnum');
            }
        }
    });
    if (!$.isEmptyObject(id)) {
        cartDel(id, '/cart/index/fav');
    } else {
        new Alert('请至少选择一件商品').show();
    }
});

//购物车商品增减
function countAJAX(data) {
    $.ajax({
        type: 'POST',
        dataType: 'json',
        url: '/cart/index/modify',
        data: data
    }).then(function(d) {
        if (d.code === 200) {
            window.history.go(0);
        }
    });
}

$payWapper.on('click', '.minus, .plus', function() {
    countJSON = {};
    count = $(this).hasClass('minus') ? 'decreaseNum' : 'increaseNum';
    countJSON['' + count] = 1;
    if ($(this).siblings('input').val() === '1' && $(this).hasClass('minus')) {
        id = {};
        isClass = $(this).attr('class');
        productNum = $(this).parents('tr').data('productnum');
        id['' + $(this).parents('tr').data('id')] = productNum;

        content = '<div><span></span>删除商品</div>' +
                  '<p>确定从购物车中删除此商品?</p>';
        countJSON = {
            productPrice: $(this).parents('tr').find('.productPrice').text(),
            productTitle: $(this).parents('tr').find('.pay-pro-info a').text(),
            link: $(this).parents('tr').find('.pay-pro-info a').attr('href'),
            productNum: $(this).parents('tr').data('productnum'),
            productSku: $(this).parents('tr').data('id')
        };
        delUrl = '/cart/index/remove';

        // new Confirm({
        //     content: content,
        //     cb: function() {
        //             cartDel(id, delUrl);
        //         }
        // }).show();
        return false;
    }

    countAJAX($.extend(countJSON,
        {
            sku: $(this).parents('tr').data('id')
        }
    ));
});



$('.gift').on('click', '.up, .down', function() {
    $(this).siblings('i').toggleClass('none');
    $(this).toggleClass('none');
});

//加入购物车

function addcart(data, cookieList) {
    $.ajax({
        type: 'POST',
        url: '/cart/index/add',
        data: data
    }).then(function(d) {
        if (d.code === 200) {
            window.history.go(0);
            if (cookieList) {
                window.setCookie('cart-del-list', JSON.stringify(cookieList), {
                    domain: '.yohobuy.com',
                    path: '/'
                });
            }
        } else if (d.code === 500) {
            new Alert(d.message).show();
        }
    });
}

$goodsDetail.on('click', '.addcart', function() {
    shopNumAll = $('.showSizeBox:not(.none) .atcive').data('num');
    productSku = $('.showSizeBox:not(.none) .atcive').data('sku');
    dataJSON = {
        productSku: productSku,
        buyNumber: $('#mnum').val(),
        promotionId: promotionId
    };

    if ($('#mnum').val() > shopNumAll) {
        new Alert('库存不足,目前还有' + shopNumAll + '个库存').show();
    } else {
        addcart(dataJSON);
    }
});

$goodsDetail.on('click', '.cut, .add', function() {
    count = $(this).hasClass('minus') ? 'decreaseNum' : 'increaseNum';
    if (promotionId) {
        if ($(this).hasClass('cut')) {
            new Alert('-_-,已经是最后一件,不能在减了!').show();
        } else {
            new Alert('最多只能购买1,您好像购买的太多了!').show();
        }
    } else {
        if ($(this).hasClass('add')) {
            shopNum++;
        } else {
            shopNum--;
        }
        if (shopNum < 1) {
            new Alert('-_-,已经是最后一件,不能在减了!').show();
            return false;
        }

        $('#mnum').val(shopNum);
    }

});

$goodsDetail.on('click', '.color', function() {
    $('.color').find('p').removeClass('atcive');
    $(this).find('p').addClass('atcive');
    $('.showSizeBox').addClass('none').eq($(this).index()).removeClass('none');
    if ($('.showSizeBox:not(.none) span:first').data('num') > 0) {
        $('.showSizeBox:not(.none) span:first').addClass('atcive');
        $('.addcart').removeClass('none');
        $('.btn_sellout').addClass('none');
    } else {
        $('.showSizeBox:not(.none) span:first').addClass('atcivec');
        $('.addcart').addClass('none');
        $('.btn_sellout').removeClass('none');
    }
    $detailBigpic.addClass('none').eq($(this).index()).removeClass('none');
    $detailBigpic.eq($(this).index()).find('.bigpic:first').show();
    $detailBigpic.eq($(this).index()).find('.con li:first').addClass('active');

});

$goodsDetail.on('click', '.showSizeBox span', function() {
    shopNumAll = $(this).data('num');
    if ($(this).data('num') > 0) {
        $('.showSizeBox:not(.none) span').removeClass('atcivec atcive').eq($(this).index()).addClass('atcive');
        $('.addcart').removeClass('none');
        $('.btn_sellout').addClass('none');
    } else {
        $('.showSizeBox:not(.none) span').removeClass('atcivec atcive').eq($(this).index()).addClass('atcivec');
        $('.addcart').addClass('none');
        $('.btn_sellout').removeClass('none');
    }
});

//撤销删除
$('.goBack').on('click', function() {
    delNum = $('.dev-revocation .goBack').index(this);
    selectArray = [];
    $('.dev-revocation tr').each(function(index) {
        if (delNum !== index) {
            countJSON = {
                productPrice: $(this).find('.productPrice').text(),
                productTitle: $(this).find('.title').text(),
                link: $(this).find('.title').attr('href'),
                productNum: $(this).data('productnum'),
                productSku: $(this).data('productsku')
            };
            selectArray.push(countJSON);
        }
    });
    dataJSON = {
        productSku: $(this).parents('tr').data('productsku'),
        buyNumber: $(this).parents('tr').data('productnum')
    };

    addcart(dataJSON, selectArray);
});

$goodsDetail.on('click', '.piclist li', function() {
    pacList = $(this).index();
    $('.detail-bigpic:not(.none) .piclist li').removeClass('active');
    $(this).addClass('active');
    $('.detail-bigpic:not(.none) .bigpic').hide().eq($(this).index()).show();
});

function isSollect() {
    $('.gift-wrapper .fold').show();
    if ($('.pre-sell-box input:checked').length === $('.pre-sell-box input[type="checkbox"]').length) {
        $('.per-list input[type="checkbox"]').attr('checked', true);
    }

    if ($('.common-sell-box input:checked').length === $('.common-sell-box input[type="checkbox"]').length) {
        $('.common-list input[type="checkbox"]').attr('checked', true);
    }

    $('.cart-page').each(function() {
        if ($(this).data('pageall') === 1) {
            $('.cart-btn-pre', this).hide();
            $('.cart-btn-next', this).hide();
        } else {
            $('.cart-btn-pre', this).hide();
        }
    });

    if ($('.pre-sell-box input:checked').length > 0 && $('.common-sell-box input:checked').length > 0) {
        $('.go_cash_tips').show();
        $('.btn_account_disabled').show();
        $('.btn_account').hide();
    } else {
        $('.go_cash_tips').hide();
        $('.btn_account').show();
        $('.btn_account_disabled').hide();
    }

    $('.pay-wapper tr').each(function() {
        if ($(this).data('pid')) {
            selectArray.push($(this).data('pid') + '');
        }

    });
    $.ajax({
        type: 'POST',
        url: '/cart/index/checkFav',
        data: {
            pidList: JSON.stringify(selectArray)
        }
    }).then(function(d) {
        yetCollect = '<span class="cart-yetremove-btn">已收藏</span>';
        collect = '<a href="javascript:void(0);" class="cart-remove-btn"><span>移入收藏</span></a>';
        $.each(d.data, function(key, val, index) {
            $('.pay-wapper tr').each(function() {
                if (Number($(this).data('pid')) === Number(key)) {
                    if (val) {
                        $(this).find('.cart-operation').append(yetCollect);
                    } else {
                        $(this).find('.cart-operation').append(collect);
                    }
                }
            });
        });
    });
}

isSollect();

$goodsDetail.on('click', '.pre, .next', function() {
    if ($(this).hasClass('next')) {
        if (pacList > $(this).siblings('.con').find('li').length - 2) {
            return false;
        }
        pacList++;
    } else {
        if (pacList < 1) {
            return false;
        }
        pacList--;
    }

    $(this).siblings('.con').find('li').removeClass('active').eq(pacList).addClass('active');
    $('.bigpic').hide().eq(pacList).show();
});

//结算
$('.btn_account').on('click', function() {
    understock = '';
    if ($('.pay-wapper input:checked').parents('tr').find('.tipNoStore').length > 0) {
        shopName = $('.pay-wapper input:checked').parents('tr').find('.tipNoStore');
        $.each(shopName.parents('.common-sell-box').find('.pay-pro-info a'), function() {
            understock += $(this).html();
        });
        new Alert(understock + '库存不足').show();
    } else {
        if ($('.zp').length > 0 && !$(this).attr('title')) {
            $(this).attr('title', '1');
            new Alert('您有赠品没有选择,请选择完再结算!').show();
        } else {
            if ($('input:checked').length > 0) {
                if ($('.pre-sell-box input:checked').length > 0) {
                    window.location.href = '/cart/index/orderEnsure?type=2';
                } else {
                    window.location.href = '/cart/index/orderEnsure?type=1';
                }
            } else {
                new Alert('请至少选择一件商品').show();
            }
        }
    }
});

function isCheck(obj, className) {
    selectArray = [];
    selected = obj.attr('checked') ? 'Y' : 'N';
    $('.' + className).each(function() {
        if ($(this).data('id')) {
            selectArray.push({
                product_sku: $(this).data('id'),
                selected: selected,
                buy_number: $(this).data('productnum'),
                goods_type: $(this).find('input[type="checkbox"]').data('goodstype')
            });
        }
    });
    choiceOut(selectArray);
}

$('.per-list').on('click', 'input[type="checkbox"]', function() {
    isCheck($(this), 'pre-sell-box');
});

$('.common-list').on('click', 'input[type="checkbox"]', function() {
    isCheck($(this), 'common-sell-box');
});
});
define("js/home/entry", ["jquery","handlebars","source-map"], function(require, exports, module){
/**
 * 个人中心页js打包入口文件
 * @author: zhaobiao<bill.zhao@yoho.cn>
 * @date: 2016/02/17
 */

require("js/home/index");
require("js/home/orders");
require("js/home/favorite");

require("js/home/returns");
require("js/home/comment");

require("js/home/edit");
require("js/home/gift");
require("js/home/validate");
require("js/home/address");
require("js/home/common-address");
});
define("js/home/index", ["jquery"], function(require, exports, module){
/**
 * 个人中心首页
 * @author: xuqi<qi.xu@yoho.cn>
 * @date: 2016/2/17
 */

var $ = require("jquery");

//关闭消息提示
$('#close-message').click(function() {
    $('.message-tip').slideUp(200);
});

//新品上架
(function() {
    var $naPager = $('.na-pager'),
        $naUl = $('.new-arrival ul'),
        naPage = Math.ceil($naUl.children('li').length / 5),
        naItemWith = $naUl.children('li:last-child').outerWidth(),
        naCurPage = 1;

    $naUl.width($naUl.width() * naPage);

    //最新上架翻页
    $naPager.click(function() {
        var $this = $(this),
            left;

        if ($this.hasClass('next')) {

            //后翻
            ++naCurPage;

            //第2页显示前翻按钮
            if (naCurPage === 2) {
                $this.siblings().removeClass('no-visible');
            }

            //最后一页隐藏后翻按钮
            if (naCurPage === naPage) {
                $this.addClass('no-visible');
            }
        } else {

            //前翻
            --naCurPage;

            //倒数第2页显示后翻按钮
            if (naCurPage === naPage - 1) {
                $this.siblings().removeClass('no-visible');
            }

            //第1页隐藏前翻按钮
            if (naCurPage === 1) {
                $this.addClass('no-visible');
            }
        }

        left = -5 * (naCurPage - 1) * naItemWith;

        $naUl.animate({
            marginLeft: left
        }, 400);
    });
}());
});
define("js/home/orders", ["jquery","handlebars","source-map"], function(require, exports, module){
/**
 * 我的订单
 * @author: xuqi<qi.xu@yoho.cn>
 * @date: 2016/2/17
 */

require("js/home/order-block");
});
define("js/home/order-block", ["jquery","handlebars","source-map"], function(require, exports, module){
/**
 * 订单
 * @author: xuqi<qi.xu@yoho.cn>
 * @date: 2016/2/17
 */

var $ = require("jquery");

var dialog = require("js/common/dialog");

var Dialog = dialog.Dialog;
var Confirm = dialog.Confirm;

var $tpl = $('#cancel-dialog-tpl');

var html = $tpl.html();

var active;

function dialogFactory(id) {
    var options = {
        mask: false,
        btns: [
            {
                id: 'cancel-sure',
                name: '确定并取消订单',
                btnClass: ['cancel-sure'],
                cb: function() {
                    var $checked = $('.cancel-dialog :checked');

                    $.ajax({
                        type: 'POST',
                        url: '/home/orders/cancelorder',
                        data: {
                            orderCode: id,
                            reason: $checked.length > 0 ? $checked.val() : ''
                        }
                    }).then(function(data) {
                        if (data.code === 200) {
                            active.close();
                            history.go(0);
                        } else {
                            $('.cancel-dialog .cancel-tip').html(data.message);
                        }
                    });
                }
            },
            {
                id: 'cancel-no',
                name: '取消',
                btnClass: ['cancel-no'],
                cb: function() {
                    active.close();
                }
            }
        ],
        content: html,
        className: 'cancel-dialog'
    };

    return new Dialog(options);
}

$tpl.remove();

//查看物流
$('.check-logistics').click(function() {
    $(this).parent().siblings('.logistics').removeClass('hide');
});

$('.close-logistics').click(function() {
    $(this).closest('.logistics').addClass('hide');
});

$('.me-orders').on('click', '.cancel-order', function(e) {

    //取消订单
    active = dialogFactory($(this).closest('.order').data('id'));
    active.show();
}).on('click', '.confirm-received', function(e) {
    var id = $(this).closest('.order').data('id');

    //确认收货
    active = new Confirm({
        cb: function() {
            $.ajax({
                type: 'POST',
                url: '/home/orders/confirmorder',
                data: {
                    orderCode: id
                }
            }).then(function(data) {
                if (data.code === 200) {
                    active.close();
                    history.go(0);
                }
            });
        },
        content: '您确定要确认收货吗?'
    });
    active.show();
});
});
define("js/home/favorite", ["jquery"], function(require, exports, module){
/**
 * 我的收藏
 * @author: xuqi<qi.xu@yoho.cn>
 * @date: 2016/2/23
 */

var $ = require("jquery");

var phoneReg = require("js/passport/mail-phone-regx").phoneRegx['+86'];

var clockTxt = {
    on: '[ 降价通知 ]',
    off: '[ 取消通知 ]'
};

var favType;

var curSkn;

var $curClock;

//商品收藏
(function() {
    var $defaultSorts,
        $allSorts;

    var $bodyMask,
        $priceNotice,
        $noticeContent,
        $noticeSuccess,
        $noticeSubOrCancel;

    //关闭价格订阅弹窗和蒙层
    function closeNoticeBox() {
        $bodyMask.addClass('hide');
        $priceNotice.addClass('hide');

        //重置头部文字
        $noticeSubOrCancel.text('订阅成功');
    }

    //显示价格订阅弹窗和蒙层
    function showNoticeBox() {
        if (typeof $bodyMask === 'undefined') {
            $('body').append('<div class="body-mask hide"></div>');
            $bodyMask = $('.body-mask');
        }

        $bodyMask.css({
            height: $(document).height(),
            width: $(document).width()
        }).removeClass('hide');

        if ($curClock.hasClass('noticed')) {

            //取消降价通知
            $.ajax({
                type: 'GET',
                url: '/home/favorite/cancelnotice',
                data: {
                    skn: curSkn
                }
            }).then(function(data) {
                if (data.code === 200) {
                    $noticeContent.addClass('hide');
                    $noticeSuccess.removeClass('hide').find('.notice-num').text(data.data.num);
                    $noticeSubOrCancel.text('取消成功');

                    if ($curClock.closest('.reduction-products').length > 0) {
                        $curClock.closest('.fav-good').remove();
                    } else {
                        $curClock.text(clockTxt.on);
                    }
                }
            });
        }

        $priceNotice.removeClass('hide');
    }

    if ($('.fav-products').length === 0) {
        return;
    }

    favType = 'products';

    $defaultSorts = $('.default-sorts');
    $allSorts = $('.all-sorts');

    $priceNotice = $('.price-notice');

    $noticeContent = $('#price-notice .content');
    $noticeSuccess = $('#price-notice .success');
    $noticeSubOrCancel = $noticeSuccess.find('.subscribe-or-cancel');

    //展开分类
    $('#spread-sort').click(function() {
        $defaultSorts.slideUp(function() {
            $allSorts.slideDown();
        });
    });

    //收起分类
    $('#retract-sort').click(function() {
        $allSorts.slideUp(function() {
            $defaultSorts.slideDown();
        });
    });

    //降价通知
    $('.price-down-clock').click(function() {
        $curClock = $(this),

        showNoticeBox();

        curSkn = $curClock.closest('.fav-good').data('skn');
    });

    //降价通知确定按钮
    $('#price-notice').on('click', '.close', function() {
        closeNoticeBox();
    }).on('click', '.price-notice-sure', function() {
        var $phone = $('#notice-phone-num'),
            phone,
            errTxt;

        if ($noticeSuccess.hasClass('hide')) {

            //订阅到手机号
            phone = $.trim($phone.val());

            if (phone === '' || !phoneReg.test(phone)) {
                errTxt = phone === '' ? '请输入手机号码' : '手机号码格式不正确';

                $phone.addClass('error');
                $('#price-notice .err-text').removeClass('hide').find('em').html(errTxt);
                return;
            } else {
                $phone.removeClass('error');
                $('#price-notice .err-text').addClass('hide');
            }

            $.ajax({
                type: 'GET',
                url: '/home/favorite/notice',
                data: {
                    phone: phone,
                    skn: curSkn
                }
            }).then(function(data) {
                if (data.code === 200) {
                    $noticeSuccess.removeClass('hide');
                    $noticeContent.addClass('hide');
                    $noticeSuccess.find('.notice-num').html(data.data.num);

                    //切换商品通知文字
                    $curClock.toggleClass('noticed').text(clockTxt.off);
                }
            });
        } else {

            //关闭窗口
            closeNoticeBox();
        }
    });

    //商品可参加活动
    $('.has-activity').click(function() {
        var $this = $(this),
            $activites = $this.next('.activites'),
            $li = $this.closest('li');

        if ($activites.hasClass('hide')) {

            //显示
            $activites.removeClass('hide');
            $li.css('padding-bottom', $activites.outerHeight());
        } else {

            //隐藏
            $activites.addClass('hide');
            $li.css('padding-bottom', '');
        }
    });
}());


//品牌收藏
(function() {

    if ($('.fav-brands').length === 0) {
        return;
    }

    // 新品到着
    $('.na-not-zero').click(function() {
        var $this = $(this),
            $naList = $this.next('.na-list'),
            $li = $this.closest('li');

        if (!$naList.hasClass('hide')) {
            $naList.addClass('hide');
            $li.css('padding-bottom', '');
            return;
        }

        $.ajax({
            type: 'GET',
            url: '/home/newproduct'
        }).then(function(html) {
            $naList.removeClass('hide').find('.na-content').html(html);
            $li.css('padding-bottom', $naList.outerHeight() + 10);
        });
    });

    $('.na-content').on('click', '.na-pre, .na-next', function() {
        var $this = $(this),
            url = $this.data('url');

        $.ajax({
            type: 'GET',
            url: url
        }).then(function(html) {
            $this.closest('.na-content').html(html);
        });
    });
}());

//全选【通用】
$('#me-checkall').click(function() {
    $('.checkbox input[type="checkbox"]').prop('checked', $(this).prop('checked'));
});

//删除多个商品/品牌/文章【通用】
$('#me-del-checked').click(function() {
    var ids = [],
        url;

    $('.checkbox input[type="checkbox"]:checked').each(function() {
        ids.push($(this).closest('.fav-row').data('id'));
    });

    if (ids.length === 0) {
        return;
    }

    switch (favType) {
        case 'products':
            url = '/home/favorite/multidelgoods';
            break;
        case 'brands':
            url = '/home/favorite/multidelbrands';
            break;
        case 'articles':
            url = '/home/favorite/multidelarticles';
            break;
    }

    $.ajax({
        type: 'GET',
        url: url,
        data: {
            ids: ids
        }
    }).then(function(data) {
        if (data.code === 200) {
            window.history.go(0);
        }
    });
});
});
define("js/home/returns", ["jquery","handlebars","source-map"], function(require, exports, module){
/**
 * 我的退/换货
 * @author: yyqing<yanqing.yang@yoho.cn>
 * @date: 2016/2/26
 */

require("js/home/returns-detail");
require("js/home/returns-apply");
});
define("js/home/returns-detail", ["jquery"], function(require, exports, module){
/**
 * 退换货详情
 * @author: yyqing<yanqing.yang@yoho.cn>
 * @date: 2016/2/26
 */

var $ = require("jquery");

var $detail = $('.detail-container'),
    $courierCode = $('.courier-code'),
    $expressCompany = $('#express-company'),
    $expressNumber = $('#express-number'),
    $expressViewBox = $('.express-view-box > span');

var returnId = $('#return-id').val(),
    expId = $('#express-old-id').val(),
    expNumber = $expressNumber.val(),
    expCompany = '',
    expList = {},
    isChange = false;

function syncExpressInfo() {
    expCompany = expList[expId] ? expList[expId] : '';
    $expressViewBox.html(expCompany + ' 快递单号:' + expNumber);
    $expressCompany.val(expId);
    $expressNumber.val(expNumber);
}

function validateExpress() {
    var send = {};

    send.number = $expressNumber.val();
    send.id = $expressCompany.val() * 1;

    if (!send.id) {
        alert('请选择快递公司');
    } else if (!send.number) {
        alert('请填入快递单号');
    } else {
        return send;
    }

    return false;
}

function sendExpressCode() {
    var sendParm = validateExpress();

    if (!sendParm) {
        return;
    }

    $.ajax({
        type: 'POST',
        url: '/home/returns/setExpressNumber',
        data: {
            id: returnId,
            isChange: isChange,
            expressId: sendParm.id,
            expressNumber: sendParm.number,
            expressCompany: expList[sendParm.id]
        }
    }).then(function(jsonData) {
        if (jsonData.code === 200) {
            expId = sendParm.id;
            expNumber = sendParm.number;
        } else {
            alert(jsonData.message);
        }
        syncExpressInfo();
        $courierCode.removeClass('in-edit');
    });
}

if ($detail.parent().hasClass('exchange-detail')) {
    isChange = true;
}

$expressCompany.val(expId);

$detail.find('.company-list').each(function() {
    var data = $(this).data();

    expList[data.id] = data.name;
});

$('#modify').click(function() {
    $courierCode.addClass('in-edit');
});

$('#submit-btn').click(function() {
    sendExpressCode();
});
});
define("js/home/returns-apply", ["jquery","handlebars","source-map"], function(require, exports, module){
/**
 * 退换货申请
 * @author: yyqing<yanqing.yang@yoho.cn>
 * @date: 2016/2/29
 */
var $ = require("jquery"),
    Addr = require("js/home/common-address");

var $goosTable = $('#goods-table'),
    $reasons = $goosTable.find('.return-reason'),
    $file = $goosTable.find('input[type=file]');

var $exchange = $('.exchange-detail'),
    defaultArea = $exchange.find('input[name="hide-area"]').val();

require("plugin/jquery.upload");

defaultArea = defaultArea ? defaultArea : '';
Addr.loadAllData(defaultArea, {
    areaDomId: 'area'
});

$reasons.change(function() {
    var $par = $(this).parent().parent(),
        type = $(this).val() * 1;

    if (type === 4 || type === 6 || type === 8) {
        $par.next().show();
    } else {
        $par.next().hide();
    }
});

$goosTable.find('.up-image-list li').on('click', '.btn-del', function() {
    $(this).parent().empty();
});

$file.each(function(e) {
    $('#upload-img-' + e).upload({
        auto: true,
        buttonClass: 'upload-img-btn',
        fileType: 'image/*',
        uploadScript: '/home/suggestimgUpload',
        fileObjName: 'fileData',
        fileSizeLimit: 5000,
        buttonText: '上传图片',
        height: 34,
        width: 116,
        multi: false,
        onUploadComplete: function(file, data) {
            var $par = $(this).closest('.problem-description'),
                $imgList = $par.find('li'),
                isShow = false,
                img, _html;

            img = JSON.parse(data).imgList[0];
            _html = '<span class="btn-del" title="删除"></span>' +
                '<img src="' + img.imgUrl + '" width="126" height="126">';
            $imgList.each(function() {
                if (!isShow && !$(this).find('img').length) {
                    isShow = true;
                    $(this).html(_html);
                }
            });
        },
        onError: function(info, fileType, data) {
            var msg = '图片上传失败!';

            if (info === 'FILE_SIZE_LIMIT_EXCEEDED') {
                msg = '图片大小超出限制!';
            }
            alert(msg);
        }
    });
});

});
define("js/home/common-address", ["jquery","handlebars","source-map"], function(require, exports, module){
/**
 * 个人中心页-地址管理
 * @author: wsl<shuiling.wang@yoho.cn>
 * @date: 2016/02/24
 */

var $ = require("jquery"),
    dialog = require("js/common/dialog"),
    Alert = dialog.Alert;

var address = {

    // 省的控件ID
    provinceDomId: 'province',

    // 城市的控件ID
    cityDomId: 'city',

    // 地区的控件ID
    areaDomId: 'areaCode',

    initDomIds: function(domOptions) {
        var the = this;

        if (domOptions.provinceDomId !== undefined) {
            the.provinceDomId = domOptions.provinceDomId;
        }
        if (domOptions.cityDomId !== undefined) {
            the.cityDomId = domOptions.cityDomId;
        }
        if (domOptions.areaDomId !== undefined) {
            the.areaDomId = domOptions.areaDomId;
        }
    },

    // 初始化地址数据
    loadAreaData: function(pCode, toDomId, defaultValue, allCode) {
        var $toDom = $('#' + toDomId),
            i = 0,
            point = '';

        var active,
            val,
            nId,
            selecter;

        $toDom.empty();

        if (pCode < 91) {
            $('#areaCode').empty();
            $('#county').attr('disabled', 'disabled');
        }

        $.ajax({
            type: 'GET',
            url: '/home/address/area',
            data: 'id=' + pCode,

            success: function(jsonData) {
                jsonData.code = 200;

                if (jsonData.code !== 200) {
                    active = new Alert('暂无数据');
                    active.show();
                    return false;
                }

                $toDom.append('<option value="0">' + defaultValue + '</option>');
                for (i in jsonData.options) {
                    if (jsonData.options[i]) {
                        val = jsonData.options[i];
                        point = (toDomId === 'areaCode' && val.is_support === 'Y') ? '*' : '';
                        nId = val.value;
                        selecter = '';

                        if (typeof (allCode) !== 'undefined' && allCode !== 0 &&
                            nId === allCode.substr(0, nId.length)) {
                            selecter = 'selected';
                        }
                        $toDom.append('<option value="' + nId + '" ' + selecter + '>' + point + val.text + '</option>');
                    }
                }
            }
        });
    },
    bindAreaChange: function(domOptions) {
        var the = this;

        if ($('#' + the.provinceDomId).data('events') !== undefined) {
            return;
        }

        // 初始化
        $('#' + the.provinceDomId).change(function() {
            var pCode = $('#' + the.provinceDomId).val();

            if (pCode === '0') {
                return;
            }

            the.loadAreaData(pCode, the.cityDomId, '请选择城市', pCode);
            $('#' + the.areaDomId).hide();
            the.showAreaSel(domOptions.dispDomId);
        });

        $('#' + this.cityDomId).change(function() {
            var pCode = $('#' + the.cityDomId).val();

            if (pCode === '0') {
                return;
            }

            the.loadAreaData(pCode, the.areaDomId, '请选择区县', pCode);
            $('#' + the.areaDomId).show();
            the.showAreaSel(domOptions.dispDomId);
        });

        $('#' + the.areaDomId).change(function() {
            the.showAreaSel(domOptions.dispDomId);
        });

        the.showAreaSel(domOptions.dispDomId);
    },

    /**
     * 显示地区选择
     */
    showAreaSel: function(dispDomId) {
        var the = this,
            strAddr = '',
            strProvince = $('#' + the.provinceDomId).find('option:selected').text(),
            strCity = $('#' + the.cityDomId).find('option:selected').text(),
            strArea = $('#' + the.areaDomId).find('option:selected').text();

        if (dispDomId !== undefined && dispDomId !== '') {
            if (strProvince.indexOf('选择') < 0) {
                strAddr = strProvince;
            }

            if (strCity !== '' && strCity.indexOf('选择') < 0) {
                strAddr += ',' + strCity;
            }

            if (strArea !== '' && strArea.indexOf('选择') < 0) {
                strAddr += ',' + strArea;
            }
            $('#' + dispDomId).html(strAddr);
        }
    },

    loadAllData: function(areaCode, domOptions) {
        var the = this;

        the.initDomIds(domOptions);
        areaCode += '';

        if (areaCode < 91) {
            the.loadAreaData(0, the.provinceDomId, '请选择省份', '');
            $('#' + the.areaDomId).hide();
            $('#' + the.cityDomId).html('<option value="0">请选择市</option>');
        } else if (areaCode.length === 4) {
            the.loadAreaData(0, the.provinceDomId, '请选择省份', areaCode);
            the.loadAreaData(areaCode.substr(0, 2), the.cityDomId, '请选择城市', areaCode);
            the.loadAreaData(areaCode, the.areaDomId, '请选择区县', areaCode);
            $('#' + the.areaDomId).show();
        } else if (areaCode.length === 6) {
            the.loadAreaData(0, the.provinceDomId, '请选择省份', areaCode);
            the.loadAreaData(areaCode.substr(0, 2), the.cityDomId, '请选择城市', areaCode);
            the.loadAreaData(areaCode.substr(0, 4), the.areaDomId, '请选择区县', areaCode);
            $('#' + this.areaDomId).show();
        }
        the.bindAreaChange(domOptions);
    }
};

module.exports = address;

});
define("plugin/jquery.upload", ["jquery"], function(require, exports, module){
/*
UploadiFive 1.2.2
Copyright (c) 2012 Reactive Apps, Ronnie Garcia
Released under the UploadiFive Standard License <http://www.uploadify.com/uploadifive-standard-license>
*/

var jQuery = require("jquery");

;(function($) {

    var methods = {

        init : function(options) {
            
            return this.each(function() {

                // Create a reference to the jQuery DOM object
                var $this = $(this);
                    $this.data('uploadifive', {
                        inputs     : {}, // The object that contains all the file inputs
                        inputCount : 0,  // The total number of file inputs created
                        fileID     : 0,
                        queue      : {
                                         count      : 0, // Total number of files in the queue
                                         selected   : 0, // Number of files selected in the last select operation
                                         replaced   : 0, // Number of files replaced in the last select operation
                                         errors     : 0, // Number of files that returned an error in the last select operation
                                         queued     : 0, // Number of files added to the queue in the last select operation
                                         cancelled  : 0  // Total number of files that have been cancelled or removed from the queue
                                     },
                        uploads    : {
                                         current    : 0, // Number of files currently being uploaded
                                         attempts   : 0, // Number of file uploads attempted in the last upload operation
                                         successful : 0, // Number of files successfully uploaded in the last upload operation
                                         errors     : 0, // Number of files returning errors in the last upload operation
                                         count      : 0  // Total number of files uploaded successfully
                                     }
                    });
                var $data = $this.data('uploadifive');

                // Set the default options
                var settings = $data.settings = $.extend({
                    'auto'            : true,               // Automatically upload a file when it's added to the queue
                    'buttonClass'     : false,              // A class to add to the UploadiFive button
                    'buttonText'      : 'Select Files',     // The text that appears on the UploadiFive button
                    'checkScript'     : false,              // Path to the script that checks for existing file names 
                    'dnd'             : true,               // Allow drag and drop into the queue
                    'dropTarget'      : false,              // Selector for the drop target
                    'fileObjName'     : 'Filedata',         // The name of the file object to use in your server-side script
                    'fileSizeLimit'   : 0,                  // Maximum allowed size of files to upload
                    'fileType'        : false,              // Type of files allowed (image, etc), separate with a pipe character |
                    'formData'        : {},                 // Additional data to send to the upload script
                    'height'          : 30,                 // The height of the button
                    'itemTemplate'    : false,              // The HTML markup for the item in the queue
                    'method'          : 'post',             // The method to use when submitting the upload
                    'multi'           : true,               // Set to true to allow multiple file selections
                    'overrideEvents'  : [],                 // An array of events to override
                    'queueID'         : false,              // The ID of the file queue
                    'queueSizeLimit'  : 0,                  // The maximum number of files that can be in the queue
                    'removeCompleted' : false,              // Set to true to remove files that have completed uploading
                    'simUploadLimit'  : 0,                  // The maximum number of files to upload at once
                    'truncateLength'  : 0,                  // The length to truncate the file names to
                    'uploadLimit'     : 0,                  // The maximum number of files you can upload
                    'uploadScript'    : 'uploadifive.php',  // The path to the upload script
                    'width'           : 100                 // The width of the button

                    /*
                    // Events
                    'onAddQueueItem'   : function(file) {},                        // Triggered for each file that is added to the queue
                    'onCancel'         : function(file) {},                        // Triggered when a file is cancelled or removed from the queue
                    'onCheck'          : function(file, exists) {},                // Triggered when the server is checked for an existing file
                    'onClearQueue'     : function(queue) {},                       // Triggered during the clearQueue function
                    'onDestroy'        : function() {}                             // Triggered during the destroy function
                    'onDrop'           : function(files, numberOfFilesDropped) {}, // Triggered when files are dropped into the file queue
                    'onError'          : function(file, fileType, data) {},        // Triggered when an error occurs
                    'onFallback'       : function() {},                            // Triggered if the HTML5 File API is not supported by the browser
                    'onInit'           : function() {},                            // Triggered when UploadiFive if initialized
                    'onQueueComplete'  : function() {},                            // Triggered once when an upload queue is done
                    'onProgress'       : function(file, event) {},                 // Triggered during each progress update of an upload
                    'onSelect'         : function() {},                            // Triggered once when files are selected from a dialog box
                    'onUpload'         : function(file) {},                        // Triggered when an upload queue is started
                    'onUploadComplete' : function(file, data) {},                  // Triggered when a file is successfully uploaded
                    'onUploadFile'     : function(file) {},                        // Triggered for each file being uploaded
                    */
                }, options);

                // Calculate the file size limit
                if (isNaN(settings.fileSizeLimit)) {
                    var fileSizeLimitBytes = parseInt(settings.fileSizeLimit) * 1.024
                    if (settings.fileSizeLimit.indexOf('KB') > -1) {
                        settings.fileSizeLimit = fileSizeLimitBytes * 1000;
                    } else if (settings.fileSizeLimit.indexOf('MB') > -1) {
                        settings.fileSizeLimit = fileSizeLimitBytes * 1000000;
                    } else if (settings.fileSizeLimit.indexOf('GB') > -1) {
                        settings.fileSizeLimit = fileSizeLimitBytes * 1000000000;
                    }
                } else {
                    settings.fileSizeLimit = settings.fileSizeLimit * 1024;
                }

                // Create a template for a file input
                $data.inputTemplate = $('<input type="file">')
                .css({
                    'font-size' : settings.height + 'px',
                    'opacity'   : 0,
                    'position'  : 'absolute',
                    'right'     : '-3px',
                    'top'       : '-3px',
                    'z-index'   : 999 
                });

                // Create a new input
                $data.createInput = function() {

                    // Create a clone of the file input
                    var input     = $data.inputTemplate.clone();
                    // Create a unique name for the input item
                    var inputName = input.name = 'input' + $data.inputCount++;
                    // Set the multiple attribute
                    if (settings.multi) {
                        input.attr('multiple', true);
                    }
                    // Set the accept attribute on the input
                    if (settings.fileType) {
                        input.attr('accept', settings.fileType);
                    }
                    // Set the onchange event for the input
                    input.bind('change', function() {
                        $data.queue.selected = 0;
                        $data.queue.replaced = 0;
                        $data.queue.errors   = 0;
                        $data.queue.queued   = 0;
                        // Add a queue item to the queue for each file
                        var limit = this.files.length;
                        $data.queue.selected = limit;
                        if (($data.queue.count + limit) > settings.queueSizeLimit && settings.queueSizeLimit !== 0) {
                            if ($.inArray('onError', settings.overrideEvents) < 0) {
                                alert('The maximum number of queue items has been reached (' + settings.queueSizeLimit + ').  Please select fewer files.');
                            }
                            // Trigger the error event
                            if (typeof settings.onError === 'function') {
                                settings.onError.call($this, 'QUEUE_LIMIT_EXCEEDED');
                            }
                        } else {
                            for (var n = 0; n < limit; n++) {
                                file = this.files[n];
                                $data.addQueueItem(file);
                            }
                            $data.inputs[inputName] = this;
                            $data.createInput();
                        }
                        // Upload the file if auto-uploads are enabled
                        if (settings.auto) {
                            methods.upload.call($this);
                        }
                        // Trigger the select event
                        if (typeof settings.onSelect === 'function') {
                            settings.onSelect.call($this, $data.queue);
                        }
                    });
                    // Hide the existing current item and add the new one
                    if ($data.currentInput) {
                        $data.currentInput.hide();
                    }
                    $data.button.append(input);
                    $data.currentInput = input;
                }

                // Remove an input
                $data.destroyInput = function(key) {
                    $($data.inputs[key]).remove();
                    delete $data.inputs[key];
                    $data.inputCount--;
                }

                // Drop a file into the queue
                $data.drop = function(e) {
                    $data.queue.selected = 0;
                    $data.queue.replaced = 0;
                    $data.queue.errors   = 0;
                    $data.queue.queued   = 0;

                    var fileData = e.dataTransfer;

                    var inputName = fileData.name = 'input' + $data.inputCount++;
                    // Add a queue item to the queue for each file
                    var limit = fileData.files.length;
                    $data.queue.selected = limit;
                    if (($data.queue.count + limit) > settings.queueSizeLimit && settings.queueSizeLimit !== 0) {
                        // Check if the queueSizeLimit was reached
                        if ($.inArray('onError', settings.overrideEvents) < 0) {
                            alert('The maximum number of queue items has been reached (' + settings.queueSizeLimit + ').  Please select fewer files.');
                        }
                        // Trigger the onError event
                        if (typeof settings.onError === 'function') {
                            settings.onError.call($this, 'QUEUE_LIMIT_EXCEEDED');
                        }
                    } else {
                        // Add a queue item for each file
                        for (var n = 0; n < limit; n++) {
                            file = fileData.files[n];
                            $data.addQueueItem(file);
                        }
                        // Save the data to the inputs object
                        $data.inputs[inputName] = fileData;
                    }

                    // Upload the file if auto-uploads are enabled
                    if (settings.auto) {
                        methods.upload.call($this);
                    }

                    // Trigger the onDrop event
                    if (typeof settings.onDrop === 'function') {
                        settings.onDrop.call($this, fileData.files, fileData.files.length);
                    }

                    // Stop FireFox from opening the dropped file(s)
                    e.preventDefault();
                    e.stopPropagation();
                }

                // Check if a filename exists in the queue
                $data.fileExistsInQueue = function(file) {
                    for (var key in $data.inputs) {
                        input = $data.inputs[key];
                        limit = input.files.length;
                        for (var n = 0; n < limit; n++) {
                            existingFile = input.files[n];
                            // Check if the filename matches
                            if (existingFile.name == file.name && !existingFile.complete) {
                                return true;
                            }
                        }
                    }
                    return false;
                }

                // Remove an existing file in the queue
                $data.removeExistingFile = function(file) {
                    for (var key in $data.inputs) {
                        input = $data.inputs[key];
                        limit = input.files.length;
                        for (var n = 0; n < limit; n++) {
                            existingFile = input.files[n];
                            // Check if the filename matches
                            if (existingFile.name == file.name && !existingFile.complete) {
                                $data.queue.replaced++;
                                methods.cancel.call($this, existingFile, true);
                            }
                        }
                    }
                }

                // Create the file item template
                if (settings.itemTemplate == false) {
                    $data.queueItem = $('<div class="uploadifive-queue-item">\
                        <a class="close" href="#">X</a>\
                        <div><span class="filename"></span><span class="fileinfo"></span></div>\
                        <div class="progress">\
                            <div class="progress-bar"></div>\
                        </div>\
                    </div>');
                } else {
                    $data.queueItem = $(settings.itemTemplate);
                }

                // Add an item to the queue
                $data.addQueueItem = function(file) {
                    if ($.inArray('onAddQueueItem', settings.overrideEvents) < 0) {
                        // Check if the filename already exists in the queue
                        $data.removeExistingFile(file);
                        // Create a clone of the queue item template
                        file.queueItem = $data.queueItem.clone();
                        // Add an ID to the queue item
                        file.queueItem.attr('id', settings.id + '-file-' + $data.fileID++);
                        // Bind the close event to the close button
                        file.queueItem.find('.close').bind('click', function() {
                           methods.cancel.call($this, file);
                           return false;
                        });
                        var fileName = file.name;
                        if (fileName.length > settings.truncateLength && settings.truncateLength != 0) {
                            fileName = fileName.substring(0, settings.truncateLength) + '...';
                        }
                        file.queueItem.find('.filename').html(fileName);
                        // Add a reference to the file
                        file.queueItem.data('file', file);
                        $data.queueEl.append(file.queueItem);
                    }
                    // Trigger the addQueueItem event
                    if (typeof settings.onAddQueueItem === 'function') {
                        settings.onAddQueueItem.call($this, file);
                    }
                    // Check the filesize
                    if (file.size > settings.fileSizeLimit && settings.fileSizeLimit != 0) {
                        $data.error('FILE_SIZE_LIMIT_EXCEEDED', file);
                    } else {
                        $data.queue.queued++;
                        $data.queue.count++;
                    }
                }

                // Remove an item from the queue
                $data.removeQueueItem = function(file, instant, delay) {
                    // Set the default delay
                    if (!delay) delay = 0;
                    var fadeTime = instant ? 0 : 500;
                    if (file.queueItem) {
                        if (file.queueItem.find('.fileinfo').html() != ' - Completed') {
                            file.queueItem.find('.fileinfo').html(' - Cancelled');
                        }
                        file.queueItem.find('.progress-bar').width(0);
                        file.queueItem.delay(delay).fadeOut(fadeTime, function() {
                           $(this).remove();
                        });
                        delete file.queueItem;
                        $data.queue.count--;
                    }
                }

                // Count the number of files that need to be uploaded
                $data.filesToUpload = function() {
                    var filesToUpload = 0;
                    for (var key in $data.inputs) {
                        input = $data.inputs[key];
                        limit = input.files.length;
                        for (var n = 0; n < limit; n++) {
                            file = input.files[n];
                            if (!file.skip && !file.complete) {
                                filesToUpload++;
                            }
                        }
                    }
                    return filesToUpload;
                }

                // Check if a file exists
                $data.checkExists = function(file) {
                    if ($.inArray('onCheck', settings.overrideEvents) < 0) {
                        // This request needs to be synchronous
                        $.ajaxSetup({
                            'async' : false
                        });
                        // Send the filename to the check script
                        var checkData = $.extend(settings.formData, {filename: file.name});
                        $.post(settings.checkScript, checkData, function(fileExists) {
                            file.exists = parseInt(fileExists);
                        });
                        if (file.exists) {
                            if (!confirm('A file named ' + file.name + ' already exists in the upload folder.\nWould you like to replace it?')) {
                                // If not replacing the file, cancel the upload
                                methods.cancel.call($this, file);
                                return true;
                            }
                        }
                    }
                    // Trigger the check event
                    if (typeof settings.onCheck === 'function') {
                        settings.onCheck.call($this, file, file.exists);
                    }
                    return false;
                }

                // Upload a single file
                $data.uploadFile = function(file, uploadAll) {
                    if (!file.skip && !file.complete && !file.uploading) {
                        file.uploading = true;
                        $data.uploads.current++;
                        $data.uploads.attempted++;

                        // Create a new AJAX request
                        xhr = file.xhr = new XMLHttpRequest();

                        // Start the upload
                        // Use the faster FormData if it exists
                        if (typeof FormData === 'function' || typeof FormData === 'object') {

                            // Create a new FormData object
                            var formData = new FormData();

                            // Add the form data
                            formData.append(settings.fileObjName, file);

                            // Add the rest of the formData
                            for (i in settings.formData) {
                                formData.append(i, settings.formData[i]);
                            }

                            // Open the AJAX call
                            xhr.open(settings.method, settings.uploadScript, true);

                            // On progress function
                            xhr.upload.addEventListener('progress', function(e) {
                                if (e.lengthComputable) {
                                    $data.progress(e, file);
                                }
                            }, false);

                            // On complete function
                            xhr.addEventListener('load', function(e) {
                                if (this.readyState == 4) {
                                    file.uploading = false;
                                    if (this.status == 200) {
                                        if (file.xhr.responseText !== 'Invalid file type.') {
                                            $data.uploadComplete(e, file, uploadAll);
                                        } else {
                                            $data.error(file.xhr.responseText, file, uploadAll);
                                        }
                                    } else if (this.status == 404) {
                                        $data.error('404_FILE_NOT_FOUND', file, uploadAll);
                                    } else if (this.status == 403) {
                                        $data.error('403_FORBIDDEN', file, uploadAll);
                                    } else {
                                        $data.error('Unknown Error', file, uploadAll);
                                    }
                                }
                            });

                            // Send the form data (multipart/form-data)
                            xhr.send(formData);

                        } else {

                            // Send as binary
                            var reader = new FileReader();
                            reader.onload = function(e) {

                                // Set some file builder variables
                                var boundary = '-------------------------' + (new Date).getTime(),
                                    dashes   = '--',
                                    eol      = '\r\n',
                                    binFile  = '';

                                // Build an RFC2388 String 
                                binFile += dashes + boundary + eol;
                                // Generate the headers
                                binFile += 'Content-Disposition: form-data; name="' + settings.fileObjName + '"';
                                if (file.name) {
                                    binFile += '; filename="' + file.name + '"';
                                }
                                binFile += eol;
                                binFile += 'Content-Type: application/octet-stream' + eol + eol;
                                binFile += e.target.result + eol;

                                for (key in settings.formData) {
                                    binFile += dashes + boundary + eol;
                                    binFile += 'Content-Disposition: form-data; name="' + key + '"' + eol + eol;
                                    binFile += settings.formData[key] + eol;
                                }

                                binFile += dashes + boundary + dashes + eol;

                                // On progress function
                                xhr.upload.addEventListener('progress', function(e) {
                                    $data.progress(e, file);
                                }, false);

                                // On complete function
                                xhr.addEventListener('load', function(e) {
                                    file.uploading = false;
                                    var status = this.status;
                                    if (status == 404) {
                                        $data.error('404_FILE_NOT_FOUND', file, uploadAll);
                                    } else {
                                        if (file.xhr.responseText != 'Invalid file type.') {    
                                            $data.uploadComplete(e, file, uploadAll);
                                        } else {
                                            $data.error(file.xhr.responseText, file, uploadAll);
                                        } 
                                    }
                                }, false);

                                // Open the ajax request
                                var url = settings.uploadScript;
                                if (settings.method == 'get') {
                                    var params = $(settings.formData).param();
                                    url += params;
                                }
                                xhr.open(settings.method, settings.uploadScript, true);
                                xhr.setRequestHeader("Content-Type", "multipart/form-data; boundary=" + boundary);

                                // Trigger the uploadFile event
                                if (typeof settings.onUploadFile === 'function') {
                                    settings.onUploadFile.call($this, file);
                                }

                                // Send the file for upload
                                xhr.sendAsBinary(binFile);
                            }
                            reader.readAsBinaryString(file);

                        }
                    }
                }

                // Update a file upload's progress
                $data.progress = function(e, file) {
                    if ($.inArray('onProgress', settings.overrideEvents) < 0) {
                        if (e.lengthComputable) {
                            var percent = Math.round((e.loaded / e.total) * 100);
                        }
                        file.queueItem.find('.fileinfo').html(' - ' + percent + '%');
                        file.queueItem.find('.progress-bar').css('width', percent + '%');
                    }
                    // Trigger the progress event
                    if (typeof settings.onProgress === 'function') {
                        settings.onProgress.call($this, file, e);
                    }
                }

                // Trigger an error
                $data.error = function(errorType, file, uploadAll) {
                    if ($.inArray('onError', settings.overrideEvents) < 0) {
                        // Get the error message
                        switch(errorType) {
                            case '404_FILE_NOT_FOUND':
                                errorMsg = '404 Error';
                                break;
                            case '403_FORBIDDEN':
                                errorMsg = '403 Forbidden';
                                break;
                            case 'FORBIDDEN_FILE_TYPE':
                                errorMsg = 'Forbidden File Type';
                                break;
                            case 'FILE_SIZE_LIMIT_EXCEEDED':
                                errorMsg = 'File Too Large';
                                break;
                            default:
                                errorMsg = 'Unknown Error';
                                break;
                        }

                        // Add the error class to the queue item
                        file.queueItem.addClass('error')
                        // Output the error in the queue item
                        .find('.fileinfo').html(' - ' + errorMsg);
                        // Hide the 
                        file.queueItem.find('.progress').remove();
                    }
                    // Trigger the error event
                    if (typeof settings.onError === 'function') {
                        settings.onError.call($this, errorType, file);
                    }
                    file.skip = true;
                    if (errorType == '404_FILE_NOT_FOUND') {
                        $data.uploads.errors++;
                    } else {
                        $data.queue.errors++;
                    }
                    if (uploadAll) {
                        methods.upload.call($this, null, true);
                    }
                }

                // Trigger when a single file upload is complete
                $data.uploadComplete = function(e, file, uploadAll) {
                    if ($.inArray('onUploadComplete', settings.overrideEvents) < 0) {
                        file.queueItem.find('.progress-bar').css('width', '100%');
                        file.queueItem.find('.fileinfo').html(' - Completed');
                        file.queueItem.find('.progress').slideUp(250);
                        file.queueItem.addClass('complete');
                    }
                    // Trigger the complete event
                    if (typeof settings.onUploadComplete === 'function') {
                        settings.onUploadComplete.call($this, file, file.xhr.responseText);
                    }
                    if (settings.removeCompleted) {
                        setTimeout(function() { methods.cancel.call($this, file); }, 3000);
                    }
                    file.complete = true;
                    $data.uploads.successful++;
                    $data.uploads.count++;
                    $data.uploads.current--;
                    delete file.xhr;
                    if (uploadAll) {
                        methods.upload.call($this, null, true);
                    }
                }

                // Trigger when all the files are done uploading
                $data.queueComplete = function() {
                    // Trigger the queueComplete event
                    if (typeof settings.onQueueComplete === 'function') {
                        settings.onQueueComplete.call($this, $data.uploads);
                    }
                }

                // ----------------------
                // Initialize UploadiFive
                // ----------------------

                // Check if HTML5 is available
                if (window.File && window.FileList && window.Blob && (window.FileReader || window.FormData)) {
                    // Assign an ID to the object
                    settings.id = 'uploadifive-' + $this.attr('id');

                    // Wrap the file input in a div with overflow set to hidden
                    $data.button = $('<div id="' + settings.id + '" class="uploadifive-button">' + settings.buttonText + '</div>');
                    if (settings.buttonClass) $data.button.addClass(settings.buttonClass);

                    // Style the button wrapper
                    $data.button.css({
                        'height'      : settings.height,
                        'line-height' : settings.height + 'px', 
                        'overflow'    : 'hidden',
                        'position'    : 'relative',
                        'text-align'  : 'center', 
                        'width'       : settings.width
                    });

                    // Insert the button above the file input
                    $this.before($data.button)
                    // Add the file input to the button
                    .appendTo($data.button)
                    // Modify the styles of the file input
                    .hide();

                    // Create a new input
                    $data.createInput.call($this);

                    // Create the queue container
                    if (!settings.queueID) {
                        settings.queueID = settings.id + '-queue';
                        $data.queueEl = $('<div id="' + settings.queueID + '" class="uploadifive-queue" />');
                        $data.button.after($data.queueEl);
                    } else {
                        $data.queueEl = $('#' + settings.queueID);
                    }

                    // Add drag and drop functionality
                    if (settings.dnd) {
                        var $dropTarget = settings.dropTarget ? $(settings.dropTarget) : $data.queueEl.get(0);
                        $dropTarget.addEventListener('dragleave', function(e) {
                            // Stop FireFox from opening the dropped file(s)
                            e.preventDefault();
                            e.stopPropagation();
                        }, false);
                        $dropTarget.addEventListener('dragenter', function(e) {
                            // Stop FireFox from opening the dropped file(s)
                            e.preventDefault();
                            e.stopPropagation();
                        }, false);
                        $dropTarget.addEventListener('dragover', function(e) {
                            // Stop FireFox from opening the dropped file(s)
                            e.preventDefault();
                            e.stopPropagation();
                        }, false);
                        $dropTarget.addEventListener('drop', $data.drop, false);
                    }

                    // Send as binary workaround for Chrome
                    if (!XMLHttpRequest.prototype.sendAsBinary) {
                        XMLHttpRequest.prototype.sendAsBinary = function(datastr) {
                            function byteValue(x) {
                                return x.charCodeAt(0) & 0xff;
                            }
                            var ords = Array.prototype.map.call(datastr, byteValue);
                            var ui8a = new Uint8Array(ords);
                            this.send(ui8a.buffer);
                        }
                    }

                    // Trigger the oninit event
                    if (typeof settings.onInit === 'function') {
                        settings.onInit.call($this);
                    }

                } else {

                    // Trigger the fallback event
                    if (typeof settings.onFallback === 'function') {
                        settings.onFallback.call($this);
                    }
                    return false;

                }

            });

        },


        // Write some data to the console
        debug : function() {

            return this.each(function() {

                console.log($(this).data('uploadifive'));

            });

        },

        // Clear all the items from the queue
        clearQueue : function() {

            this.each(function() {

                var $this    = $(this),
                    $data    = $this.data('uploadifive'),
                    settings = $data.settings;

                for (var key in $data.inputs) {
                    input = $data.inputs[key];
                    limit = input.files.length;
                    for (i = 0; i < limit; i++) {
                        file = input.files[i];
                        methods.cancel.call($this, file);
                    }
                }
                // Trigger the onClearQueue event
                if (typeof settings.onClearQueue === 'function') {
                    settings.onClearQueue.call($this, $('#' + $data.settings.queueID));
                }

            });

        },

        // Cancel a file upload in progress or remove a file from the queue
        cancel : function(file, fast) {

            this.each(function() {

                var $this    = $(this),
                    $data    = $this.data('uploadifive'),
                    settings = $data.settings;

                // If user passed a queue item ID instead of file...
                if (typeof file === 'string') {
                    if (!isNaN(file)) {
                        fileID = 'uploadifive-' + $(this).attr('id') + '-file-' + file;
                    }
                    file = $('#' + fileID).data('file');
                }

                file.skip = true;
                $data.filesCancelled++;
                if (file.uploading) {
                    $data.uploads.current--;
                    file.uploading = false;
                    file.xhr.abort();
                    delete file.xhr;
                    methods.upload.call($this);
                }
                if ($.inArray('onCancel', settings.overrideEvents) < 0) {
                    $data.removeQueueItem(file, fast);
                }

                // Trigger the cancel event
                if (typeof settings.onCancel === 'function') {
                    settings.onCancel.call($this, file);
                }
                
            });
            
        },

        // Upload the files in the queue
        upload : function(file, keepVars) {

            this.each(function() {

                var $this    = $(this),
                    $data    = $this.data('uploadifive'),
                    settings = $data.settings;

                if (file) {

                    $data.uploadFile.call($this, file);

                } else {

                    // Check if the upload limit was reached
                    if (($data.uploads.count + $data.uploads.current) < settings.uploadLimit || settings.uploadLimit == 0) {
                        if (!keepVars) {
                            $data.uploads.attempted   = 0;
                            $data.uploads.successsful = 0;
                            $data.uploads.errors      = 0;
                            var filesToUpload = $data.filesToUpload();
                            // Trigger the onUpload event
                            if (typeof settings.onUpload === 'function') {
                                settings.onUpload.call($this, filesToUpload);
                            }
                        }

                        // Loop through the files
                        $('#' + settings.queueID).find('.uploadifive-queue-item').not('.error, .complete').each(function() {
                            _file = $(this).data('file');
                            // Check if the simUpload limit was reached
                            if (($data.uploads.current >= settings.simUploadLimit && settings.simUploadLimit !== 0) || ($data.uploads.current >= settings.uploadLimit && settings.uploadLimit !== 0) || ($data.uploads.count >= settings.uploadLimit && settings.uploadLimit !== 0)) {
                                return false;
                            }
                            if (settings.checkScript) {
                                // Let the loop know that we're already processing this file
                                _file.checking = true;
                                skipFile = $data.checkExists(_file);
                                _file.checking = false;
                                if (!skipFile) {
                                    $data.uploadFile(_file, true);
                                }
                            } else {
                                $data.uploadFile(_file, true);
                            }
                        });
                        if ($('#' + settings.queueID).find('.uploadifive-queue-item').not('.error, .complete').size() == 0) {
                            $data.queueComplete();
                        }
                    } else {
                        if ($data.uploads.current == 0) {
                            if ($.inArray('onError', settings.overrideEvents) < 0) {
                                if ($data.filesToUpload() > 0 && settings.uploadLimit != 0) {
                                    alert('The maximum upload limit has been reached.');
                                }
                            }
                            // Trigger the onError event
                            if (typeof settings.onError === 'function') {
                                settings.onError.call($this, 'UPLOAD_LIMIT_EXCEEDED', $data.filesToUpload());
                            }
                        }
                    }

                }

            });

        },

        // Destroy an instance of UploadiFive
        destroy : function() {

            this.each(function() {

                var $this    = $(this),
                    $data    = $this.data('uploadifive'),
                    settings = $data.settings;
            
                // Clear the queue
                methods.clearQueue.call($this);
                // Destroy the queue if it was created
                if (!settings.queueID) $('#' + settings.queueID).remove();
                // Remove extra inputs
                $this.siblings('input').remove();
                // Show the original file input
                $this.show()
                // Move the file input out of the button
                .insertBefore($data.button);
                // Delete the button
                $data.button.remove();
                // Trigger the destroy event
                if (typeof settings.onDestroy === 'function') {
                    settings.onDestroy.call($this);
                }

            });

        }

    }

    $.fn.upload = function(method) {

        if (methods[method]) {
            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
        } else if (typeof method === 'object' || !method) {
            return methods.init.apply(this, arguments);
        } else {
            $.error('The method ' + method + ' does not exist in $.uploadify');
        }

    }

})(jQuery);
});
define("js/home/comment", ["jquery"], function(require, exports, module){
/**
 * 退换货申请
 * @author: yyqing<yanqing.yang@yoho.cn>
 * @date: 2016/3/1
 */
var $ = require("jquery");

var $comment = $('.comment-table'),
    $remarkBtn = $comment.find('.remark-btn');

var $dialog = $('#comment-dialog-widget'),
    $titleBar = $dialog.find('.dialog-titlebar'),
    $commentArea = $dialog.find('textarea'),
    $closeBtn = $dialog.find('.dialog-close-btn');

var pageW = $(document).width(),
    pageH = $(document).height(),
    winH = $(window).height();

var dialog = {
    padding: 12,
    canmove: false,
    offset: {},
    maxtop: 0,
    maxleft: 0
};

$remarkBtn.click(function() {
    var scrollTop = $(document).scrollTop();

    $commentArea.val('');
    $dialog.removeClass('hide').css({
        top: scrollTop + (winH - $dialog.height() - dialog.padding) / 2,
        left: (pageW - $dialog.width() - dialog.padding) / 2
    });
});

// 评论弹窗
$titleBar.bind('mousedown', function(e) {
    if ($(e.target).hasClass('dialog-close-btn')) {
        return;
    }

    dialog.canmove = true;
    dialog.offset = {
        x: e.offsetX,
        y: e.offsetY
    };
    dialog.maxtop = pageH - $dialog.height() - dialog.padding;
    dialog.maxleft = pageW - $dialog.width() - dialog.padding;
});

$(document).mousemove(function(e) {
    var mtop, mleft;

    if (!dialog.canmove) {
        return;
    }

    mtop = e.pageY - dialog.offset.y;
    mleft = e.pageX - dialog.offset.x;
    mtop = mtop < dialog.maxtop ? mtop : dialog.maxtop;
    mleft = mleft < dialog.maxleft ? mleft : dialog.maxleft;
    $dialog.css({
        top: mtop > 0 ? mtop : 0,
        left: mleft > 0 ? mleft : 0
    });
}).mouseup(function(e) {
    dialog.canmove = false;
});

$closeBtn.click(function() {
    $dialog.addClass('hide');
});
});
define("js/home/edit", ["jquery","handlebars","source-map"], function(require, exports, module){
/**
 * 个人中心页-个人资料编辑
 * @author: zhaobiao<bill.zhao@yoho.cn>
 * @date: 2016/02/17
 */
var $ = require("jquery");

var $allEditForms = $('.userinfo-edit form');

var address = require("js/home/common-address");

var date = {
    init: function(year, month, day) {
        var $year = $('#year'),
            $month = $('#month'),
            $day = $('#day');

        var that = this;

        this.createDay($year.val(), $month.val(), $day.val());

        $year.on('change', function() {
            that.update();
        });

        $month.on('change', function() {
            that.update();
        });
    },
    update: function() {
        this.createDay($('#year').val(), $('#month').val(), $('#day').val());
    },
    createDay: function(year, month, day) {
        var html = '<select name="day" id="day">',
            monthArray = new Array(4, 6, 9, 11),
            dayNum = 31;

        var select,
            i;

        year = parseInt(year);
        month = parseInt(month);

        if (year === 0) {
            year = 0;
        }

        if (month === 0) {
            month = 0;
        }

        $('#year').val(year.toString());
        $('#month').val(month.toString());

        html += '<option value="0">日</option>';

        if (year > 0 && month > 0) {
            if ($.inArray(month, monthArray) !== -1) {
                dayNum = 30;
            } else if (month === 2) {
                dayNum = 28;
                if (0 === year % 4 && (year % 100 !== 0 || year % 400 === 0)) {
                    dayNum = 29;
                }
            }

            for (i = 1; i <= dayNum; i++) {
                select = '';

                if (parseInt(day) === i) {
                    select = 'selected';
                }
                html += '<option value="' + i + '" ' + select + '>' + i	+ '</option>';
            }
        }
        html += '</select>';

        $('#day').replaceWith(html);
    }
};


$('.userinfo-edit h2').on('click', function() {
    var $form = $(this).next();

    $allEditForms.slideUp('fast');
    $form.css('display') === 'none' ? $form.slideDown('slow') : null;

});

function checkBaseForm() {
    var nicknameLength = $('#nickname').val().length,
        usernameLength = $('#username').val().length,
        $gender = $('input[name="gender"]'),
        $year = $('#year'),
        $month = $('#month'),
        $day = $('#day');

    if (nicknameLength === 0) {
        alert('请输入昵称');
        return false;
    }

    if (usernameLength === 0) {
        alert('请输入用户名');
        return false;
    }

    if (nicknameLength >= 20) {
        alert('昵称最长为20个字符');
        return false;
    }


    if (!$gender.is(':checked')) {
        alert('请选择性别');
        return false;
    }

    if ($year.val() === '0' || $month.val() === '0' || $day.val() === '0') {
        alert('请选择出生年月日');
        return false;
    }

    return true;
}

function checkContactForm() {
    if ($('#province').val() === '0' || $('#city').val() === '0' || $('#areaCode').val() === '0') {
        alert('请选择所在区域');
        return false;
    }

    if ($('#province').val() === null || $('#city').val() === null || $('#areaCode').val() === null) {
        alert('请选择所在区域');
        return false;
    }

    if ($('#phone').val().length === 0 && $('#mobile').val().length === 0) {
        alert('电话和手机号码不能同时为空,请填写!');
        return false;
    }


    if ($('#fullAddress').val().length === 0) {
        alert('请填写地址');
        return false;
    }

    if ($('#zipCode').val().length === 0 || $('#zipCode').val().length < 2) {
        alert('请填写邮编');
        return false;
    }

    return true;
}

function checkHabbitForm() {
    if (!$('.user-habbit-info input').is(':checked')) {
        alert('请填写购物&着装习惯');
        return false;
    }

    return true;
}

function checkFavoriteForm() {
    if ($('#likebrand').val() === '') {
        alert('请选择品牌');
        return false;
    }

    return true;
}

function delBrand(brandId) {
    var brand = $('#likebrand').val();

    if (parseInt(brandId) === 0) {
        return false;
    }

    $('#likebrand').val(brand.replace(',' + brandId + ',', ','));
    $('#pp-' + brandId).attr('checked', false);
    $('#brand-' + brandId).remove();
}



function addBrand(domObj, brandId, brandName) {
    var html = '<li id="brand-' + brandId + '">' +
                brandName + '<a href="javascript:void(0);" class="btn-del"></a></li>';

    var brandInfo = $('#brand-' + brandId).html(),
        brandStr = $('#likebrand').val();

    var $brandBox = $('#brand-box');

    if (parseInt(brandId) === 0) {
        return false;
    }

    if (typeof domObj !== 'undefined' && domObj !== '' && domObj.checked === false) {
        delBrand(brandId);
        return false;
    }
    if (brandInfo) {
        alert('您已经选择了该品牌.');
        return false;
    }
    $brandBox.append(html);

    $brandBox.find('li>a').off('click').on('click', function() {
        delBrand($(this).closest('li').attr('id').substr(6));
    });

    brandStr += brandId + ',';
    $('#likebrand').val(brandStr);
}

function checkBrand() {
    var postData = {
            brandName: $('#keywords').val()
        };

    $.post('/home/user/isbrandname', postData, function(data) {
        if (data.code === 200) {
            if (data.data.id && data.data.brand_name) {
                addBrand('', data.data.id, data.data.brand_name);
                $('#keywords').val('');
                return true;
            } else {
                alert('网络异常,请重试');
                return false;
            }
        }
        alert(data.message);
        return false;
    }, 'json');
}

function save(postUrl, btnId) {
    var $form = $('#' + btnId).closest('form');

    $.post(postUrl, $form.serialize(), function(data) {
        if (data.code === 200) {
            alert(data.message);
            setTimeout(function() {
                $form.closest('div').next().find('h2').click();
            }, 100);
            return true;
        }
        alert(data.message);
        return false;
    }, 'json');
}


$('#base-info').on('click', function() {
    if (checkBaseForm()) {
        save('/home/user/edituserinfo/', 'base-info');
    }
});

$('#contact-info').on('click', function() {
    if (checkContactForm()) {
        save('/home/user/editusercontactinfo/', 'contact-info');
    }
});

$('#shopping-info').on('click', function() {
    if (checkHabbitForm()) {
        save('/home/user/edituserhabitsinfo/', 'shopping-info');
    }
});

$('#favorite-brand').on('click', function() {
    if (checkFavoriteForm()) {
        $.ajax({
            url: '/home/user/edituserlikebrand/',
            type: 'post',
            datatype: 'json',
            data: {
                brand: $('#likebrand').val()
            },
            success: function(data) {
                if (data.code === 200) {
                    alert(data.message);
                    return true;
                }
                alert(data.message);
                return false;
            },
            error: function(err) {
                alert('网络异常');
            }
        });
    }
});

$('#add-brand-btn').on('click', function() {
    checkBrand();
});

$('.user-favorite-info input[type="checkbox"]').on('click', function() {
    var $this = $(this);

    addBrand(this, $this.attr('id').substr(3), $this.parent().text());
});

(function() {
    var $brands = $('#brand-box li');

    if ($brands.length > 0) {
        $brands.find('a').on('click', function() {
            delBrand($(this).closest('li').attr('id').substr(6));
        });
    }
})();

date.init();

(function() {
    if (!$('#province').val()) {
        address.loadAllData(0, {
            provinceDomId: 'province',
            cityDomId: 'city',
            areaDomId: 'areaCode'
        });
    } else {
        address.bindAreaChange({
            provinceDomId: 'province',
            cityDomId: 'city',
            areaDomId: 'areaCode'
        });
    }
})();

});
define("js/home/gift", ["jquery"], function(require, exports, module){
/**
 * 个人中心页-兑换礼品卡
 * @author: wsl<shuiling.wang@yoho.cn>
 * @date: 2016/02/22
 */
var $ = require("jquery");

var $giftError = $('.giftCardCode').find('.gift-error'),
    $codeError = $('.captchaCode').find('.gift-error'),
    reg = '',
    code = '';

var Gift = {
    suc1: false,
    suc2: false,
    suc3: false,
    suc4: false,
    bindGiftCardForm: function() {
        $('#giftCardCode1').bind('blur keyup', function() {
            reg = /^[0-9a-zA-Z]{4,4}$/;

            if (!reg.test($('#giftCardCode1').val())) {
                $giftError.html('您输入的兑换码有误,兑换码必须为数字或字母,每个文本框里只能输入四个兑换码!');
                Gift.suc1 = false;
            } else {
                $giftError.html('');
                $('#giftCardCode2').focus();
                Gift.suc1 = true;
            }
        });

        $('#giftCardCode2').bind('blur keyup', function() {
            reg = /^[0-9a-zA-Z]{4,4}$/;

            if (!reg.test($('#giftCardCode2').val())) {
                $giftError.html('您输入的兑换码有误,兑换码必须为数字或字母,每个文本框里只能输入四个兑换码!');
                Gift.suc2 = false;
            } else {
                $giftError.html('');
                $('#giftCardCode3').focus();
                Gift.suc2 = true;
            }
        });

        $('#giftCardCode3').bind('blur keyup', function() {
            reg = /^[0-9a-zA-Z]{4,4}$/;

            if (!reg.test($('#giftCardCode3').val())) {
                $giftError.html('您输入的兑换码有误,兑换码必须为数字或字母,每个文本框里只能输入四个兑换码!');
                Gift.suc3 = false;
            } else {
                $giftError.html('');
                Gift.suc3 = true;
            }
        });

        $('#captchaCode').bind('blur keyup', function() {
            code = $('#captchaCode').val();

            if (code.length <= 0) {
                $codeError.html('请输入验证码!');
                Gift.suc4 = false;
            } else {
                $codeError.html('');
                Gift.suc4 = true;
            }
        });
    },

    checkForm: function() {
        if ($.trim($('#giftCardCode1').val()) === '' || $.trim($('#giftCardCode2').val()) === '' ||
            $.trim($('#giftCardCode3').val()) === '') {
            $giftError.html('您输入的兑换码有误,兑换码必须为数字或字母,每个文本框里只能输入四个兑换码!');
            return false;
        }

        if ($.trim($('#captchaCode').val()) === '') {
            $codeError.html('请输入验证码!');
            return false;
        }

        return true;
    }
};

//更换验证码
function refreshCaptcha() {
    var dt = new Date();

    $('#imgcode').attr('src', '/home/gift/captcha?t=' + dt.getTime());
    return false;
}

$('#sub-gift').on('click', function() {
    if (Gift.checkForm()) {
        $('#giftCardForm').submit();
    } else {
        return false;
    }
});

$(document).on('click', '#imgcode,.check-img', function() {
    refreshCaptcha();
});

$(function() {
    refreshCaptcha();
    Gift.bindGiftCardForm();
});
});
define("js/home/validate", ["jquery"], function(require, exports, module){
/**
 * 个人中心页-账号安全验证
 * @author: wsl<shuiling.wang@yoho.cn>
 * @date: 2016/02/23
 */
var $ = require("jquery");

var $checkUser = $('.check-user'),
    $checkInput = $checkUser.find('input').not('input[type=button],input[type=hidden]'),
    canSend = true,
    stime = 60,
    sInt;

// 身份校验
function checkForm(dom) {
    var val = dom.val(),
        len = val.length,
        $domParent = dom.parent(),
        $checkInfo = $domParent.find('.check-info'),
        inputName = dom.attr('name'),
        regular = '';

    $checkInfo.html('');

    if (inputName === 'oldpassword') {
        if (len === 0) {
            $checkInfo.html('<div class="form-error">密码不能为空!</div>');
            dom.addClass('input-error');
            return false;
        } else {
            $.get('/home/account/pass?pass=' + encodeURIComponent(val), function(data) {
                if (typeof data.code !== 'undefined' && data.code === 200) {
                    $checkInfo.html('<div class="form-success">&nbsp;</div>');
                    dom.removeClass('input-error');
                    return true;
                } else {
                    $checkInfo.html('<div class="form-error">密码错误!</div>');
                    dom.addClass('input-error');
                    return false;
                }
            });
        }
    }

    if (inputName === 'code') {
        $.get('/home/account/review?code=' + val, function(data) {
            if (typeof data.code !== 'undefined' && data.code === 200) {
                $checkInfo.html('<div class="form-success">&nbsp;</div>');
                dom.removeClass('input-error');
                return true;
            } else {
                $checkInfo.html('<div class="form-error">验证码错误!</div>');
                dom.addClass('input-error');
                return false;
            }
        });
    }

    if (inputName === 'newmail') {
        regular = '([a-zA-Z0-9]+)@([a-zA-Z0-9]+)[\.]([a-zA-Z0-9]+)';

        if (val.match(regular) === null) {
            $checkInfo.html('<div class="form-error">邮箱错误!</div>');
            dom.addClass('input-error');
            return false;
        } else {
            $.get('/home/account/mail?mail=' + val, function(data) {
                if (typeof data.code !== 'undefined' && data.code === 200) {
                    $checkInfo.html('<div class="form-success">&nbsp;</div>');
                    dom.removeClass('input-error');
                    return true;
                } else {
                    $checkInfo.html('<div class="form-error">邮箱已存在!</div>');
                    dom.addClass('input-error');
                    return false;
                }
            });

        }
    }

    if (inputName === 'mobile') {
        regular = '^1[35847]{1}[0-9]{9}';

        if (len === 0) {
            $checkInfo.html('<div class="form-error">手机号不能为空!</div>');
            dom.addClass('input-error');
            return false;
        } else if (val.match(regular) === null) {
            $checkInfo.html('<div class="form-error">手机号错误!</div>');
            dom.addClass('input-error');
            return false;
        } else {
            $.get('/home/mobile/exmobi?mobile=' + val, function(data) {
                if (typeof data.code !== 'undefined' && data.code !== 200) {
                    dom.addClass('input-error');
                    $checkInfo.html('<div class="form-error">手机号已经存在!</div>');
                    return false;
                } else {
                    dom.removeClass('input-error');
                    $checkInfo.html('<div class="form-success">&nbsp;</div>');
                    return true;
                }
            });
        }
    }

    if (inputName === 'password') {
        if (len < 6 || len > 20) {
            dom.addClass('input-error');
            $checkInfo.html('<div class="form-error">密码长度为6-20字符</div>');
            return false;
        } else {
            dom.removeClass('input-error');
            $checkInfo.html('<div class="form-success">&nbsp;</div>');
            return true;
        }
    }

    if (inputName === 'confirm_password') {
        if ($('#password').val() !== val) {
            dom.addClass('input-error');
            $checkInfo.html('<div class="form-error">两次密码不一致!</div>');
            return false;
        } else if ($('#password').val() !== '') {
            dom.removeClass('input-error');
            $('#password').next().html('<div class="form-success">&nbsp;</div>');
            $checkInfo.html('<div class="form-success">&nbsp;</div>');
            return true;
        }
    }

    return true;
}

// 校验表单
function checkAllForm() {
    var arr = [];

    $.each($checkInput, function(key, item) {
        arr.push(checkForm($(item)));
    });

    if (arr.indexOf(false) >= 0) {
        return false;
    } else {
        return true;
    }
}

// 切换验证码
function changeCode() {
    var timestamp = (new Date()).getTime();

    $('#the-code-img').attr('src', '/home/account/code?g=email_auth&time=' + timestamp);
}

// 重新发送倒计时
function code() {
    var sstring = '';

    if (stime > 0) {
        sstring = '重新发送' + stime + '秒';
        $('#sendButton').text(sstring);
        stime = stime - 1;
    } else {
        stime = 60;
        $('#sendButton').text('发送验证码');
        clearInterval(sInt);
        canSend = true;
    }
}

// 发送手机验证码
function sendcode() {
    var $mobile = $('#mobilevalue'),
        $code = $('#inputcode'),
        $mcheckInfo = $mobile.next(),
        mobileV = $mobile.val(),
        $ccheckInfo = $code.parent().find('check-info');

    if (canSend) {
        if (mobileV.match('^1[35847]{1}[0-9]{9}') === null) {
            $mcheckInfo.html('<div class="form-error">手机号错误!</div>');
            $mobile.addClass('input-error');
            return false;
        }
        $.get('/home/mobile/sendcode?mobile=' + mobileV, function(data) {
            if (typeof data.code !== 'undefined' && data.code === 200) {
                canSend = false;
                sInt = setInterval(function() {
                    code();
                }, 1000);
                $ccheckInfo.html('');
            } else {
                $ccheckInfo.html('<div class="form-error">验证码发送失败</div>');
            }
        });
    } else {
        return false;
    }
}

//验证完成后倒计时跳转
function toHome() {
    window.location.href = '/home/account';
}

$checkInput.blur(function() {
    checkForm($(this));
});

$('.sub-btn').on('click', function() {
    if (checkAllForm()) {
        $('#pwdform').submit();
    } else {
        return false;
    }
});

$('.the-code').on('click', function() {
    changeCode();
});

$('#send-mobile-code').on('click', function() {
    sendcode();
});

$('#inputcode').change(function() {
    var code = $('#inputcode').val();

    if (code !== '') {
        $.get('/home/mobile/review?code=' + code, function(data) {
            if (typeof data.code !== 'undefined' && data.code === 200) {
                $('#codetip').html('<div class="form-success">&nbsp;</div>');
            } else {
                $('#codetip').html('<div class="form-error">验证码错误!</div>');
            }
        });
    }
});

$(function() {
    var t = null;

    if ($('.res-info').length > 0) {
        t = setTimeout(function() {
            toHome();
        }, 5000);
    }

    changeCode();
});
});
define("js/home/address", ["jquery","handlebars","source-map"], function(require, exports, module){
/**
 * 个人中心页-地址管理
 * @author: wsl<shuiling.wang@yoho.cn>
 * @date: 2016/02/24
 */
var $ = require("jquery"),
    regionCode = require("js/home/common-address"),
    dialog = require("js/common/dialog"),
    Alert = dialog.Alert;

var active;

var $del = $('.address-del'),
    $edit = $('.address-modify'),
    $input = $('.input-1');

var address = {

    evil: function(fn) {
        var Fn = Function;

        return new Fn('return ' + fn)();
    },

    clearAddrForm: function() {
        $('#addressName').val('');
        $('#address').val('');
        $('#zipCode').val('');
        $('#phone').val('');
        $('#mobile').val('');
        $('#email').val('');
        $('#addrId').val(0);
        $('#btn-reset').hide();
        $('#form-status').html('添加新地址');
    },

    editAddr: function(id) {
        $.getJSON('/home/address/editAddress?id=' + id, function(jsonData) {
            if (jsonData.code === 200) {
                $('#form-status').html('修改地址');
                $('#addressName').val(jsonData.data.consignee);

                regionCode.loadAllData(jsonData.data.area_code, {});
                $('#address').val(jsonData.data.address);
                $('#email').val(jsonData.data.email);
                $('#phone').val(jsonData.data.phone);
                $('#mobile').val(jsonData.data.mobile);
                $('#zipCode').val(jsonData.data.zip_code);
                $('#addrId').val(jsonData.data.address_id);
                $('#btn-reset').show();
            }
        });
    },

    saveAddr: function(callbackFunc) {
        $.post('/home/address/saveAddress', $('#address-form').serialize(), function(data) {
            if (data.code === 200) {
                location.reload();
            } else {
                active = new Alert(data.message);
                active.show();
            }
        }, 'json');
    },

    // 删除地址
    delAddr: function(addrId) {
        $.getJSON('/home/address/delAddress?id=' + addrId, function(jsonData) {
            if (jsonData.code === 200) {
                $('.address-list').find('li[addressId=' + addrId + ']').remove();
            } else {
                active = new Alert('删除失败');
                active.show();
            }
        });
    },

    setDefaultAddr: function(addrId) {
        var oldBtn = $('.address-list').find('.default-btn'),
            oldLi = $('.address-list').find('.default-btn').parents('li'),
            curLi = $('.address-list').find('li[addressId=' + addrId + ']'),
            curBtn = curLi.find('.set-default-btn');

        $.getJSON('/home/address/defaultAddress?id=' + addrId, function(jsonData) {
            if (jsonData.code === 200) {
                oldBtn.attr('class', 'btn-c3 set-default-btn');
                oldLi.removeClass('preferred');
                oldBtn.html('<span>设为常用地址</span>');
                curBtn.attr('class', 'btn-c2 default-btn');
                oldBtn.html('<span>设为常用地址</span>');
                curLi.addClass('preferred');
            } else {
                active = new Alert('设置失败');
                active.show();
            }
        });
    }
};

if (!Array.prototype.indexOf) {
    Array.prototype.indexOf = function(obj, start) {
        var i,
            j;

        for (i = (start || 0), j = this.length; i < j; i++) {
            if (this[i] === obj) {
                return i;
            }
        }

        return -1;
    };
}

// 获取地址id
function getAddressId(dom) {
    var li = dom.parents('.address-content'),
        id = li.attr('addressId');

    return id;
}

//表单焦点显示
function focusAction(opt) {
    var msg = '';

    if (opt.inputName === 'addressName') {
        msg = '真实姓名在2到5个汉字之间';
    }

    if (opt.inputName === 'address') {
        msg = '请填写详细地址';
    }

    if (opt.inputName === 'zipCode') {
        msg = '请输入收货人所在地邮编号';
    }

    if (opt.inputName === 'phone') {
        msg = '格式例如:0577-88888888';
    }

    if (opt.inputName === 'mobile') {
        msg = '请输入手机号,如1360000000';
    }

    if (opt.inputName === 'email') {
        msg = '用来接收订单提醒邮件,便于您及时了解订单状态';
    }

    opt.$checkInfo.removeClass('form-prompt').addClass('form-focus').html(msg);
}

//表单失去焦点显示
function blurAction(opt) {
    var regular = '',
        res = true,
        msg = '输入正确',
        domClass = 'form-info form-success',
        value = opt.val;

    if (opt.inputName === 'addressName') {
        regular = /^[\u4e00-\u9fa5]{2,5}$/;

        if (opt.len < 1 || opt.len > 12) {
            msg = '真实姓名在2到5个汉字之间,请确认';
            res = false;
            domClass = 'form-info form-error';
        } else if (regular.test(opt.val) === false) {
            msg = '真实姓名至少2个中文,最多5个中文';
            res = false;
            domClass = 'form-info form-error';
        }
    }

    if (opt.inputName === 'address') {
        if (opt.len < 2) {
            msg = '请填写详细地址';
            res = false;
            domClass = 'form-info form-error';
        }
    }

    if (opt.inputName === 'zipCode') {
        regular = /^[0-9]{6}$/;

        if (opt.len === 0) {
            msg = '请输入收货人所在地邮编号';
            res = false;
            domClass = 'form-info form-error';
        } else if (regular.test(opt.val) === false) {
            msg = '你输入的邮编式不正确';
            res = false;
            domClass = 'form-info form-error';
        }
    }

    if (opt.inputName === 'phone') {
        regular = /^(0[0-9]{2,3}\-)?([2-9][0-9]{6,7})+(\-[0-9]{1,4})?$/;

        if (opt.len === 0) {
            msg = '你真的不想留联系电话了吗?';
            res = true;
            domClass = 'form-info form-success';
        } else if (regular.test(opt.val) === false) {
            msg = '你输入的联系电话格式不正确';
            res = false;
            domClass = 'form-info form-error';
        }
    }

    if (opt.inputName === 'mobile') {
        regular = /^1[3|4|5|8|7][0-9]{9}$/;

        if (opt.len !== 11) {
            msg = '手机号码必须是11位的,请确认';
            res = false;
            domClass = 'form-info form-error';
        } else if (regular.test(opt.val) === false) {
            msg = '您输入的手机号格式不正确';
            res = false;
            domClass = 'form-info form-error';
        }
    }

    if (opt.inputName === 'email') {
        regular = '^[a-z0-9_\-]+(\.[_a-z0-9\-]+)*@([_a-z0-9\-]+\.)+([a-z]{2}|aero|arpa|biz|com|coop|' +
                    'edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel)$';

        if (value.match(regular) === null || opt.len === 0) {
            msg = '你输入的邮件地址格式不正确';
            res = false;
            domClass = 'form-info form-error';
        }
    }

    opt.$checkInfo.removeClass().addClass(domClass).html(msg);
    return res;
}


// 地址表单验证
function checkAddressForm(dom, action) {
    var val = dom.val(),
        $domParent = dom.parent(),
        opt = {
            val: val,
            len: val.length,
            $domParent: dom.parent(),
            $checkInfo: $domParent.find('span'),
            inputName: dom.attr('name')
        };

    if (action === 'focus') {
        focusAction(opt);
    }

    if (action === 'blur') {
        return blurAction(opt);
    }
}

function fullOneValidator() {
    var phone = $('#phone').next(),
        mobile = $('#mobile').next();

    if (mobile.hasClass('form-success') && !phone.hasClass('form-error') && $('#phone').val().length === 0) {
        phone.removeClass().addClass('form-prompt form-info').html('请输入你的联系电话,可以为空哦');
        return true;
    } else if (phone.html() === '输入正确' && !mobile.hasClass('form-error') && $('#mobile').val().length === 0) {
        mobile.removeClass().addClass('form-prompt form-info').html('填写手机号便于接收发货和收货通知');
        return true;
    } else if (!mobile.hasClass('form-success') && phone.html() !== '输入正确') {
        phone.removeClass().addClass('form-success form-info').html('你真的不想留联系电话了吗?');
        mobile.removeClass().addClass('form-prompt form-info').html('填写手机号便于接收发货和收货通知');
        $('#mobile').focus();
        return false;
    }
}

//校验所有内容
function checkAllForm() {
    var arr = [];

    $.each($input, function(key, item) {
        arr.push(checkAddressForm($(item), 'blur'));
    });

    arr.push(fullOneValidator());

    $.each($('.form-info'), function(key, item) {
        if ($(item).hasClass('form-error')) {
            $(item).prev().focus();
            return false;
        }
    });


    if (arr.indexOf(false) === -1) {
        return true;
    } else {
        return false;
    }
}

$(document).on('click', '.set-default-btn', function() {
    var id = getAddressId($(this));

    address.setDefaultAddr(id);
});

$del.on('click', function() {
    var id = getAddressId($(this));

    address.delAddr(id);
});

$edit.on('click', function() {
    var id = getAddressId($(this));

    address.editAddr(id);
    $('#btn-reset').show();
});

$input.on('focus', function() {
    checkAddressForm($(this), 'focus');
});

$input.on('blur', function() {
    checkAddressForm($(this), 'blur');
});

$('#address-info').on('click', function() {
    if (checkAllForm()) {
        address.saveAddr();
    }
});

$(document).ready(function() {
    regionCode.loadAllData(
        0,
        {
            provinceDomId: 'province',
            cityDomId: 'city',
            areaDomId: 'areaCode'
        }
    );

    address.clearAddrForm();

    $('#btn-reset').click(function() {
        address.clearAddrForm();
    });
});
});
define("js/order/ensure", ["jquery","handlebars","source-map"], function(require, exports, module){
/**
 * @description: 订单保存
 * @time: 2015/12/21
 */

var $ = require("jquery");

var address = require("js/order/address");

var dialog = require("js/common/dialog");

var Order = {
    /*业务数据(人民币)*/
    Data: {
        product: 0,//商品价格
        activity: 0,//活动
        carriage: 0,//邮费
        juan: 0,//优惠卷
        yohocoin: 0//YOHO币
    },
    /*view 交互*/
    UI: {
        e: {
            $pan: $('.pan'),
            $jc: $('#juancode'),
            $bp: $('#biprice'),
            $statistics: $('li', '.play-total'),
            $tobi: $('p em', '.play-bi-pan .play-pan'),
            $cancel: $('.cancel', '.btn-group'),
            $total: $('em', '.to-play'),
            $tbody: $('table tbody', '.pay-wapper'),

            //请填写并核对一下信息
            $orderSelectionSave: $('.address-list h2 span'),
            $addAddress: $('.add-address'),
            $addressManage: $('.address-manage'),
            $spanPayTypeLegend: $('span.pay-type-legend'),
            $supportType: $('.support-type'),
            $existAddressListWrap: $('.exist-address-list'),
            $existAddressList: $('.exist-address-list').find('li'),
            $existAddress: $('.exist-address-list').find('input[name="exist-address"]'),
            $payTimeModify: $('.pay-time-modify'),
            $switchPayModify: $('.switch-pay-modify'),
            $modityPayInfo: $('.modity-pay-info'),
            $payTotal: $('.play-total'),
            $toPay: $('.to-play em')
        },
        init: function() {
            var e = this.e,
            d = Order.Data,
            c = Order.Common;

            //初始化产品价格(表格中的价格)
            e.$tbody.find('tr').each(function(index) {

                var td = $(this).find('td');
                var len = e.$tbody.find('tr').length;
                var subtotal = parseFloat(td.eq(1).html()) * parseInt(td.eq(3).html());

                td.eq(1).html('¥' + td.eq(1).html());

                if (td.hasClass('xforone')) {
                    td.eq(4).find('del').html('¥' + c.strFixed(subtotal));
                    subtotal = 0;
                } else {
                    td.eq(4).html('¥' + c.strFixed(subtotal));
                }
                d.product += subtotal;
                if (!index) {
                    td.last().attr('rowspan', len);
                } else {
                    td.last().remove();
                }
                if (index === len - 1) {
                    e.$tbody.find('tr').eq(0).find('td').last().html('<strong>¥' + c.strFixed(d.product) + '</strong>');
                }
            });

            // 使用优惠券、使用yoho币点击展开
            e.$pan.find('dt').click(function() {

                var pan = $(this).parent('dl.pan');

                if (pan.find('dd').is(':hidden')) {
                    c.winShow(pan);

                    $(this).addClass('active');
                } else {
                    c.winHide(pan);

                    $(this).removeClass('active');
                }

            });

            //请填写并核对一下信息
            e.$orderSelectionSave.click(function() {
                var i = 0,
                    $addressLi = $('.exist-address-list li'),
                    liLen = $addressLi.length,
                    notSelect = 0;

                if (!$(this).attr('expand')) {

                    $(this).attr('expand', 'expand').text('[不保存并关闭]');

                    $('.exist-address-list li').removeClass('hide');

                    $('.save-btn').removeClass('hide');

                    e.$existAddressListWrap.addClass('address-expand');

                    if (liLen === 1) {
                        e.$addressManage.removeClass('hide');
                    }

                } else {

                    for (i = 0; i < liLen; i++) {

                        if ($addressLi.eq(i).hasClass('address_select')) {
                            notSelect++;
                        }

                        if (!$addressLi.eq(i).hasClass('address_select')) {
                            $addressLi.eq(i).addClass('hide');
                        }
                    }

                    if (notSelect === 0) {
                        $('.exist-address-list li:not(".use-new-address")').removeClass('hide');
                    }

                    $(this).removeAttr('expand').text('[修改]');

                    $('.save-btn').addClass('hide');

                    e.$existAddressListWrap.removeClass('address-expand');

                    e.$addressManage.addClass('hide');
                }

            });


            //支付及送货时间
            e.$switchPayModify.click(function() {
                console.log(1);
                if (e.$payTimeModify.hasClass('hide')) {
                    e.$payTimeModify.removeClass('hide');
                    e.$modityPayInfo.addClass('hide');
                    $(this).text('[不保存并关闭]');
                } else {
                    e.$payTimeModify.addClass('hide');
                    e.$modityPayInfo.removeClass('hide');
                    $(this).text('[修改]');

                    e.$payTimeModify.find('input[name="pay-type"]').filter('.checked').attr('checked', 'checked');
                    e.$payTimeModify.find('input[name="pay-time-radio"]').filter('.checked').attr('checked', 'checked');
                    e.$payTimeModify.find('input[name="call-me"]').filter('.checked').attr('checked', 'checked');
                }
            });

            e.$spanPayTypeLegend.click(function() {
                $(this).toggleClass('active');

                e.$supportType.toggleClass('hide');
            });

            $(document).on('click', '.exist-address-list li', function() {

                $('.exist-address-list li').removeClass('active');

                $(this).addClass('active');

                $(this).find('input').attr('checked', 'checked');

                if ($(this).hasClass('use-new-address')) {
                    e.$addressManage.removeClass('hide');

                    $('.address-manage input').val('');

                    $('.save-btn').removeAttr('data-id');

                    // 0表示获取所有省的列表,'000000'表示无匹配的区域码
                    address.newAddress(0, '000000');
                }
            });
        },

        //渲染价格明细
        render: function(data, tips) {

            // 下面这段是在服务端算价格
            var e = this.e,
                i,
                dArr = data.promotion_formula_list,
                str = '',
                isExpress = '';

            for (i = 0; i < dArr.length; i++) {

                if (dArr[i].promotion === '优惠券:') {
                    dArr[i].promotion = tips + '<span class="juan-modify">[修改]</span>:';
                }

                if (dArr[i].promotion === 'YOHO币:') {
                    dArr[i].promotion = 'YOHO币<span class="bi-modify">[修改]</span>:';
                }

                if (dArr[i].isExpress) {
                    isExpress = 'total-express-w';
                } else {
                    isExpress = '';
                }

                str += '<li class="' + isExpress + '">' +
                    '<label>' + dArr[i].promotion + '</label>' +
                    '<em>' + dArr[i].promotion_amount + '</em>' +
                    '</li>';
            }

            e.$payTotal.html(str);
            e.$toPay.html((data.last_order_amount).toFixed(2));
        }
    },
    /*公共方法*/
    Common: {
        enterNUM: function(str1, str2) {
            str1 = str1.replace(/[^\d]/g, '');
            if (str1 && str2) {
                str1 = parseInt(str1);
                str2 = parseInt(str2);
                if (str1 > str2) {
                    str1 = str2;
                }
            }
            return str1;
        },
        calucate: function() {
            var p = Order.Data;

            $.each(Order.Data, function(key, index) {
                p[key] = parseFloat(Order.Data[key]);
            });
            return p.product - p.activity + p.carriage - p.juan - p.yohocoin;
        },
        winShow: function(pan) {
            pan.find('dt').show();
            pan.find('dd').show();
            if (pan.attr('class').match(/(-bi-)|(-juan-)/g)) {
                pan.find('dt').hide();
            }
        },
        winHide: function(pan) {
            pan.find('dt').show();
            pan.find('dd').hide();

            /*if (pan.hasClass('play-juan-pan') && $('.juan-modify').length > 0) {
                pan.find('dt').hide();
            }

            if (pan.hasClass('play-bi-pan') && $('.bi-modify').length > 0) {
                pan.find('dt').hide();
            }*/
        },
        strFixed: function(str) {
            return parseFloat(str).toFixed(2);
        }
    },
    /*业务逻辑*/
    Bll: {
        e: {
            $juanok: $('#juansubmit'),
            $juantip: $('.errtip', '.play-juan-pan'),
            $biok: $('#bisubmit'),
            $carriageGroup: $('input[name="carriagegroup"]'),
            $selectExpress: $('.express-list input'),
            $bp: $('#biprice'),
            $errorTip: $('.errbitip'),
            $useEnvelopes: $('.use-envelopes'),
            $hasEnvelopes: $('.has-envelopes span'),
            $redEnvelopes: $('.red-envelopes'),
            $loading: $('.loading')
        },
        init: function() {
            var e = this.e,
                u = Order.UI,
                options,
                c = Order.Common;

            function getSelectData(callback) {

                var $juangroupInput = $('.play-juan.is-select input[name="juangroup"]:checked');
                var expressVal = $('.express-list input[name="carriagegroup"]').val();
                var biVal = $('#biprice.is-select').val();
                var codeVal = $juangroupInput.val();
                var cartType = $('.address-manage').attr('cart-type');
                var redEnvelopes = $('.use-envelopes input:checked').attr('data-use');
                var resultData;

                codeVal = !!codeVal ? codeVal : $juangroupInput.closest('li').find('#juancode').val();

                resultData = {
                    cartType: cartType,
                    deliveryWay: expressVal,
                    couponCode: codeVal,
                    yohoCoin: biVal
                };

                if (!!redEnvelopes) {
                    resultData.redEnvelopes = redEnvelopes;
                }

                callback(resultData);

            }

            // 选择快递
            e.$selectExpress.click(function() {

                var expressId = $(this).val();

                e.$loading.show();

                getSelectData(function(d) {

                    d.deliveryWay = expressId;

                    options = {
                        type: 'POST',
                        url: '/cart/index/orderCompute',
                        data: d,
                        success: function(data) {

                            console.log(data);

                            e.$loading.hide();

                            if (data.code === 200) {
                                u.render(data.data);

                                if (expressId === '1') {

                                    $('.express-list.sf').addClass('hide');
                                } else if (expressId === '2') {
                                    $('.express-list.sf').removeClass('hide');
                                }

                            } else {
                                new dialog.Alert(data.message).show();
                            }
                        }
                    };

                    $.ajax(options);
                });
            });

            //点击 优惠卷支付 确认按钮
            e.$juanok.click(function() {

                var pan = $(this).parents('dl.pan');

                var juanText = '';

                $('.play-juan').addClass('is-select');

                getSelectData(function(d) {

                    var code = d.couponCode;

                    if (!code) {

                        e.$juantip.html('请选择或填写一个优惠券');
                        $('.play-juan').removeClass('is-select');

                    } else {

                        e.$loading.show();

                        options = {
                            type: 'POST',
                            url: '/cart/index/orderCompute',
                            data: d,
                            success: function(data) {

                                e.$loading.hide();

                                if (data.code === 200) {

                                    juanText = $('.play-juan input[value="' + code + '"]').next().text();
                                    u.render(data.data, juanText);

                                    //$('#juancode').val(code);

                                    c.winHide(pan);
                                    e.$juantip.html('');

                                    //$('.play-juan-pan dt').hide();

                                } else {
                                    e.$juantip.html(data.message);
                                    $('.play-juan').removeClass('is-select');
                                }
                            }
                        };

                        $.ajax(options);
                    }
                });

            });

            // 优惠券修改
            $(document).on('click', '.juan-modify', function() {


                var $pan = $('.play-juan-pan');

                c.winShow($pan);
            });

            e.$biok.click(function() {

                var pan = $(this).parents('dl.pan');
                var juanText;

                $('#biprice').addClass('is-select');

                getSelectData(function(d) {

                    if (!!d.couponCode) {
                        juanText = $('.play-juan input[value="' + d.couponCode + '"]').next().text();
                    }

                    if (d.yohoCoin * 1 === 0) {

                        $('.errbitip').html('请填写一个正整数');
                        $('#biprice').removeClass('is-select');

                    } else if (d.yohoCoin * 1 > $('.play-pan em').text() * 1) {

                        $('.errbitip').html('您的YOHO币不足');
                        $('#biprice').removeClass('is-select');

                    } else {
                        e.$loading.show();

                        options = {
                            type: 'POST',
                            url: '/cart/index/orderCompute',
                            data: d,
                            success: function(data) {

                                e.$loading.hide();

                                if (data.code === 200) {
                                    u.render(data.data, juanText);
                                    c.winHide(pan);

                                    //$('.play-bi-pan dt').hide();

                                } else {
                                    $('.errbitip').html(data.message);
                                    $('#biprice').removeClass('is-select');
                                }
                            }
                        };

                        $.ajax(options);
                    }

                });
            });

            // 修改yoho币
            $(document).on('click', '.bi-modify', function() {


                var $pan = $('.play-bi-pan');

                c.winShow($pan);
            });

            e.$bp.keyup(function() {

                var val = $(this).val();

                if (val * 1 < 0 || val.indexOf('.') > 0) {
                    e.$errorTip.html('请输入一个正整数');
                } else if (val * 1 > $(this).data('bi') * 1) {
                    e.$errorTip.html('您的YOHO币不足');
                } else {
                    e.$errorTip.html('抵扣' + (val / 100).toFixed(2) + '元');
                }
            });

            // 取消yoho 币
            $('.cancel-bi').click(function() {


                var $pan = $('.play-bi-pan');
                var juanText;

                if ($('#biprice').hasClass('is-select')) {

                    e.$loading.show();

                    getSelectData(function(d) {

                        d.yohoCoin = 0;

                        if (!!d.couponCode) {
                            juanText = $('.play-juan input[value="' + d.couponCode + '"]').next().text();
                        }

                        options = {
                            type: 'POST',
                            url: '/cart/index/orderCompute',
                            data: d,
                            success: function(data) {

                                e.$loading.hide();

                                if (data.code === 200) {
                                    u.render(data.data, juanText);
                                    c.winHide($pan);

                                    $('#biprice').val('0');

                                    //$('.play-bi-pan dt').hide();
                                    $('#biprice').removeClass('is-select');

                                    $('.errbitip').html('');

                                } else {
                                    $('.errbitip').html(data.message);
                                }
                            }
                        };

                        $.ajax(options);
                    });

                } else {
                    c.winHide($pan);
                    $('#biprice').val('0');
                }

            });

            // 取消优惠券
            $('.cancel-code').click(function() {

                var $pan = $('.play-juan-pan');

                if ($('.play-juan').hasClass('is-select')) {

                    e.$loading.show();

                    getSelectData(function(d) {

                        d.couponCode = '';

                        options = {
                            type: 'POST',
                            url: '/cart/index/orderCompute',
                            data: d,
                            success: function(data) {

                                e.$loading.hide();

                                if (data.code === 200) {
                                    u.render(data.data);

                                    c.winHide($pan);
                                    $('.play-juan').removeClass('is-select');

                                    $('#juancode').val('')
                                        .siblings('input[name="juangroup"]').attr('checked', 'checked');

                                } else {
                                    e.$juantip.html(data.message);
                                }
                            }
                        };

                        $.ajax(options);
                    });
                } else {
                    c.winHide($pan);
                }
            });


            // 红包
            e.$useEnvelopes.find('input').click(function() {

                var $this = $(this);

                e.$loading.show();

                getSelectData(function(d) {

                    if (!!$this.attr('checked')) {

                        d.redEnvelopes = $this.val();

                    } else {

                        d.redEnvelopes = 0;
                    }

                    options = {
                        type: 'POST',
                        url: '/cart/index/orderCompute',
                        data: d,
                        success: function(data) {

                            e.$loading.hide();

                            if (data.code === 200) {
                                u.render(data.data);

                                if (!!$this.attr('checked')) {
                                    e.$redEnvelopes.addClass('active');
                                    e.$useEnvelopes.find('span').html('-¥' + ($this.val() * 1).toFixed(2));
                                    e.$hasEnvelopes.html('¥0.00');

                                    $this.attr('data-use', $this.val());
                                    $this.val(0);

                                } else {
                                    e.$useEnvelopes.find('span').html('-¥0.00');
                                    e.$hasEnvelopes.html('¥' + ($this.attr('data-use') * 1).toFixed(2));
                                    e.$redEnvelopes.removeClass('active');

                                    $this.val($this.attr('data-use'));
                                    $this.attr('data-use', 0);
                                }
                            } else {

                                new dialog.Alert(data.message).show();
                            }
                        }
                    };

                    $.ajax(options);
                });

            });


            //发票抬头和备注字数限制
            function limitStrLen($obj, len) {

                var $this = $obj;

                $this.keyup(function() {

                    if ($this.val().length > len) {

                        $this.val($this.val().substr(0, len));
                    }
                });
            }

            limitStrLen($('#piaodesc'), 30);
            limitStrLen($('#notedesc'), 100);
        }
    }
};

Order.Data.activity = 0;
Order.Data.carriage = 0;

Order.UI.init();
Order.Bll.init();


address.getUserAddressList();

// 0表示获取所有省的列表,'000000'表示无匹配的区域码
address.newAddress(0, '000000');
address.modifyAddress();
address.saveAddress();

});
define("js/order/address", ["jquery","handlebars","source-map"], function(require, exports, module){
/**
 * @description: 地址管理
 * @author: chenglong.wang@yoho.cn
 */

var $ = require("jquery");
var dialog = require("js/common/dialog");


var isProvinceChecked = false;

var $addressManage = $('.address-manage'),
    $province = $addressManage.find('.text-input[name="province"]'),
    $city = $addressManage.find('.text-input[name="city"]'),
    $county = $addressManage.find('.text-input[name="county"]'),
    $selectList = $addressManage.find('.text-input[name="province"], .text-input[name="city"]'),
    $addressList = $('.address-list'),
    $name = $addressManage.find('.text-input[name="name"]'),
    $phone = $addressManage.find('.text-input[name="phone"]'),
    $mail = $addressManage.find('.text-input[name="mail"]'),
    $address = $addressManage.find('.text-input[name="address"]'),
    $code = $addressManage.find('.text-input[name="code"]'),
    $saveBtn = $('.save-btn'),
    $telCode = $addressManage.find('.text-input[name="tel-code"]'),
    $tel = $addressManage.find('.text-input[name="tel"]'),
    $useNewAddress = $('.use-new-address'),
    $existAddressList = $('.exist-address-list'),
    $loading = $('.loading');

var cartType = $addressManage.attr('cart-type');

// 构建select下拉选项
function structureOption($obj, data, selectId) {

    var i,
        optionHtml = '',
        defaultOption;

    for (i = 0; i < data.length; i++) {

        if (data[i].id === selectId) {
            optionHtml += '<option selected value="' + data[i].id + '">' + data[i].caption + '</option>';
        } else {
            optionHtml += '<option value="' + data[i].id + '">' + data[i].caption + '</option>';
        }
    }


    if ($obj.attr('name') === 'province') {
        defaultOption = '<option value="0">请选择省份</option>';
    } else if ($obj.attr('name') === 'city') {
        defaultOption = '<option value="0">请选择城市</option>';

    } else if ($obj.attr('name') === 'county') {
        defaultOption = '<option value="0">请选择区县</option>';
    }

    $obj.html(defaultOption + optionHtml);
}
/**
 * @description: 改函数会返回地址信息
 * d {Object} type: 'getProvince'获取省 type: 'getCity'获取城市 type: 'getCounty'获取县
 * id: 0 && type: 'getProvince' 获取所有省,默认没有选中项
 * id !== 0 && type: 'getProvince' 获取所有省,默认选中用户所在的省
 */
function getAddress(d, callback) {

    var $obj;
    var selectId = d.selectId;

    if (d.type === 'getProvince') {

        //url = 'getProvince';
        $obj = $province;
    } else if (d.type === 'getCity') {

        //url = 'getCity';
        $obj = $city;
    } else if (d.type === 'getCounty') {

        //url = 'getCounty';
        $obj = $county;
    }

    $.ajax({
        type: 'GET',
        url: '/cart/index/getAreaList',
        dataType: 'json',
        data: {
            id: d.id * 1
        }
    }).then(function(d) {

        structureOption($obj, d.data, selectId);

        if (typeof callback === 'function') {
            callback();
        }

    }).fail(function() {

        //todo
    });
}

// 修改地址时把用户信息带过来
function getUserInfo($obj) {

    $name.val($obj.attr('data-name'));
    $name.attr('data-id', $obj.attr('data-id'));
    $address.val($obj.attr('data-addressDesc'));
    $phone.val($obj.attr('data-mobile'));
    $mail.val($obj.attr('data-email'));
    $code.val($obj.attr('data-zipcode'));
    $telCode.val($obj.attr('data-phoneCode'));
    $tel.val($obj.attr('data-codeNum'));
}

// 更新地址列表状态
function refreshAddressStatus() {
    $useNewAddress.removeClass('active');
    $existAddressList.find('li:not(".active")').addClass('hide');
    $existAddressList.find('li.active').addClass('address_select');
    $addressManage.addClass('hide');
    $saveBtn.addClass('hide');
    $existAddressList.removeClass('address-expand');
    $('.order-selection h2 span').text('[修改]');
}

//获取用户已经存在的地址列表
exports.getUserAddressList = function() {

    var addressData,
        i,
        addressStr = '',
        isChecked = '',
        isHide = '',
        addressText = '',
        hasDefault = 0;

    $.ajax({
        type: 'GET',
        url: '/cart/index/getAddress',
        dataType: 'json'
    }).then(function(d) {

        if (d.code === 200) {

            addressData = d.data.list;

            if (!addressData) {

                $addressList.find('>h2').find('span').click();

                $('.exist-address-list li').click();

                $('.use-new-address').removeClass('active');

                return;

            }

            for (i = 0; i < addressData.length; i++) {

                if (addressData[i].checked) {

                    isChecked = 'checked';
                    isHide = 'active address_select';
                    hasDefault++;
                    addressText = '默认地址';

                } else {
                    isChecked = '';
                    isHide = 'hide';
                    addressText = '设为默认地址';
                }

                addressStr +=
                    '<li data-id="' + addressData[i].id + '" class="' + isHide +
                    '" data-express="' + addressData[i].isSupport + '">' +
                    '<input data-name="' + addressData[i].user +
                    '" data-areaCode="' + addressData[i].areaCode +
                    '" data-addressDesc="' + addressData[i].addressDesc +
                    '" data-mobile="' + addressData[i].mobile +
                    '" data-phoneNum="' + addressData[i].phoneNum +
                    '" data-phoneCode="' + addressData[i].phoneCode +
                    '" data-zipCode="' + addressData[i].zipCode +
                    '" data-email="' + addressData[i].email +
                    '" class="radio" type="radio" name="address" ' + isChecked + ' />' +
                    '<label for="">' +
                    '<strong>' + addressData[i].user + '</strong>' + addressData[i].address +
                    '<a href="javascript:void(0);" class="default-address">' + addressText + '</a>' +
                    '<div class="order-modify-btn">' +
                    '<span class="address-modify">[修改]</span>' +
                    '<span class="address-del">[删除]</span>' +
                    '</div>' +
                    '</label>' +
                    '</li>';
            }

            $('.use-new-address').before($(addressStr));

            //说明用户的地址列表没有默认地址
            if (hasDefault === 0) {

                //没有默认地址则把所有地址都显示出来
                //$('.exist-address-list li:not(".use-new-address")').removeClass('hide');
                $('.address-list h2 span').click();
            }

            if ($('.active.address_select').attr('data-express') === 'N') {
                $('.express-list input[name="carriagegroup"][value="2"]').attr('disabled', 'disabled');
                $('.express-list input[name="carriagegroup"][value="1"]').attr('checked', 'checked');
                $('.express-list.sf').addClass('hide');
                $('.is-sup').removeClass('hide');
            } else {
                $('.express-list input[name="carriagegroup"][value="2"]').removeAttr('disabled');
                $('.express-list.sf').removeClass('hide');
                $('.is-sup').addClass('hide');
            }

        }

    });
};

/*
 * 添加地址&修改地址
 * id: 根据id获取省市区列表
 * code: 根据code确定是否选中省市区
 */
exports.newAddress = function(id, code) {

    var pId = id || 0; //如果没有传id则获取所有省列表

    var addressCodeReg = /[0-9]{2}/gi;

    var codeId = !!code && code.match(addressCodeReg);

    //获取省
    getAddress({
        id: pId,
        type: 'getProvince',
        selectId: codeId[0]
    }, function() {

        var provinceId = $province.val();

        if (provinceId !== '0') {

            //如果获取的省有默认选中项则获取市
            getAddress({
                id: provinceId,
                type: 'getCity',
                selectId: '' + codeId[0] + codeId[1]
            }, function() {

                var cityId = $city.val();

                //如果获取的市有默认选中项则获取县
                if (cityId !== '0') {
                    getAddress({
                        id: cityId,
                        type: 'getCounty',
                        selectId: code
                    });
                }
            });
        } else {
            $addressManage.find('select[name="city"]').html('<option value="0">请选择城市</option>');
            $addressManage.find('select[name="county"]').html('<option value="0">请选择区县</option>');
        }
    });

    // 发生change事件时获取下一级地址
    $selectList.change(function() {

        var $this = $(this);

        if ($this.attr('name') === 'province') {

            if ($this.val() === '0') {
                $addressManage.find('select[name="city"]').html('<option value="0">请选择城市</option>');
                $addressManage.find('select[name="county"]').html('<option value="0">请选择区县</option>');
            } else {
                getAddress({
                    id: $this.val(),
                    type: 'getCity'
                }, function() {
                    isProvinceChecked = true;
                });
                $addressManage.find('select[name="county"]').html('<option value="0">请选择区县</option>');
            }
        }

        if ($this.attr('name') === 'city' && isProvinceChecked) {

            if ($this.val() === '0') {
                $addressManage.find('select[name="county"]').html('<option value="0">请选择区县</option>');
            } else {
                getAddress({
                    id: $this.val(),
                    type: 'getCounty'
                });
            }
        }
    });
};

//修改地址
exports.modifyAddress = function() {

    $addressList.click(function(event) {

        var $this = $(event.target),
            id = $this.closest('li').attr('data-id'),
            areaCode = $this.closest('li').find('.radio').attr('data-areaCode');

        if ($this.hasClass('address-modify')) {
            $addressManage.removeClass('hide');
            exports.newAddress(0, areaCode);
            getUserInfo($this.closest('li').find('.radio'));
            $('.address-list-inner .save-btn').removeClass('hide');
            $saveBtn.attr('data-id', id);
            isProvinceChecked = true;
        } else if ($this.hasClass('address-del')) {

            $loading.show();

            $.ajax({
                type: 'POST',
                url: '/cart/index/delAddress',
                data: {
                    id: id
                }
            }).then(function(d) {

                $loading.hide();

                if (d.code === 200) {

                    $this.closest('li').remove();
                } else {
                    new dialog.Alert(d.message).show();
                }
            }).fail(function() {

                //todo
            });
        } else if ($this.hasClass('default-address') && !$this.parents('li').hasClass('address_select')) {

            $loading.show();

            // 设为默认地址
            $.ajax({
                type: 'post',
                url: '/cart/index/setDefaultAddress',
                data: {
                    id: id
                }
            }).then(function(d) {

                $loading.hide();

                if (d.code === 200) {

                    $('.exist-address-list li').removeClass('address_select')
                        .find('.default-address').text('设为默认地址');
                    $this.parents('li').addClass('address_select');
                    $this.text('默认地址');

                } else {
                    new dialog.Alert(d.message).show();
                }
            });
        }
    });
};

// 保存地址并送到这个地址
exports.saveAddress = function() {
    $saveBtn.click(function() {

        var $this = $(this);

        var name = $name.val(),
            province = $province.val(),
            city = $city.val(),
            county = $county.val(),
            address = $address.val(),
            phone = $phone.val(),
            telCode = $telCode.val(),
            tel = $tel.val(),
            mail = $mail.val(),
            code = $code.val();

        var provinceText = $province.find('option[value="' + province + '"]').text(),
            cityText = $city.find('option[value="' + city + '"]').text(),
            countyText = $county.find('option[value="' + county + '"]').text();


        var postData = {
            consignee: name,
            areaCode: county,
            address: address,
            email: mail,
            mobile: phone,
            zipCode: code,
            phoneCode: telCode,
            phoneNum: tel
        };

        var addressStr;
        var $modifyLi;
        var hasCheckedAddress;

        var nameReg = /^[\u4e00-\u9fa5]{2,5}$/;
        var addressReg = /^[\s\S]{3,100}$/;
        var phoneReg = /^(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$/;
        var codeReg = /^[0-9]{6}$/;
        var emailReg = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
        var telCodeReg = /^[0-9]{3,5}$/;
        var telReg = /^[0-9]{5,10}$/;


        function hasText(val) {

            if (val === telCode) {

                if (!!val) {
                    return val + '-';
                } else {
                    return ' ';
                }

            } else {
                if (!!val) {
                    return val + ' ';
                } else {
                    return ' ';
                }
            }
        }

        hasCheckedAddress = $('.exist-address-list li:not(".use-new-address")')
            .find('input[name="address"]:checked').length > 0;

        // 说明是送货到这个地址
        if (!$('.add-address').attr('checked') && hasCheckedAddress && !$('.save-btn').attr('data-id')) {

            $('.exist-address-list li').removeClass('address_select');
            $('.exist-address-list li.active').addClass('address_select')
                .find('input[name="address"]').attr('checked', 'checked');

            $('.address-list span').removeAttr('expand');

            refreshAddressStatus();

        }

        //if (!!$('.add-address').attr('checked')) {
        if (!$('.address-manage').hasClass('hide')) {

            if (!nameReg.test(name)) {
                new dialog.Alert('真实姓名至少2个中文,最多5个中文').show();
                return;
            }
            if (!addressReg.test(address)) {
                new dialog.Alert('你输入的地址格式不正确').show();
                return;
            }
            if (!phoneReg.test(phone)) {
                new dialog.Alert('你输入的联系电话格式不正确').show();
                return;
            }

            if ((!!telCode && !telCodeReg.test(telCode)) || (!!tel && !telReg.test(tel)) ||
                (telCodeReg.test(telCode) && !telReg.test(tel)) ||
                (!telCodeReg.test(telCode) && telReg.test(tel))) {
                new dialog.Alert('你输入的电话格式不正确').show();
                return;
            }

            if (!!mail && !emailReg.test(mail)) {
                new dialog.Alert('你输入的邮箱格式不正确').show();
                return;
            }

            if (!!code && !codeReg.test(code)) {
                new dialog.Alert('你输入的邮编格式不正确').show();
                return;
            }

            // 如果存在data-id说明是修改,否则是新增
            if (!!$saveBtn.attr('data-id')) {
                postData.id = $saveBtn.attr('data-id');
            }

            $.ajax({
                type: 'post',
                url: '/cart/index/saveAddress',
                data: postData
            }).then(function(d) {

                var addressData;

                if (d.code === 200) {

                    addressData = d.data;

                    console.log(addressData);

                    if (addressData.is_support === 'Y') {
                        $('.express-list input[name="carriagegroup"][value="2"]').removeAttr('disabled');
                        $('.express-list.sf').removeClass('hide');
                        $('.is-sup').addClass('hide');

                    } else {

                        $('.express-list input[name="carriagegroup"][value="2"]').attr('disabled', 'disabled');
                        $('.express-list.sf').addClass('hide');
                        $('.is-sup').removeClass('hide');
                    }

                    if (!!postData.id) {

                        // 修改操作接口没有返回id
                        addressStr = '<li class="active" data-id="' + postData.id +
                        '" data-express="' + addressData.is_support + '">' +
                        '<input data-name="' + postData.consignee +
                        '" data-areaCode="' + postData.areaCode +
                        '" data-addressDesc="' + postData.address +
                        '" data-mobile="' + postData.mobile +
                        '" data-phoneNum="' + postData.phoneNum +
                        '" data-phoneCode="' + postData.phoneCode +
                        '" data-zipCode="' + postData.zipCode +
                        '" data-email="' + postData.email +
                        '" checked="checked" class="radio" type="radio" name="address" />' +
                        '<label>' +
                        '<strong>' + name + '</strong>' +
                        '<span>' + provinceText + ' ' + cityText + ' ' + countyText + ' ' + address +
                        ' ' + hasText(code) + hasText(phone) + hasText(telCode) + hasText(tel) + '</span>' +
                        '<a href="javascript:void(0);" class="default-address">设为默认地址</a>' +
                        '<div class="order-modify-btn">' +
                        '<span class="address-modify">[修改]</span>' +
                        '<span class="address-del">[删除]</span>' +
                        '</div>' +
                        '</label>' +
                        '</li>';
                    } else {

                        //添加操作接口有返回id
                        addressStr = '<li class="active" data-id="' + addressData.id +
                        '" data-express="' + addressData.is_support + '">' +
                        '<input data-name="' + addressData.consignee +
                        '" data-areaCode="' + addressData.area_code +
                        '" data-addressDesc="' + addressData.address +
                        '" data-mobile="' + addressData.mobile +
                        '" data-phoneNum="' + addressData.a +
                        '" data-phoneCode="' + addressData.b +
                        '" data-zipCode="' + addressData.zip_code +
                        '" data-email="' + addressData.email +
                        '" checked="checked" class="radio" type="radio" name="address" />' +
                        '<label>' +
                        '<strong>' + name + '</strong>' +
                        '<span>' + provinceText + ' ' + cityText + ' ' + countyText + ' ' + address +
                        ' ' + hasText(code) + hasText(phone) + hasText(telCode) + hasText(tel) + '</span>' +
                        '<a href="javascript:void(0);" class="default-address">设为默认地址</a>' +
                        '<div class="order-modify-btn">' +
                        '<span class="address-modify">[修改]</span>' +
                        '<span class="address-del">[删除]</span>' +
                        '</div>' +
                        '</label>' +
                        '</li>';
                    }



                    // 如果dataID存在说明是修改操作
                    if (!!$this.attr('data-id')) {

                        $modifyLi = $('.exist-address-list li[data-id="' + $this.attr('data-id') + '"]');

                        $modifyLi.after($(addressStr)).remove();
                    } else {
                        $('.use-new-address').before($(addressStr));
                    }

                    $('.address-list span').removeAttr('expand');

                    refreshAddressStatus();
                } else {
                    new dialog.Alert(d.message).show();
                }
            });
        }

        if ($('.exist-address-list li').find('input[name="address"]:checked').length === 0) {
            new dialog.Alert('请选择一个地址').show();
            return;
        }
    });
};



// 支付及送货时间选择
$('.pay-time-modify .pay-btn').click(function() {

    var $payInfoBox = $('.modity-pay-info'),
        $payTime = $('.pay-time-modify'),
        payTypeVal = $payTime.find('input[name="pay-type"]:checked').val(),
        payTypeText = $payTime.find('input[name="pay-type"]:checked').next('label').text(),
        payTimeText = $payTime.find('input[name="pay-time-radio"]:checked').next('label').text(),
        payTimeVal = $payTime.find('input[name="pay-time-radio"]:checked').val(),
        isCall = $payTime.find('input[name="call-me"]:checked').next('label').text(),
        callMeVal = $payTime.find('input[name="call-me"]:checked').val();


    $loading.show();

    $.ajax({
        type: 'POST',
        url: '/cart/index/orderCompute',
        dataType: 'json',
        data: {
            cartType: cartType,
            paymentType: payTypeVal
        }
    }).then(function(d) {

        $loading.hide();

        if (d.code === 200) {

            $payInfoBox.find('li').eq(0).find('span').text(payTypeText);
            $payInfoBox.find('li').eq(1).find('span').text(payTimeText);
            $payInfoBox.find('li').eq(2).find('span').text(isCall);

            $('.pay-time-modify').addClass('hide')
                .find('input[name="pay-type"][value=' + payTypeVal + ']').addClass('checked')
                .end().find('input[name="pay-time-radio"][value=' + payTimeVal + ']').addClass('checked')
                .end().find('input[name="call-me"][value=' + callMeVal + ']').addClass('checked');

            $('.modity-pay-info').removeClass('hide');

            $('.switch-pay-modify').text('[修改]');

        } else {
            new dialog.Alert(d.message).show();
        }
    });
});

function getYohoBiList() {

    var $juanUl = $('.play-juan ul'),
        juanStr = '',
        dLen,
        data,
        i;

    $.ajax({
        type: 'GET',
        dataType: 'json',
        url: '/cart/index/getCouponList'
    }).then(function(d) {

        if (d.code === 200) {
            data = d.data;
            dLen = data.length;

            for (i = 0; i < dLen; i++) {
                juanStr += '<li>' +
                '<input name="juangroup" type="radio" value="' + data[i].code + '">' +
                '<label>' + data[i].desc + '</label>' +
                '</li>';
            }

            $juanUl.prepend($(juanStr));

        }
    });
}
getYohoBiList();

// 把Y、N转换成bool

function ytoTrue(val) {

    if (val === 'N') {
        return false;
    } else {
        return true;
    }
}


// 去支付
$('.to-play input.submit').click(function() {

    var addressId = $('.exist-address-list input[name="address"]:checked').closest('li').attr('data-id'),
        deliveryTimeId = $('.pay-time-modify input[name="pay-time-radio"]:checked').val(),
        deliveryWayId = $('.pay-time-modify input[name="carriagegroup"]:checked').val(),
        invoiceTitle = $('#piaodesc').val(),
        invoiceId = $('#piaotype').val(),
        paymentType = $('.pay-time-modify input[name="pay-type"]:checked').val(),
        paymentId = $('.pay-time-modify input[name="pay-type"]:checked').data('pay'),
        remark = $('#notedesc').val(),
        yohoCoin = $('#biprice').val(),
        isPreContact = $('.pay-time-modify input[name="call-me"]:checked').val(),
        isPrintPrice = $('.pay-time-modify input[name="isPP"]:checked').val(),
        redEnvelopes = $('.use-envelopes input:checked').attr('data-use'),
        $juangroupInput = $('.play-juan.is-select input[name="juangroup"]:checked'),
        codeVal = $juangroupInput.val(),
        juanCode = !!codeVal ? codeVal : $juangroupInput.closest('li').find('#juancode').val();

    $loading.show();

    $.ajax({
        type: 'POST',
        dataType: 'json',
        url: '/cart/index/orderSub',
        data: {
            addressId: addressId,
            cartType: cartType,
            deliveryTimeId: deliveryTimeId,
            deliveryWayId: deliveryWayId,
            invoiceTitle: invoiceTitle,
            invoiceId: invoiceId,
            paymentId: paymentId,
            paymentType: paymentType,
            remark: remark,
            couponCode: juanCode,
            yohoCoin: yohoCoin,
            isPreContact: ytoTrue(isPreContact),
            isPrintPrice: ytoTrue(isPrintPrice),
            redEnvelopes: redEnvelopes
        }
    }).then(function(d) {

        $loading.hide();

        if (d.code === 200) {
            window.location.href = d.data.payUrl;
        } else {
            new dialog.Alert(d.message).show();
        }
    });
});
});