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

    var d = $('done1Debug');
    if (!d) {
        d = new Element('div');
        d.setProperty('id', 'done1Debug');
        d.style.background = '#fff';
        document.body.appendChild(d);
    }
    var t = new Element('div');
    t.innerHTML = s;
    d.appendChild(t);
}

done1.izba = {};

done1.izba.gmap = new Class({
    Implements: Options,
    options:{
        zoom:13,
        lat:51.759,
        lng:19.457,
        icon:null,
        url:''
    },
    createMap:function(g){
        if(!this.dom){
            var o = this.options;
            this.dom = new GMap2(g);
            this.dom.clearOverlays();
            this.createIcon();
            this.dom.addControl(new GSmallMapControl());
            this.dom.setCenter(new GLatLng(o.lat, o.lng), o.zoom);
        }
    },
    createIcon:function(){
        this.markerOptions = {};
        if(this.options.icon){
            var o = this.options;
            var icon = new GIcon();
            icon.image = o.url + o.icon.url;
            icon.iconSize = new GSize(o.icon.x, o.icon.y);
            icon.shadow = o.url + o.icon.shadow;
            icon.shadowSize = new GSize(o.icon.sx, o.icon.sy);
            icon.iconAnchor = new GPoint(0, o.icon.y);
            icon.infoWindowAnchor = new GPoint(0, o.icon.y);
            this.markerOptions.icon = icon;
        }
    },
    createMarker:function(point,txt){
        var map = this.dom;
        var marker = new GMarker(point,  this.markerOptions);
        map.addOverlay(marker);
        if(txt){
            GEvent.addListener(marker, "click", function(){
                marker.openInfoWindowHtml(txt);
            });
        }
    },
    panTo:function(point){
        this.dom.panTo(point);
    }
});

done1.izba.adv = new Class({
    //Implements:done1.izba.gmap,
    Implements: Options,
    initialize:function(options){
        this.options = options;
        if(typeof GMap2 == 'undefined'){
            return false;
        }

        switch(options.type){
            case 'list':
                this.advList();
                break;
            case 'view':
                this.advView();
                break;
        }
    },
    init:function(){
        this.data = {};
        this.content = $('content');
        this.col = $('cbadvertise_list');
        this.dom = $$('.centerColumn .cbBody')[0];
        if(this.dom){
            if(this.content.hasClass('column1')){
                return true;
            }
        }
        return false;
    },
    advView:function(){
        if(!this.init()){
            return false;
        }

        //if(this.options.lat && this.options.lng){
        this.createGmap();
        //if(!this.options.points)
        //this.gmap.createMarker(new GLatLng(this.options.lat, this.options.lng));
        //}
        var imgs = $$('.gallery img');
        var as = $$('.gallery a');
        if(imgs.length > 0 && imgs.length == as.length){


            var gallery = new Element('div',{
                'class':'gallery'
            });

            this.dom.appendChild(gallery);

            var popup = new done1.gallery.popup();
            var scroll = new done1.gallery.scroll(gallery, {
                width: gallery.getSize().x
            });

            imgs.each(function(img,i){
                scroll.add(i, img.src, as[i].get('href'));
                popup.add(i, img.src, as[i].get('href'), as[i].get('title'), img.get('alt'));
                as[i].destroy();
            }, this);

        }
        return true;
    },
    advList:function(){
        if(!this.init()){
            return false;
        }

        this.createGmap();
        this.popup = new done1.gallery.popup();
        var items = $$('#cbadvertise_list .item');
        items.each(function(item){
            this.createRequest(item);
        },this);

        var s = this.col.getSize();
        this.cX = s.x;
        this.cY = s.y;
        var wrapper = this.wrapper = new Element('div',{
            'class':'advWrapper'
        });
        this.cont = new Element('div',{
            'class':'cont'
        });

        this.col.setStyles({
            'width':s.x,
            'height':s.y
        });
        this.wrapper.setStyles({
            'width':s.x,
            'height':s.y
        });
        this.cont.setStyles({
            'width':s.x
        });
        this.col.addClass('col');

        this.dom.appendChild(this.wrapper);
        this.wrapper.appendChild(this.cont);
        this.cont.appendChild(this.col);


        this.mask = new Element('div',{
            'class':'mask'
        });
        this.mTween = new Fx.Tween(this.mask, {
            duration: 300,
            transition: Fx.Transitions.Sine.easeIn,
            onComplete: function(){

            }
        });
        var _self = this;
        this.colTween = new Fx.Tween(this.cont, {
            duration: 400,
            transition: Fx.Transitions.Sine.easeIn,
            onComplete: function(){
                if(_self.isShow){
                    _self.isShow = false;
                }else{
                    _self.isShow = true;
                    var h = _self.data[_self.advActive].height;
                    wrapper.setStyle('height',h);
                }
            }
        });
        return true;
    },
    createGmap:function(){
        var o = this.options;
        this.content.className = 'column2gmaps';
        this.gmap = new done1.izba.adv.gmap(this,this.options)
        var p;
        if(o.points){
            for(var i = 0;i < o.points.length;i++){
                p = o.points[i];
                this.gmap.addPoint(p);
                this.createPoint(p);
            }
        }
    },
    createRequest:function(item){
        var _self = this;
        item.addClass('advActive');
        var a = item.getElement('.more a');
        a.addEvent('click',function(e){
            new Event(e).stop();
            _self.addMask(item);
            var id = item.get('id');
            id = id.replace(/gmaps_item_/,'');
            _self.load(id);
        });
    },
    createPoint:function(p){
        var map = this.gmap;
        var item = $('gmaps_item_'+p.AdID);
        if(item){
            item.setStyle('cursor','pointer');
            item.addEvent('mouseenter',function(e){
                item.addClass('over');
                map.panTo(new GLatLng(p.Lat, p.Lng));
            });
            item.addEvent('mouseleave',function(e){
                item.removeClass('over');
            });


        }
    },
    addMask:function(item){
        var s = item.getSize();
        this.mask.setStyles({
            'width':s.x,
            'height':s.y,
            'left':-s.x
        });
        this.mX = s.x;
        this.mY = s.y;
        if(this.mItem != item){
            this.mItem = item;
            item.appendChild(this.mask);
        }
    },
    load:function(sid){
        if(this.data[sid]){
            this.show(sid);
        }else{

            this.mask.style.display = 'block';
            this.mTween.start('left',-this.mX,0);

            var _self = this;
            var xhr = new Request.JSON({
                url: "index.php?json=get_advertise&advertiseID="+sid,
                onSuccess:function(json, txt){
                    _self.loadSuccess(sid,json);
                }
            }).get();
        }
    },
    loadSuccess:function(sid,data){
        this.createBox(sid,data);
        this.show(sid);
    },
    show:function(sid){
        if(!this.isShow && this.data[sid]){
            this.advActive = sid;
            this.colTween.start('left',0,-this.cX);

            this.scrollY = window.getScroll().y;
            this.popup.reset();
            var p = this.data[sid].pics;
            for(var i =0 ; i< p.length;i++){
                this.popup.add(p[i].sid, p[i].src, p[i].href, '','');
            }
            //this.col.style.display = 'none';
            this.data[sid].dom.style.display = 'block';
        }
    },
    hide:function(){
        if(this.advActive && this.data[this.advActive]){
            this.mask.style.display = 'none';

            this.wrapper.setStyle('height',this.cY);
            this.colTween.start('left',-this.cX,0);
            window.scrollTo(window.getScroll().x, this.scrollY);
            //this.col.style.display = 'block';
            this.data[this.advActive].dom.style.display = 'none';
        }
    },
    createBox:function(sid,data){
        if(this.dom){
            var dom = new Element('div',{
                'styles':{
                    'left':this.cX,
                    'width':this.cX
                },
                'class':'col'
            });


            var h2 = new Element('h2');
            h2.set('html',data.Topic);

            var descr = new Element('div');
            descr.set('html',data.Content);
            
            var repoInfo = new Element('div');
            repoInfo.set('html',data.RepoInfo);
            
            dom.appendChild(h2);
            dom.appendChild(descr);
            dom.appendChild(repoInfo);

            this.data[sid] = {};
            var pics = data['Picture'];
            var p = [];
            if(pics.length>0){

                var gallery = new Element('div',{
                    'class':'gallery',
                    'styles':{
                        'width':this.cX
                    }
                });

                var scroll = new done1.gallery.scroll(gallery, {
                    width: gallery.getSize().x
                });

                var over =  new Element('div',{
                    'class':'over'
                });
                var cont = new Element('div');

                over.appendChild(cont);


                gallery.appendChild(over);
                for(var i = 0 ;i < pics.length;i++){
                    var href = 'files/'+pics[i].repoID+'/800x600/'+pics[i].Picture;
                    var a = new Element('a',{
                        'href':href
                    });
                    //var src = 'files/1/small/'+pics[i].Picture;
                    var src = '?image='+pics[i].Picture + '&id='+pics[i].repoID;
                    scroll.add(i, src, '');
                    p[i] = {
                        sid:i,
                        src:src,
                        href:href
                    };
                }
                dom.appendChild(gallery);
            }
            var div = new Element('div');
            div.set('html','<span class="more"><a href="#back">wróć</a> <span>»</span></span>');
            div.addEvent('click',this.hide.bind(this));
            dom.appendChild(div);


            this.cont.appendChild(dom);
            this.data[sid].height = dom.offsetHeight;
            this.data[sid].dom = dom;
            this.data[sid].pics = p;

        }
    }
});

done1.izba.adv.gmap = new Class({
    Implements:done1.izba.gmap,
    initialize:function(parent,options){
        this.setOptions(options);
        var left = $$('#content .leftColumn')[0];
        left.set('html','<div class="cbBottom"></div><div class="cbox cbadvertisemaps cblast"><h3 class="title"><span>'+config.title+'</span></h3><div class="cbBody"></div></div>');
        var cbody = $$('.leftColumn .cbBody')[0];

        if(cbody){
            var g = new Element('div');
            g.style.height = '400px';
            cbody.appendChild(g);
            this.createMap(g);
        }
    },
    addPoint:function(p){
        var n = p.LocalNo ? '/'+p.LocalNo : '';
        var txt = '<b>'+p.Name+'</b><br/>ul. '+p.Street+' '+p.HomeNo+n+'<br/>'+p.City+'<br/>tel. '+p.Phone +'<br/><br/>'+p.Descrip;
        var point = new GLatLng(p.Lat, p.Lng);
        this.createMarker(point,txt);
    }
});

done1.izba.user = new Class({
    Implements:done1.izba.gmap,
    initialize:function(options){
        this.setOptions(options);
        if(typeof GMap2 == 'undefined'){
            return false;
        }
        if($('gmap')){
            var map = $('gmap');
            var cbody = $$('.cbuser .cbBody')[0];
            if(map && cbody){
                var g = new Element('div');
                g.style.height = '300px';
                map.appendChild(g);
                this.createMap(g);
                for(var i = 0;i < config.points.length;i++){
                    var p = config.points[i];
                    var n = p.LocalNo ? '/'+p.LocalNo : '';
                    var txt = 'ul. '+p.Street+' '+p.HomeNo+n+'<br/>'+p.City+'<br/>tel. '+p.Phone +'<br/><br/>'+p.MapDescrip;
                    var point = new GLatLng(p.Lat, p.Lng);
                    this.createMarker(point,txt);
                    this.box(point,p);
                }
            }

        }

    },
    box:function(point,p){
        var map = this.dom;
        var item = $('gmaps_item_'+p.Login);
        if(item){
            var c = item.getChildren();
            if(c && c[0]){
                var li = new Element('li',{'class':'handler'});
                var span = new Element('li',{styles:{'float':'right'}});

                var hand = new Element('a',{'href':'#map','html':'pokaż na mapie'});
                span.appendChild(document.createTextNode('[ '));
                span.appendChild(hand);
                span.appendChild(document.createTextNode(' ]'));
                li.appendChild(span);
                item.insertBefore(li,c[0]);
                item.addEvent('click',function(e){
                    map.panTo(point);
                });
            }
        }
    }
});

done1.validator = new Class({
    initialize:function(forms){
        if(forms){
            for(var i = 0;i < forms.length;i++){
                this.prepareForm(forms[i]);
            }
        }
    },
    prepareForm:function(form){
        var submit = $(form.submit);
        if(submit){
            submit.addEvent('click',function(e){
                this.submit(e,form.fields);
            }.bind(this));
        }
    },
    submit:function(e,fields){
        var isStop = false;
        var v, el, value;
        for(var i = 0;i < fields.length;i++){
            v = fields[i];
            el = $(v.id);
            if(el){
                value = el.get('value');
                if(!this.checkType(value,v.to)){
                    if(!isStop){
                        isStop = true;
                        new Event(e).stop();
                    }
                }
            }
        }
    },
    checkType:function(value,to){
        value = this.clean(value);
        var isError = false,isOK;
        for(var i = 0;i < to.length;i++){
            var t = to[i];
            isOK = true;
            switch(t.type){
                case 'required':
                    isOK = !this.empty(value);
                    break;
                case 'email':
                case 'mail':
                    isOK = this.validEmail(value);
                    break;
                case 'int':
                    isOK = this.validInt(value);
                    break;
                case 'float':
                    isOK = this.validFloat(value);
                    break;
            }
            var f = $(t.field);
            if(f) f.style.display = isOK || isError ? 'none' : 'block';
            if(!isOK) isError = true;
        }
        return !isError;
    },

    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,4}$/i;
            return (email.test(txt));
        }
        return true;
    },
    validInt:function(txt){
        if(!this.empty(txt)){
            return /^[0-9]+$/.test(txt);
        }
        return true;
    },
    validFloat:function(txt){
        if(!this.empty(txt)){
            return /^[0-9]+(.[0-9]+)?$/.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;
    }
});

done1.mask = {
    isOpen: false,
    isCreate: false,
    create: function(){
        if (!this.isCreate) {
            this.isCreate = true;
            this.dom = new Element('div', {
                'id': 'pageMask'
            });
            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.70);

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

done1.checkEmail = function(){
    $$('.emailcode').each(function(item){
        var code = item.innerHTML;
        code = code.replace(/\[repace_by_monkey\]/g,'@');
        var a = new Element('a');
        a.set('html',code);
        a.set('href','mailto:'+code);
        item.getParent().replaceChild(a,item);
    });
}

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

window.addEvent('domready', function(){

    done1.mask.create();
    if (typeof URL == 'undefined')
        var URL = '';
    if(typeof config != 'undefined' ){
        switch(config.site){
            case 'adv': new done1.izba.adv(config); break;
            case 'user': new done1.izba.user(config); break;
            case 'contact': new done1.validator(config.forms); break;
            case 'newsletter': new done1.validator(config.forms); break;
            case 'calculator': new done1.validator(config.forms); break;
            case 'article': new done1.validator(config.forms); break;


        }
        done1.checkEmail($('content'));
    }
    var d = $$('a.bydone')[0];
    if(d){
        d.setAttribute('target','_blank');
    }


});

