var userAgent = navigator.userAgent.toLowerCase();
var isExplorer = document.all && userAgent.indexOf('msie') != -1 && parseInt(navigator.appVersion) >= 4;
var selectors = new Array;
var date = new Date;
selectors.realLength = 0;

window.onload = initPage;

function getBrowser() 
{
	var agt=navigator.userAgent.toLowerCase();
	if (agt.indexOf("opera") != -1) return 'Opera';
	
	if (agt.indexOf("firefox") != -1) return 'Firefox';
	if (agt.indexOf("safari") != -1) return 'Safari';
	if (agt.indexOf("msie") != -1) return 'Internet Explorer';
	if (agt.indexOf("netscape") != -1) return 'Netscape';
	if (agt.indexOf("mozilla/5.0") != -1) return 'Mozilla';
	if (agt.indexOf('\/') != -1) 
	{
		if (agt.substr(0,agt.indexOf('\/')) != 'mozilla') 
		{
			return navigator.userAgent.substr(0,agt.indexOf('\/'));
		}
		else 
			return 'Netscape';
	} 
	else if (agt.indexOf(' ') != -1)
		return navigator.userAgent.substr(0,agt.indexOf(' '));
	else 
		return navigator.userAgent;
}

function isIE()
{
	if (navigator.appName == "Microsoft Internet Explorer")
	{
		return true;
	}
	
	return false;
}

function setLocation(path)
{
    document.location = path;
}	

function showElement(element)
{
	document.getElementById(element).style.display = 'block';
}

function showHiddenElement(element)
{
	document.getElementById(element).style.display = (document.getElementById(element).style.display == 'block' ? 'none' : 'block');
}

function hideElement(element)
{
	document.getElementById(element).style.display = 'none';
}

function changeClass(elem, newclass)
{
	document.getElementById(elem).className = newclass;
}

function toggleElement(hide, show)
{
	document.getElementById(hide).style.display = 'none';
	
	if (isIE())
	{
		document.getElementById(show).style.display = 'block'; 
	}
	else
	{	
		document.getElementById(show).style.display = 'table-row';
	}
}

function editDescription()
{
	document.getElementById('DescriptionBox').style.display = 'none';
	document.getElementById('DescriptionEditBox').style.display = 'block';
}

function alterClass (obj, altobj)
{
	obj.value = '';
	obj.className = 'register_enter';
	
	if (obj.name == "regPassword")
	{
		document.getElementById(altobj).innerHTML="<input type=\"password\" name=\"regPassword\" id=\"regPassword\" size=\"30\" />";
		document.getElementById('regPassword').focus();
		document.getElementById('regPassword').select();
	}
}

function closeMessageBox()
{
    document.getElementById('messageBox').style.display = 'none';
}

function toggleExpand(elementTitle)
{
    document.getElementById('expandLink').innerHTML =
        (document.getElementById('expandLink').innerHTML == 'expand' ? 'collapse' : 'expand');

    var elements = document.getElementsByTagName('span');

    for (var i = 0; i < elements.length; i++)
    {
        if (elements[i].getAttribute('title') == elementTitle)
        {
            elements[i].style.display = (elements[i].style.display == 'none' ? '' : 'none');
        }
    }
}

function toggleSelected()
{
    var key = this.value;

    if (!selectors[key])
    {
        selectors[key] = this.parentNode.parentNode;
        selectors[key].altClass = selectors[key].className;
        selectors.realLength++;
    }

    if (selectors.prevNode && this.type == 'radio')
    {
        if (selectors.prevNode.altClass == 'rowUpdatedSel')
        {
            selectors.prevNode.className = 'rowUpdated';
        }
        else
        {
            selectors.prevNode.className = selectors.prevNode.altClass;
        }
    }

    selectors.prevNode = selectors[key];

    if (this.checked)
    {
        selectors[key].className = (selectors[key].className == 'rowUpdated' ? 'rowUpdatedSel' : 'alt3');
    }
    else
    {
        selectors[key].className = selectors[key].altClass;
        delete selectors[key];

        selectors.realLength--;
    }

    if (!this.form.submitButton.valueDefault)
    {
        this.form.submitButton.disabled =
            ((selectors.realLength && this.type == 'checkbox') || this.checked ? false : true);
        this.form.elements['do'].disabled =
            ((selectors.realLength && this.type == 'checkbox') || this.checked ? false : true);
    }
}

function initXmlHttp()
{
    try
    {
        httpRequest = new ActiveXObject('Microsoft.XMLHTTP');
    }
    catch(e)
    {
        httpRequest = new XMLHttpRequest();

        if (!httpRequest.setRequestHeader)
        {
            httpRequest = null;
        }
    }
}

function fetchAttribute(obj, attribute)
{
    if (isExplorer)
    {
        return (obj.attributes[attribute] ? obj.attributes[attribute].nodeValue : '');
    }
    else
    {
        return obj.getAttribute(attribute);
    }
}

function initPage()
{
    initXmlHttp();

    var forms = document.getElementsByTagName('form');

    for (var i = 0; i < forms.length; i++)
    {
        var elements = forms[i].elements;

        if (httpRequest && fetchAttribute(forms[i], 'name') == 'ajax')
        {
            forms[i].onsubmit = prepareRequest;
        }

        for (var j = 0; j < elements.length; j++)
        {
            if (elements[j].type == 'radio' || elements[j].type == 'checkbox')
            {
                elements[j].className = (elements[j].className ? elements[j].className + ' ' : '') + 'checkbox';
            }

            if ((elements[j].getAttribute('name') == 'id' || elements[j].getAttribute('name') == 'ids[]')
                && (elements[j].type == 'radio' || elements[j].type == 'checkbox'))
            {
                elements[j].setAttribute('id', elements[j].value);
                elements[j].setAttribute('title', 'ID: ' + elements[j].value);
                elements[j].onclick = toggleSelected;

                for (var x = 0; x < elements[j].parentNode.parentNode.getElementsByTagName('td').length; x++)
                {
                    if (elements[j].parentNode.parentNode.getElementsByTagName('td')[x].getElementsByTagName('input').length)
                    {
                        continue;
                    }

                    elements[j].parentNode.parentNode.getElementsByTagName('td')[x].ondblclick = function()
                    {
                        if (this.parentNode.getElementsByTagName('input')[0].style.display != 'none')
                        {
                            this.parentNode.getElementsByTagName('input')[0].checked = (this.parentNode.getElementsByTagName('input')[0].checked ? false : true);
                            this.parentNode.getElementsByTagName('input')[0].onclick();
                        }
                    }
                }
            }

            if (elements[j].type == 'submit')
            {
                forms[i].submitButton = elements[j];

                if (httpRequest && fetchAttribute(forms[i], 'name') == 'ajax')
                {
                    if (!forms[i].getAttribute('id'))
                    {
                        forms[i].setAttribute('id', 'formID' + i);
                    }

                    forms[i].submitButton.submitHandler = submitHandler;
                }
            }

            if (httpRequest && fetchAttribute(forms[i], 'name') == 'ajax')
            {
                if (elements[j].type == 'text' && elements[j].getAttribute('autocomplete') == 'off')
                {
                    elements[j].form.acInput = elements[j];

                    elements[j].onkeyup = prepareAcRequest;
                    elements[j].onclick = function()
                    {
                        this.select();
                    }

                    elements[j].onkeydown = function(e)
                    {
                        var event = (window.event ? window.event : e);

                        if (event.keyCode == 13)
                        {
                            if (!this.getAttribute('id') && !this.value)
                            {
                                document.location = document.location.pathname;
                            }

                            acNoSubmit = 1;
                        }
                    }
                }
            }
        }
    }

    if (document.getElementById('expandLink'))
    {
        document.getElementById('expandLink').onclick = function()
        {
            toggleExpand('description');
        }
    }

    if (document.getElementsByName('selectAll').length)
    {
        for (var i = 0; i < document.getElementsByName('selectAll').length; i++)
        {
            document.getElementsByName('selectAll')[i].onclick = function()
            {
                var inputs = this.form.getElementsByTagName('input');

                for (var i = 0; i < inputs.length; i++)
                {
                    if (inputs[i].type == 'checkbox' && (inputs[i].name == 'id' || inputs[i].name == 'ids[]'))
                    {
                        inputs[i].checked = this.checked;
                        inputs[i].onclick();
                    }
                }
            }
        }
    }
}

function findPosition( oElement ) 
{
  if( typeof( oElement.offsetParent ) != 'undefined' ) {
    for( var posX = 0, posY = 0; oElement; oElement = oElement.offsetParent ) {
    	
      	posX += oElement.offsetLeft;
      	posY += oElement.offsetTop;
      	
    }
    return [ posX, posY ];
  } else {
    return [ oElement.x, oElement.y ];
  }
}

function inArray(needle, haystack)
{
	for (var x=0; x < haystack.length; x++)
	{
		if (haystack[x] == needle)
		{
			return true;
		}
	}
	
	return false;
}

function getY( oElement )
{
	var iReturnValue = 0;
	while( oElement != null ) 
	{

		iReturnValue += oElement.offsetTop;
		oElement = oElement.offsetParent;
	}
	
	if (isExplorer)
	{
		return iReturnValue + 10;
	}
		
	return iReturnValue;
	
}

function getParameter(name) {
   var url = window.location.href;
   var paramsStart = url.indexOf("?");

   if(paramsStart != -1){

      var paramString = url.substr(paramsStart + 1);
      var tokenStart = paramString.indexOf(name);

      if(tokenStart != -1){

         paramToEnd = paramString.substr(tokenStart + name.length + 1);
         var delimiterPos = paramToEnd.indexOf("&");

         if(delimiterPos == -1){
            return paramToEnd;
         }
         else {
            return paramToEnd.substr(0, delimiterPos);
         }
      }
   }
}

function getQueryStringValue( name )
{  
	name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");  
	var regexS = "[\\?&]"+name+"=([^&#]*)";  
	var regex = new RegExp( regexS );  
	var results = regex.exec( window.location.href );  
	
	if( results == null )    
		return "";  
	else    
	
	return results[1];
}

function URLDecode(str)
{
   // Replace + with ' '
   // Replace %xx with equivalent character
   // Put [ERROR] in output if %xx is invalid.
   var HEXCHARS = "0123456789ABCDEFabcdef"; 
   var encoded = str
   var plaintext = "";
   var i = 0;
   while (i < encoded.length) {
       var ch = encoded.charAt(i);
	   if (ch == "+") {
	       plaintext += " ";
		   i++;
	   } else if (ch == "%") {
			if (i < (encoded.length-2) 
					&& HEXCHARS.indexOf(encoded.charAt(i+1)) != -1 
					&& HEXCHARS.indexOf(encoded.charAt(i+2)) != -1 ) {
				plaintext += unescape( encoded.substr(i,3) );
				i += 3;
			} else {
				alert( 'Bad escape combination near ...' + encoded.substr(i) );
				plaintext += "%[ERROR]";
				i++;
			}
		} else {
		   plaintext += ch;
		   i++;
		}
	} // while
   return plaintext;
};
