﻿function $() {
  var elements = new Array();
  for (var i = 0; i < arguments.length; i++) {
    var element = arguments[i];
    if (typeof element == 'string')
      element = document.getElementById(element);
    if (arguments.length == 1)
      return element;
    elements.push(element);
  }
  return elements;
}
// display error message flag,  false  -- not show message           true  --  show error message
var _GlobalDisplayErrorMessageFlag = false;
function ShowErrorMessage(errorString, errorLevel){
	// errorLevel     0 -- high   1 -- middle     2 -- low
	switch(parseInt(errorLevel)){
		case 0:
			alert(errorString);
			break;
		case 1:
			alert(errorString);
			break;
		case 2:
		default:
			if(_GlobalDisplayErrorMessageFlag){
				alert(errorString);
			}
			break;
	}
}
// flag for navigator type
var _GlobalIsIEFlag = true;
var _GlobalNavigator = navigator.userAgent;
if (_GlobalNavigator.indexOf("MSIE")>=1){
	// navigator is ie
	_GlobalIsIEFlag = true;
}
//else if (_GlobalNavigator.indexOf("Firefox")>=1){
// navigator is ff
else{
	_GlobalIsIEFlag = false;
	// add click event for ff
    HTMLElement.prototype.click = function() {
        var evt = this.ownerDocument.createEvent('MouseEvents');
        evt.initMouseEvent('click', true, true, this.ownerDocument.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
        this.dispatchEvent(evt);
    }
}
// all control start//
// define global alt hot key array
function associateObjWithEvent(obj, methodName){
    return (function(e){
        e = e||window.event;
        return obj[methodName].call(obj, e, this);
    });
}
function DhtmlObject(){
    var el = document;
    if(el){
        el.onkeydown = associateObjWithEvent(this, "doOnKeyDown");
		 el.onclick = associateObjWithEvent(this, "doOnClick");
    }
}
DhtmlObject.prototype.doOnKeyDown = function(event, element){
	_FireBodyKeyDownEvent(event);
}
DhtmlObject.prototype.doOnClick = function(event, element){
	DropDownBodyShow(event);
}

// allow the same hotKey flag,  false  -- not allow the same hot key define, 
//								true   -- the newer define will  overwrite the older define
var _BodyGlobalAllowSameHotKeyFlag = false;
if(!_BodyGlobalAltCtrlHotKeyEventObject){
	var _BodyGlobalAltCtrlHotKeyObject = function(){};
	var _BodyGlobalAltCtrlHotKeyEventObject = new _BodyGlobalAltCtrlHotKeyObject();
	var _BodyGlobalAltCtrlHotKeyArrayList = new Array();
	var _BodyElement = new DhtmlObject();
// only for no htc
//	if(document.attachEvent){
//		document.attachEvent("onkeydown", _FireBodyKeyDownEvent);
//	}
//	else if(document.addEventListener){
//		document.addEventListener("keydown",_FireBodyKeyDownEvent,false);;//.onkeydown=KeyDown; //¼
//	}
//	else{
//		ShowErrorMessage("add event error!",0);
//	}
}
if(!_BodyGlobalAltHotKeyEventObject){
	var _BodyGlobalAltHotKeyObject = function(){};
	var _BodyGlobalAltHotKeyEventObject = new _BodyGlobalAltHotKeyObject();
	var _BodyGlobalAltHotKeyArrayList = new Array();
}
if(!_BodyGlobalCtrlHotKeyEventObject){
	var _BodyGlobalCtrlHotKeyObject = function(){};
	var _BodyGlobalCtrlHotKeyEventObject = new _BodyGlobalCtrlHotKeyObject();
	var _BodyGlobalCtrlHotKeyArrayList = new Array();
}
function _FireBodyKeyDownEvent(e) {
	var key;
	var altPressFlag = false
	var ctrlPressFlag = false;
	if(_GlobalIsIEFlag){
		key = e.keyCode;  //ȡüCode
		if(e.altKey){altPressFlag = true;}
		if(e.ctrlKey){ctrlPressFlag = true;}
// only for no htc
//		key = event.keyCode;  //ȡüCode
//		if(event.altKey){altPressFlag = true;}
//		if(event.ctrlKey){ctrlPressFlag = true;}
	}
	else{ 
		//Firefox˵֧event.keyCode
		key = _FireBodyKeyDownEvent.arguments[0].keyCode;
		if(_FireBodyKeyDownEvent.arguments[0].altKey){altPressFlag = true;}
		if(_FireBodyKeyDownEvent.arguments[0].ctrlKey){ctrlPressFlag = true;}
	}
	if(key == 27 || key==9 ){
		// press "esc" key or "tab" key, hidden dropdownlist div
		DropDownBodyShow(e);
	}
	//alert(key+"---"+String.fromCharCode(key));
	if(key<65||key>90){return;}
	// change keycode to string
	var keyString = String.fromCharCode(key);
	if(altPressFlag&ctrlPressFlag){
		_FireBodyHotKey(keyString, _BodyGlobalAltCtrlHotKeyEventObject, _BodyGlobalAltCtrlHotKeyArrayList);
	}
	else if(altPressFlag){
		_FireBodyHotKey(keyString, _BodyGlobalAltHotKeyEventObject, _BodyGlobalAltHotKeyArrayList);
	}
	else if(ctrlPressFlag){
		_FireBodyHotKey(keyString, _BodyGlobalCtrlHotKeyEventObject, _BodyGlobalCtrlHotKeyArrayList);
	}
	else{
	}
}
function _FireBodyHotKey(keyString, hotKeyArray, hotKeyArrayList){
	// change keyString to upcase
	keyString = keyString.toUpperCase();
	// check there is define the event
	for(var i=0; i<hotKeyArrayList.length; i++){
		if(keyString == hotKeyArrayList[i]){
			// there is the same hot key, fire the event
			eval("hotKeyArray." + keyString + "();");
		}
	}
	
}
function _AddBodyAltCtrlHotKey(keyChar, fireEvent){
	_AddBodyHotKey(keyChar, fireEvent, "_BodyGlobalAltCtrlHotKeyObject", _BodyGlobalAltCtrlHotKeyArrayList);
}
function _AddBodyAltHotKey(keyChar, fireEvent){
	_AddBodyHotKey(keyChar, fireEvent, "_BodyGlobalAltHotKeyObject", _BodyGlobalAltHotKeyArrayList);
}
function _AddBodyCtrlHotKey(keyChar, fireEvent){
	_AddBodyHotKey(keyChar, fireEvent, "_BodyGlobalCtrlHotKeyObject", _BodyGlobalCtrlHotKeyArrayList);
}
function _AddBodyHotKey(keyChar, fireEvent, hotKeyEventObject, hotKeyArrayList){
	// change keyChar to upcase
	keyChar = keyChar.toUpperCase();
	// check this is the same hot key
//	var theSameFlag
	for(var i=0; i<hotKeyArrayList.length; i++){
		if(keyChar == hotKeyArrayList[i]){
			// there is the same hot key
			if(!_BodyGlobalAllowSameHotKeyFlag){
				ShowErrorMessage("The same hot key " + keyChar + " define.", 2);
				return;
			}
		}
	}
	hotKeyArrayList.push(keyChar);
	eval(hotKeyEventObject+".prototype." + keyChar + " = fireEvent");
}
function _RemoveBodyAltCtrlHotKey(keyChar, fireEvent){
	_RemoveBodyHotKey(keyChar, fireEvent, "_BodyGlobalAltCtrlHotKeyObject", _BodyGlobalAltCtrlHotKeyArrayList);
}
function _RemoveBodyAltHotKey(keyChar, fireEvent){
	_RemoveBodyHotKey(keyChar, fireEvent, "_BodyGlobalAltHotKeyObject", _BodyGlobalAltHotKeyArrayList);
}
function _RemoveBodyCtrlHotKey(keyChar, fireEvent){
	_RemoveBodyHotKey(keyChar, fireEvent, "_BodyGlobalCtrlHotKeyObject", _BodyGlobalCtrlHotKeyArrayList);
}
function _RemoveBodyHotKey(keyChar, fireEvent, hotKeyEventObject, hotKeyArrayList){
	// change keyChar to upcase
	keyChar = keyChar.toUpperCase();
	// check this is the same hot key
	for(var i=0; i<hotKeyArrayList.length; i++){
		if(keyChar == hotKeyArrayList[i]){
			// there is the same hot key
			hotKeyArrayList.splice(i,1);
			eval(hotKeyEventObject+".prototype." + keyChar + " = function(){};");
			return;
		}
	}
	ShowErrorMessage("Can't find the remove hot key "+keyChar,2);
}
// dropdown list control start///
if(!dropdownListArray){
	var dropdownListArray = new Array();
	//window.document.attachEvent("onclick", DropDownBodyShow);
}
function DropDownItemClick(clickText,clickValue, evt, clickObject) {
	while ( clickObject.className!="DropdownList" ) {
		clickObject = clickObject.parentNode;
	}
	clickObject.childNodes[3].childNodes[0].style.display="none";
	clickObject.SelectText = clickText;
	clickObject.SelectChange;
}
function DropDownMouseUP(evt, clickObject) {
	var divList = clickObject.parentNode;
	var childNumber = divList.childNodes.length;
	for ( i=0; i<childNumber; i++) {
		var divNode = divList.childNodes[i];
		var evtObject;
		if(_GlobalIsIEFlag){
			evtObject = evt.srcElement;
		}
		else{
			evtObject = evt.target;
		}
		if (divNode==evtObject){
			divNode.className = "DropdownListSelectItem";
		}
		else {
			divNode.className = "DropdownListUnSelectItem";
		}
	}
}
function DropDownOnBlur(evt, clickObject){
//	setTimeout(function(){clickObject.parentNode.parentNode.childNodes[3].childNodes[0].style.display="none";},100);
}
function DropDownOnFocus(evt, clickObject){
//	setTimeout(function(){clickObject.parentNode.parentNode.childNodes[3].childNodes[0].style.display="none";},100);
	clickObject.select();
}
function DropDownBodyShow(evt) {
	var clickID = "";
	var childObject;
	if(_GlobalIsIEFlag){
		childObject = evt.srcElement;
	}
	else{
		childObject = evt.target;
	}
	var topParent = childObject.parentNode;
	while ( (topParent != childObject) && (topParent !=null) ) {
		if (childObject.className=="DropdownList") {
			clickID = childObject.id;
			break;
		}
		childObject = childObject.parentNode;
		topParent = childObject.parentNode;
	}
	for (arrayID in dropdownListArray){
		var node = $(dropdownListArray[arrayID]);
		if ( node.id != clickID )
		with( node.childNodes[3].childNodes[0].style ) {
			if (display=="none") {}
			else { display="none"; }
		}
	}
	return false;
}
function DropDownPicShow( evt, clickObject ) {
	var dropDownObject = clickObject.parentNode;
	if(!dropDownObject.IsEnable){return;}
	var divList = clickObject.parentNode.childNodes[3].childNodes[0];
	with( divList.style ) {
		if (display=="none") {
			display = "";
		}
		else {
			display="none";
		}
	}
}
function DropDownInputShow(evt, clickObject) {
	var dropDownObject = clickObject.parentNode.parentNode;
	if(!eval(dropDownObject._IsEnable)){return;}
	var divList = clickObject.parentNode.parentNode.childNodes[3].childNodes[0];
	if(clickObject.parentNode.parentNode._comboBox == ""){return;}
	with( divList.style ) {
		if (display=="none") {
			display = "";
		}
		else {
			display="none";
		}
	}
}
function DropDownInputKeyUp(evt, clickObject) {
	if(clickObject.parentNode.parentNode.ComboBox == "READONLY") return;
	switch(evt.keyCode){
		case 13://enter
		case 33://page up
		case 34://page down
		case 35://end
		case 36://home
		case 38://up
		case 40://down
			return;
			break;
		default:
			break;
	}
	if(clickObject.parentNode.parentNode.SelectFilter != clickObject.value){
		clickObject.parentNode.parentNode.SelectFilter = clickObject.value;
	}
}
function DropDownInputKeyDown(evt, clickObject) {
	var dropwObject = clickObject.parentNode.parentNode;
	if(!dropwObject.IsEnable) return;
//	if(dropwObject.ComboBox == "READONLY") return;
	var divList = dropwObject.childNodes[3].childNodes[0];
//	divList.style.display = "";
	switch(evt.keyCode){
		case 13://enter
			// get current select text value
			var childNumber = divList.childNodes.length;
			var tempSelectTxtString = "";
			for ( i=0; i<childNumber; i++) {
				var divNode = divList.childNodes[i];
				if (divNode.className == "DropdownListSelectItem"){
					tempSelectTxtString = divNode.innerHTML;
					break;
				}
			}
			dropwObject.SelectText = tempSelectTxtString;
			divList.style.display = "none";
			break;
		case 33://page up
			dropwObject.ListSelectIndex-=10;
			divList.style.display = "";
			break;
		case 34://page down
			dropwObject.ListSelectIndex+=10;
			divList.style.display = "";
			break;
		case 35://end
			dropwObject.ListSelectIndex = dropwObject.ListSelectMaxIndex-1;
			divList.style.display = "";
			break;
		case 36://home
			dropwObject.ListSelectIndex = dropwObject.ListSelectMinIndex;
			divList.style.display = "";
			break;
		case 38://up
			dropwObject.ListSelectIndex--;
			divList.style.display = "";
			break;
		case 40://down
			dropwObject.ListSelectIndex++;
			divList.style.display = "";
			break;
		default:
			break;
	}
}

function DropDownInputBlur(evt, clickObject) {
//	clickObject.focus();
}
function DropDownInputPaste(evt, clickObject) {
//	clickObject.parentNode.parentNode.parentNode.parentNode.SelectText = clickObject.value;
}
// dropdown list control finish///
