﻿function registerNamespace(ns)
{
    var parts = ns.split(".");
    var root = window;

    for(var i = 0; i < parts.length; i++)
    {
        if(!root[parts[i]])
        {
            root[parts[i]] = new Object();
        }

        root = root[parts[i]];
    }
}

registerNamespace('Associates.Util');

Associates.Util.getElementsByTagAndClass = function(tag, class_name, parent_element)
{
    if(!parent_element){ parent_element = document; }
    
    var tags = parent_element.getElementsByTagName(tag);
   
    var class_tags = new Array();

    var class_regex = new RegExp("\\b" + class_name + "\\b");
    for (var i = 0; i < tags.length; i++)
    {
        if(tags[i].className.match(class_regex))
        {
            class_tags.push(tags[i]);
        }
    }
    
    return class_tags;
}

Associates.Util.findAncestor = function(child, test)
{
    var test_func;

    if(typeof test == 'object')
    {
        test_func = function(obj){ return obj == test };
    }
    else if (typeof test == 'string')
    {
        test_func = function(obj){ return obj.nodeName == test };
    }
    else
    {
        test_func = test;
    }

    while(child && !test_func(child))
    {
        child = child.parentNode;
    }

    return child;
}

Associates.Util.getSelectedRadio = function(form, radioName)
{
    if (typeof form == 'string') { form = document.forms[form]; }

    for (var i = 0; i < form[radioName].length; i++)
    {
        if (form[radioName][i].checked)
        {
            return form[radioName][i].value;
        }
    }
    
    return undefined;
}


function AttachEventListener(object, event, handler, useCapture)
{
    if( !useCapture )
    {
        useCapture = false;
    }

    if( object.addEventListener )
    {
        object.addEventListener(event, handler, useCapture);
    }
    else
    {
        object.attachEvent('on' + event, handler);
    }
}


registerNamespace('Assoc.DOMEvent');
Assoc.DOMEvent.AddHandler = function(object, event, handler, context)
{
    var event_handler;
    if(context) 
        event_handler = function(event){ handler.call(context, event) };
    else
        event_handler = handler;

    AttachEventListener(object, event, event_handler);
}

function GetEventTarget(event)
{
    return (event.target)? event.target : event.srcElement;
}

//borrowed from quirksmode. Stops event bubbling.
function StopEventPropagation(event)
{
    if(!event) { event = window.event; }

    //MSIE
    event.cancelBubble = true;

    //w3c
    if(event.stopPropagation) { event.stopPropagation(); }
}

function StopEventDefault(event)
{
    if(!event) { event = window.event; }

    //MSIE
    event.returnValue = false;

    //w3c
    if(event.preventDefault) { event.preventDefault() };
}

//does both StopEventPropogation and StopEventDefault
function StopEvent(event)
{
    StopEventDefault(event);
    StopEventPropagation(event);
}

function mouseOverFromElement(event)
{
    return (event.relatedTarget)? event.relatedTarget : event.fromTarget;
}

function mouseOutToElement(event)
{
    return (event.relatedTarget)? event.relatedTarget : event.toTarget;
}


var wImages;
var link = document.getElementById('imageViewerLink');

function openImageViewer(event)
{
    if (wImages == null || wImages.closed)
    {
        wImages = window.open(link.href, 'ImageView',
            'width=625,height=700,scrollbars,resizable');
    }
    else
    {
        wImages.location = link.href;
    }
    wImages.focus();
    return false;
}

AttachEventListener(link, 'click', openImageViewer);
