function mailto(u,d)
{
    if (typeof d == 'undefined' || d.length == 0)
        location = 'mailto:' + u + "@granoff.net";
    else
        location = 'mailto:' + u + "@" + d;
}

function CookiesEnabled()
{
    var cookieEnabled=(navigator.cookieEnabled)? true : false;

    //if not IE4+ nor NS6+
    if (typeof navigator.cookieEnabled=="undefined" && !cookieEnabled)
    { 
        document.cookie="testcookie";
        cookieEnabled=(document.cookie.indexOf("testcookie")!=-1)? true : false;
    }
  
    return cookieEnabled;
}

function createCookie(name,value,days)
{
    if (days)
    {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name)
{
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++)
    {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

function eraseCookie(name)
{
    createCookie(name,"",-1);
}

// cross-browser event handling for IE5+, NS6+ and Mozilla/Gecko
// By Scott Andrew
function addEvent(obj, evType, fn, useCapture) 
{
    if (obj.addEventListener) {
        obj.addEventListener(evType, fn, useCapture);
        return true;
    } else if (obj.attachEvent) {
        var r = obj.attachEvent('on' + evType, fn);
        return r;
    } else {
        obj['on' + evType] = fn;
    }
    return true;
}

function removeEvent(obj, evType, fn, useCapture)
{
    if (obj.removeEventListener) {
        obj.removeEventListener(evType, fn, useCapture);
        return true;
    }
    else if (obj.detachEvent) {
        var r = obj.detachEvent('on' + evType, fn);
        return r;
    }
}

function find_target(e)
{
    var target; 

    if (window.event && window.event.srcElement) 
        target = window.event.srcElement;
    else if (e && e.target)
        target = e.target;
    if (!target)
        return null;

    while (target != document.body &&
           target.nodeName.toLowerCase() != 'a')
        target = target.parentNode;

    if (target.nodeName.toLowerCase() != 'a')
        return null;

    return target;
}

// A non-tag-specific version
function _findTarget(e)
{
    var target = null;

    if (window.event && window.event.srcElement) 
        target = window.event.srcElement;
    else if (e && e.target)
        target = e.target;
    if (!target)
        return null;
    return target;
}

function cancelEvent(e)
{
    if (window.event) {
        window.event.cancelBubble = true;
        window.event.returnValue = false;
    }
    if (e && e.stopPropagation && e.preventDefault) {
        e.stopPropagation();
        e.preventDefault();
    }
}

Function.prototype.bind = function(obj) 
{
    var method = this,
    temp = function() {
        return method.apply(obj, arguments);
    };
 
    return temp;
} 

function destroyElementTree(e)
{
    while (e.hasChildNodes()) {
        e.removeChild( e.firstChild );
    }
}

// Three functions from http://brainerror.net/scripts_js_blendtrans.php
// for working with element opacity.

function opacity(id, opacStart, opacEnd, millisec, finalCallback) 
{
    //speed for each frame
    var speed = Math.round(millisec / 100);
    var timer = 0;

    //determine the direction for the blending, if start and end are the same nothing happens
    if(opacStart > opacEnd) {
        for(i = opacStart; i >= opacEnd; i--) {
            setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
            timer++;
        }
    } else if(opacStart < opacEnd) {
        for(i = opacStart; i <= opacEnd; i++)
            {
            setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
            timer++;
        }
    }
    if (finalCallback)
        setTimeout(finalCallback, (timer * speed));

}

//change the opacity for different browsers
function changeOpac(opacity, id) {
    var object = document.getElementById(id).style;
    object.opacity = (opacity / 100);
    object.MozOpacity = (opacity / 100);
    object.KhtmlOpacity = (opacity / 100);
    object.filter = "alpha(opacity=" + opacity + ")";
} 

function shiftOpacity(id, millisec) {
    //if an element is invisible, make it visible, else make it ivisible
    if(document.getElementById(id).style.opacity == 0) {
        opacity(id, 0, 100, millisec);
    } else {
        opacity(id, 100, 0, millisec);
    }
} 

