//==================================================================================
//拖动鼠标时用到的JS
//==================================================================================
var oldX,oldY;    // 记录鼠标移动事件发生前鼠标的位置
var dragElem;    // 记录被拖曳的对象

function $(nodeId)
{
	return document.getElementById(nodeId);
}
// 获得事件发生的主体
function getEventElement(evt) {
	evt=evt||event;
	return evt.srcElement||evt.target;
}

// 获取结点的计算样式
function getStyle(node) {
	return node.currentStyle||document.defaultView.getComputedStyle(node, null);
}
// 拖动的动作
function drag(evt) {
	evt=evt||event;    // 为了兼容IE和firefox，firefox执行evt，IE则执行evt=event
	var node=dragElem;

	if(node != null) {
		node.style.top=parseInt(getStyle(node).top||0)+evt.clientY-oldY+'px';
		node.style.left=parseInt(getStyle(node).left||0)+evt.clientX-oldX+'px';
		//node.style.right=parseInt(getStyle(node).right||0)-evt.clientX+oldX+'px';
		//0px 越往左越小 930px
		oldX=evt.clientX, oldY=evt.clientY;
	}
}

// 拖动开始
// 注册拖曳结束时的执行函数
// 注册拖曳事件的执行函数
function drag_start_orig(evt,nodeId) {
	evt = evt||event;
	oldX = evt.clientX;
	oldY = evt.clientY;
	dragElem=$(nodeId);
	getEventElement(evt).onmouseup=drag_end;
	getEventElement(evt).onmousemove=drag;
}

// 对 drag_start 进行了改良
function drag_start (evt,nodeId) {
	evt=evt||event;
	oldX=evt.clientX;
	oldY=evt.clientY;
	dragElem=$(nodeId);
	
	document.body.onmousemove=drag;
	document.body.onmouseup=drag_end;
}
// 拖曳结束，释放onmousemove事件执行函数
function drag_end(evt) {
	evt = evt||event;
	dragElem = null;
	getEventElement(evt).onmousemove = null;
	getEventElement(evt).onmouseup = null;
}

/* select users START */
var MOMAUS={
		'id':null, 
		'obj':null, 
		'div':null, 
		'single':true,
		'url':root+'query.moma?',
		'departments':null,
		'list':null,
		'from':null,
		'to': null,
		'users': [],
		'keyword':null
		};

function user_selector (id, single) {
	if (MOMAUS.id != id) {
		user_selector_quit ();
		user_selector_init (id, single);
	} 
}

function user_selector_quit () {
	user_selector_destroy ();
	MOMAUS.id=null;
	MOMAUS.div=null;
}

function user_selector_init (id, single) {
	MOMAUS.id=id;
	MOMAUS.obj=_I (MOMAUS.id);
	MOMAUS.single=single;
	
	if (null==MOMAUS.obj || typeof (MOMAUS.obj)==undefined)
		return false;
	else if ('select'!=MOMAUS.obj.nodeName.toLowerCase ())
		return false;
	else {
		MOMAUS.obj.multiple=true;
		MOMAUS.obj.className='selectUserSelector';
		
		MOMAUS.div=document.createElement ('div');
		MOMAUS.div.id='divUserSelector';
		MOMAUS.div.style.display='none';
		document.body.appendChild (MOMAUS.div);
		
		user_selector_display ();
		
		MOMAUS.users=[];
		for (var i=0;i<MOMAUS.obj.options.length;i++) {
			MOMAUS.users.push ({'id':MOMAUS.obj.options[i].value, 'text': MOMAUS.obj.options[i].text});
		}
		
		user_selector_update_to ();
		
		MOMAUS.obj.form.onsubmit = function(event){user_selector_reset ();};
	}
	
	return true;
}

function user_selector_reset () {
	for (var i=0;i<MOMAUS.obj.options.length;i++)
		MOMAUS.obj.options[i].selected=true;
}

function user_selector_set () {
	user_selector_clear ();
	
	for (var i=0;i<MOMAUS.users.length;i++) {
		user_selector_add_element (MOMAUS.users[i].id, MOMAUS.users[i].text);
	}
	
	user_selector_quit ();
}

function user_selector_destroy () {
	if (null != MOMAUS.div)
		document.body.removeChild(MOMAUS.div);
}

function user_selector_add_element (id, text) {
	var node=document.createElement ('option');
	node.text=text;
	node.selected=true;
	node.value=id;
	
	user_selector_add_option (MOMAUS.obj, node);
}

function user_selector_add_option (s, o) {
	try {
		s.add (o, null);
	} catch (ex) {
		s.add (o);
	} // for IE
}

function user_selector_remove_option (s, o) {
	s.remove (o);
}

function user_selector_load_departments () {
	if (null != MOMAUS.departments) {
		user_selector_show_departments ();
		return;
	}
	
	ajax_get (MOMAUS.url+'t=department', user_selector_load_departments_func, true);
}

function user_selector_show_departments () {
	var html=lang.selectDepartment+': <select onchange="user_selector_load_department_users (this.value);"><option value="0">-'+lang.pleaseSelectDepartment+'-</option>';
	
	for (var i=0;i<MOMAUS.departments.length;i++)
		html += '<option value="'+MOMAUS.departments[i].id+'">['+MOMAUS.departments[i].grade+'] '+MOMAUS.departments[i].name+'</option>';
	
	html += '</select><input type="button" value="'+lang.allDepartments+'" onclick="user_selector_all_users ();" />';
	_I ('USDepartments').innerHTML=html;	
}

function user_selector_load_departments_func (buf) {
	if (!buf) return;
	MOMAUS.departments=JSON.parse (buf);

	user_selector_show_departments ();
}

function user_selector_clear () {
	MOMAUS.obj.innerHTML='';
}

function user_selector_clear_from () {
	MOMAUS.from.innerHTML='';
}

function user_selector_clear_to () {
	MOMAUS.to.innerHTML='';
}

function user_selector_add_from_node (id, name) {
	var node=document.createElement ('option');
	node.text='['+id+'] '+name;
	node.value=id;
	
	user_selector_add_option (MOMAUS.from, node);
}

function user_selector_add_to_node (id, text) {
	var node=document.createElement ('option');
	node.text=text;
	node.value=id;
	
	user_selector_add_option (MOMAUS.to, node);
}

function user_selector_all_users () {
	ajax_get (MOMAUS.url+'t=user', user_selector_all_users_func, true);
}

function user_selector_all_users_func (buf) {
	MOMAUS.list=JSON.parse (buf);
	
	user_selector_clear_from ();
	for (var i=0;i<MOMAUS.list.length;i++) {
		user_selector_add_from_node (MOMAUS.list[i].id, MOMAUS.list[i].name);
	}
}

function user_selector_load_department_users (id) {
	if (parseInt (id)<1)
		return;
	ajax_get (MOMAUS.url+'t=departmentUsers&departmentId='+id, user_selector_load_department_users_func, true);
}

function user_selector_load_department_users_func (buf) {
	if (!buf) return;
	MOMAUS.list=JSON.parse (buf);

	if (MOMAUS.list.length < 1) {
		alert (lang.noUserInDepartment);
		return;
	}
	
	user_selector_clear_from ();
	for (var i=0;i<MOMAUS.list.length;i++) {
		user_selector_add_from_node (MOMAUS.list[i].id, MOMAUS.list[i].name);
	}
}

function user_selector_add_user (id, text) {
	for (var i=0;i<MOMAUS.users.length;i++) {
		if (MOMAUS.users[i].id==id) {
			return;
		}
	}
	
	if (MOMAUS.single && MOMAUS.users.length >= 1) {
		alert (lang.oneUserAllowed);
		return;
	}
	
	MOMAUS.users.push ({'id':id, 'text': text});
}

function user_selector_cancel (all) {
	for (var i=0;i<MOMAUS.to.options.length;i++) {
		if (all || MOMAUS.to.options[i].selected) {
			user_selector_del_user (MOMAUS.to.options[i].value);
		}
	}
	
	user_selector_update_to ();
}

function user_selector_del_user (id) {
	for (var i=0;i<MOMAUS.users.length;i++) {
		if (MOMAUS.users[i].id==id) {
			MOMAUS.users.splice (i, 1);
		}
	}
}

function user_selector_select (all) {
	for (var i=0;i<MOMAUS.from.options.length;i++) {
		if (all || MOMAUS.from.options[i].selected) {
			user_selector_add_user (MOMAUS.from.options[i].value, MOMAUS.from.options[i].text);
		}
	}
	
	user_selector_update_to ();
}

function user_selector_update_to () {
	user_selector_clear_to ();
	
	for (var i=0;i<MOMAUS.users.length;i++) {
		user_selector_add_to_node (MOMAUS.users[i].id, MOMAUS.users[i].text);
	}
}

function user_selector_search (auto) {
	var keyword=_V ('USSearch');
	
	if (MOMAUS.keyword != keyword)
		MOMAUS.keyword=keyword;
	else
		return;
	
	if (keyword.length >= 2) {
		user_selector_clear_from ();
		ajax_get (MOMAUS.url+'t=search&keyword='+encodeURI (keyword), user_selector_search_func, true);
	} else {
		if (!auto) alert (lang.atLeastTwoCharInKeyword);
	}
}

function user_selector_search_func (buf) {
	if (!buf) return;
	MOMAUS.list=JSON.parse (buf);

	for (var i=0;i<MOMAUS.list.length;i++) {
		user_selector_add_from_node (MOMAUS.list[i].id, MOMAUS.list[i].name);
	}
}

function user_selector_display () {
	var html = '<div id="USHead">'+lang.selectUser+'</div><div id="USMain">';
	
	html +='<table>';
	html += '<tr><td colspan="3"><div id="USDepartments"></div></td></tr>';
	html += '<tr><td colspan="3">'+lang.queryUser+': <input type="text" size="30" id="USSearch" onkeyup="user_selector_search (true);" />';
	html += '<input type="button" value="'+lang.search+'" onclick="user_selector_search (false);" /></td></tr>';
	
	if (MOMAUS.single)
	html += '<tr><td colspan="3">'+lang.selectSingleUser+'</td></tr>';
	
	html += '<tr><td>'+lang.selectedUsers+'</td><td></td><td>'+lang.selectUserList+'</td></tr></tr>'
	
	html += '<td style="text-align:left;width: 250px;"><select multiple id="selectUserSelectorChosen" ondblclick="user_selector_cancel (false);"></select></td><td style="text-align:center;width: 80px;">';
	
	if (!MOMAUS.single)
	html += '<div><input type="button" value="'+lang.selectAll+'" onclick="user_selector_select (true);" /></div>';
	
	html += '<div><input type="button" value="'+lang.select+'" onclick="user_selector_select (false);" /></div>';
	html += '<div><input type="button" value="'+lang.cancel+'" onclick="user_selector_cancel (false);" /></div>';
	
	if (!MOMAUS.single)
	html += '<div><input type="button" value="'+lang.cancelAll+'" onclick="user_selector_cancel (true);" /></div>';
	
	html += '</td><td style="text-align:right;width: 250px;"><select multiple id="selectUserSelectorList" ondblclick="user_selector_select (false);"></select></td>';
		
	html += '</tr><tr><td colspan="3" style="text-align:center;">';
	
	html += '<input type="button" value="'+lang.confirm+'" onclick="user_selector_set ();" /> ';
	html += '<input type="button" value="'+lang.cancel+'" onclick="user_selector_quit ();" /> ';
	
	html += '</td></tr></table></div>';
	
	MOMAUS.div.innerHTML=html;
	MOMAUS.div.style.display='block';
	MOMAUS.from=_I ('selectUserSelectorList');
	MOMAUS.to=_I ('selectUserSelectorChosen');
	
	user_selector_load_departments ();
	
	_I('USHead').onmousedown = function(event){drag_start (event,MOMAUS.div.id)};
}
/* select users END */

