Type.registerNamespace("Veratta.Web.UI");

Veratta.Web.UI.Links = {
    externalLinks: function() { 
        if (!document.getElementsByTagName) return; 
        var anchors = document.getElementsByTagName("a"); 
        for (var i=0; i<anchors.length; i++) { 
            var anchor = anchors[i]; 
            if (anchor.getAttribute("href") && 
            anchor.getAttribute("rel") == "external") 
                anchor.target = "_blank"; 
        }
    },
    
    fixAllLinks: function() {
        var allLinks = document.getElementsByTagName('a');
        for (var i=0;i<allLinks.length;i++) {
            var lnk = allLinks[i];
            if ((lnk.href && lnk.href.indexOf('#') != -1) && 
            ( (lnk.pathname == location.pathname) ||
            ('/'+lnk.pathname == location.pathname) ) && 
            (lnk.search == location.search)) {
                $addHandler(lnk,'click',Veratta.Web.UI.Links.smoothScroll);
            }
        }
    },
  
    smoothScroll: function(e) {
        e = e || fixEvent(e);
        target = e.target || e.srcElement;

        if (target.nodeName.toLowerCase() != 'a') {
            target = target.parentNode;
        }

        if (target.nodeName.toLowerCase() != 'a') return;

        anchor = target.hash.substr(1);
        var allLinks = document.getElementsByTagName('a');
        var destinationLink = null;
        for (var i=0;i<allLinks.length;i++) {
            var lnk = allLinks[i];
            if (lnk.id && (lnk.id == anchor)) {
                destinationLink = lnk;
                break;
            }
        }

        if (!destinationLink) return true;

        var destx = destinationLink.offsetLeft; 
        var desty = destinationLink.offsetTop;
        var thisNode = destinationLink;
        while (thisNode.offsetParent && 
        (thisNode.offsetParent != document.body)) {
            thisNode = thisNode.offsetParent;
            destx += thisNode.offsetLeft;
            desty += thisNode.offsetTop;
        }

        clearInterval(Veratta.Web.UI.Links.Interval);

        cypos = Veratta.Web.UI.Links.getCurrentYPos();

        stepSize = parseInt((desty-cypos)/Veratta.Web.UI.Links.Steps);
        Veratta.Web.UI.Links.Interval =
        setInterval('Veratta.Web.UI.Links.scrollWindow('+stepSize+','+desty+',"'+anchor+'")',10);

        if (e && e.preventDefault && e.stopPropagation) {
            e.preventDefault();
            e.stopPropagation();
        }
    },
  
    scrollWindow: function(scramount,dest,anchor) {
        wascypos = Veratta.Web.UI.Links.getCurrentYPos();
        isAbove = (wascypos < dest);
        window.scrollTo(0,wascypos + scramount);
        iscypos = Veratta.Web.UI.Links.getCurrentYPos();
        isAboveNow = (iscypos < dest);
        if ((isAbove != isAboveNow) || (wascypos == iscypos)) {
            window.scrollTo(0,dest);
            clearInterval(Veratta.Web.UI.Links.Interval);
            location.hash = anchor;
        }
    },
  
    getCurrentYPos: function() {
        if (document.body && document.body.scrollTop)
          return document.body.scrollTop;
        if (document.documentElement && document.documentElement.scrollTop)
          return document.documentElement.scrollTop;
        if (window.pageYOffset)
          return window.pageYOffset;
        return 0;
    }
}

Veratta.Web.UI.Links.Steps = 7;


Veratta.Web.UI.Messaging = {
    show: function(target, displayElement, className, message){
        var target = $get(target);
        var position = Sys.UI.DomElement.getLocation(target);
        var displayElement = $get(displayElement);
        displayElement.style.top = (position.y-30)+"px";
        displayElement.style.left = (position.x)+"px";
        Sys.UI.DomElement.addCssClass(displayElement, className);
        displayElement.innerText = message;
        Effect.Appear(displayElement);
        setTimeout("Veratta.Web.UI.Messaging.hide('" + displayElement.id + "');", 5000);
    },
    
    hide: function(displayElement){
        var displayElement = $get(displayElement);
        Effect.Fade(displayElement);
    }
}

// event object normalization
function fixEvent(e) {
    e.preventDefault = fixEvent.preventDefault;
    e.stopPropagation = fixEvent.stopPropagation;
    return e;
}

fixEvent.preventDefault = function() {
    this.returnValue = false;
}

fixEvent.stopPropagation = function() {
    this.cancelBubble = true;
}

function stopPropagation(e)
{
    e.cancelBubble = true;
    if (e.stopPropagation)
    {
        e.stopPropagation();
    }
}

function isDOMReady() {
    if ( domReady.done ) return false;
    
    if ( document && document.getElementsByTagName && 
        document.getElementById && document.body ) {
        clearInterval( domReady.timer );
        domReady.timer = null;
        
        for ( var i = 0; i < domReady.ready.length; i++ ){
            domReady.ready[i]();
        }
        
        domReady.ready = null;
        domReady.done = true;
    }
}

function domReady( f ){
    if ( domReady.done ) return f();
    
    if ( domReady.timer ) { 
        domReady.ready.push( f );
    } else {
        $addHandler( window, "load", isDOMReady );
        domReady.ready = [ f ];
        domReady.timer = setInterval( isDOMReady, 13 );
    }
}

var $show = Veratta.Web.UI.Messaging.show;
var $hide = Veratta.Web.UI.Messaging.hide;

$addHandler(window, "load", Veratta.Web.UI.Links.externalLinks);
$addHandler(window, "load", Veratta.Web.UI.Links.fixAllLinks);    