
function Widget(parent_el) {
	this.initialize(parent_el);
	return;
}
Widget.prototype=({
initialize: function(parent_el) {
	this.cursor_x=0;
	this.cursor_y=0;
	this.root=null;
	this.title=new String;
	this.width=400;
	this.buttons=new Array;
	this.w_id=null;
	this.moving=false;
	this.cursor_trg_x=0;
	this.cursor_trg_y=0;
	this.moving_obj=null;
	return;
},
widget: function(w_id,content,parent_y) {
	this.root	=document.createElement('DIV');
	var w_form	=document.createElement('FORM');
	var w_fieldset	=document.createElement('FIELDSET');
	var w_head,w_title,w_close,w_content;
	w_form.className='block_contacts_widget';
	w_form.id='w_form_'+w_id;
	w_head	=document.createElement('DIV');
	w_title	=document.createElement('DIV');
	w_close	=document.createElement('DIV');
	w_content	=document.createElement('DIV');
	w_buttons	=document.createElement('DIV');
	for(var i=0;i<this.buttons.length;i++) {
		w_buttons.appendChild(this.buttons[i]);
	}

	w_fieldset.className='widget';
	w_buttons.className='controls';
	w_fieldset.style.width=this.width+'px';
	w_head.className='whead';
	w_title.className='title';
	w_title.style.cursor='move';

	var _this=this;
	w_title.onmousedown = function(e) {
		_this.moving_obj=w_form;
		document.ondragstart = function() { return false; };
		document.body.onselectstart = function() { return false; };
		var offsets=getOffset(w_form);
		w_form.style.zIndex=2;
		_this.moving=true;
		e=fixEvent(e);
		_this.cursor_trg_x=(e.pageX - offsets[0]);
		_this.cursor_trg_y=(e.pageY - offsets[1]);
		document.onmousemove=function(e) {
			if(!_this.moving) {
				return false;
			}
			e=fixEvent(e);
			x_pos=e.pageX-_this.cursor_trg_x;
			y_pos=e.pageY-_this.cursor_trg_y;
			with(_this.moving_obj.style) {
				position='absolute';
				left=x_pos+'px';
				top=y_pos+'px';
			}
		};
	};
	w_title.onmouseup = function() {
		this.moving_obj=null;
		document.onmousemove= null;
		document.ondragstart = null;
		document.body.onselectstart = null;
		w_form.style.zIndex=1;
		_this.moving=false;
	};
	w_close.className='close';
	w_content.className='content';
	w_title.innerHTML=this.title;
	var _this=this;
	w_close.onclick=function() { _this.close(); }
	w_close.innerHTML='x';
	w_content.innerHTML=content;
	
	w_head.appendChild(w_close);
	w_head.appendChild(w_title);

	w_fieldset.appendChild(w_head);
	w_fieldset.appendChild(w_content);
	w_fieldset.appendChild(w_buttons);
	w_form.appendChild(w_fieldset);
	w_form.style.display='block';
	this.root.appendChild(w_form);
	var body_elem=document.getElementsByTagName('body');
	body_elem[0].appendChild(this.root);
	this.start_position(w_form,parent_y);

	this.w_id=w_id;
	return;
},
start_position: function(w_form,parent_y) {
	offset_x=parseInt((document.documentElement.clientWidth-this.width)/2);
	if(parent_y) {
		var offsets=getOffset(parent_y);
		offset_y=offsets[1];
	} else {
		offset_y=parseInt(document.documentElement.clientHeight/2);
	}
	w_form.style.position='absolute';
	w_form.style.left=offset_x+'px';
	w_form.style.top=offset_y+'px';
	if(!parent_y) {
		window.scrollTo(0,offset_y);
	}
},
text_box: function(w_id,content) {
	this.widget(w_id,content);
	return;
},
new_button: function(b_name,b_action) {
	button	=document.createElement('INPUT');
	button.setAttribute('type','button');
	button.setAttribute('value',b_name);
	button.onclick=b_action;
	this.buttons[this.buttons.length]=button;
	return;
},
get_element: function(class_name) {
	var divs=this.root.getElementsByTagName('DIV');
	for(var i=0;i<divs.length;i++) {
		if(divs[i].className==class_name) {
			return divs[i];
		}
	}
	return null;
},
get_form_obj: function() {
	return document.getElementById('w_form_'+this.w_id);
},
close: function() {
	this.root.innerHTML='';
	this.buttons=new Array;
	this.w_id=null;
	return;
}
});

function getOffset(elem,offsets) {
	if(!offsets) {
		var offsets=new Array(0,0);
	}
	offsets[0]+= elem.offsetLeft ? elem.offsetLeft : 0;
	offsets[1]+= elem.offsetTop ? elem.offsetTop : 0;
	if(elem.offsetParent!=null) {
		getOffset(elem.offsetParent,offsets);
	}
	return offsets;
}
function fixEvent(e) {
	e = e || window.event;
	if ( e.pageX == null && e.clientX != null ) {
		var html = document.documentElement;
		var body = document.body;
		e.pageX = e.clientX + (html && html.scrollLeft || body && body.scrollLeft || 0) - (html.clientLeft || 0);
		e.pageY = e.clientY + (html && html.scrollTop || body && body.scrollTop || 0) - (html.clientTop || 0);
	}
	return e;
}
function get_central_element(hoffset) {
	var helem=document.createElement('SPAN');
	var htop=((document.documentElement.clientHeight/2)+document.documentElement.scrollTop-hoffset)+'px';
	with(helem.style) {
		position='absolute';
		left=0+'px';
		top=htop;
	}
	document.getElementById('page').appendChild(helem);
	return helem;
}
