// © Alekseev Vladimir mailto:master_pr@mail.ru
function Tube(container_id) {
	this.img_dir='/alee/tube';
	this.container_id=container_id;
	this.defined_stations=new Array;
	this.initialize();
}
Tube.prototype=({
initialize: function() {
	var container=document.getElementById(this.container_id);
	for(var i=container.childNodes.length;i>0;i--) {
		container.removeChild(container.childNodes[i-1]);
	}
	container.style.width='720px';
	container.style.height='943px';
	container.style.overflow='hidden';
	container.style.backgroundImage='url('+this.img_dir+'/map_tube.png)';
	this.container=container;
	this.container_position=this.find_position(container);
	var stations=this.stations();
	for(var i=0;i<stations.length;i++) {
		this.define_station(stations[i][0],stations[i][1],stations[i][2]);
	}
	return;
},
stations: function() {
	return new Array(
			new Array('Красногорск',15,186),
			new Array('Алтуфьево',345,6),
			new Array('Медведково',454,33),
			new Array('Пушкинская',375,348),
			new Array('Савеловская',347,276),
			new Array('Щукинская',168,237),
			new Array('Юго-Западная',195,610),
			new Array('Тушинская',128,190),
			new Array('Сходненская',132,128),
			new Array('Планерная',126,101),
			new Array('Октябрьское поле',210,276),
			new Array('Полежаевская',246,316),
			new Array('Беговая',286,326),
			new Array('Волгоградский проспект',490,450),
			new Array('Текстильщики',556,492),
			new Array('Кузьминки',607,501),
			new Array('Выхино',682,474),
			new Array('Бибирево',368,40),
			new Array('Отрадное',371,94),
			new Array('Петровско-Разумовская',328,164),
			new Array('Тимирязевская',328,211),
			new Array('Владыкино',350,136),
			new Array('Дмитровская',337,238),
			new Array('Речной вокзал',184,115),
			new Array('Водный стадион',201,156),
			new Array('Войковская',216,210),
			new Array('Аэропорт',268,257),
			new Array('Бабушкинская',454,34),
			new Array('Свиблово',458,80),
			new Array('Ботанический сад',420,140),
			new Array('ВДНХ',424,204),
			new Array('Алексеевская',421,240),
			new Array('Дубровка',478,472),
			new Array('Кожуховская',490,502),
			new Array('Волжская',588,539),
			new Array('Люблино',600,578),
			new Array('Братиславская',585,621),
			new Array('Марьино',576,644),
			new Array('Улица Подбельского',559,220),
			new Array('Черкизовская',578,249),
			new Array('Сокольники',480,286),
			new Array('Щелковская',653,230),
			new Array('Первомайская',654,272),
			new Array('Семеновская',536,302),
			new Array('Бауманская',481,329),
			new Array('Новогиреево',680,382),
			new Array('Шоссе Энтузиастов',582,364),
			new Array('Авиамоторная',535,384),
			new Array('Римская',480,398),
			new Array('Митино',10,140),
			new Array('Волоколамская',48,168),
			new Array('Мякинино',54,202),
			new Array('Строгино',78,248),
			new Array('Крылатское',84,372),
			new Array('Молодежная',100,411),
			new Array('Парк Победы',240,427),
			new Array('Воробьевы горы',304,490),
			new Array('Университет',270,535),
			new Array('Проспект Вернадского',228,576),
			new Array('Тульская',398,494),
			new Array('Нагатинская',397,560),
			new Array('Нагорная',382,584),
			new Array('Чертановская',373,667),
			new Array('Южная',378,717),
			new Array('Пражская',371,742),
			new Array('Улица Академика Янгеля',367,786),
			new Array('Анино',360,817),
			new Array('Бульвар Дмитрия Донского',331,854),
			new Array('Улица Скоболевская',298,908),
			new Array('Бунинская аллея',244,935),
			new Array('Коломенская',458,572),
			new Array('Каширская',437,631),
			new Array('Кантемироваская',448,682),
			new Array('Царицыно',468,719),
			new Array('Красногвардейская',573,738),
			new Array('Академическая',326,548),
			new Array('Калужская',278,628),
			new Array('Беляево',258,664),
			new Array('Коньково',248,689),
			new Array('Теплый стан',230,728),
			new Array('Новоясеневская',297,771)
	);
},
get_station: function(point_name) {
	var point=false;
	var points=this.stations();
	for(var i=0;i<points.length;i++) {
		if(points[i][0]!=point_name) { continue; }
		point=points[i];
		break;
	}
	return point;
},
define_station: function(st_name,st_x,st_y) {
	var elem=document.createElement('SPAN');
	elem.style.position='absolute';
	elem.style.fontSize='10px';
	elem.style.lineHeight='10px';
	var coord_x=st_x+this.container_position[0]+7;
	var coord_y=st_y+this.container_position[1]-5;
	elem.style.left=coord_x+'px';
	elem.style.top=coord_y+'px';
	elem.className='common_point';
	elem.innerHTML=st_name;
	this.container.appendChild(elem);
	this.defined_stations[this.defined_stations.length]=new Array(st_name,elem);
},
add_point: function(point_name,point_url) {
	var defined_point=false;
	for(var i=0;i<this.defined_stations.length;i++) {
		if(this.defined_stations[i][0]!=point_name) { continue; }
		defined_point=this.defined_stations[i][1];
		this.defined_stations.splice(i,1);
		break;
	}
	if(defined_point==false) { return; }
	var point=this.get_station(point_name);
	if(point==false) { return; }
	this.container.removeChild(defined_point);
	var elem=document.createElement('A');
	elem.href=point_url;
	elem.target='_parent';
	elem.style.backgroundImage='url('+this.img_dir+'/extra_point.gif)';
	elem.style.backgroundRepeat='no-repeat';
	elem.style.paddingLeft='18px';
	elem.style.position='absolute';
	elem.style.fontSize='12px';
	elem.style.lineHeight='15px';
	var coord_x=point[1]+this.container_position[0]-7;
	var coord_y=point[2]+this.container_position[1]-7;
	elem.style.left=coord_x+'px';
	elem.style.top=coord_y+'px';
	elem.className='extra_point';
	elem.innerHTML=point_name;
	this.container.appendChild(elem);
	return;
},
add_point_description: function(point_name,description) {
	var point=this.get_station(point_name);
	if(point==false) { return; }
	var elem=document.createElement('SPAN');
	elem.style.position='absolute';
	elem.style.fontSize='12px';
	elem.style.lineHeight='12px';
	elem.style.backgroundImage='url('+this.img_dir+'/green_flag.gif)';
	elem.style.backgroundRepeat='no-repeat';
	elem.style.backgroundPosition='100% 50%';
	elem.style.paddingRight='12px';
	var coord_x=point[1]+this.container_position[0]+22;
	var coord_y=point[2]+this.container_position[1]+10;
	elem.style.left=coord_x+'px';
	elem.style.top=coord_y+'px';
	elem.className='point_description';
	elem.innerHTML=description;
	this.container.appendChild(elem);
},
find_position: function(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
		return new Array(curleft,curtop);
	}

}
});


function get_offsets(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
	}
	return new Array(curleft,curtop);
}
function SelectField(sobj_id,sname,def_val,soptions) {
	this.sobj_id=sobj_id;
	this.soptions=soptions;
	this.sname=sname;
	this.def_val=def_val;
	this.initialize();
	}
SelectField.prototype=({
initialize: function() {
	this.sobj=document.getElementById(this.sobj_id);
	this.sobj.className='SelectField';
	this.clear();
	this.set_field();
	this.print_opts();
	return;
},
clear: function() {
	for(var i=this.sobj.childNodes.length;i>0;i--) {
		this.sobj.removeChild(this.sobj.childNodes[i-1]);
	}
	return;
},
set_field: function() {
	var fobj=this.sobj;
	while(fobj.nodeName!='FORM') {
		fobj=fobj.parentNode;
	}
	var ielem=null;
	if(!fobj.elements[this.sname]) {
		ielem=document.createElement('INPUT');
		ielem.type='hidden';
		ielem.name=this.sname;
		fobj.appendChild(ielem);
	} else { ielem=fobj.elements[this.sname]; }
	ielem.value=this.def_val;
	return;
},
print_opts: function() {
	var opt_selected=this.get_selected();
	var opt=this.soptions[opt_selected];
	var def_opt=this.add_opt(opt[0],opt[1]);
	def_opt.className='sselected';
	var _this=this;
	def_opt.onclick=function() { _this.view_opts();	};
	this.sobj.appendChild(def_opt);
	var offsets=get_offsets(def_opt);
	var offset_left=offsets[0]+8;
	var offset_top=offsets[1]+18;
	for(var i=0;i<this.soptions.length;i++) {
		if(i==opt_selected) { continue; }
		offset_top=offset_top==(offsets[1]+18) ? offset_top+16 : offset_top+19;
		var opt_val=this.soptions[i][0];
		var opt=this.add_opt(opt_val,this.soptions[i][1]);
		opt.className='shidden';
		opt.style.position='absolute';
		opt.style.left=offset_left+'px';
		opt.style.top=offset_top+'px';
		opt.onclick=function() { eval('_this.select_opt(this);'); }
		this.sobj.appendChild(opt);
	}
	return;
},
select_opt:function(sobj) {
	var spans=sobj.getElementsByTagName('SPAN');
	this.def_val=spans[0].innerHTML;
	this.clear();
	this.set_field();
	this.print_opts();
	return;
},
view_opts: function() {
	var lis=this.sobj.getElementsByTagName('LI');
	for(var i=0;i<lis.length;i++) {
		var elem=lis[i];
		if(elem.className=='sselected') { continue; }
		elem.className=elem.className=='shidden' ? 'sdispl' : 'shidden';
	}
},
add_opt: function(opt_val,opt_name) {
	var li_elem=document.createElement('LI');
	var val_elem=document.createElement('SPAN');
	val_elem.style.display='none';
	val_elem.innerHTML=opt_val;
	var name_elem=document.createElement('SPAN');
	name_elem.innerHTML=opt_name;
	li_elem.appendChild(val_elem);
	li_elem.appendChild(name_elem);
	return li_elem;
},
get_selected: function() {
	for(var i=0;i<this.soptions.length;i++) {
		if(this.soptions[i][0]==this.def_val) { return i; }
	}
	return 0;
}
});

function run_string(elem_id,msec,def_offset,str,url) {
	var elem=document.getElementById(elem_id);
	if(!elem) { return; }
	var cont=null;
	if(url) {
		cont=document.createElement('A');
		cont.href=url;
	} else { cont=document.createElement('DIV'); }
	cont.style.width=0;
	cont.style.display='inline';
	cont.style.position='relative';
	cont.style.left=elem.offsetWidth+'px';
	cont.style.whiteSpace='nowrap';
	cont.style.overflow='hidden';
	cont.style.textAlign='right';
	cont.innerHTML=str;
	for(var i=elem.childNodes.length;i>0;i--) {
		elem.removeChild(elem.childNodes[i-1]);
	}
	elem.appendChild(cont);
	var cont_width=cont.offsetWidth;
	cont.style.display='block';
	cont.scrollLeft=0;
	var line_width=elem.offsetWidth;
	var offs_x=line_width;
	var widt_x=0;
	var scroll_l=0;
	var scroll=false;
	var string_go=function() {
		if(!scroll && line_width>widt_x && cont_width>widt_x) { widt_x+=def_offset; }
		if(!scroll && offs_x>0) { offs_x-=def_offset; }
		else {
			if(scroll_l<=cont_width) {
				scroll=true;
				scroll_l+=def_offset;
				if(scroll_l>=(cont_width-widt_x)) {
					if((widt_x-def_offset)>0) { widt_x-=def_offset; }
					}
			}
			else {
				scroll=false;
				offs_x=line_width;
				widt_x=0;
				scroll_l=0;
			}
		}
		cont.scrollLeft=scroll_l;
		cont.style.width=widt_x+'px';
		cont.style.left=offs_x+'px';
	};
	var interval_id=setInterval(string_go,msec);
	cont.onmouseover=function() { if(interval_id) { clearInterval(interval_id); } }
	cont.onmouseout=function() { interval_id=setInterval(string_go,msec); }
	return;
}

window.onload = initCursor;
var cursor = {x:0, y:0};
function initCursor() {
/*  if (window.Event) {
    document.captureEvents(Event.MOUSEMOVE);
  }
*/
  document.onmousemove = getPosition;
}
function display_subpoints(p_id,sp_id) {
	var p_elem=document.getElementById(p_id);
	var sp_elem=document.getElementById(sp_id);
	if(!p_elem || !sp_elem) { return; }
	var sp_elems=p_elem.parentNode.getElementsByTagName('LI');
	var offsets=get_offsets(p_elem);
	var p_width=p_elem.offsetWidth;
	var p_height=p_elem.offsetHeight;
	if(sp_elem.style.display!='block') {
		sp_elem.style.display='block';
		sp_elem.style.visibility='hidden';
	}
	var sp_width=sp_elem.offsetWidth;
	var sp_height=sp_elem.offsetHeight;
//	document.getElementById(sp_id+'_top').style.width=sp_width-9;
	var p_pos=new Array(offsets[0],(offsets[0]+p_width),offsets[1],(offsets[1]+p_height));	
	var sp_pos=new Array((offsets[0]+p_width),(offsets[0]+p_width+sp_width),offsets[1],(offsets[1]+sp_height));
	var interval_id=setInterval(function() {
		if((cursor.x>=p_pos[0] && cursor.x<=p_pos[1] && cursor.y>=p_pos[2] && cursor.y<=p_pos[3]) ||
				(cursor.x>=sp_pos[0] && cursor.x<=sp_pos[1] && cursor.y>=sp_pos[2] && cursor.y<=sp_pos[3])) {
			sp_elem.style.visibility='visible';
			sp_elem.style.display='block';
		} else {
			sp_elem.style.display='none';
			clearInterval(interval_id);
		}
	},100);
	sp_elem.style.left=(offsets[0]+p_elem.offsetWidth)+'px';
	sp_elem.style.top=offsets[1]+'px';
	return true;
}
function getPosition(e) {
    e = e || window.event;
     if (e.pageX || e.pageY) {
        cursor.x = e.pageX;
        cursor.y = e.pageY;
    } 
    else {
        var de = document.documentElement;
        var b = document.body;
        cursor.x = e.clientX + 
            (de.scrollLeft || b.scrollLeft) - (de.clientLeft || 0);
        cursor.y = e.clientY + 
            (de.scrollTop || b.scrollTop) - (de.clientTop || 0);
    }
    return cursor;
}

