var cmask_h, cmask_w;
var cmask;
var cdrag;
var x0, y0; // координаты центра
var dotx, doty, dotz; // координаты квадрата, который находится в центре
var plus_minus_x=0, plus_minus_y=0; // смещение
var plus_minus_x_temp=0, plus_minus_y_temp=0;
var zapas=1;
var dotx_ot, dotx_do, doty_ot, doty_do; // x и y начальных и конечных квадратов
var ot_x, do_x, ot_y, do_y;
var ot_x_temp=0, ot_y_temp=0;
var dop_height, dop_width;
var last_dotx_ot, last_dotx_do, last_doty_ot, last_dott_do;
var canvas_table;
var canv;
var dots_arr=new Array();
var dots_container;
var zoom;
//var coord_vkl=true;
var paint_vkl=false;
var dot_width_const, dot_height_const;
var vkl_paint=new Array();
var moved=false;
var _domen='';
var pixel_x, pixel_y;
var start_mov_vkl=true;
var start_mov_x=1;
var start_mov_y=1;


jQuery.fn.canvas=function (params)
{
	if ((0)&&($.browser.msie))
	{
		$("body").append("<div class=\"msie_alert\"><h1>Внимание!</h1><p>Мы ненавидим браузер Internet Explorer, которым Вы пользуетесь в данный момент для просмотра нашего сайта, поэтому мы отключили сайт для Вас. Чтобы посмотреть наш сайт, вы можете воспользоваться следующими браузерами:<ul><li><a href=\"http://ru.www.mozilla.com/ru/\" target=\"_blank\">Firefox</a></li><li><a href=\"http://www.opera.com/\" target=\"_blank\">Opera</a></li><li><a href=\"http://www.google.com/chrome\" target=\"_blank\">Google Chrome</a></li></ul></p><p>Web-программирование нервная работа только потому, что существует браузер Internet Explorer, мы очень просим Вас не пользоваться им, может тогда когда-нибудь этот браузер исчезнет, и программистам больше не придутся 90% времени тратить на всякую фигню, типа &quot;Почему только в Internet Explorer тупит сайт?&quot;, &quot;Почему только в Internet Explorer размеры рамок почемуто отличаются&quot;, &quot;Почему чтобы сайт отображался нормально надо писать кучу скриптов, и то в другом Internet Explorer сайт будет все равно отображаться неверно&quot; и т.д. и т.п., этот список можно продолжать бесконечно, к тому же это самый небезопасный и самый неудобный браузер для пользователя, т.е. для Вас.</p><p>Пользуйтесь другими браузерами, они современные, быстрые, красивыые, удобные и безопасные!</p></div>");
		_do("<span class=\"red\">MSIE alert</span>");
		return;
	}
	if (0)
	{
		var avatype_banner=$("<div class=\"avatype_banner\"></div>").click(function ()
		{
			window.location="http://avatype.ru/";
		});
		$("body").append(avatype_banner);
	}
	var params=jQuery.extend(
	{
		x:0,
		y:0,
		z:0,
		start_play_frame:'last'
	}, params);
	params.y*=-1;
	dotx=params.x;
	doty=params.y;
	dotz=params.z;
	dot_width_const=dot_width;
	dot_height_const=dot_height;
	
	$(this).each(function ()
	{
		update_dot_size();
		$(this).html('');
		canv=this;
		var canvas_move=false;
		var canvas_table;
		cmask=$(canv).parent();
		$(cmask).css("overflow", "hidden");
		cdrag=$("<div id=\"canvas_drag\"></div>");
		update_xy0();
		update_dots_ot_do();
		dots_container=$("<div id=\"dots_container\"></div>").canvas_dots({start_x:params.x, start_y:params.y, start_play_frame:params.start_play_frame});
		$(cdrag).append(dots_container);
		$(canv).height($(cmask).height());
		//$(cdrag).append("<div></div>").canvas_coord());
		
		// mask_size
			$("body").css("overflow", "hidden");
			dop_height=$(window).height()-$(cmask).height();
			dop_width=$(window).width()-$(cmask).width();
			$(canv).height($(window).height()-dop_height).width("100%").append(cdrag).canvas_coord();
			$("#panel").height($(window).height()-dop_height-map_height-10);
			$(window).resize(function(){
			  $(canv).height($(window).height()-dop_height);
			  $("#panel").height($(window).height()-dop_height-map_height-10);
			});
		set_left_top();
		// mask_size End
		
		// Move
			$(cdrag).mousemove(function (e)
			{
				if ((canvas_move)&&(!paint_vkl)&&(!input_work))
				{
					add_to_potok();
					moved=true;
					var delta_x=e.pageX-_last_x
					var delta_y=e.pageY-_last_y;
					_last_x=e.pageX;
					_last_y=e.pageY;
					canvas_mov(delta_x, delta_y);
					map_mov(delta_x*zoom/map_to(), delta_y*zoom/map_to());
				}
			});
		// Move End
		
		// Wheel
			$(cmask).wheel(function (event, delta)
			{
				if ((paint_vkl)||($("#page").length>0)) { return; }
				var mouse_x=event.pageX-$(canv).offset().left;
				var mouse_y=event.pageY-$(canv).offset().top;
				if ($.browser.msie)
				{
					delta*=-1;
				}

				if (delta==1)
				{
					$(cdrag).canvas_zoom({zoom_plus: -1, mouse_x:mouse_x, mouse_y:mouse_y});
				}
				else
				{
					$(cdrag).canvas_zoom({zoom_plus: 1, mouse_x:mouse_x, mouse_y:mouse_y});
				}
			});
		// Wheel End
		
		$(cdrag).mousedown(function (e)
		{
			moved=false;
			canvas_move=true;
			_last_x=e.pageX;
			_last_y=e.pageY;
			canvas_mouse_down();
			map_mouse_down();
		});
		$(cdrag).mouseup(function ()
		{
			map_move_dots();
			move_dots();
			canvas_move=false;
			input_work=false;
		});
		$(cdrag).mouseleave(function ()
		{
			map_move_dots();
			move_dots();
			canvas_move=false;
			input_work=false;
		});
		$("#map").canvas_map();
		load_dots();
		
		// Start mov
		start_mov_y=Math.random()*2-1;
		start_mov_x=Math.random()*2-1;
		start_move();
		// Start mov End
	});
};

// запись в поток
	function add_to_potok()
	{
		send_potok_x[send_potok_n]=pixel_x;
		send_potok_y[send_potok_n]=pixel_y;
		send_potok_n++;
		
		//var _dotx=Math.ceil((pixel_x-250)/500);
		//test(_dotx);
	}
// запись в поток End

// Move
	function canvas_mov(delta_x, delta_y)
	{
		plus_minus_x+=delta_x;
		plus_minus_y+=delta_y;
		var _left=ot_x_temp+plus_minus_x-plus_minus_x_temp;
		var _top=ot_y_temp+plus_minus_y-plus_minus_y_temp;
		$(cdrag).css("left", _left);
		$(cdrag).css("top", _top);
		$(coord_x).css("left", _left);
		$(coord_y).css("top", _top);
		update_pixel();
	}
	
	function canvas_mouse_down()
	{
		ot_x_temp=ot_x;
		ot_y_temp=ot_y;
		ot_x_temp_zoom=$(cdrag).position().left;
		ot_y_temp_zoom=$(cdrag).position().top;
		plus_minus_x_temp=plus_minus_x;
		plus_minus_y_temp=plus_minus_y;
	}
// Move End

$(document).ready(function ()
{
	$("a").live("click", function ()
	{
		if (moved) { return false; }
		if (paint_vkl) { alert("Вы нажали на ссылку, когда включена рисовалка, ссылки отключены, чтобы Вы случайно не перешли на другую страницу и не потеряли нарисованное. Если Вы хотите перейти по ссылке, закройте рисовалку или сохраните рисунок."); return false; }
	});
	$("body").mousedown(function () { start_mov_vkl=false; });
});

function start_move()
{
	if (start_mov_vkl)
	{
		canvas_mov(start_mov_x,start_mov_y);
		move_dots();
		setTimeout("start_move()", 10);
	}
}

function new_dots()
{
		update_dots_ot_do();
		$(dots_container).html('').canvas_dots();
		$(coord_x).canvas_coord_x();
		$(coord_y).canvas_coord_y();
		set_left_top();
		update_url();
}
function move_dots()
{
	map_update_dots_ot_do();
	map_edit_table();
	map_set_left_top();

	update_dots_ot_do();
	edit_table();
	set_left_top();
	coord_ltrb();
	
	load_dots();
	update_url();
}

function update_url()
{
	window.location='#x='+dotx+'&y='+(-doty)+"&zoom="+zoom;
}

// Edit Table
	function edit_table()
	{
		// X
			// удалить слева
				if (dotx_ot>last_dotx_ot)
				{
					for(var delx=last_dotx_ot; delx<dotx_ot; delx++)
					{
						if (delx<=last_dotx_do)
						{
							$(dots_container).find(".dot[_x="+delx+"]").remove_dot();
							$(coord_y).find(".coord_x_dot[_x="+delx+"]").remove();
						}
						move_dots_x(-dot_width);
					}
				}
			// удалить слева End
			
			// Добавить слева
				if (dotx_ot<last_dotx_ot)
				{
					for(var addx=(last_dotx_ot-1); addx>=dotx_ot; addx--)
					{
						move_dots_x(dot_width);
						if (addx<=dotx_do)
						{
							var top_n=0;
							$(coord_x).append($("<div></div>").canvas_coord_x_dot({x:addx, left:0}));
							for (var addy=last_doty_ot; addy<=last_doty_do; addy++)
							{
								if (!is_dot(addx, addy))
								{
									var _top=top_n*dot_height;
									var dot=$("<div></div>").canvas_dot({x:addx, y:addy}).data('left', 0).data('top', _top).css('left', 0).css('top', _top);
									if ($("#"+(addx+1)+"_"+addy).length>0)
									{
										$("#"+(addx+1)+"_"+addy).before(dot);
									}
									else
									{
										$(dots_container).append(dot);
									}
								}
								top_n++;
							}
						}
					}
					//load_dots();
				}
			// Добавить слева End
			
			// удалить справа
				if (dotx_do<last_dotx_do)
				{
					for (var delx=last_dotx_do; delx>dotx_do; delx--)
					{
						if (delx>=last_dotx_ot)
						{
							$(dots_container).find(".dot[_x="+delx+"]").remove_dot();
							$(coord_x).find(".coord_x_dot[_x="+delx+"]").remove();
						}
					}
				}
			// удалить справа End
			
			// Добавить справа
				if (dotx_do>last_dotx_do)
				{
					for (var addx=(last_dotx_do+1); addx<=dotx_do; addx++)
					{
						if (addx>=dotx_ot)
						{
							left_n=addx-dotx_ot;
							var _left=left_n*dot_width;
							var top_n=0;
							$(coord_x).append($("<div></div>").canvas_coord_x_dot({x:addx, left:_left}));
							for (var addy=last_doty_ot; addy<=last_doty_do; addy++)
							{
								if (!is_dot(addx, addy))
								{
									var _top=top_n*dot_height;
									var dot=$("<div></div>").canvas_dot({x:addx, y:addy}).data('left', _left).css('left', _left).data('top', _top).css('top', _top);
									if ($("#"+(addx-1)+"_"+addy).length>0)
									{
										$("#"+(addx-1)+"_"+addy).after(dot);
									}
									else
									{
										$(dots_container).append(dot);	
									}
								}
								top_n++;
							}
						}
					}
					//load_dots();
				}
			// Добавить справа End
		// X End

		last_dotx_ot=dotx_ot;
		last_dotx_do=dotx_do;
		
		// Y
			// удалить сверху
				if (doty_ot>last_doty_ot)
				{
					for(var dely=last_doty_ot; dely<doty_ot; dely++)
					{
						if (dely<=last_doty_do)
						{
							$(dots_container).find(".dot[_y="+dely+"]").remove_dot();
							$(coord_y).find(".coord_y_dot[_y="+dely+"]").remove();
						}
						move_dots_y(-dot_height);
					}
				}
			// удалить сверху End
			
			// Добавить сверху
				if (doty_ot<last_doty_ot)
				{
					for(var addy=(last_doty_ot-1); addy>=doty_ot; addy--)
					{
						move_dots_y(dot_height);
						if (addy<=doty_do)
						{
							var left_n=0;
							$(coord_y).append($("<div></div>").canvas_coord_y_dot({y:addy, top:0}));
							for (var addx=dotx_ot; addx<=dotx_do; addx++)
							{
								if (!is_dot(addx, addy))
								{
									var _left=left_n*dot_width;
									var dot=$("<div></div>").canvas_dot({x:addx, y:addy}).data('left', _left).data('top', 0).css('left', _left).css('top', 0);
									$(dots_container).append(dot);
								}
								left_n++;
							}
						}
					}
					//load_dots();
				}
			// Добавить сверху End
			
			// удалить снизу
				if (doty_do<last_doty_do)
				{
					for (var dely=last_doty_do; dely>doty_do; dely--)
					{
						if (dely>=last_doty_ot)
						{
							$(dots_container).find(".dot[_y="+dely+"]").remove_dot();
							$(coord_y).find(".coord_y_dot[_y="+dely+"]").remove();
						}
					}
				}
			// удалить снизу End
			
			// Добавить снизу
				if (doty_do>last_doty_do)
				{
					for (var addy=(last_doty_do+1); addy<=doty_do; addy++)
					{
						if (addy>=doty_ot)
						{
							top_n=addy-doty_ot;
							var _top=top_n*dot_height;
							var left_n=0;
							$(coord_y).append($("<div></div>").canvas_coord_y_dot({y:addy, top:_top}));
							for (var addx=last_dotx_ot; addx<=last_dotx_do; addx++)
							{
								if (!is_dot(addx, addy))
								{
									var _left=left_n*dot_width;
									var dot=$("<div></div>").canvas_dot({x:addx, y:addy}).data('left', _left).css('left', _left).data('top', _top).css('top', _top);
									$(dots_container).append(dot);
								}
								left_n++;
							}
						}
					}
					//load_dots();
				}
			// Добавить снизу End
		// Y End

		last_doty_ot=doty_ot;
		last_doty_do=doty_do;
		//load_dots();
	}
// Edit Table End

// move dots
	function move_dots_x(plus_x)
	{
		$(dots_container).find(".dot").each(function (i, d)
		{
			var _left=$(d).data('left')+plus_x;
			$(d).css("left", _left).data('left', _left);
		});
		$(coord_x).find(".coord_x_dot").each(function (i, d)
		{
			var _left=$(d).data('left')+plus_x;
			$(d).css("left", _left).data('left', _left);
		});
		//$(cdrag_zoom).css('left', plus_x);
	}
	function move_dots_y(plus_y)
	{
		coord_y_dop_width=0;
		$(dots_container).find(".dot").each(function (i, d)
		{
			var _top=$(d).data('top')+plus_y;
			$(d).css("top", _top).data('top', _top);
		});
		$(coord_y).find(".coord_y_dot").each(function (i, d)
		{
			var _top=$(d).data('top')+plus_y;
			coord_y_dop_width=Math.max(coord_y_dop_width, $(d).width()+2);
			//$(coord_y_dop).width(coord_y_dop_width);
			$(d).css("top", _top).data('top', _top);
		});
		//$(cdrag_zoom).css('top', plus_y);
	}
// move dots End

// Pixel
	function update_pixel()
	{
		pixel_x=-plus_minus_x*zoom+dotx*dot_width*zoom;
		pixel_y=-plus_minus_y*zoom+doty*dot_height*zoom;
		//test("pixel_y="+pixel_y);
	}
// Pixel End

// ot do
	function update_dots_ot_do()
	{
		// изменение координат центра
			while (plus_minus_x<-dot_width/2)
			{
				plus_minus_x+=dot_width;
				dotx++;
			}
			while (plus_minus_x>=dot_width/2)
			{
				plus_minus_x-=dot_width;
				dotx--;
			}
			while (plus_minus_y<-dot_height/2)
			{
				plus_minus_y+=dot_height;
				doty++;
			}
			while (plus_minus_y>=dot_height/2)
			{
				plus_minus_y-=dot_height;
				doty--;
			}
			update_pixel();
		// изменение координат центра End
		
		
		// dotx_ot
			minus_predvar=-dot_width*zapas_();
			ot_x=x0+plus_minus_x-dot_width/2;
			dotx_ot=dotx;
			for(var xx=dotx-1; ot_x>minus_predvar; xx--)
			{
				dotx_ot=xx;
				ot_x-=dot_width;
			}
		// dotx_ot End
	
		// dotx_do
			plus_predvar=x0*2+dot_width*zapas_();
			do_x=x0+plus_minus_x+dot_width/2; // <<<
			dotx_do=dotx;
			for(var xx=dotx+1; do_x<plus_predvar; xx++)
			{
				dotx_do=xx;
				do_x+=dot_width;
			}
		// dotx_do End
	
		// doty_ot
			minus_predvar=-dot_height*zapas_();
			ot_y=y0+plus_minus_y-dot_height/2;
			doty_ot=doty;
			for(var yy=doty-1; ot_y>minus_predvar; yy--)
			{
				doty_ot=yy;
				ot_y-=dot_height;
			}
		// dotx_ot End
	
		// dotx_do
			plus_predvar=y0*2+dot_height*zapas_();
			do_y=y0+plus_minus_y+dot_height/2; // <<<
			doty_do=doty;
			for(var yy=doty+1; do_y<plus_predvar; yy++)
			{
				doty_do=yy;
				do_y+=dot_height;
			}
		// dotx_do End
	}
// ot do End

// set left, top
	function set_left_top()
	{
		$(cdrag).css("left", ot_x);
		$(cdrag).css("top", ot_y);
		$(coord_x).css("left", ot_x);
		$(coord_y).css("top", ot_y);
	}
// set left, top End

function update_xy0()
{
	cmask_h=$(cmask).height();
	cmask_w=$(cmask).width();
	x0=$(cmask).width()/2;
	y0=$(cmask).height()/2;
}

$(document).ready(function ()
{
	$(window).resize(function ()
	{
		$(this).height($(window).height()-dop_height-1);
		$("#page").height($(cmask).height()).width($(cmask).width());
		update_xy0();
		update_dots_ot_do();
		edit_table();
		set_left_top();
		coord_ltrb();
	});
});

function is_dot(x, y)
{
	return false;
}

function zapas_()
{
	return zapas;
	if (zoom==1)
	{
		return zapas;
	}
	else
	{
		return 0;
	}
}

