// JavaScript Document

// Qualux
// All rights reserved
//
// JS Utility
// Date: 080711


// Cross-platform add event
function add_event( elm, evType, fn, useCapture )
{
	if ( elm.addEventListener )	// standard
	{
		elm.addEventListener( evType, fn, useCapture );
		return true;
	}
	else if ( elm.attachEvent ) // IE
	{
		var r = elm.attachEvent( 'on' + evType, fn );
		return r;
	}
	else // old old method
	{
		elm['on' + evType] = fn;
	}
}



function signal( elementId, eventType, func )
{
	var elm = document.getElementById(elementId);
	add_event( elm, eventType, func, false );
}


// Cross-platform get event target
function get_target( e )
{
	if ( window.event && window.event.srcElement )			// IE
		return window.event.srcElement;
	else if ( e )
		return e.target;	// Standard
}


// 檢查父節點是否有parentId
function has_parent_id( node, parentId )
{
	// 自己不包括在內
	if ( node.id == parentId )
		return false;

	while ( node.id != parentId &&
			node.nodeName.toLowerCase() != 'html' )
		node = node.parentNode;
		
	return (node.id == parentId);
}


function findParentById( node, parentId )
{
	var self = node;
	
	// 自己不包括在內
	if ( node.id == parentId )
		return false;

	while ( node.id != parentId &&
			node.nodeName.toLowerCase() != 'html' )
		node = node.parentNode;
		
	if ( node.id == parentId )
		return node;
	else
		return self;
}


function self_identify( selfNode, downId, begin, size )
{
	if ( size )
	{
		if ( selfNode.id && selfNode.id.substr(begin, size) == downId )
			return selfNode;
	}
	else
	{
		if ( selfNode.id == downId )
			return selfNode;
	}
	
	return 0;
}


function find_down_by_id( selfNode, downId, begin, size )
{
	var childCount = selfNode.childNodes.length;
	
	if ( childCount )
	{
		for ( var i=0; i<childCount; ++i )
		{
			var rt = find_down_by_id_childing( selfNode.childNodes[i], downId, begin, size );
			if ( rt != 0 )
				return rt;
		}
	}
	
	return 0;
}


function find_down_by_id_childing( selfNode, downId, begin, size )
{
	var childCount = selfNode.childNodes.length;
	
	if ( childCount )
	{
		var rt = self_identify( selfNode, downId, begin, size );
		if ( rt != 0 )
			return rt;
		
		for ( var i=0; i<childCount; ++i )
		{
			var rt = find_down_by_id_childing( selfNode.childNodes[i], downId, begin, size );
			if ( rt != 0 )
				return rt;
		}
		
		return 0;
	}
	else
	{
		return self_identify( selfNode, downId, begin, size );
	}	
}


// Cross-platform Cancel link
function cancelLink(e)
{
	// if ( window.event && window.event.returnValue ) <-- returnValue 不可加入
	if ( window.event )
	{
		window.event.returnValue = false;
	}
	if ( e && e.preventDefault )
	{
		e.preventDefault();
	}
}
