PE = function()
{ 
  var cal = null;
  var cal_defalut_val = 'выберите дату';
  var message_form_tips = null;

	function initIndexFlash()
	{
		if (typeof(swfobject) !== 'undefined' && !Browser.Engine.gecko) {
			swfobject.embedSWF(
				'/shared/PE/images/head.swf', 
				'head-flash', 
				1000, 
				222, 
				'8',
				false, 
				false, 
				{
					wmode: 'opaque', 
					quality: 'middle'
				}
			);
		}
	}

  function initShadowBox()
  {
    if (typeof(Shadowbox) != 'undefined') {
      Shadowbox.init();
    }
  }
  
  function initCalendar()
  {
    if (typeof(Calendar) != 'undefined' && $('news-search')) {
      cal = new Calendar({
          'news-search-from': 'd.m.Y',
          'news-search-to': 'd.m.Y'
        }, 
        {
          pad: 1,
          classes : ['dashboard'],
          offset: 1,
          days: ['Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'],
          months: ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'],
          tweak: {x: -132, y: 20}
        }
      );
      var from = $('news-search-from'), to = $('news-search-to');
      if (from.getProperty('value') == '') {
        from.setProperty('value', cal_defalut_val);
      }
      if (to.getProperty('value') == '') {
        to.setProperty('value', cal_defalut_val);
      }
      $('news-search').addEvent('submit', onNewsSearchSubmit);
    }
  }
  
  function onNewsSearchSubmit()
  {
    var from = $('news-search-from'), to = $('news-search-to');
    if (from.getProperty('value') == cal_defalut_val) {
      from.setProperty('value', '');
    }
    if (to.getProperty('value') == cal_defalut_val) {
      to.setProperty('value', '');
    }
  }
  
  function initMessageForm()
  {
    var form = $('message-form');
    if (form) {
      var name = $('message-name'), 
          phone = $('message-phone'), 
          email = $('message-email'), 
          message = $('message-message'),
          fields = [name, phone, email, message];
      
      name.xemptytext = 'имя';
      phone.xemptytext = 'телефон';
      email.xemptytext = 'e-mail';
      message.xemptytext = 'ваш вопрос...';
      
      for (var i = 0, len = fields.length; i < len; i++) {
        var f = fields[i];
        f.xoriginalvalue = f.value;
        if (f.value == '') {
          f.value = f.xemptytext;
          f.xempty = true;
        }
        else {
          f.xempty = false;
        }
        f.addEvents({
          'focus': function(e) {
            var t = e.target || e.srcElement;
            t.xnotip = true;
            if (t.xempty === true) {
              t.value = '';
            }
          },
          'blur': function(e) {
            var t = e.target || e.srcElement;
            if (t.value != t.xoriginalvalue) {
              t.xnotip = true;
            }
            else {
              t.xnotip = false;
            }
            if (t.value == '') {
              t.value = t.xemptytext;
              t.xempty = true;            
            }
            else {
              t.xempty = false;
            }
          }
        });
      }
      
      form.addEvent('submit', function() {
        for (var i = 0, len = fields.length; i < len; i++) {
          var f = fields[i];
          if (f.xempty == true) {
            f.value = '';
          }
        }
      });
      
      Tips.prototype.startOriginal = Tips.prototype.start;
      Tips.prototype.start = function(el) {
        if (el.xnotip !== true) {
          this.startOriginal(el);
        }
      }
      
      var tip_els = $$('.tip-target');
      for (var i = 0, len = tip_els.length; i < len; i++) {
      	if (tip_els[i].title != '') {
      		tip_els[i].store('tip:title', 'Ошибка');
      		tip_els[i].store('tip:text', tip_els[i].title);
      	}
      }
      
      message_form_tips = new Tips($$('.tip-target'), {
        fixed: false,
        offsets: {x: 1, y: 22}
      });
    }
  }
  
  // Fish eye
  var fe_initial_zoom = 1.0;
  var fe_max_zoom = 1.1;
  var fe_zoom_radius = 150;
  var fe_cells;
  var fe_images;
  var fe_timer;
  
  function initFishEye()
  {
  	var tbl = $('top-catalogue-menu'),
  			cells = tbl.getElements('td'), i, len, size, left;  	
  	
  	
  	for (i = 0, left = 0, len = cells.length; i < len; i++) {
  		size = cells[i].getSize();
  		cells[i].orig_left = left;
  		cells[i].orig_center = Math.round(size.x / 2);
  		left += size.x;
  		cells[i].addEvent('mousemove', onFishEyeMouseMove);
  		
  		if (i == (cells.length / 2) - 1) {
  			left = 0;
  		}
  	}
  	tbl.addEvent('mouseout', onFishEyeMouseOut);
  	
  	fe_cells = cells;
  	fe_images = tbl.getElements('img');
  	
  	for (i = 0, len = fe_images.length; i < len; i++) {
 			size = fe_images[i].getSize();
 			fe_images[i].orig_w = size.x;
 			fe_images[i].orig_h = size.y;
  	}
  }
  
  function fishEyeZoom(mouse_x, cell_center)
  {
  	var result, zi = fe_initial_zoom, zm = fe_max_zoom, mx = mouse_x, cc = cell_center, r = fe_zoom_radius; 
  	
  	if (Math.abs(mx - cc) > r) {
  		result = zi;
  	}
  	else if (mx == cc) {
  		result = zm;
  	}
  	else {
  		cc = cc - (mx - r);
  		result = zi + (zm - zi) * Math.sin(Math.PI * cc / (2 * r));
  	}
  	return result;
  }
  
  function onFishEyeMouseMove(e)
  {
  	var cell = getFishEyeCell(e),
  			x = getFishEyeCellPointerX(cell, e),
  			cx = cell.orig_left + x,
  			img, isize, i, len, zoom;
  	
  	if (fe_timer) {
  		clearTimeout(fe_timer);
  		fe_timer = null;
  	}
  	
  	for (i = 0, len = fe_cells.length; i < len; i++) {
  		cell = fe_cells[i];
  		zoom = fishEyeZoom(cx, cell.orig_left + cell.orig_center);
  		img = getFishEyeCellImage(cell);
  		img.setStyle('width', Math.round(img.orig_w * zoom) + 'px');
  		img.setStyle('height', Math.round(img.orig_h * zoom) + 'px');
  	}
  }
  
  function onFishEyeMouseOut(e)
  {
  	if (fe_timer) {
  		clearTimeout(fe_timer);
  		fe_timer = null;
  	}
  	fe_timer = setTimeout(onFishEyeMouseOutTimer, 200);
  }
  
  function onFishEyeMouseOutTimer()
  {
  	var img, i, len;
  	
  	for (i = 0, len = fe_images.length; i < len; i++) {
  		img = fe_images[i];
  		if ($defined(img.orig_w)) {
  			img.setStyle('width', img.orig_w + 'px');
  			img.setStyle('height', img.orig_h + 'px');
  		}
  	}
  }
  
  function getFishEyeCell(e)
  {
  	var cell = e.target || e.srcElement;
  	
  	while (cell && cell.tagName.toLowerCase() != 'td') {
  		cell = cell.parentNode || cell.srcElement;
  	}
  	
  	if (cell) {
  		cell = $(cell);
  	}
  	return cell;
  }
  
  function getFishEyeCellImage(cell)
  {
  	return fe_images[fe_cells.indexOf(cell) % fe_images.length];
  }
  
  function getFishEyeCellPointerX(cell, e)
  {
  	var pos = cell.getPosition();
  	return e.page.x - pos.x;
  }
  // End of fish eye
  
  function initGMap(map_data)
  {
  	var map = new GMap2(document.getElementById(map_data.container)),
  			pcenter = new GLatLng(map_data.latitude, map_data.longitude),
				marker_icon = new GIcon(),
  			zoom_ctl = new GSmallZoomControl(),
  			marker, extra_marker, route, rpt, i, len;

		marker_icon.image = map_data.marker_url;
		marker_icon.shadow = map_data.shadow_url;
		marker_icon.iconSize = new GSize(map_data.marker_width, map_data.marker_height);
		marker_icon.shadowSize = new GSize(map_data.shadow_width, map_data.shadow_height);
		marker_icon.iconAnchor = new GPoint(map_data.marker_anchor_x, map_data.marker_anchor_y);

  	map.setCenter(pcenter, parseInt(map_data.zoom));
		map.addControl(zoom_ctl);
		
		marker = new GMarker(pcenter, {icon: marker_icon});
  	GEvent.addListener(marker, "click", function() {
  		map.openInfoWindowHtml(marker.getPoint(), '<span style="font-weight: bold">' + map_data.text + '</span>');
  	});
		map.addOverlay(marker);
		
		if (map_data.extra_latitude && map_data.extra_longitude) {
			extra_marker = new GMarker(new GLatLng(map_data.extra_latitude, map_data.extra_longitude));
			if (map_data.extra_text) {
  			GEvent.addListener(extra_marker, "click", function() {
  				map.openInfoWindowHtml(extra_marker.getPoint(), '<span>' + map_data.extra_text + '</span>');
  			});
			}
			map.addOverlay(extra_marker);
		}
		
		if (map_data.route && map_data.route.length) {
			route = [];
			for (i = 0, len = map_data.route.length; i < len; i++) {
				rpt = map_data.route[i];
				route.push(new GLatLng(rpt[0], rpt[1]));
			}
			map.addOverlay(new GPolyline(route, '#FF0000', 3, 0.5));
		}
  }
  
  function initGMaps(maps_data)
  {
  	var i, len;
  	
  	for (i = 0, len = maps_data.length; i < len; i++) {
  		initGMap(maps_data[i]);
  	}
  	
  	window.addEvent('unload', GUnload);
  }

  return {
    init: function()
    {
    	initIndexFlash();
      initShadowBox();
      initCalendar();
      initMessageForm();
      initFishEye();
    },
    initGMaps: initGMaps
  }
}();

window.addEvent('domready', PE.init);