function JWM_CancelEvent(e) {
	e.cancelBubble = true;
	if (e.stopPropagation) 
		e.stopPropagation();
	if (e.preventDefault) 
		e.preventDefault();	
}
function JWM_AddEventListener(eventSource,eventName,eventTarget,eventFunction) {
    if (navigator.appName.indexOf("Microsoft")>=0) {
        if (eventTarget) {
            eventSource.attachEvent('on'+eventName,function(e) {
                return eventTarget[eventFunction]();
            },false);
        } else {
            eventSource.attachEvent('on'+eventName,function(e) {
                return window[eventFunction](e);
            },false);
        }
    } else {
        if (eventTarget) {
            eventSource.addEventListener(eventName,function(e) {
                return eventTarget[eventFunction]();
            },false);
        } else {
            eventSource.addEventListener(eventName,function(e) {
                return window[eventFunction](e);
            },false);
        }
    }
}

function getElementParentsAsArray2(t) {
    var res = [];
    var p = t;
    while (p!=null && p!=document) {
        if (p.id!=null && p.id.length>0) {
            res.push(p);
        }
        p = p.parentNode;
    }
    if (res.length==1) {
        return [document.forms[0]];
    }
    return res;
}
function getElementParentsAsHash2(t) {
    var res = new Object();
    var p = t;
    var i = 1;
    while (p!=null && p!=document.body) {
        if (p.id!=null && p.id.length>0) {
            res[p.id] = i++;
        }
        p = p.parentNode;
    }
    return res;
}
function array_merge(arr1,arr2) {
    var res = [];
    for (var i=0;i<arr1.length;i++) {
        res.push(arr1[i]);
    }
    for (var i=0;i<arr2.length;i++) {
        res.push(arr2[i]);
    }    
    return res;
}
function getClosestButtonsWithNameInParent(target,bName,pName) {
    var btns = document.getElementsByTagName("INPUT");
    btns = array_merge(btns,document.getElementsByTagName("A"));
    var buttons = [];
    var tNames = target.name.split('$');
    for (var i=0;i<btns.length;i++) {
        var bt = btns[i];
        if (bt.id==null) continue;
        var n = bt.id.split('_').pop();
        if (n!=bName || bt.id.substr(0,pName.length)!=pName) continue;
        var tempArr = [];
        buttons[bt.id] = 0;
        for (var j=0;j<tNames.length;j++) {
            tempArr.push(tNames[j]);
            var tempStr = tempArr.join('_');
            if (bt.id.substr(0,tempStr.length)==tempStr)
                buttons[bt.id] = j;
        }
    }
    
    var bestButtons = [];
    var bestDepth = 0;
    for (var o in buttons) {
        if  (bestDepth<buttons[o]) {
            bestButtons = [o];
            bestDepth = buttons[o];
        } else if (bestDepth==buttons[o]) {
            bestButtons.push(o)
        }
    }
    return bestButtons;
}

