$(document).ready(function() {
  dmod.swim();
  $('article').resize(dmod.swim);
  $('section:has(div.hidden_div)').each(function(i) {$(this).prepend('<a id="'+i+'"></a>');$(this).attr('data-href','href_'+i)}).click(function () {
      $(this).find('div.hidden_div').slideToggle("slow");
      dmod.scrollTo(this);
      if($(this).find('.link').hasClass('show'))
	      {
		      $(this).find('.link a').text('Развернуть');
		      $(this).find('.link').removeClass('show').addClass('hide');
	      }
	      else
	      {
		      $(this).find('.link a').text('Свернуть');
		      $(this).find('.link').addClass('show').removeClass('hide');
	      }
    }).append('<div class="link hide"><a href="#" onClick="return false;">Развернуть</a><span></span></div>').find('div.hidden_div').css('display','none');
  if ($('article.one').size()>0) {
    var delay = 400;
    $('.preview').hover(function(){
      
      if ($(this).hasClass('next')) {
        $('.prev').animate({left:-300},delay);
        $('.main').animate({left:-50},delay);
        $('.next').animate({right:-200,width:400,height:360},delay);
      }
      if ($(this).hasClass('prev')) {
        $('.prev').animate({left:-200,width:400,height:360},delay);
        $('.main').animate({left:50},delay);
        $('.next').animate({right:-300},delay);
      }
    },function() {
      $('.next').animate({right:-250,width:300,height:260},delay);
      $('.prev').animate({left:-250,width:300,height:260},delay);
      $('.main').animate({left:0},delay);
    });
    $('.preview').click(function(){
      var padding = 10;
      var href = $(this).find('a').attr('href');
      var timmi = setTimeout(function() {document.location=href} ,5000);
      $.ajax({
        url:href+'?ajax',
        datatype:'texthtml',
        success:function (data){
          clearTimeout(timmi);
        }
      });
      if ($(this).hasClass('next')) {
        $(this).animate({
          left:$('.main').position().left+padding,
          top:$('.main').position().top+padding,
          width:$('.main').width()-padding*2,
          height:$('.main').height()-padding*2,
          padding:padding
        },400,function() {
          // remove this
        })
      }  
      return false;
    });
  };
  var map = new dmod.map();
  if (!!map.ready) {
    map.controls('rt',[
      {type:'hybrid',name:'гибрид'},
      {type:'sputnik',name:'спутник'},
      {type:'scheme',name:'схема'}
    ]);
    setTimeout(function(){map.layer.setCenter({x:-100,y:-20})},100);
  }
});
var html="article header nav aside figure figcaption".split(' ');
      for (var i =html.length;i--;) {
        document.createElement(html[i]);
      };
dmod = {
  'swim':function() {
    if ($.browser.msie && $.browser.version <= 8) {
      $('#right_menu li, .make_bullits li').prepend('&mdash;&nbsp;');
      $('tr.empty').height(
        $('td.article').height()
        - $('#right_menu').height()
      );//+$('tr.more').height()+$('tr.more_top').height()+$('tr.more_bottom').height()+$('tr.print').height()
    } else {
      if ($('.swim').size()===0) return false;
      var t=$('.swim').offset().top-$('article').offset().top-1;
      $('article div.design').css('top',t); 
    }
  },
  'scrollTo':function(a){
    
    if (a.nodeName.toLowerCase()==='section') var pos = $(a).offset().top-10;
    else var pos = $(a).parents('section').offset().top-10;
    
    $(window).scrollTop(pos);
  },
  oJoin:function(o,a){
    if (typeof a === 'object') {
      for (i in a) o[i]=a[i];
    }
    return o;
  },
  map:function(a){
    var obj = {
      prefix:'dm_map_',
      map:document.getElementById('map'),
      center:{
        x:200,
        y:200
      },
      border:-4,
      type:'hybrid',
      ready:true,
      changeMode:function(a) {
        this.type=a;
        this.layer.o.className = this.prefix+a;
      },
      button:function(a) {
        var obj ={
          icon:false,
          name:false,
          click:function() {
            alert(this.name)
          }
        };
        return dmod.oJoin(obj,a);
      },
      resize:function(){
        var sizes = {
          p:{
            y:this.map.offsetHeight===0?300:this.map.offsetHeight,
            x:this.map.offsetWidth>500?400:this.map.offsetWidth
          },
          l:{
            y:555,
            x:555            
          }
        };
        this.poly.o.style.height=sizes.y+'px';
        this.poly.o.style.width=sizes.x+'px';
        this.centerM = {x:this.poly.css.width/2,y:this.poly.css.height/2};
        this.centerB = {
          min:{
            x:-this.border,
            y:-this.border
          },
          max:{
            x:sizes.l.x-sizes.p.x+this.border,
            y:sizes.l.y-sizes.p.y+this.border
          }
        };
        //console.log(this.layer.o.offsetWidth,this.layer.o.offsetHeight);
      },
      point:function(a){
        var obj ={
          x:0,
          y:0
        };
        return dmod.oJoin(obj,a);       
      },
      controls:function(pos,a){
        var opt = {
          positions:{
            distance:'10px 10px',
            lt:'left top',
            rt:'right top',
            lb:'left bottom',
            rb:'right bottom'
          },
          parent:this,
          o:document.createElement('div'),
          buttons:[],
          add:function(a){
            var self = typeof this.buttons === 'undefined'?opt:this;
            if (a instanceof Array) {
              for (var i = a.length;i--;) self.add(a[i]);
              return false;
            }  
            var but=document.createElement('div');
            self.buttons.push(but);
            self.o.appendChild(but);
            but.classList.add(self.prefix+'button');
            but.setAttribute('data-type',a.type);
            if (a.type==self.parent.type) but.classList.add(self.prefix+'selected');
            but.innerHTML=a.name;
            dmod.addEvent(but, 'click', function(){
              self.parent.changeMode(but.getAttribute('data-type'));
              for (var i=self.buttons.length;i--;){
                if (self.buttons[i].getAttribute('data-type')===self.parent.type) self.buttons[i].classList.add(self.prefix+'selected');
                else self.buttons[i].classList.remove(self.prefix+'selected');
              }
            });
          }
        }
        opt.prefix = this.prefix;
        this.poly.o.appendChild(opt.o);
        opt.o.classList.add(opt.prefix+'controls');
        var css_ar = opt.positions[pos].split(' ');
        var dis=opt.positions.distance.split(' ');
        for (var i=css_ar.length;i--;) {
          opt.o.style[css_ar[i]]=dis[i];
        }
        opt.add(a);
        return opt;
      }
    };
    init=function(obj) {  
      var opt={
        poly:{
          o:document.createElement('div'),
          css:{
            height:300,
            width:400,
            overflow:'hidden'
          }
        },
        layer:{
          o:document.createElement('div'),
          css:{
            left:-obj.center.x,
            top:-obj.center.y
          },
          parent:obj,
          setCenter:function(a,b,c) {
            //console.log(a,'setcenter');
            this.css=dmod.oJoin(this.css,{
              left:-Math.min(Math.max(-a.x,this.parent.centerB.min.x),this.parent.centerB.max.x),
              top:-Math.min(Math.max(-a.y,this.parent.centerB.min.y),this.parent.centerB.max.y)
            });
            //console.log(this.parent.centerB,'setcenter B');
            for (i in this.css) {
              this.o.style[i]=typeof this.css[i]==='number'&&i!='z-index'?this.css[i]+'px': this.css[i];
            }
            window.map_=this;
            //console.log(this.css);
            return this.css;
          },
          getPos:function(){
            return {
              x:this.css.left,
              y:this.css.top
            }
          },
          startDrag:function(e){
            var strt_ev=e,
                strt_pos=this.getPos(),
                shield=document.createElement('div');    
            shield.className=this.parent.prefix+'shield';
            shield.style.height=document.body.offsetHeight+'px';
            shield.style.width=document.body.offsetWidth+'px';
            document.body.appendChild(shield);
            obj = this;
            dmod.addEvent(shield, 'mousemove', function(e) {
              var new_vector ={
                x:strt_ev.pageX-e.pageX,
                y:strt_ev.pageY-e.pageY
              };
              obj.setCenter({x:-new_vector.x+strt_pos.x,y:-new_vector.y+strt_pos.y});
            });
            dmod.addEvent(shield, 'mouseup', function(e) {
              shield.parentNode.removeChild(shield);
            });
          }
        },
      };
      obj.centerM = {x:opt.poly.css.width/2,y:opt.poly.css.height/2};
      opt.poly.o.classList.add(obj.prefix+'poly');
      opt.layer.o.classList.add(obj.prefix+obj.type);
      obj.map.appendChild(opt.poly.o);
      opt.poly.o.appendChild(opt.layer.o);
      for (j in opt) {
        for (i in opt[j].css) {
          opt[j].o.style[i]=typeof opt[j].css[i]==='number'&&i!='z-index'?opt[j].css[i]+'px': opt[j].css[i];
        }
      }
      obj.centerB = {
        min:{
          x:-obj.border,
          y:-obj.border
        },
        max:{
          x:opt.layer.o.offsetWidth-opt.poly.o.offsetWidth+obj.border,
          y:opt.layer.o.offsetHeight-opt.poly.o.offsetHeight+obj.border
        }
      };
      opt.layer.o.onmousedown=function(e){
        opt.layer.startDrag(e);
        return false;
      };
      dmod.oJoin(obj,opt);
      return obj;
    }
    obj = dmod.oJoin(obj,a);
    if (obj.map == null) return false;
    obj=init(obj);
    obj.map.onresize = obj.resize();
    obj.resize();
    return obj;
  },
  addEvent:function (object, event, handler)
    {
      if (typeof object.addEventListener != 'undefined')
        object.addEventListener(event, handler, false);
      else if (typeof object.attachEvent != 'undefined') // fuck ie!
        object.attachEvent('on' + event, handler);
      else
        throw "Incompatible browser";
    }  
};


