//simple template
var Template = new Class({
    Implements: Options,
    options: {
        'before': '%',
        'after': '%'
    },
    
    initialize: function(string, options){
        this.string = string;
        this.setOptions(options);
        this.regExp = new RegExp(this.options.before.escapeRegExp() + '([\\w-]+)' + this.options.after.escapeRegExp(), 'g');
    },
    
    parse: function(data){
        var options = this.options;
        return this.string.replace(this.regExp, function(match){
            return $pick(data[match.substring(options.before.length, match.length - options.after.length)], '');
        });
    }
});

var ImagePreview = new Class({
    initialize: function(links) {
        links.each(function(link) {
            link.addEvents({
                'mouseenter': function(e) {
                    this.status = 1;
                    this.timer = $clear(this.timer);
                    this.timer = this.buildTip.delay(500, this, link);
                }.bind(this),
                'mouseleave': function(e) {
                    this.status = 0;
                    $clear(this.timer);
                    if($('image_preivew')){
                        $('image_preivew').dispose();
                    }                    
                }.bind(this)
            });
        }, this);
    },
    
    buildTip: function(link) {
        if(!this.status)return;
        
        var li = link.getParent('li');
        var tpl_type = li.getAllPrevious('li').length>=3 ? 'right' : 'left';
        //console.info(li.getAllPrevious('li').length);
        var pos = link.getElement('img').getPosition();
        var data = JSON.decode('{' + li.getElement('.data').get('text') + '}');
        var tip = new Element('div', {
            'id': 'image_preivew',
            'class': 'product_tip',
            'styles': {'left': pos.x + (tpl_type=='right' ? -232 : 120), 'top': pos.y},
            'html': new Template(ImagePreview.tpl[tpl_type]).parse(data)
        });
        $(document.body).adopt(tip);
    }
});

ImagePreview.tpl = {
    'left':
    '<div class="arrow_left">&nbsp;</div>'+
    '<ul>'+
        '<li class="pic"><img src="%pic%" width="200" /></li>'+
        '<li class="name">%name%</li>'+
        '<li class="type">%type%</li>'+
        '<li class="price1">原价：￥%price1%</li>'+
        '<li class="price2">会员价：<strong>￥%price2%</strong></li>'+
        //'<li>共有[%num_comment%]条评论！</li>'+
    '</ul>',
    'right': 
    '<ul>'+
        '<li class="pic"><img src="%pic%" width="200" /></li>'+
        '<li class="name">%name%</li>'+
        '<li class="type">%type%</li>'+
        '<li class="price1">原价：￥%price1%</li>'+
        '<li class="price2">会员价：<strong>￥%price2%</strong></li>'+
        //'<li>共有[%num_comment%]条评论！</li>'+
    '</ul>'+
    '<div class="arrow_right">&nbsp;&nbsp;&nbsp;</div>'
};

var Calculate = new Class({
    Implements: [Options, Events],
    options: {
        height: 0,
        collar: 0,
        bosom: 0,
        waist: 0,
        pant: 0,
        butt: 0
    },
    range: {
        height: [150, 230],
        collar: [34, 56],
        bosom: [66, 160],
        waist: [64, 140],
        pant: [88, 126],
        butt: [83, 158],
        tv: [-6, 45]
    },
    trouses: {
        'YA': [0, 0, 1],
        'YB': [0, 0, 1],
        'AA': [1, 1, 1],
        'AB': [0, 1, 1],
        'BA': [1, 1, 1],
        'CA': [1, 1, 1],
        'CB': [1, 1, 1],
        'DA': [1, 1, 1],
        'DB': [1, 1, 1]
    },
    pleat: ['无摺裤', '单摺裤', '双摺裤'],
    
    initialize: function(options) {
        this.setOptions(options);
        //this.getSpec();
    },
    
    getSpec: function() {
        if(this.checkRange()){
            if(this.options.height && this.options.collar && this.options.bosom){
                //console.info(this.getShirtSpec());
                return this.getShirtSpec();
            }
            
            if(this.options.waist && this.options.pant && this.options.butt){
                return this.getTrousesSpec();
            }
            return {status: 0, message: '输入的数据不完整！'};
        }else{
            return {status: 0, message: '输入的数据超出范围！'};
        }
    },
    
    getPleat: function(type, str) {
        var choices = this.trouses[type].map(function(pleat, index) {
            return str.charAt(index).toInt()*pleat;
        });
        //console.info('choices:' + choices);
        if(choices.join('').toInt()){
            var select = new Element('select', {
                'id': 'pleat',
                'class': 'form_check[required]',
                'name': 'pleat'
            });
            choices.each(function(choice, index) {
                if(!choice)return;
                var option = new Element('option', {
                    'value': index,
                    'text': this.pleat[index]
                });
                select.adopt(option);
            }, this);
            return select;
        }else{
            return '该款产品不适合您!';
        }
    },
    
    checkRange: function() {
        var in_range = true;
        for(option in this.options){
            //this.options[option] = this.options[option].toInt();
            var range = this.range[option];
            var number = this.options[option].toInt();
            if(number>0){
                if(number>range[1] || number<range[0])in_range = false;
                break;
            }
        }
        return in_range;
    },
    
    getShirtSpec: function() {
        this.collar = this.options.collar;
        
        var getSize = function(size, index) {
            if(!(size%index)){
                return size;
            }else if(size%index == 1){
                return size - 1;
            }else{
                return size + index - size%index;
            }
        };
        
        this.height = getSize(this.options.height, 5);
        this.bosom = getSize(this.options.bosom, 4);
        var spec = {
            'collar': this.collar,
            'height': this.height,
            'bosom': this.bosom,
            'type': 'shirt'
        };        
        //var spec = this.collar + '-' + this.height + '/' + this.bosom;
        
        return {status: 1, message: spec};
    },
    
    getTrousesSpec: function() {
        var getSize = function(size) {
            return !(size%2) ? size : size + 1;
        };
        
        var getDiff = function(t) {
            if(!(Math.abs(t)%3)){
                return t;
            }else if(Math.abs(t)%3 == 2){
                return t<0 ? t - 1 : t + 1;
            }else{
                return t<0 ? t + 1 : t - 1;
            }
        };
        
        this.pant = getSize(this.options.pant);
        this.waist = getSize(this.options.waist);
        this.t = this.options.butt - this.options.waist;		
        this.tv = getDiff(this.t);
        
        if(this.tv>=this.range['tv'][0] && this.tv<=this.range['tv'][1]){
            var spec = {
                'pant': this.pant,
                'waist': this.waist,
                'butt': this.options.butt,
                'type': 'trouses'
            };            
            //var spec = this.pant + '/' + this.waist + ':' + this.tv;
            return {status: 1, message: spec};
        }else{
            return {status: 0, message: '没有找到相匹配型号！'};
        }
    }
});

var PostMessage = new Class({
    Implements: [Options, Events],
    options: { adoptTag: false, entryTag: '.entry', appendType: 'inject', onInject: $empty() },
    
    initialize: function(form, options) {
        this.setOptions(options);
        this.form = $(form);
        this.check = new FormCheck(this.form);
        this.form.addEvent('submit', function(e) {
            //e.stop();
            if(this.check.submitForm(e)){
                e.stop();
                this.form.set('send', {
                    onSuccess: function(res) {
                        this.injectComment(res);                        
                    }.bind(this)
                });
                this.form.send();
            }
        }.bind(this));
    },
    
    injectComment: function(html) {
        this.fireEvent('onInject', this);
        var replyEl = new Element('div', {'html': html}).getElement(this.options.entryTag);
        replyEl.setStyle('background', '#f9f9f9');
        if(this.options.appendType=='inject'){
            replyEl.inject($$(this.options.adoptTag)[0], 'top');
        }
        if(this.options.appendType=='adopt'){
            $$(this.options.adoptTag)[0].adopt(replyEl);
        }
        
        new Fx.Scroll($(document.body)).toElement(replyEl);
        replyEl.highlight();
        this.form.getElement('textarea[name=content]').set('value', '');        
    }
});

var ImageSwitch = new Class({
    Implements: [Options, Events],
    options: {
        imageLink: 'a.item',
        navLink: 'li a',
        timeSpan: 15
    },
    
    initialize: function(imageBox, options) {
        this.setOptions(options);
        this.box = $(imageBox);
        this.imageLinks = this.box.getElements(this.options.imageLink);
        this.navLinks = this.box.getElements(this.options.navLink);
        this.box.getElement('ul').set('opacity', '.75');
        
        this.max = this.imageLinks.length;
        this.indexed = 0;
        this.play();
        this.timer = this.play.periodical(this.options.timeSpan*1000, this);
        
        this.navLinks.each(function(link) {
            link.addEvents({
                'click': this.navEvent.bind(this),
                'mouseover': this.navEvent.bind(this)
            });
        }, this);
    },
    
    navEvent: function(e) {
        this.indexed = $(e.target).get('text').toInt() - 1;
        //$clear(this.timer);
        this.play();
    },
    
    play: function() {
        this.imageLinks.setStyle('display', 'none');
        this.navLinks.removeClass('active');
        
        this.navLinks[this.indexed].addClass('active');
        this.imageLinks[this.indexed].set('opacity', 0).setStyle('display', 'block').fade(1);
        this.indexed = (this.indexed < this.max - 1) ? this.indexed + 1 : 0;
    }
});

window.addEvent('domready', function() {
    /*new noobSlide({
        mode: 'vertical',
        box: $('notice_box'),
        items: $$('#notice_box p'),
        size: 27,
        autoPlay: true
    });*/
    $(document.body).getElement('.marquee marquee').addEvents({
        'mouseover': function() {this.stop();},
        'mouseout': function() {this.start();}
    });
    
    $('keyword').addEvents({
        mouseover: function() {$('keyword').setStyle('background', '#ffc');},
        mouseout: function() {$('keyword').setStyle('background', '#fff');}
    });
});




























