var last, enter, search, poll, forms, error_text, flash_name, flash_mode, detect, flash_cookie, mstatus;
var slide_time = 300, slide_delta = 5, img_set = 6;

addHandler(window, 'load', windowLoad, false);
addHandler(document, 'click', documentClick, false);

var poster = {
  element: null,
  path: '/i/back/60/',
  null_path: '/i/p.gif',
  shift: 10,
  data : [
    {
      img: {
        src : '17.jpg',
        background : 1
      },
      link: [
        /*Первый столбец*/
        {
          href: '/collection/woman/sports-shirts/mariya1.html',
          title: 'новая коллекция',
          coords: [356, 33, 824, 462]
        }
      ]
    }
  ],
  init : function() {
    this.element = this.data[Math.ceil(this.data.length * Math.random()) - 1];
    addHandler(window, 'resize', this.resize, false);
    this.main_image = new Image();
    addHandler(this.main_image, 'load', this.load, false);
    this.main_image.src = this.path + this.element.img.src;
    setTimeout(this.show, 0);
  },
  load : function() {
    var parent = poster;
    if ($('add_img')) {
      $('add_img').style.height = parent.main_image.height + 'px';
    }
  },
  resize : function() {
    var parent = poster;
    if (parent.img) {
      $('img_container').style.height = $('main').offsetHeight + 'px';
      parent.img.className = ($('img_container').offsetHeight/$('img_container').offsetWidth > .75)? 'v' : 'h';
    }
    if (parent.link_container) {
      var height = offsetY($('menu').getElementsByTagName('div')[0]) - parent.shift;
      parent.link_container.style.height = height + 'px';
    }
  },
  show : function() {
    var parent = poster;
    if (parent.element.link) {
      parent.link_container = document.body.appendChild(create('div#link')).appendChild(create('div.fix'));
      parent.link_container.innerHTML = '<img id="add_img" src="' + parent.null_path + '" alt="" usemap="#posterMap"><map name="posterMap" id="posterMap"></map>';
      for (var i = 0; parent.element.link[i]; i++) {
        if (parent.element.link[i].coords) {
          var area = create('area');
          if (parent.element.link[i].coords.length == 3) {
            area.shape = 'circle';
          } else if (parent.element.link[i].coords.length == 4) {
            area.shape = 'rect';
          } else {
            area.shape = 'poly';
          }
          area.coords = parent.element.link[i].coords.join();
          area.href = parent.element.link[i].href;
          area.title = parent.element.link[i].title;
          $('posterMap').appendChild(area);
        }
      }
      //parent.link = document.body.appendChild(create('div#link')).appendChild(create('div')).appendChild(create('a'));
      //parent.link.href = parent.element.link.href;
      //parent.link.title = parent.element.link.title;
    }
    if (!parent.element.img.background) {
      parent.img = document.body.insertBefore(create('div#img_container'), $('container')).appendChild(create('img#img.h'));
      parent.img.src = parent.path + parent.element.img.src;
    } else {
      $('main').style.backgroundImage = 'url(' + parent.path + parent.element.img.src + ')';
    }
    if (parent.element.text) {
      var left_text = $('main').appendChild(create('div#price_left.price'));
      var right_text = $('main').appendChild(create('div#price_right.price'));
      for (var i in parent.element.text) {
        var text = create('p');
        text.innerHTML = parent.element.text[i][0];
        if (parent.element.text[i][1]) {
          //addClass(text, 'dark');
          text.style.color = parent.element.text[i][1];
        }
        switch (i) {
          case 'left' :
            left_text.appendChild(text);
            break;
          default :
            right_text.appendChild(text);
            break;
        }
      }
    }
    parent.resize();
  }
}

function windowLoad() {
  var show, smile, member, post, recomend_it, recomend_it_show;
  if ((recomend_it_show = $('recomend_it_show')) && (recomend_it = $('recomend_it'))) {
    var href = recomend_it_show.getElementsByTagName('a');
    for (var i = 0; href[i]; i++) {
      if (testClass(href[i].parentNode,'none')) {
        last = href[i].parentNode;
      }
      href[i].onclick = function() {
        addClass(this.parentNode,'none');
        if (last) {
          removeClass(last,'none');
        }
        last = this.parentNode;
        if (testClass(this.parentNode,'on')) {
          removeClass(recomend_it);
        } else {
          addClass(recomend_it,'none');
        }
        return false;
      }
    }
  }
  if ((show = $('show')) && (smile = $('smile'))) {
    var href = show.getElementsByTagName('a');
    for (var i = 0; href[i]; i++) {
      if (testClass(href[i].parentNode,'none'))last = href[i].parentNode;
      href[i].onclick = function() {
        addClass(this.parentNode,'none');
        if (last) {
          removeClass(last,'none');
        }
        last = this.parentNode;
        if (testClass(this.parentNode,'on')) {
          removeClass(smile);
        } else {
          addClass(smile,'none');
        }
        return false;
      }
    }
  }
  if (post = $('post')) {
    last = post;
  }
  if (member = $('member')) {
    var href = member.getElementsByTagName('A');
    for (var i = 0; href[i]; i++) {
      if (href[i].parentNode.tagName == 'SPAN' && $(href[i].parentNode.className)) {
        addHandler(href[i],'click',rate,false);
      }
    }
  }
  search = $('search');
  enter = $('enter');
  forms = document.forms;
  for (var i = 0; forms[i]; i++) {
    if (forms[i] != enter && forms[i] != search) {
      if (forms[i].name == 'poll') {
        addHandler(forms[i],'submit',check_poll,false);
      } else {
        addHandler(forms[i],'submit',check_all,false);
      }
      /*
      if (forms[i].name == 'poll') {
        forms[i].onsubmit = check_poll;
      } else {
        forms[i].onsubmit = check_all;
      }
      */
      forms[i].need = [];
      forms[i].td = [];
      var td = forms[i].getElementsByTagName('td');
      for (var j = 0, k = 0; td[j]; j++) {
        if (testClass(td[j],'need')) {
          var need = td[j].parentNode.getElementsByTagName('input')[0];
          /*
          if (!need || need.type != 'text' && input[i].type != 'password') {
            need = td[j].parentNode.getElementsByTagName('select')[0];
          }
          */
          if (!need) {
            need = td[j].parentNode.getElementsByTagName('select')[0];
          }
          if (!need) {
            need = td[j].parentNode.getElementsByTagName('textarea')[0];
          }
          if (need) {
            forms[i].need[k] = need;
            forms[i].td[k] = td[j];
            k++ ;
          }
        }
      }
    } else {
      addHandler(forms[i], 'submit', check,false);
      //forms[i].onsubmit = check;
      var input = forms[i].getElementsByTagName('input');
      for (var k = 0; input[k]; k++) {
        if (input[k].type == 'text' || input[k].type == 'password') {
          addHandler(input[k], 'focus', on, false);
          addHandler(input[k], 'blur', out, false);
        }
      }
    }
  }
}

function check_poll(e) {
  e = e || event;
  var target = e.target || e.srcElement;
  var text = '/?';
  var y = target.elements;
  for (var i = 0, count = 0; y[i]; i++) {
    if (y[i].type != 'submit' && y[i].type != 'button' && y[i].tagName != 'BUTTON') {
      if (y[i].type == 'radio' || y[i].type == 'checkbox') {
        if (y[i].checked) {
          text += y[i].name + '=' + y[i].value + '&';
          count++ ;
        }
      } else if (y[i].tagName == 'OPTION') {
        if (y[i].selected) {
          text += y[i].name + '=' + y[i].value + '&';
          count++ ;
        }
      } else {
        text += y[i].name + '=' + y[i].value + '&';
      }
    }
  }
  /*if (count) {
    target.ajax = 1;
    send_request(create_request(),text,'change_vote','POST');
  }*/
  send_request(create_request(), text, 'change_vote', 'POST');
  cancelEvent(e);
}

function change_vote(e) {
  var parent = $('question');
  /*parent.contentNode.end_action = function() {
    this.innerHTML = findClass($('question').www,'content')[0].innerHTML;
  }*/
  parent.www = document.body.appendChild(create('div.outside.vote'));
  parent.www.innerHTML = e;
  //parent.new_contentHeight = findClass(parent.www,'out')[0].offsetHeight;
  //addClass(findClass(parent,'in')[0],'hidden');
  //slideTo(parent.contentNode,0,parent.contentNode.offsetHeight,parent.new_contentHeight);
  findClass(parent,'title')[0].innerHTML = findClass(parent.www,'title')[0].innerHTML;
  findClass(parent,'out')[0].innerHTML = findClass(parent.www,'out')[0].innerHTML;
  changeText(_(findClass(parent,'title')[0], 'a')[0], '', '', 'title');
  removeElement(parent.www);
}

function on(e) {
  e = e || event;
  var target = e.target || e.srcElement;
  if (target.value == target.defaultValue) {
    removeClass(target, 'grey');
    removeClass(target, 'error');
    target.value = '';
  } else {
    target.select();
  }
}

function out(e) {
  e = e || event;
  var target = e.target || e.srcElement;
  if (target.value == '') {
    addClass(target, 'grey');
    target.value = target.defaultValue;
  }
}

function check(e) {
  e = e || event;
  var target = e.target || e.srcElement;
  var error;
  var input = target.getElementsByTagName('input');
  for (var i = 0; input[i]; i++) {
    if (input[i].type == 'text' || input[i].type == 'password') {
      if (input[i].value == input[i].defaultValue) {
        addClass(input[i],'error');
        error = true;
      }
    }
  }
  if (error)cancelEvent(e);
}

function check_all(e) {
  e = e || event;
  var target = e.target || e.srcElement;
  var error,span = [];
  var input = target.need;
  for (var i = 0, k = 0; input[i]; i++) {
    if ((input[i].tagName != 'SELECT' && input[i].value == '') || (input[i].tagName == 'SELECT' && input[i].options[input[i].options.selectedIndex].value == 0)) {
      span[k] = document.createElement('span')
      span[k].appendChild(document.createTextNode(' ' + target.td[i].innerHTML));
      error = true;
      k++ ;
    }
  }
  if (error) {
    if (error_text) {
      error_text.parentNode.removeChild(error_text);
    }
    error_text = document.createElement('p');
    addClass(error_text,'red');
    for (var i = 0; span[i]; i++) {
      error_text.appendChild(span[i]);
    }
    $('right').insertBefore(error_text, target);
    cancelEvent(e);
  }
}

function slideTo(e,slideTime,yBegin,yEnd) {
  e.timeout = e.timeout || slide_delta;
  e.yBegin = yBegin;
  e.yEnd = yEnd;
  e.slideTime = slideTime || slide_time;
  e.stop = false;
  if (e.slideLinear) {
    e.period = 1/e.slideTime;
  } else {
    e.param = Math.PI/(2 * e.slideTime);
  }
  e.start = new Date().getTime();
  if (!e.moving) {
    _slideTo(e);
  }
}

function _slideTo(e) {
  var delta = new Date().getTime()-e.start;
  if (e.stop) {
    e.moving = false;
  } else if (delta < e.slideTime) {
    var parent = this;
    e.slide = setTimeout(function() {parent._slideTo(e)}, e.timeout);
    var param = e.slideLinear? e.param * delta : Math.sin(e.param * delta);
    setDimensionY(e, Math.round((e.yEnd - e.yBegin) * param + e.yBegin));
    e.moving = true;
  } else{
    setDimensionY(e,e.yEnd);
    e.moving = false;
    clearTimeout(e.slide);
    if (e.end_action) {
      e.end_action();
    }
  }
}

function documentClick(e) {
  e = e || event;
  var target = e.target || e.srcElement;
  if (target.tagName == 'A') {
    if (returnParent(target, '.sp')) {
      popup(target.href, 700, 545, 'shop');
      cancelEvent(e);
    } else if (testClass(target, 'back')) {
      history.back();
      return false;
    } else if (returnParent(target, '.map')) {
      cancelEvent(e);
      showMap(target);
    } else if (returnParent(target, '.title') && returnParent(target, '#question')) {
      cancelEvent(e);
      var parent = returnParent(target,'#question');
      parent.contentHeight = findClass(parent, 'out')[0].offsetHeight;
      if (!parent.contentNode) {
        parent.contentNode = findClass(parent, 'content')[0];
      }
      if (testClass(parent,'on')) {
        removeClass(parent,'on');
        slideTo(parent.contentNode, 0, parent.contentNode.offsetHeight, 0);
        changeText(target, '', '', 'title');
      } else{
        addClass(parent,'on');
        slideTo(parent.contentNode, 0, 0, parent.contentHeight);
        changeText(target, '', '', 'title');
      }
      target.blur();
    }
  }
  if (target.tagName == 'IMG') {
    if ($('img') && target == $('img')) {
      return false;
    }
    if (target.parentNode.parentNode && target.parentNode.parentNode.id && target.parentNode.parentNode.id == 'photo') {
      var big_photo = $('big_photo');
      var new_src = target.src.replace('s_', 'b_');
      if (big_photo && big_photo.src != new_src) {
        big_photo.src = new_src;
      }
      return false;
    }
    if (target.parentNode.parentNode.parentNode.parentNode.parentNode.tagName == 'DIV' && target.parentNode.parentNode.parentNode.parentNode.parentNode.id == 'smile') {
      ta = $('test');
      els = target.src.split('/');
      for(var i = 0; els; i++) {
        if (/gif/.test(els[i])) {
          last = els[i];
          break;
        }
      }
      str = ':' + last.split('.')[0] + ':';
      if (document.selection) {
        ta.focus();
        var s = document.selection.createRange();
        s.text += str;
        s.select();
       } else if (typeof ta.selectionEnd == 'number') {
          var pos = ta.selectionEnd;
          ta.value = ta.value.substring(0, pos) + str + ta.value.substring(pos);
          ta.setSelectionRange(pos + str.length, pos + str.length);
       }
      ta.focus();
      return false;
    }
  }
}

function popup(href,w,h,name) {
  var width = screen.availWidth;
  var height = screen.availHeight;
  var props = '';
  var left = width < w? 0 : (width-w)/2;
  var top = height < h? 0 : (height-h)/2;
  props = 'scrollbars = 1, directories = 0, menubar = 0, status = 0, toolbar = 0, resizable = 0, location = 0, left = ' + left + ', top = ' + top + ', height = ' + h + ', width = ' + w;
  var win = window.open(href, name, props);
  win.focus();
}

function getCookie(NameOfCookie) {
   if (document.cookie.length > 0) {
      begin = document.cookie.indexOf(NameOfCookie + "=");
      if (begin != -1) {
         begin += NameOfCookie.length + 1;
         end = document.cookie.indexOf(";", begin);
         if (end == -1) {
            end = document.cookie.length;
         }
         return unescape(document.cookie.substring(begin, end));
      }
   }
   return null;
}

function setCookie(NameOfCookie, value, expiredays) {
   var ExpireDate = new Date();
   ExpireDate.setTime(ExpireDate.getTime() + (expiredays * 24 * 3600 * 1000));
   document.cookie = NameOfCookie + '=' + escape(value) + ((expiredays == null)? '' : ';expires = ' + ExpireDate.toGMTString()) + ';path = /';
}

function delCookie (NameOfCookie) {
   if (getCookie(NameOfCookie)) {
      document.cookie = NameOfCookie + "=" + "; expires=Thu, 01-Jan-70 00:00:01 GMT";
   }
}

function music_control(e) {
  setCookie('music', e, 1);
}

function set_music(e) {
  if ($('music')) {
    mstatus = getCookie('music')? getCookie('music') : true;
    flash_inner('music',e + '?mstatus=' + eval(mstatus) * 1, 'transparent');
  }
}

function rate(e) {
  e = e || event;
  var target = e.target || e.srcElement;
  var parent = $(target.parentNode.className);
  if (last) {
    if (parent == last) {
      if (testClass(parent, 'none')) {
        removeClass(parent,'none');
      } else {
        addClass(parent, 'none');
      }
    } else {
      addClass(last,'none');
      removeClass(parent);
    }
  } else {
    removeClass(parent);
  }
  last = parent;
  cancelEvent(e);
}

function music_popup() {
  var c = getCookie('music_popup')
  if (c != 'yes' && $('thisisaroot')) {
    var w = window.open('i/flash/music.html', 'music_popup', 'left=' + (screen.availWidth-112) + ', top = 0, width=102, height=102, scrollbars=0, directories=0, menubar=0, status=0, toolbar=0, resizable=0, location=0');
    w.focus();
    setCookie('music_popup', 'yes');
  }
}

function flash_inner(name,e,mode) {
  flash_name = e;
  //flash_mode = mode?mode:'window';
  /*var cookie_data = document.cookie.split(';');
  if (cookie_data[0]) {
    for(var i = 0;cookie_data[i];i++) {
      var pare = cookie_data[i].split('=');
      if (/flash/.test(pare[0]))flash_cookie = pare[1];
    }
  }
  if (flash_cookie)flash_innerhtml($('flash'),flash_name,flash_mode);*/
  flash_innerhtml($(name), flash_name, mode);
}

function flash_innerhtml(element,name,mode) {
  mode = mode?mode:'window';
  //element.innerHTML = '<object type = "application/x-shockwave-flash" data = "' + name + '" width = "100%" height = "100%"><param name = "movie" value = "' + name + '"><param name = "wmode" value = "' + mode + '"><param name = "menu" value = "false"></object>';
}

function insert_object(src,width,height) {
  document.write('<object type="application/x-shockwave-flash" data="' + src + '" width="' + width + '" height="' + height + '"><param name="movie" value="' + src + '"></object>');
}

function insert_embed(src,width,height) {
  document.write('<embed src="' + src + '" type="application/x-shockwave-flash" width="' + width + '" height="' + height + '"></embed>');
}

function showMap(target) {
  var parent = returnParent(target, 'dl');
  if (!myMap.shops[parent.id]) {
    myMap.shops[parent.id] = parent;
    myMap.shops[parent.id].city = $('region_name').innerHTML;
    myMap.shops[parent.id].full_address = _(parent, 'dt')[0].innerHTML;
    myMap.shops[parent.id].address = myMap.shops[parent.id].full_address.split('<br>')[0];
    
    var text = target.search.substring(1).split('&');
    myMap.shops[parent.id].coords = [];
    for (var i = 0; text[i]; i++) {
      myMap.shops[parent.id].coords[i] = text[i].split('=')[1] * 1;
      //myMap.shops[parent.id].coords[i] = text[i].split('=')[1];
    }
  }
  myMap.getMap(parent.id);
}

function loadMap() {
  myMap.initialize();
}

var myMap = {
  shops: {},
  current_shop: null,
  status: false,
  form: null,
  map: null,
  marker: null,
  geocoder: null,
  address: null,
  markerOptions: null,
  initialize: function() {
    if (GBrowserIsCompatible()) {
      document.body.onunload = GUnload;
      var container = document.body.appendChild(create('div#map_container'));
      var close = container.appendChild(create('span.close'));
      close.title = 'Закрыть карту';
      addHandler(close, 'click', myMap.hideMap, false);
      var map = container.appendChild(create('div#map'));
      this.map = new GMap2(document.getElementById('map'));
      this.map.addControl(new GSmallMapControl());
      this.geocoder = new GClientGeocoder();
    }
  },
  getMap: function(id) {
    this.status = false;
    this.current_shop = this.shops[id];
    if (this.current_shop.coords && this.current_shop.coords[0] != '' && this.current_shop.coords[1] != '') {
      this.useCoords();
    } else if (this.current_shop.address != '') {
      this.useAddress();
    }
  },
  useCoords: function() {
    var point = new GLatLng(this.current_shop.coords[0], this.current_shop.coords[1]);
    if (point) {
      this.showMap();
      if (this.status) {
        this.marker = new GMarker(point, myMap.markerOptions);
        this.marker.setLatLng(point);
        this.map.panTo(point);
        this.setInfo();
      } else {
        this.createMap(point);
      }
    } else {
      //document.getElementById('map_error').innerHTML = 'Невозможно загрузить карту с такими координатами<br>Убедитесь, что:<br> - в полях координат вбиты только цифры<br> - цифры разделены точкой<br> - цифры лежат в допустимых диапазонах';
    }
  },
  useAddress: function(target) {
    this.geocoder.getLatLng(
      this.current_shop.address,
      function(point) {
        testCoords(point);
      }
    )
    function testCoords(point) {
      if (!point) {
        myMap.geocoder.getLatLng(
          myMap.current_shop.city,
          function(point) {
            if (point) {
              newCoords(point);
            } else {
              //document.getElementById('map_error').innerHTML = 'Невозможно загрузить карту по адресу<br>Убедитесь, что:<br> - в адресе указаны только улица, дом, корпус<br> - адрес набран без ошибок<br><br>Для указания метро, названия места расположения и т.п. есть соответствующее поле';
            }
          }
        )
      } else {
        newCoords(point);
      }
    }
    function newCoords(point) {
      myMap.showMap();
      if (myMap.status) {
        myMap.marker = new GMarker(point, myMap.markerOptions);
        myMap.marker.setLatLng(point);
        //myMap.marker.setPoint(point);
        myMap.centerMap(point);
      } else {
        myMap.createMap(point);
      }
    }
  },
  createMap: function(point) {
    if (!point) {
      //alert('Адрес "' + address + '" не найден');
    } else {
      this.status = true;
      this.map.setCenter(point, 13);
      var myIcon = new GIcon();
      myIcon.image = '/i/marker.png';
      myIcon.shadow = '/i/marker-shadow.png';
      myIcon.iconSize = new GSize(31, 22);
      myIcon.shadowSize = new GSize(40, 22);
      myIcon.iconAnchor = new GPoint(6, 22);
      myIcon.infoWindowAnchor = new GPoint(6, 1);
      this.markerOptions = { icon: myIcon };
      this.marker = new GMarker(point, myMap.markerOptions);
      GEvent.addListener(this.marker, 'click', function() {
        myMap.setInfo();
      });
      this.map.addOverlay(this.marker);
      this.setInfo();
    }
  },
  showMap: function() {
    $('map_container').style.left = offsetX($('right')) + bodyScrollLeft() -20 + 'px';
    $('map_container').style.top = bodyScrollTop() + 150 + 'px';
  },
  hideMap: function() {
    $('map_container').style.left = '-1000px';
    $('map_container').style.top = '-1000px';
  },
  centerMap: function(point) {
    //this.map.panTo(point);
    this.map.setCenter(point);
    this.setInfo();
  },
  setInfo: function() {
    var text = '';
    if (this.current_shop.address.value != '') {
      text = this.current_shop.city + ', ' + this.current_shop.full_address;
    }
    this.marker.openInfoWindowHtml(text);
  }
}