//----------------------------------------------------------------------------------------------------------
// JAVASCRIPT EVENTS LIBRARY
// SHAPESHIFT INTERACTIVE 
// CREATED: 19.03.2009
// VER: 1.0 
//----------------------------------------------------------------------------------------------------------

//----------------------------------------------------------------------------------------------------------
// MOUSE EVENT
//----------------------------------------------------------------------------------------------------------

var mouseX	= 0;
var mouseY	= 0;

function mouseXY(e) {
	//if (isIE())
		e	= e || window.event;
	
	mouseX	= getMouseX(e);
	mouseY	= getMouseY(e);
	
	window.status = mouseX;
}

function getMouseX(e) {
	if (isIE())
		posX = event.clientX + document.body.scrollLeft;
	else
		posX = e.pageX;
	
	if (posX < 0)
		posX = 0
	
	return posX;
}

function getMouseY(e) {
	if (isIE())
		posY = event.clientY + document.body.scrollTop;
	else
		posY = e.pageY;
	
	if (posY < 0)
		posY = 0;
	
	return posY;
}

var dragObject	= null;
var mouseOffset = null;

function mouseCoords(e){
	if(e.pageX || e.pageY){
		return {x:e.pageX, y:e.pageY};
	}
	return {
		x:e.clientX + document.body.scrollLeft - document.body.clientLeft,
		y:e.clientY + document.body.scrollTop  - document.body.clientTop
	};
}


function mouseMove(e){ 
	e				= e || window.event;
	var mousePos	= mouseCoords(e);

	mouseX			= mousePos.x;
	mouseY			= mousePos.y;

	if (dragObject) {
		drag(mousePos)
		return false;
	}
}

function getMouseOffset(target, e){ 
	e = e || window.event; 

	var docPos		= getPosition(target); 
	var mousePos	= mouseCoords(e); 
	
	return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y}; 
}

function mouseUp(e) {
	e = e || window.event; 

	endDrag()
}

//----------------------------------------------------------------------------------------------------------
// OBJECT EVENTS
//----------------------------------------------------------------------------------------------------------

function setObjEvent(obj, eventType, func) {
	switch(eventType) {
		case "submit":
			obj.onsubmit	= func;
			break;
		
		case "mouseover":
			obj.onmouseover	= func;
			break;
		
		case "mouseout":
			obj.onmouseout	= func;
			break;
		
		default:
			obj.onclick		= func;
			break;
	}
}

function setEvents(parentObj) {
	divEvents(parentObj);
		
	anchorEvents(parentObj);
	
	inputEvents(parentObj);
	
	formEvents(parentObj);
	
	//objectEvents(parentObj);
	
	positionChildNodes(parentObj);
}

function formEvents(parentObj) {
	if (parentObj) {
		var forms	= parentObj.getElementsByTagName('form');
		
		for (i=0; i<forms.length; i++) {
			switch(forms[i].getAttribute('type')) {
				case "module":
					forms[i].onsubmit	= submitModule;
					break;
				
				case "filter":
					forms[i].onsubmit	= filterSubmit;
					break;
				
				case "feedback_upload":
				case "upload":
					forms[i].onsubmit	= uploadSubmit;
					break;
				
				case "login":
					forms[i].onsubmit	= loginSubmit;
					break;
				
				case "xss_feedback":
					
					break;
				
				default:
					forms[i].onsubmit	= formSubmit;
					break;
			}
			
			if (forms[i].getAttribute('order'))
				setOrder(forms[i]);
			
			if (forms[i].getAttribute('closeonsubmit'))
				forms[i].onreset	= closeOnSubmit;
		}
	}
}

function elementsEvents(elements) {
	for (i=0; i<elements.length; i++) {
		switch(elements[i].getAttribute('modifier')) {
			case "toggle_group":
				elements[i].onclick	= toggleCheckboxes;
				break;
			
			case "toggle_default":
				elements[i].onfocus	= toggleDefault;
				elements[i].onblur	= toggleDefault;
				break;
			
			case "toggle_target":
				elements[i].onclick = toggleTarget;
				break;
			
			case "select":
				elements[i].onfocus	= selectText;
				break;
			
			case "live":
				elements[i].onclick	= operationModule;
				break;
				
			case "pop_stack":
				showPop(elements[i]);
				elements[i].onclick	= popStack;
				break;
			
			case "close":
				elements[i].onclick	= closeTarget;
				break;
			
			case "location":
				elements[i].onclick	= clickLocation;
				break;
			
			case "refresh":
				elements[i].onclick	= clickRefresh;
				break;
			
			case "module":
				elements[i].onchange	= optionModule;
				break;
			
			default:
				if (elements[i].getAttribute('media'))
					elements[i].onclick		= operationModule;
				break;
		}
	}
}

function inputEvents(parentObj) {
	if (parentObj) {
		elementsEvents(parentObj.getElementsByTagName('input'));
		
		elementsEvents(parentObj.getElementsByTagName('select'));
		
		elementsEvents(parentObj.getElementsByTagName('textarea'));
	}
}

function anchorEvents(parentObj) {
	if (parentObj) {
		var anchors	= parentObj.getElementsByTagName('a');
		
		for (i=0; i<anchors.length; i++) {
			switch(anchors[i].getAttribute('media')) {
				case "tooltip":
					//anchors[i].onmouseover	= popupModule;
					//anchors[i].onmouseout	= freeTooltip;
					//anchors[i].onmousemove	= positionDiv;
					
					anchors[i].onmouseover	= showTooltip;
					anchors[i].onmouseout	= hideTooltip;
					anchors[i].onmousemove	= positionDiv;
					break;
				
				case "roll":
					anchors[i].onmouseover	= eventShowDiv;
					anchors[i].onmouseout	= eventHideDiv;
					break;
				
				case "show_div":
					anchors[i].onmouseover	= eventShowDiv;
					break;
				
				case "hide_div":
					anchors[i].onmouseout	= eventHideDiv;
					break;
				
				case "hide_div":
					anchors[i].onmouseout	= eventHideDiv;
					break;
				
				case "hide_message":
					anchors[i].onclick		= hideMessage;
					break;
				
				case "popup_template":
					anchors[i].onclick		= operationModule;
					break;
				
				case "popup_image":
					anchors[i].onclick		= popupImage;
					break;
				
				case "live":
					anchors[i].onclick		= liveModule;
					break;
				
				case "group_module":
					anchors[i].onclick		= groupModule;
					break;
				
				case "expand":
					anchors[i].onclick		= expandModule;
					break;
				
				case "close":
					anchors[i].onclick		= closeTarget;
					break;
					
				case "pop_stack":
					anchors[i].onclick		= popStack;
					break;
				
				case "previous_deque":
					anchors[i].onclick		= previousDeque;
					break;
				
				case "next_deque":
					anchors[i].onclick		= nextDeque;
					break;
				
				case "goto_page":
					anchors[i].onclick		= gotoPage;
					break;
				
				case "move":
				case "move_image":
					anchors[i].onmousedown	= startDrag;
					anchors[i].onmouseup	= stopDrag;
					break;
				
				case "toggle_div":
					anchors[i].onclick		= toggleDiv;
					break;
				
				case "target_another":
					anchors[i].onclick		= targetAnother;
					break;
				
				default:
					if (anchors[i].getAttribute('media'))
						anchors[i].onclick	= operationModule;
					//else
					//	linkTarget(anchors[i]);
					break;
			}
		}
	}
}

function divEvents(parentObj) {
	if (parentObj) {
		var divs	= parentObj.getElementsByTagName('div');
	
		for (i=0; i<divs.length; i++) {
			switch(divs[i].getAttribute('type')) {
				case "email":
					decodeEmail(divs[i]);
					break;
				
				case "image":
					createImage(divs[i]);
					break;
				
				case "flash_object":
					flashObject(divs[i]);
					break;
				
				case "flash":
					drawFlash(divs[i]);
					break;
				
				case "close":
					setObjEvent(divs[i], divs[i].getAttribute('event'), closeTarget);
					break;
				
				case "filter":
					setObjEvent(divs[i], divs[i].getAttribute('event'), filterSubmit);
					break;
				
				case "live":
					divs[i].onclick		= liveModule;
					break;
				
				case "expand":
					divs[i].onclick		= expandModule;
					break;
				
				case "operation":
					divs[i].onclick		= operationModule;
					break;
					
				case "pop_stack":
					divs[i].onclick		= popStack;
					break;
				
				case "move":
					divs[i].onmousedown	= makeDraggable;
					//divs[i].onmouseup	= stopDrag;
					break;
				
				case "remove":
					hideElement(document.getElementById(divs[i].getAttribute('container')));
					break;
				
				case "change_class":
					setClass(document.getElementById(divs[i].getAttribute('container')), divs[i].getAttribute('meta'));
					break;
				
				case "load_on_load":
					clickLoadModule(divs[i], divs[i].getAttribute('media'));
					break;
				
				case "calendar":
					loadCalendar(divs[i]);
					break;
				
				case "widget":
					loadWidget(divs[i]);
					break;
				
				case "anchor":
					window.scrollTo(0, findPosX(divs[i]))
					break;
				
				case "pagenation":
					//loadPagenation(divs[i], divs[i].innerHTML, divs[i].getAttribute('pagesize'), divs[i].getAttribute('index'));
					break;
				
				case "toggle_div":
					divs[i].onclick		= toggleDiv;
					break;
				
				case "roll":
					divs[i].onmouseover	= eventShowDiv;
					divs[i].onmouseout	= eventHideDiv;
					break;
				
				case "show_div":
					divs[i].onmouseover	= eventShowDiv;
					break;
				
				case "hide_div":
					divs[i].onmouseout	= eventHideDiv;
					break;
				
				case "vertical_fill":
					verticalFill(divs[i]);
					break;
			}
		}
		
		var spans	= parentObj.getElementsByTagName('span');
		
		for (i=0; i<spans.length; i++) {
			switch(spans[i].getAttribute('type')) {
				case "email":
					decodeEmail(spans[i]);
					break;
			}
		}
	}
}

function objectEvents(parentObj) {
	if (parentObj) {
		var objects	= parentObj.getElementsByTagName('object');
		
		for (i=0; i<objects.length; i++) {
			switch(objects[i].getAttribute('type')) {
				default:
					addWmode(objects[i]);
					break;
			}
		}
	}
}









