function AddEvent(obj, event, func, bubble)
{
    if (typeof obj == 'string') obj = document.getElementById(obj);
    
    bubble = !((bubble == null) || bubble)
    if (obj.addEventListener){
        obj.addEventListener(event, func, bubble); 
    } 
    else if (obj.attachEvent){
        obj.attachEvent("on" + event, func);
    }
}

function SetUniqueRadioButton(nameregex, current)
{
   re = new RegExp(nameregex);
   for(i = 0; i < document.forms[0].elements.length; i++)
   {
      elm = document.forms[0].elements[i]
      if (elm.type == 'radio')
      {
         if (re.test(elm.name))
         {
            elm.checked = false;
         }
      }
   }
   current.checked = true;
}

function SetUniqueItems(itemType, nameRegex, current, property, valueOn, valueOff)
{
   re = new RegExp(nameRegex);
   for(i = 0; i < document.forms[0].elements.length; i++)
   {
      elm = document.forms[0].elements[i]
      if (elm.type == itemType)
      {
         if (re.test(elm.name))
         {
            var evalStr = elm.name + "." + property + " = '" + valueOff + "'";
            eval(evalStr);
         }
      }
   }
   var str = "document.getElementById('" + current.id + "')." + property + " = '" + valueOn + "'";
   eval(str); 
}

function ToggleAttribute(object, attribute, value1, value2)
{
    if (eval("document.getElementById(\'" + object + "\')." + attribute + " == \'" + value1 + "\'"))
    {
        eval("document.getElementById(\'" + object + "\')." + attribute + " = \'" + value2 + "\'")   
    }
    else
    {
        eval("document.getElementById(\'" + object + "\')." + attribute + " = \'" + value1 + "\'")
    }
}


function ToggleTwoItems(object1, object2, attribute, value1, value2)
{
    if (eval("document.getElementById(\'" + object1 + "\')." + attribute + " == \'" + value1 + "\'"))
    {
        eval("document.getElementById(\'" + object1 + "\')." + attribute + " = \'" + value2 + "\'")  
        eval("document.getElementById(\'" + object2+ "\')." + attribute + " = \'" + value1 + "\'")  
    }
    else
    {
        eval("document.getElementById(\'" + object1 + "\')." + attribute + " = \'" + value1 + "\'")
        eval("document.getElementById(\'" + object2 + "\')." + attribute + " = \'" + value2 + "\'") 
    }
}

function FadeOut(Object, opacity, OnComplete, Speed)
{
    opacity = opacity ? opacity : 100;
    Speed = Speed ? Speed : 1;
    
    ChangeOpacity(document.getElementById(Object), opacity);
     
    if (opacity > 0)
    {
        opacity -= 20*Speed;
        setTimeout("FadeOut(\'"+Object+"\', "+ opacity +", "+OnComplete+", "+ Speed +")", 40);
    }
    else
    {
        try { document.getElementById(Object).style.removeAttribute('filter'); } catch (e) { }
        if (OnComplete)
            OnComplete(document.getElementById(Object));
    }
}

function FadeIn(Object, opacity, OnComplete, Speed)
{
    opacity = opacity ? opacity : 0;
    Speed = Speed ? Speed : 1;
    
    
    ChangeOpacity(document.getElementById(Object), opacity);
    
    if (opacity > 0)
    {
        opacity += 20*Speed;
        setTimeout("FadeIn(\'"+Object+"\', "+ opacity +", "+OnComplete+", "+ Speed +")", 40);
    }
    else
    {
        try { document.getElementById(Object).style.removeAttribute('filter'); } catch (e) { }
        if (OnComplete)
            OnComplete(document.getElementById(Object));
    }
}

function CrossFade(NewObject, OldObject, opacity, OnComplete, Speed)
{
    if (NewObject != OldObject)
    {
        opacity = opacity ? opacity : 0;
        Speed = Speed ? Speed : 1;

        document.getElementById(NewObject).style.visibility = 'visible'
        ChangeOpacity(document.getElementById(NewObject), opacity);
        ChangeOpacity(document.getElementById(OldObject), 100 - opacity);
        if (opacity < 100)
        {
            opacity += 20*Speed;
            setTimeout("CrossFade(\'"+NewObject+"\', \'"+OldObject+"\', "+ opacity +", "+OnComplete+", "+ Speed +")", 40);
        }
        else
        {
            try { document.getElementById(NewObject).style.removeAttribute('filter'); } catch (e) { }
            if (OnComplete)
                OnComplete(document.getElementById(NewObject), document.getElementById(OldObject));
        }
    }
}

function ChangeOpacity(object, value)
{
    // IE/Win
    object.style.filter="alpha(opacity:"+value+")"

    // Safari<1.2, Konqueror
    object.style.KHTMLOpacity=value/105

    // Older Mozilla and Firefox
    object.style.MozOpacity=value/105

    // Safari 1.2, newer Firefox and Mozilla, CSS3
    object.style.opacity=value/105
    
    if (value >= 100)
    {
        try { object.style.removeAttribute('filter'); } catch (e) { }
    }
}

function HasFlash() {
    var MM_contentVersion = 8;
    var plugin = (navigator.mimeTypes && navigator.mimeTypes["application/x-shockwave-flash"]) ? navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin : 0;
    if ( plugin ) {
		    var words = navigator.plugins["Shockwave Flash"].description.split(" ");
	        for (var i = 0; i < words.length; ++i)
	        {
		    if (isNaN(parseInt(words[i])))
		    continue;
		    var MM_PluginVersion = words[i]; 
	        }
	    var MM_FlashCanPlay = MM_PluginVersion >= MM_contentVersion;
    }
    else if (navigator.userAgent && navigator.userAgent.indexOf("MSIE")>=0 
       && (navigator.appVersion.indexOf("Win") != -1)) {
	    document.write('<SCR' + 'IPT LANGUAGE=VBScript\> \n'); //FS hide this from IE4.5 Mac by splitting the tag
	    document.write('on error resume next \n');
	    document.write('MM_FlashCanPlay = ( IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash." & MM_contentVersion)))\n');
	    document.write('</SCR' + 'IPT\> \n');
    }
    if ( MM_FlashCanPlay ) {
	    return true;
    } else{
	    return false;
    }
}

function NullWebserviceCallback(result, eventArgs)
{
}

function findX(obj)
{
	var curleft = 0;
	if(obj.offsetParent)
		while(1) 
		{
			curleft += obj.offsetLeft;
			if(!obj.offsetParent)
				break;
			obj = obj.offsetParent;
		}
	else if(obj.x)
		curleft += obj.x;
	return curleft;
}

function findY(obj)
{
	var curtop = 0;
	if(obj.offsetParent)
		while(1)
		{
			curtop += obj.offsetTop;
			if(!obj.offsetParent)
				break;
			obj = obj.offsetParent;
		}
	else if(obj.y)
		curtop += obj.y;
	return curtop;
}

function ModalPopup(Control, backgroundClass, promptClass, opacity)
{    
    if (typeof Control == 'string') Control = document.getElementById(Control);
        
    opacity = opacity ? opacity : 75
            
    var background = document.createElement("div");
    if (backgroundClass)
        background.setAttribute("class", backgroundClass);
    else
        background.setAttribute("style", "background-color: black; width: 100%; height: 100%; position: fixed; left: 0px; top: 0px; z-index: 50000;");
    ChangeOpacity(background, opacity);
        
    var prompt = document.createElement("div")
    if (promptClass)
        prompt.setAttribute("class", promptClass);
    else
        prompt.setAttribute("style", "background-color: white; position: relative; left: 50%; top: 50%; z-index: 50001");
    ChangeOpacity(prompt, 100);
        
    this.DisplayPopup = function()
    {
        clone = Control.cloneNode(true);
        clone.id = clone.id+"_clone";
        clone.style.display = 'block';
        prompt.appendChild(clone);
        background.appendChild(prompt);
        document.body.appendChild(background);
    }
    
    this.RemovePopup = function()
    {
        clone.parentNode.removeChild(clone);
        prompt.parentNode.removeChild(prompt);
        background.parentNode.removeChild(background);
    }
}

var ToClose = new Array();
document.onclick = function(e)
{
    var target = e ? e.target : event.srcElement;
    
    for(var x in ToClose)
    {
        ToClose[x].close = true;
        for (var y in ToClose[x].ClickWatch)
        {
            if (ToClose[x].ClickWatch[y] == target)
            {
                ToClose[x].close = false
            }
        }
        
        if (ToClose[x].close)
        { 
            ToClose[x].hide(ToClose[x]);
            ToClose.splice(x,1);
        }
    }
}

function HideOnClickAway(toClose, hideFunction, toWatch)
{
    toWatch = toWatch ? toWatch : new Array();
    
    if (toClose.constructor != Array)
    {
        toClose = new Array(toClose);
    }
    
    if (toWatch.constructor != Array)
    {
        toWatch = new Array(toWatch);
    }

    
    for (var i in toClose)
    {
        RemoveFromClickAway(toClose[i]);
        
        hideFunction = hideFunction ? hideFunction : function() { toClose[i].style.display = 'none'; };

        if (typeof toClose[i] == 'string') toClose[i] = document.getElementById(toClose[i]);

        toClose[i].hide = hideFunction;
        toWatch.push(toClose[i]);

        for (var x in toWatch)
        {
            if (typeof toWatch[x] == 'string') toWatch[x] = document.getElementById(toWatch[x]);
        }

        toClose[i].ClickWatch = toWatch;

        ToClose.push(toClose[i]);
    }
}

function RemoveFromClickAway(obj)
{
    if (typeof obj != 'string')
        obj = obj.id
        
    for(var i in ToClose)
    {
        if (ToClose[i].id == obj)
            ToClose.splice(i,1);
    }
}