var focus_timer		= Array();
var focus_object	= Array();
var review_arr		= Array();
var mouseX 			= 0;
var mouseY 			= 0;

var zoomObjects;
var xCentroid 		= 2;
var yCentroid 		= 2;
var limitDistance 	= 200;
var ZoomFactor 		= 2;
var baseW 			= Array();
var baseH 			= Array();
var baseT 			= Array();
var baseL 			= Array();
var baseZ 			= 200;
var curObject		= Array();

function math_hill(x) {
	var buben = (ZoomFactor - 2)/limitDistance*x
	return (ZoomFactor - buben - (x/limitDistance));
}

function setZoom() {
	  if (zoomObjects.length) for (i = 0; i < zoomObjects.length; i++) {
	     if (curObject[i] == undefined) { 
		     curObject[i] 	= $(zoomObjects[i]);
		     baseW[i] 		= curObject[i].width();
		     baseH[i]		= curObject[i].height();
		     baseT[i] 		= 0;
		     baseL[i]		= 0;
	     }

	     var curOffset = curObject[i].offset(); 

	     var curX      = curOffset.left;
	     var curY      = curOffset.top;
	     var curW      = curObject[i].width();
	     var curH      = curObject[i].height();

	     var curCX     = curX + (curW / xCentroid);
	     var curCY     = curY + (curH / yCentroid);

	     var curDistance = Math.sqrt(Math.pow(curCX - mouseX, 2) + Math.pow(curCY - mouseY, 2));

	     if (limitDistance > curDistance) {
	    	 var ZoomCoefficient = math_hill(curDistance);
	    	 var realW  = parseInt(baseW[i] * ZoomCoefficient);
	    	 var realH  = parseInt(baseH[i] * ZoomCoefficient);
	         var realZ  = parseInt(baseZ * ZoomCoefficient);
	         var realT  = parseInt((realH - baseH[i]) / 2);
	         var realL  = parseInt((realW - baseW[i]) / 2);
	         
	     } else {
	    	 var realW  = baseW[i];
	    	 var realH  = baseH[i];
	    	 var realZ  = baseZ;
	         var realT  = baseT[i];
	         var realL  = baseL[i];
	     }
   
	     	 curObject[i].css('width', realW  + 'px');     
	     	 curObject[i].css('height', realH  + 'px');
	     	 
	     	 curObject[i].css('top', '-' + realT  + 'px');     
	     	 curObject[i].css('left', '-' + realL  + 'px');

	     	 curObject[i].css('z-index', realZ);
	     	 
	     	 if (curDistance < 150)
	     		 curObject[i].css('display');
		}
}


function WOpen(oURL, iWidth, iHeight)
{
  var iLeft = (screen.width  - iWidth) / 2 ;
  var iTop  = (screen.height - iHeight) / 2 ;

  var   sOptions = "toolbar=yes, status=no, resizable=no, dependent=yes, scrollbars=yes" ;
        sOptions += ",width="   + iWidth ; 
        sOptions += ",height="  + iHeight ;
        sOptions += ",left="    + iLeft ;
        sOptions += ",top="     + iTop ;

        var oWindow = window.open(oURL, '', sOptions); 

  return true;
}

function iOpen(oURL, iWidth, iHeight, dTitle)
{
  var iLeft = (screen.width  - iWidth) / 2 ;
  var iTop  = (screen.height - iHeight) / 2 ;
  var sOptions = "toolbar=no, status=no, resizable=no, dependent=yes, scrollbars=no";
      sOptions += ",width="   + iWidth ; 
      sOptions += ",height="  + iHeight ;
      sOptions += ",left="    + iLeft ;
      sOptions += ",top="     + iTop ;

  var oWindow = window.open('', '', sOptions); 

  oWindow.document.open();
  oWindow.document.write('<html><head><title>'+dTitle+'</title></head><body bgcolor="#FFFFFF"><img src="'+oURL+'"></body></html>');
  oWindow.document.close();

  return oWindow;
}

function CheckFocus(id) {
    var selected_obj = $('#' + id);
    var selected_display = selected_obj.css('display');
    var selected_offset  = selected_obj.offset();
    var selected_topU    = selected_offset.top;
    var selected_leftU   = selected_offset.left;
    var selected_height  = selected_obj.height();
    var selected_width   = selected_obj.width();
    var selected_topB    = selected_topU + selected_height; 
    var selected_leftB   = selected_leftU + selected_width; 

    selected_id = id;

    if ( ( selected_display != 'none' ) &&
	     ( ( mouseX < selected_leftU ) || 
		   ( mouseY < selected_topU ) ||
		   ( mouseX > selected_leftB ) ||
		   ( mouseY > selected_topB ) ) ) {

    	$(selected_obj).hide();
	} else {
		focus_timer[selected_id] = setTimeout('CheckFocus(selected_id)', 1500);
	}
}

function GetHeight(obj) {
	  var obj_height = $(obj).height();
	  var margin_top = '-' + parseInt((obj_height / 2)) + 'px';
	  return margin_top; 
}

function ReviewFunctions(prev_class, rev_class) {
	
	var review_arr 	= $('a.' + prev_class).find('div.' + rev_class);
	for (i = 0; i < $(review_arr).length; i++ ) {
		var rew_img = $(review_arr[i]).find('img');
		$.preloadImages($(rew_img).attr('href'));
		$(review_arr[i]).css('margin-top', GetHeight(review_arr[i]));
	}
	
	$('a.' + prev_class).hover(
			function () {
				$(this).find('div.' + rev_class).show( function () {
					$(this).css('margin-top', GetHeight(this));
					obj_id = $(this).attr('id');
					focus_timer[obj_id] = setTimeout('CheckFocus(obj_id)', 1500);     
					$(this).hover(
							function () { }, 
							function () {
								$(this).hide();
							}
					);
				});
			},
			function () { }
	);
	
}

function TooltipTT(o_class, o_attr) {
	$(o_class).tooltip({
		delay: 0,
		track: true,
		showURL: false, 
		bodyHandler: function() {
				var tt_content = $(this).attr(o_attr);
			return $("<div/>").html(tt_content);
		}
	});
}

function TooltipHTML(a_selector, c_attr) {
	$(a_selector).tooltip({
		delay: 0,
		track: false,
		showURL: false,
		bodyHandler: function() {
			var tt_content = $('#'+$(this).attr(c_attr)).html();
			return $("<div/>").html(tt_content);
		} 
	});
}

jQuery.preloadImages = function()
{
  for(var i = 0; i<arguments.length; i++)
  {
      if (arguments[i] != '') {
	          jQuery("<img>").attr("src", arguments[i]);
      }
  }
}

$( document ).ready( function() {
    zoomObjects = $('.review');
	for (i = 0; i < $(zoomObjects).length; i++ ) {
		var rew_img = $(zoomObjects[i]).find('img');
		$.preloadImages($(rew_img).attr('href'));
		$(zoomObjects[i]).css('height', $(rew_img).height());
	}
    
	$().mousemove(function(e){
		mouseX = e.pageX 
		mouseY = e.pageY;
		setZoom();
	});

    $( 'a#def_gimage' ).fancybox( { 'hideOnContentClick': true } );
    $( 'a.def_igroup' ).fancybox( { 
	    'zoomSpeedIn':        300,
	    'zoomSpeedOut':       300,
	    'overlayShow':        true,
	    'hideOnContentClick': false
    } );

    $("#map").click(function(){
	    var map_width_tmp = "1060px";
	    var map_width_max = "1020px";
	    var map_width_min = "60px";
	    var destination = $(this).offset().top;
	    var this_obj	= this;
	    
	    if ($("#c_frame").css('width') != map_width_max) {
          	$('#map_line').animate({ 
            	'width': '4px',
	            'right': '92px' 
          		}, 1500  , function() {
	    		$('#map_line').attr('src', global_imgpath + '/i/line2.gif');
	        }); 
    		$("#c_frame")
    		.animate({ width: map_width_tmp }, 1500)
    		.animate({ width: map_width_max }, 280, function () {
	    		$(this_obj).html('Скрыть карту');
    		})
//    		.animate({ right: '40px' }, 280 )
//    		.animate({ right: '0px'	}, 200 , function () {
//	    		$(this_obj).html('Скрыть карту');
//	    	});
    		$('body').animate({ scrollTop: destination}, 1100 );
      	
	    } else {
    		$("#c_frame")
    		.animate({ right: '40px' }, 1000 )
    		.animate({ right: '0px'	}, 0 , function () {
	    		$('#map_line').attr('src', global_imgpath + '/i/line.gif');
	          	$('#map_line').animate({ 
	            	'width': '96px',
		            'right': '0px' 
	          	}, 700);
	    	})
    		.animate({ 
            	width: map_width_min
          	}, 700 , function () {
	    		$(this_obj).html('Карта Городца');
	        });
	    }
      	return false;
    });
});
