donejs.rotex.selectmenager = {
    show:function(src , force){
        if(force || this.actual != src){
            this.actual = src;
            this.dom.set('html','');
            if(this.imgs[src]){
                this.dom.appendChild(this.imgs[src]);
                this.dom.style.display = 'block';
            }else{
                this.dom.style.display = 'none';
            }

        }
    },
    hide:function(){
        this.dom.style.display = 'none'
        this.actual = '';
        this.dom.set('html','');
    },
    create:function(){
        if(!this.isCreate){
            this.isCreate = true;
            this.imgs = {};
            this.dom = new Element('div',{
                id:'selectpreview'
            });
            document.body.appendChild(this.dom);
        }
    },
    add:function(src){
        this.create();
        if(!this.imgs[src]){
            var _this = this;
            var img = new Image();
            img.onload = function(){
                _this.imgs[src] = this;
                if(_this.actual == src){
                    _this.show(src,true);
                }
            }
            img.onerror = function(){
                delete _this.imgs[src];
            }
            img.src = src;
        }
    }
};


donejs.rotex.select = new Class({
    Extends:sSelect,
    addOption:function(data){
        this.parent(data);
        var oo = this.options.options;
        var i = oo.length;
        var last = oo[i -1];
        if(last){
            if(data[2] && data[3]){
                var s = new Element('span',{
                    html:last.dom.get('html')
                });
                last.dom.set('html','');
                s.style.background = 'url('+data[2]+') no-repeat';
                last.dom.appendChild(s);
                last.src = data[3];
                donejs.rotex.selectmenager.add(last.src);
            }

        }
    },
    over:function(o){
        this.parent(o);
        donejs.rotex.selectmenager.show(o.src);
    },
//    outEv:function(){
//        this.parent();
//        donejs.rotex.selectmenager.hide();
//    },
    hide:function(){
        this.parent();
        donejs.rotex.selectmenager.hide();
    }
});

donejs.rotex.orderform = new Class({
    initialize:function(){
        this.pages = [];
        this.pwidth = 910;
        this.actualPage = 0;
        this.isLogin = false;

        if($('orderPage1') && this.create()){
            var of = donejs.rotex.orderform;
            this.addPage(new of.page.product(this,$('orderPage1')));
            this.addPage(new of.page.register(this,$('orderPage2')));
            this.addPage(new of.page.result(this,$('orderPage3')));
            this.list = new donejs.rotex.orderform.page.product.list(this,$('flistbody'));
        //TODO
        //this.moveTo(1);

        }

    },
    create:function(){
        var body = $('body');
        if(body){
            this.dom = new Element('div',{
                id:'orderform'
            });
            this.wrapper = new Element('div',{
                id:'orderwrapper'
            });
            this.dom.appendChild(this.wrapper);
            body.appendChild(this.dom);

            this.mover = new Fx.Tween(this.wrapper,{
                duration:600,
                wait:false
            });
            return true;
        }
        return false;
    },
    addPage:function(page){
        if(page.is()){
            page.sid = this.pages.length;
            this.wrapper.appendChild(page.dom);
            this.pages.push(page);
        }
    },
    moveTo:function(side){
        if(side == 1 || side == -1){
            side = this.actualPage+side;

            if(side >= 0 && side < 3){
                if(this.isLogin){
                    if(this.actualPage == 0){
                        side = 2;
                    }else if(this.actualPage == 2){
                        side = 0;
                    }
                }
                this.mover.start('left',-this.actualpage*this.pwidth,-side*this.pwidth);
                this.actualPage = side;
                this.pages[side].onActive();
            }
        }
    },
    send:function(act,request,page){
        var _self = this;
        var jsonRequest = new Request.JSON({
            //url: URL + "/json.php?act="+act,
            url: URL+'/?json='+act,
            onComplete:function(json){
                _self.response(act,json,request,page);
            }
        }).post(request);
    },
    response:function(act,data,request,page){

        var page = this.pages[page] || this.pages[this.actualPage];
        if(page){
            page.response(act,data,request);
        }
    },
    orderItems:function(){
        var tmp = [];
        for(var i in this.list.data){
            var el = this.list.data[i];
            tmp.push({
                category:el.category.value,
                pattern:el.pattern.value,
                color:el.color.value,
                length:el.length.value
            });
        }
        return tmp;
    },
    orderFinish:function(){
        this.moveTo(-1);
        this.isLogin = false;
        this.list.reset();
        this.pages.each(function(el){
            el.reset();
        });
    },
    onListChange:function(length){
        this.pages.each(function(el){
            el.onListChange(length);
        });
    }
})

donejs.rotex.orderform.page = new Class({
    initialize:function(parent,dom){
        this.dom = dom;
        this.parent = parent;
        if(this.is()) this.init();
    },
    is:function(){
        return !!this.dom;
    },
    init:function(){

    },
    onActive:function(){

    },
    reset:function(){

    },
    onListChange:function(length){

    }
});

donejs.rotex.orderform.page.product = new Class({
    Extends:donejs.rotex.orderform.page,
    init:function(){


        this.badd = $('fbadd');
        //this.slength = new donejs.rotex.select($('ctl0_Main_Length'),{
        //    parent:this.dom,
        //    isEnable:false,
        //    onChange:this.selectLength.bind(this)
        //});
        this.slength = $('ctl0_Main_Length');
        this.slength.set('value','');
        this.slength.addEvent('keyup',this.selectLength.bindWithEvent(this,this.slength));

        this.scolor = new sSelect($('ctl0_Main_Color'),{
            parent:this.dom,
            isEnable:false,
            onChange:this.selectColor.bind(this)
        });
        this.spattern = new donejs.rotex.select($('ctl0_Main_Pattern'),{
            parent:this.dom,
            isEnable:false,
            onChange:this.selectPattern.bind(this)
        });
        this.scategory = new sSelect($('ctl0_Main_Category'),{
            parent:this.dom,
            isEnable:false,
            onChange:this.selectCategory.bind(this)
        });



        this.data = {
            category: new donejs.rotex.data(),
            pattern: new donejs.rotex.data(),
            color: new donejs.rotex.data()
        }
        this.load('category');

        this.badd.addEvent('click',this.addToList.bindWithEvent(this));

        this.bstep2 = $('fbstep2');
        this.bstep2.addEvent('click',function(){
            if(this.parent.list.length > 0){
                this.parent.moveTo(1);
            }else{
                donejs.message.error(lang.error_form,lang.not_select_product);
            }
        }.bind(this));

        var b = $('orderPage1Body');
        if(b){

            var bodyWrapper = new Element('div',{
                id:'orderPage1BodyWrapper'
            });

            this.mover = new Fx.Tween(bodyWrapper,{
                duration:600,
                wait:false
            });

            b.getChildren().each(function(el){
                bodyWrapper.appendChild(el);
            });
            b.appendChild(bodyWrapper);
            this.bodyWrapper = bodyWrapper;
        }

        var info = $('finfo').getElement('textarea');
        var s = info.getSize();
        var infoScroll = new donejs.scroll({
            top:false
        });

        if(s.y < info.getScrollSize().y){
            infoScroll.use(info);
        }
        info.addEvent('keydown',function(e){
            if(e.code == 38){
                infoScroll.up();
            }else if(e.code == 40){
                infoScroll.down();
            }else{
                info.setStyle('height',s.y);
                if(s.y <= info.getScrollSize().y){
                    infoScroll.use(info);
                    try{
                        info.focus();
                    }catch(e){}
                }
            }
        });

    },
    showBody:function(){
        if(!this.isShow){
            this.isShow = true;
            this.mover.cancel();
            this.mover.start('top',-230,0);
        }
    },
    hideBody:function(){
        if(this.isShow){
            this.isShow = false;
            this.mover.cancel();
            this.mover.start('top',0,-230);
        }
    },
    onListChange:function(length){
        var p = this.bstep2.getParent();
        if(p){
            if(length > 0){
                p.addClass('fstepactive');
            }else{
                p.removeClass('fstepactive');
            }
        }
    },
    addToList:function(e){
        e.stop();
        if(!this.checkAdd()){
            return false;
        }
        //this.showBody();
        var sv = this.scategory.selected();
        var sp = this.spattern.selected();
        var sc = this.scolor.selected();
        var sl = this.slength.get('value');
        this.parent.list.add({
            category:{
                name:sv.text,
                value:sv.value
            },
            pattern:{
                name:sp.text,
                value:sp.value
            },
            color:{
                name:sc.text,
                value:sc.value
            },
            length:{
                name:sl+'m',
                value:sl
            }
        });
        return true;
    },
    load:function(type,sid){
        this.checkSelectLoader(type);
        sid = sid || 0;
        if(this.data[type].is(sid)){
            this.loaded(type,this.data[type].get(sid));
        }else{
            this.parent.send('PageContentService.getFormSelect',{
                type:type,
                sid:sid
            },0);
        }
    },
    checkSelectLoader:function(type){
        switch(type){
            case 'category':
                this.scategory.loader(true);
                break;
            case 'pattern':
                this.spattern.loader(true);
                break;
            case 'color':
                this.scolor.loader(true);
                break;

        }
    },
    loaded:function(type,data){
        if(this['response_'+type]){
            this['response_'+type](data);
        }
    },
    response:function(act,data,request){
        var type = request.type, sid = request.sid;
        if(type !== null && sid !== null){
            this.data[type].set(sid,data);
            this.loaded(request.type,data);
        }
    },
    response_category:function(data){
        this.scategory.clean().addOptions(data).enable();
        this.scategory.loader(false);
        this.spattern.clean().disable();
        this.scolor.clean().disable();
    },
    response_color:function(data){
        this.scolor.clean().addOptions(data).enable();
        this.scolor.loader(false);
    },
    response_pattern:function(data){
        this.spattern.clean().addOptions(data).enable();
        this.spattern.loader(false);
        this.scolor.clean().disable();
    },
    selectCategory:function(select){
        if(select.value != 0){
            this.spattern.disable();
            this.load('pattern',select.value);
        }
    },
    selectPattern:function(select){
        if(select.value != 0){
            this.load('color',select.value);
        }

    },

    selectColor:function(select){

    },
    selectLength:function(e,select){
        var v = select.get('value')

        if(v.test(/[,]/)){
            v = v.replace(/[,]/g,'.');
            select.set('value',v);
        }
        if(v.length > 0 && !v.test(/^[0-9]+([\.][0-9]{0,2})?$/)){
            v = this.slvalue;
            select.set('value',v);
        }

        this.slvalue = v;
    //this.checkAddButton();
    },

    checkAdd:function(disable){

        var isError = false;

        var cv = this.scategory && this.scategory.selected().value;
        var cp = this.spattern && this.spattern.selected().value;
        var cc = this.scolor && this.scolor.selected().value;

        var cl = this.slength && this.slength.get('value');
        cl = cl.replace(/[^0-9\.]/g,'');

        if(!cv || cv == 0 || !cp || cp == 0 || !cc || cc == 0 || !cl || cl.length == 0){
            isError = true;
        }
        if(isError){
            donejs.message.error(lang.error_form,lang.not_select);
            return false;
        }
        return true;
    },
    reset:function(){
        this.slvalue = null;
        this.scategory.clean().disable();
        this.spattern.clean().disable();
        this.scolor.clean().disable();
        this.slength.set('value','');
        this.load('category');
        $('Info').set('value','');
    }
});

donejs.rotex.orderform.page.product.list = new Class({
    initialize:function(parent,container){
        this.parent = parent;
        this.data = {};
        this.dlist = {};
        this.sid = 0;
        this.length = 0;
        this.dom = container;
        this.height = this.dom.getSize().y;

    },
    add:function(item){
        var pos = this.find(item);
        if(pos > -1){
            var length = (parseFloat(this.data[pos].length.value)+parseFloat(item.length.value)).round(2);
            this.data[pos].length.value = length;
            this.dlist[pos].length.set('html',length+'m');
        }else{
            this.length++;
            var sid = this.sid++;
            this.data[sid] = item;



            var i = new Element('div',{
                'class':'item',
                events:{
                    'mouseenter':function(){
                        $(this).addClass('select');
                    },
                    'mouseleave':function(){
                        $(this).removeClass('select');
                    }
                }
            });
            var n = new Element('div',{
                'class':'name',
                'html':item.pattern.name +', '+item.color.name
            });
            var l = new Element('div',{
                'class':'length',
                'html':item.length.name
            });
            var de = new Element('div',{
                'class':'del'

            });
            var a = new Element('a',{
                'html':lang.delete_from_list,
                'href':'#del',
                events:{
                    click:this.remove.bind(this,sid)
                }
            })
            de.appendChild(a);
            i.appendChild(n);
            i.appendChild(l);
            i.appendChild(de);
            this.dlist[sid] = {
                length:l,
                dom:i
            };
            this.dom.appendChild(i);
            if(this.dom.getScrollSize().y > this.height){
                if(!this.scroll){
                    this.scroll = new donejs.scroll();
                }
                this.scroll.use(this.dom);
            }
        }
        this.parent.onListChange(this.length);
    },
    find:function(item){
        var pos = -1;
        for(var i in this.data){
            var el = this.data[i];
            if(item.category.value == el.category.value &&
                item.pattern.value == el.pattern.value &&
                item.color.value == el.color.value){
                pos = i;
            }
        };
        return pos;
    },
    remove:function(sid){
        if(this.data[sid]){
            this.length--;
            delete this.data[sid];
            this.dlist[sid].dom.dispose();
            delete this.dlist[sid];
        }
        this.dom.setStyle('height',this.height);
        if(!this.scroll){
            this.scroll = new donejs.scroll();
        }
        this.parent.onListChange(this.length);
        this.scroll.use(this.dom);
    //if(this.length==0){
    //this.parent.hideBody();
    //}
    },
    getData:function(){
        return this.data;
    },
    render:function(dom){
        dom.set('html','');
        for(var j in this.data){
            var el = this.data[j];

            var i = new Element('div',{
                'class':'item'
            });
            var n = new Element('div',{
                'class':'name',
                'html':el.pattern.name +', '+el.color.name
            });
            var l = new Element('div',{
                'class':'length',
                'html':el.length.name
            });


            i.appendChild(n);
            i.appendChild(l);
            dom.appendChild(i);
        }
    },
    reset:function(){
        this.dom.set('html','');
        this.data = {};
        this.dlist = {};
        this.sid = 0;
        this.length = 0;
    }
});

donejs.rotex.orderform.page.register = new Class({
    Extends:donejs.rotex.orderform.page,
    init:function(){
        var p = this.parent;
        //p.moveTo(1);
        $('fbstepproduct').addEvent('click',function(){
            p.moveTo(-1);
        });


        this.ilogin = $('LEMail');
        this.ilogin.addEvent('keyup',this.checkLoginInputs.bind(this));
        this.ilogin.set('value','');

        this.ipassword = $('LPassword');
        this.ipassword.addEvent('keyup',this.checkLoginInputs.bind(this));
        this.ipassword.set('value','');


        this.blogin = $('fbsteplogin');
        this.blogin.addEvent('click',this.login.bind(this));

        $('fbstepregister').addEvent('click',this.register.bind(this));

        this.checkLogin();

        this.fields = [
        {
            name:'name',
            id:'RName',
            type:['required']
        },

        {
            name:'firm',
            id:'RFirm',
            type:['required']
        },
        {
            name:'phone',
            id:'RPhone',
            type:['required']
        },
        {
            name:'email',
            id:'REMail',
            type:['required','email']
        },
        {
            name:'address',
            id:'RAddress',
            type:['required']
        },
        {
            name:'password',
            id:'RPassword',
            type:['required']
        },
        {
            name:'rpassword',
            id:'RRPassword',
            type:['required']
        }
        ];
        this.fields.each(function(el){
            var el = $(el.id);
            if(el){
                el.addEvent('keyup',this.checkRegisterInputs.bind(this));
            }
        },this);
        this.validator = new donejs.validator(this.fields);
    },
    checkRegisterInputs:function(){
        var isEmpty = false;
        this.fields.each(function(el){
            if(!isEmpty){
                var el = $(el['id']);
                if(el){
                    var v = el.get('value');
                    if(!v || v.length == 0 ){
                        isEmpty = true;
                    }
                }
            }
        });
        var p = $('fbstepregister');
        if(p){
            p = p.getParent();
            if(p){
                if(isEmpty){
                    p.removeClass('fstepactive');
                }else{
                    p.addClass('fstepactive');
                }
            }
        }
    },
    checkLoginInputs:function(){
        var pa = this.blogin.getParent();
        if(pa){
            if(this.checkLogin()){
                pa.addClass('fstepactive');
            }else{
                pa.removeClass('fstepactive');
            }
        }
    },
    checkLogin:function(){
        var l = this.ilogin.get('value');
        var p = this.ipassword.get('value');
        return (l && p &&  l.clean().length > 0 && p && p.clean().length);
    },
    login:function(){
        if(this.checkLogin()){
            var l = this.parent.l = this.ilogin.get('value').trim();
            var p = this.parent.p = this.ipassword.get('value').trim();
            if(this.validator.validEmail(l)){
                this.ilogin.removeClass('error');
                //this.ilogin.set('value','');
                this.ipassword.set('value','');
                this.checkLoginInputs();
                this.parent.send('PageContentService.checkFormLogin',{
                    email:l,
                    password:p
                },1);

            }else{
                this.ilogin.addClass('error');
                donejs.message.error(lang.login,lang.incorect_email);
            }
        }
    },
    response:function(act,data,request){
        switch(act){
            case 'PageContentService.checkFormLogin':
                if(data && data.status == 0){
                    this.parent.moveTo(1);
                    this.parent.isLogin = true;
                }else{
                    donejs.message.error(lang.login,data.msg);
                }
                break;
            case 'PageContentService.setFormRegister':
                if(data)
                    if(data.status == 0){
                        this.parent.moveTo(1);
                        this.parent.isLogin = true;
                    }else{
                        donejs.message.error(lang.register,data.msg);
                    }
                break;

        }
    },
    register:function(){
        var data = this.validator.getAll();
        var p = $('RPassword');
        var rp = $('RRPassword');
        if(this.validator.submit()){
            if(data.password != data.rpassword){
                donejs.message.error(lang.register,lang.password_error);
                p.addClass('error');
                rp.addClass('error');
            }else{
                p.removeClass('error');
                rp.removeClass('error');
                this.parent.l = data.email;
                this.parent.p = data.password;
                this.parent.send('PageContentService.setFormRegister',{
                    json:JSON.encode(data)
                });
            }
        }else{
            donejs.message.error(lang.register,lang.register_error);
            if(data.password != data.rpassword){
                p.addClass('error');
                rp.addClass('error');
            }
        }

    },
    onActive:function(){
        this.validator.reset();
    }
});
donejs.rotex.orderform.page.result = new Class({
    Extends:donejs.rotex.orderform.page,
    init:function(){
        // $('fbstepbackregister').addEvent('click',function(){
        //  this.parent.moveTo(-1);
        //}.bind(this));
        $('fbstep3').addEvent('click',this.order.bind(this));

        this.scrollinfo = new donejs.scroll();
        this.scrolllist = new donejs.scroll();
    },

    onActive:function(){
        this.parent.list.render($('flistbodyresult'));
        $('inforesult').set('html',$('Info').get('value').replace(/\n/g,'<br/>'));
        this.scrollinfo.use($('inforesult'));
        this.scrolllist.use($('flistbodyresult'));
    },
    order:function(){
        this.parent.send('PageContentService.setFormOrder',{
            json:JSON.encode({
                email:this.parent.l,
                items:this.parent.orderItems(),
                info:$('Info').get('value')
            })
        });
    },
    response:function(act,data){
        if(data && data.status == 0){
            var self = this;
            donejs.message.info(lang.order,data.msg,function(){
                self.parent.orderFinish();
            });

        }else{
            donejs.message.error(lang.order,data.msg);
        }
    }
});

window.addEvent('domready', function(){
    new donejs.rotex.orderform();
});