//----------------------------------------------------------------------------------------------------------
// 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);
	
	positionChildNodes(parentObj);
}

function formEvents(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;
			
			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 "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) {
	elementsEvents(parentObj.getElementsByTagName('input'));
	
	elementsEvents(parentObj.getElementsByTagName('select'));
	
	elementsEvents(parentObj.getElementsByTagName('textarea'));
}

function anchorEvents(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 "popup":
				anchors[i].onclick		= popupModule;
				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) {
	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 "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;
		}
	}
}