var donejs = {};

function d(){
    if(typeof console == 'undefined'){
        var st = [];
        for (var i = 0; i < arguments.length; i++) {
            st.push(arguments[i]);
        }
        s = st.join(',');

        var d = $('doneDebug');
        if (!d) {
            d = new Element('div');
            d.setProperty('id', 'doneDebug');
            d.style.background = '#fff';
            document.body.appendChild(d);
        }
        var t = new Element('div');
        t.innerHTML = s;
        d.appendChild(t);
    }else{
        console.log.apply(console,arguments);
    }
}
donejs.message = {
    ERROR:'error',
    INFO:'info',
    error:function(title,msg){
        this.show(title,msg,this.ERROR);
    },
    info:function(title,msg,callback){
        this.show(title,msg,this.INFO,callback);
    },
    create:function(){
        if(!this.isCreate){
            this.isCreate = true;
            this.dom = new Element('div',{
                id:'sMsgBox',
                styles:{
                //'visibility':'hidden'
                },
                events:{
                    'click':this.close.bind(this)
                }
            });
            var cl = new Element('div',{
                id:'sMsgBoxClose'
            });
            this.title = new Element('div',{
                id:'sMsgBoxTitle'
            });
            this.body = new Element('div',{
                id:'sMsgBoxBody'
            });
            this.dom.appendChild(cl);
            this.dom.appendChild(this.title);
            this.dom.appendChild(this.body);
            document.body.appendChild(this.dom);
        }
    },
    show:function(title,msg,type,callback){
        this.callback = callback;
        //Tool.hideFlash();
        type = type || this.INFO;
        msg = msg || '';
        this.create();
        this.title.set('html',title);
        this.body.set('html',msg.replace(/\n/g,'<br/>'));
        this.dom.className = 'sMsgBox_'+type;
        Mask.show();
        this.dom.style.display = 'block';
    },
    close:function(){
        //Tool.showFlash();
        this.dom.style.display = 'none';
        if(this.callback){
            this.callback();
            this.callback = null;
        }
        Mask.hide();
    }
}
donejs.scroll = new Class({
    Implements:[Options],
    options:{
        padding:30,
        width:-30,
        margin:0,
        top:true
    },
    initialize:function(options){
        this.setOptions(options);
    },
    use:function(el,force){
        var content = $(el);
        if(content){

            if(this.scroll && content.getParent()  == this.scroll){
                this.size = this.scroll.getSize();
                this.ssize = content.getScrollSize();
                this.sarea.dispose();
                this.diff = 0;
                content.setStyle('top',0);
            }else{
                this.size = content.getSize();
                content.setStyles({
                    overflow:'hidden',
                    'width':this.size.x+this.options.width,
                    'padding-right':this.options.padding,
                    'margin-right':this.options.margin
                });
                this.ssize = content.getScrollSize();
            }
            if(this.ssize.y > this.size.y){
                this.prepare(content);
            }
        }
    },
    prepare:function(content){
        var s = this.size;
        var ss = this.ssize;
        this.diff = ss.y - s.y;
        var m = s.y/ss.y;
        if(content.getParent()  != this.scroll)
        {
            this.scrollWrapper = new Element('div',{
                styles:{
                    width:s.x,
                    height:s.y,
                    position:'relative'
                }
            });
            content.getParent().appendChild(this.scrollWrapper);

            this.scroll = new Element('div',{
                'class':'cscroll',
                styles:{
                    width:s.x,
                    height:s.y
                }
            });
            //content.getParent().appendChild(this.scroll);
            this.scrollWrapper.appendChild(this.scroll);
            this.scroll.appendChild(content);


            content.addEvent('mousewheel', function(e){
                new Event(e).stop();
                this.wheel(e.wheel > 0 ? 1 : -1);
            }.bind(this));
            this.content = content;
        }
        if(this.sarea) this.sarea.dispose();

        this.sarea = new Element('div',{
            'class':'cscrollarea',
            styles:{
                height:s.y
            }
        });
        var saback = new Element('div',{
            'class':'cscrollarealine'
        });
        var sbar = new Element('div',{
            'class':'cscrollbar'
        });
        var sbline = new Element('div',{
            'class':'cscrollbarline'
        });



        this.scroll.appendChild(this.sarea);
        this.sarea.appendChild(sbar);
        this.sarea.appendChild(saback);
        sbar.appendChild(sbline);

        sbar.setStyle('height',parseInt(m*s.y));
        sbline.setStyle('height',parseInt(m*s.y));

        this.slider = new Slider(this.sarea, sbar, {
            steps: this.diff,
            mode: 'vertical',
            onChange: function(step){
                this.move(step);
            }.bind(this)
        });

        content.setStyles({
            position:'absolute',
            top:0,
            left:0,
            //width:s.x,
            height:ss.y
        });
        this.slider.set(this.options.top ? 0 : this.diff);
    },
    wheel:function(side){
        var p = this.step-side*10;
        if(p < 0) p = 0;
        if(p > this.diff) p = this.diff;
        this.slider.set(p)
        this.move(p);

    },
    up:function(){
        this.wheel(1);
    },
    down:function(){
        this.wheel(-1);
    },
    move:function(step){
        this.step = step;
        this.content.setStyle('top',-step);

    }
});
var Mask = {
    isOpen: false,
    isCreate: false,
    create: function(){
        if (!this.isCreate) {
            this.isCreate = true;
            this.dom = new Element('div', {
                'id': 'sPageMask'
            });
            document.body.appendChild(this.dom);
        }
    },
    show: function(){
        if (!this.isOpen) {
            this.isOpen = true;
            this.create();
            var wHeight = window.getSize().y;
            var wWidth = window.getSize().x;

            this.dom.setStyles({
                'height': window.getScrollSize().y,
                'opacity': 0
            });
            this.dom.setStyle('display', 'block');
            this.dom.fade(0.40);

        }
    },
    hide: function(){
        if (this.isOpen) {
            this.isOpen = false;
            this.dom.fade(0);
        }
    }
}


var Tool = {
    hideFlash: function(){
        $$('object, embed').each(function(el){
            el.style.display = 'none';
        });
    },
    showFlash: function(){
        $$('object, embed').each(function(el){
            el.style.display = 'block';
        });
    }
};
function menu(){
    var list = $$('#menu a');
    list.each(function(element) {

        var fx = new Fx.Tween(element,{
            duration:300,
            wait:false
        });

        element.addEvent('mouseenter', function(e){
            fx.cancel();
            e.stop();
            fx.start('background-color', '#191919' , '#000');
        });

        element.addEvent('mouseleave', function(e){
            fx.cancel();
            e.stop();
            fx.start('background-color', '#000', '#191919');
        });

    });
    var els = [];
    els.push({
        hand:$('bpoll'),
        wrap:$('bbpoll')
    });
    els.push({
        hand:$('bnewsletter'),
        wrap:$('bbnewsletter')
    });

    function prepare(el){
        el.wrap.setStyle('opacity',0);
        var fx = new Fx.Tween(el.wrap,{
            duration:300,
            wait:false
        });
        el.hand.addEvent('mouseenter',function(e){
            fx.cancel();
            e.stop();
            fx.start('opacity', 0 , 1);
        });
        el.hand.addEvent('mouseleave',function(e){
            fx.cancel();
            e.stop();
            fx.start('opacity', 1 , 0);
        });
    }
    for(var i = 0;i < els.length;i++){
        if(els[i]){
            prepare(els[i]);

        }
    }
}

var sSelect = new Class({

    Implements: [Events, Options],

    options: {
        css:'',
        isEnable:true,
        options:[],
        parent:null
    },
    initialize: function(el,options) {
        this.setOptions(options);

        this.del = -1;
        this.actualElement = {};
        el = $(el);
        var parent = $(this.options.parent) || el.getParent();


        this.isOpen = false;
        this.create();
        this.options.isEnable ? this.enable() : this.disable();

        if(el.get('tag') == 'select'){
            this.oselect = el;
            this.prepare(el);
            var pos = el.getCoordinates(parent);
            this.dselect.setStyles({
                top:pos.top,
                left:pos.left
            });
            parent.appendChild(this.dselect);

            var a = this.dselect;
            a.hasLayout = true; //IE6 :/ no display
            el.setStyle('display','none');
        }
    },
    overEv:function(){
        if(this.options.isEnable){
            this.isOver = true;
            if(this.tOver) clearTimeout(this.tOver);
            this.dselect.set('class','sSelectOver');
        }
    },
    outEv:function(){
        if(this.isOver){
            this.isOver = false;
            this.tOver = setTimeout(function(){
                if(!this.isOver){
                    this.hide();
                    this.tOver = null;
                }
            }.bind(this),300);
            this.dselect.set('class','sSelect');
        }
    },
    create:function(){
        this.dselect = new Element('div',{
            'class':'sSelect' +' '+this.options.css,
            events:{
                'mouseenter':this.overEv.bind(this),
                'mouseleave':this.outEv.bind(this)
            }
        });
        this.dlabel = new Element('div',{
            'class':'sSelectLabel',
            events:{
                click:this.toggle.bind(this)
            }
        })
        this.dselect.appendChild(this.dlabel);
        this.dlist = new Element('div',{
            'class':'sSelectList'
        });

        this.dlistbody = new Element('div',{
            'class':'sSelectListBody'
        });
        this.dloader = new Element('div',{
            'class':'sSelectLoader'
        });


        this.dselect.appendChild(this.dlist);
        this.dselect.appendChild(this.dloader);
        this.dlist.appendChild(this.dlistbody);

    },
    over:function(o){
        if(this.dover) this.dover.removeClass('over');
        this.dover = o.dom.addClass('over');
    },
    selectEv:function(e,i){
        e.stop();
        this.select(i);
    },
    select:function(i){
        this.hide();
        if(this.del != i){
            if(this.del >= 0){
                var ddel = this.options.options[this.del]
                ddel.dom.removeClass('select');
                if(this.oselect && this.oselect.options[this.del]) this.oselect.options[this.del].selected = false;
            }
            var el = this.options.options[i];
            if(el){
                this.dlabel.set('html',el.text);
                el.dom.addClass('select');
                this.del = i;
                if(this.oselect && this.oselect.options[i]) this.oselect.options[i].selected = true;
                this.actualElement = el;
                this.fireEvent('onChange',el);
            }
        }
    },
    selected:function(){
        return this.actualElement || {};
    },
    toggle:function(){
        if(this.options.isEnable)
            if(this.isOpen){
                this.hide();
            }else
                this.show();
    },
    prepare:function(select){
        if(select){
            select.getChildren().each(function(el){
                var v = el.get('value');
                if(v)
                    this.addOption(v,el.get('text'),el.get('selected'));

            }.bind(this));
        }
    },
    show:function(){
        if(sSelect.active) sSelect.active.hide();
        sSelect.active = this;

        this.dlist.setStyle(
            'display','block'
            );
        this.dlistbody.setStyle('height','auto');
        this.dlist.setStyle('height','auto');
        var h = this.dlist.getSize().y;
        if(h > 160){
            this.dlist.setStyle('height',150);
            this.dlistbody.setStyle('height',150);
            if(!this.scroll){
                this.scroll = new donejs.scroll();
            }
            this.scroll.use(this.dlistbody);
        }
        this.isOpen = true;
    },
    hide:function(){
        this.dlist.setStyle('display','none');
        this.isOpen = false;
    },
    enable:function(){
        this.dselect.set('class','sSelect');
        this.options.isEnable = true;
    },
    disable:function(){
        this.dselect.set('class','sSelectDisable');
        this.options.isEnable = false;
    },
    addOption:function(data){
        var value = data[0],
            text = data[1],
            //selected = data[2],
            oo = this.options.options,
            i = oo.length;

        var dom = new Element('div',{
            'class':'sSelectListOptions',
            html:text
        });
        var o = {
            dom:dom,
            text:text,
            value:value
        };
        dom.addEvents({
            'mouseover':this.over.bind(this,o),
            'click':this.selectEv.bindWithEvent(this,i)
        });

        this.dlistbody.appendChild(dom);
        oo.push(o);
        //if(selected){
            //this.select(i)
        //}
        return this;
    },
    addOptions:function(opts){
        if(opts){
            for(var i =0;i<opts.length;i++){
                this.addOption(opts[i]);
            }
        }
        return this;
    },
    clean:function(){
        this.del = -1;
        var o = this.options.options;
        for(var i = o.length-1;i >=0;i--){

            o[i].dom.removeEvents('mouseover','click');
            o[i].dom.dispose();
            o.splice(i);
        }
        this.dlistbody.set('html','');
        this.dlabel.set('html',lang.select);
        this.actualElement = {};
        return this;
    },
    loader:function(show){
        this.dloader.style.display = show ? 'block' : 'none';
    }
});

donejs.rotex = {};

donejs.validator = new Class({
    initialize:function(fields){
        this.fields = fields;
    },
    submit:function(){
        var v, el, value,isOK = true;
        for(var i = 0;i < this.fields.length;i++){
            v = this.fields[i];
            el = $(v.id);
            if(el){

                if(!this.checkType(el,v.type)){
                    isOK = false;
                }
            }
        }
        return isOK;
    },
    checkType:function(el,type){
        var value = el.get('value');
        value = this.clean(value);
        var isError = false,isOK;
        for(var i = 0;i < type.length;i++){
            var t = type[i];
            isOK = true;
            switch(t){
                case 'required':
                    isOK = !this.empty(value);
                    break;
                case 'email':
                case 'mail':
                    isOK = this.validEmail(value);
                    break;
                case 'int':
                    isOK = this.validInt(value);
                    break;
            }
            if(!isOK) isError = true;

        }
        if(isError) el.addClass('error'); else el.removeClass('error');
        return !isError;
    },
    reset:function(){
        for(var i = 0;i < this.fields.length;i++){
            var el = $(this.fields[i].id);
            if(el){
                el.set('value','');
                el.removeClass('error');
            }

        }
    },
    getAll:function(){
        var data = {};
        for(var i = 0;i < this.fields.length;i++){
            var el = $(this.fields[i].id);
            data[this.fields[i].name || this.fields[i].id] = this.clean(el.get('value'));
        }
        return data;
    },
    validEmail:function(txt){

        if(!this.empty(txt)){
            var email = /^[A-Za-z0-9]+([_\.-][A-Za-z0-9]+)*@[A-Za-z0-9]+([_\.-][A-Za-z0-9]+)*\.([A-Za-z]){2,6}$/i;
            return (email.test(txt));
        }
        return true;
    },
    validInt:function(txt){
        if(!this.empty(txt)){
            return /^[0-9\s]+$/.test(txt);
        }
        return true;
    },
    clean: function(s){
        s = s.replace(/\s{2,}/g, ' ');
        s = s.replace(/^\s*/, '');
        for (var i = s.length; i > 0; --i) {
            if (/\S/.test(s.charAt(i))) {
                s = s.substring(0, i + 1);
                break;
            }
        }
        return s.replace(/<([^>]+)>/g, '');
    },
    empty:function(s){
        return !s || s.length <= 0;
    }
});


donejs.rotex.data = new Class({
    initialize:function(){
        this.data = {};
    },
    is:function(key){
        return !!this.data[key];
    },
    get:function(key){
        return this.data[key] || null;
    },
    set:function(key,value){
        this.data[key] = value;
    },
    getAll:function(){
        return this.data;
    }

})





donejs.main = {};
donejs.main.serach = new Class({
    initialize:function(){
        var i = $('ctl0_IFind');
        if(i){
            this.addFocus(i);
        }

        this.observ(i,$('ctl0_searchbutton'),true);
        this.observ($('ctl0_Main_fsearch'),$('ctl0_Main_fsearchbutton'));
    },
    observ:function(input,button){
        if(input && button){
            button.addEvent('click',this.submit.bindWithEvent(this,input));
        }
    },
    submit:function(e,i){
        e.stop();
        var v = i.get('value');
        if(v.length > 0){
            this.send(v);
        }
    },
    send:function(word){
        if(!this.isSend){
            this.isSend = true;
            var _self = this;
            new Request.JSON({
                url: URL+'/?json=PageContentService.checkSearch',
                onComplete:function(json){
                    _self.response(json,word);
                }
            }).post({
                word:word
            });
        }
    },
    response:function(data,word){
        if(data){
            if(data.status == 0){
                window.location.href = URL+"/search/"+word+'.html';
            }else{
                donejs.message.error(data.title,data.msg);
            }
        }
        this.isSend = false;
    },
    addFocus:function(i){
        var v = i.get('value');
        i.addEvent('focus',function(e){
            e.stop();
            if(this.get('value') == v){
                this.value = '';
            }
        });
        i.addEvent('blur',function(e){
            e.stop();
            if(this.get('value').length == 0){
                this.value = v;
            }
        });
    }
});



donejs.rotex.animpics = new Class({

    initialize:function(imgs,time){
        this.time = time || 5000;
        var list = [];
        this.list = list;
        this.actual = 0;

        if(imgs && imgs.length > 0){
            var isStart = false;
            var _self = this;
            imgs.each(function(el){
                el.set('tween',{
                    duration:2000
                });
                if(!isStart){
                    isStart = true;
                    el.setOpacity(1);
                    _self.anim();
                }else{
                    el.setOpacity(0);
                }

                var img = new Image();
                img.onload = function(){
                    list.push(el);
                }
                img.src = el.src;
            });

        }
        this.list = list;
        return true;
    },
    anim:function(){
        if(this.list.length>1){
            fadeInIndex = (this.actual + 1) % this.list.length;
            fadeOutIndex = (this.actual) % this.list.length;

            this.list[fadeOutIndex].fade(0);
            this.list[fadeInIndex].fade(1);
            
            this.actual++;
        }
        setTimeout(function(){
            this.anim();
        }.bind(this),this.time);
    }
});



window.addEvent('domready', function(){
    if (typeof URL == 'undefined')
        var URL = '';
    new donejs.scroll().use('content');
    new donejs.main.serach();
    menu();

    var m = messageBox;
    if(m.title && m.body && (m.type == 'msg' || m.type == 'error')){
        if(m.type == 'msg'){
            donejs.message.info(m.title,m.body);
        }else{
            donejs.message.error(m.title,m.body);
        }

    }

});
