// some helper code
function GetBasePath()
{
	return location.href.substr(0,location.href.lastIndexOf("/") + 1);
}

// Constants
var EXCEPTIONLEVEL_UNKNOWN = 0;
var EXCEPTIONLEVEL_INFO = 1;
var EXCEPTIONLEVEL_WARNING = 2;
var EXCEPTIONLEVEL_CRITICAL = 3;

// Event system helper code
function RecursiveDOMLocator( vWindow, vDOMLoc )
{
	try
	{
	    if (vWindow.id != "" && vWindow.id != undefined && vWindow.id != "undefined")
	    {
	        if( vDOMLoc == "" )
	            vDOMLoc = vWindow.id;
	        else
	            vDOMLoc = vWindow.id + "." + vDOMLoc;
        }
        else if (vWindow.frameElement != null && vWindow.frameElement.id != undefined && vWindow.frameElement.id != "undefined")
        {
            
            if( vDOMLoc == "" )
                vDOMLoc = vWindow.frameElement.id;
	        else
	            vDOMLoc = vWindow.frameElement.id + "." + vDOMLoc;
        }
        
		if( vWindow.parent != undefined && vWindow.parent != vWindow )
			vDOMLoc = RecursiveDOMLocator( vWindow.parent, vDOMLoc );
	} 
	catch(e)
	{
	
	}
	
	return vDOMLoc;
}

function GetDOMLocation()
{	
	var vDOMLoc = "";

    vDOMLoc = RecursiveDOMLocator( window, vDOMLoc );

    try
    {
        var obj = top.document;
        
        //if (vDOMLoc != "")
          //  vDOMLoc = "." + vDOMLoc

	    return /*"top" + */vDOMLoc;
    }
    catch(e)
    {
        return vDOMLoc;
    }
}

// boolean helper function
function ToBool( vParam )
{
	if( vParam == true || vParam == false )
		return vParam;
		
	if( vParam == "true" )
		return true;
	else if( vParam == "false" )
		return false;
		
	return false;
}

// string helper fuctions
function String_Reverse( str )
{
	var strRev = "";
	for( var i = str.length - 1; i >= 0 ; i-- )
	{
		strRev += str.charAt(i);
	}
	
	return strRev;
}
	
// <select> element helper functions
function Select_RemoveOptionByValue( vSelect, vOptionValue )
{
	if( vSelect.nodeName != "SELECT" )
		throw "Select_RemoveOptionByValue expects a SELECT element";
		
	for( var i = 0; i < vSelect.length; i++ )
	{
		if( vSelect.options[i].value == vOptionValue )
		{
			vSelect.remove( i );
			return;
		}
	}
}

function Select_RemoveOptionByText( vSelect, vOptionText )
{
	if( vSelect.nodeName != "SELECT" )
		throw "Select_RemoveOptionByValue expects a SELECT element";
		
	for( var i = 0; i < vSelect.length; i++ )
	{
		if( vSelect.options[i].text == vOptionText )
		{
			vSelect.remove( i );
			return;
		}
	}
}

function Select_SelectOptionByValue( vSelect, vOptionValue )
{
	if( vSelect.nodeName != "SELECT" )
		throw "Select_RemoveOptionByValue expects a SELECT element";
		
	for( var i = 0; i < vSelect.length; i++ )
	{
		if( vSelect.options[i].value == new String(vOptionValue) )
		{
			vSelect.selectedIndex = i;
			return;
		}
	}
}

function Select_SelectOptionByText( vSelect, vOptionText )
{
	if( vSelect.nodeName != "SELECT" )
		throw "Select_RemoveOptionByValue expects a SELECT element";
		
	for( var i = 0; i < vSelect.length; i++ )
	{
		if( vSelect.options[i].text == new String(vOptionText) )
		{
			vSelect.selectedIndex = i;
			return;
		}
	}
}

function Select_SelectOptionByProperty( vSelect, vOptionText, strProperty )
{
	if( vSelect.nodeName != "SELECT" )
		throw "Select_RemoveOptionByValue expects a SELECT element";
		
	for( var i = 0; i < vSelect.length; i++ )
	{
		if( vSelect.options[i][strProperty] == new String(vOptionText) )
		{
			vSelect.selectedIndex = i;
			return;
		}
	}
}

function Select_MultipleSelectOptionByValue( vSelect, vOptionValue )
{
	if( vSelect.nodeName != "SELECT" )
		throw "Select_MultipleSelectOptionByValue expects a SELECT element";
		
	for( var i = 0; i < vSelect.length; i++ )
	{
		if( vSelect.options[i].value == new String(vOptionValue) )
		{
			vSelect.options[i].selected = true;
			return;
		}
	}
}

function Select_MultipleSelectOptionByText( vSelect, vOptionText )
{
	if( vSelect.nodeName != "SELECT" )
		throw "Select_MultipleSelectOptionByText expects a SELECT element";
		
	for( var i = 0; i < vSelect.length; i++ )
	{
		if( vSelect.options[i].text == new String(vOptionText) )
		{
			vSelect.options[i].selected = true;
			return;
		}
	}
}

function Select_OptionValueExists( vSelect, vOptionValue )
{
	if( vSelect.nodeName != "SELECT" )
		throw "Select_OptionValueExists expects a SELECT element";
		
	for( var i = 0; i < vSelect.length; i++ )
	{
		if( vSelect.options[i].value == vOptionValue )
		{
			return true;
		}
	}
	return false;
}

function Select_OptionTextExists( vSelect, vOptionText )
{
	if( vSelect.nodeName != "SELECT" )
		throw "Select_OptionTextExists expects a SELECT element";
		
	for( var i = 0; i < vSelect.length; i++ )
	{
		if( vSelect.options[i].text == vOptionText )
		{
			return true;
		}
	}
	return false;
}

function Select_GetOptionTextByOptionValue( vSelect, vOptionValue )
{
	if( vSelect.nodeName != "SELECT" )
		throw "Select_GetOptionTextByOptionValue expects a SELECT element";
		
	for( var i = 0; i < vSelect.length; i++ )
	{
		if( vSelect.options[i].value == vOptionValue )
		{
			return vSelect.options[i].text;
		}
	}
	
	return "";
}

function Select_GetOptionValueByOptionText( vSelect, vOptionText )
{
	if( vSelect.nodeName != "SELECT" )
		throw "Select_GetOptionValueByOptionText expects a SELECT element";
		
	for( var i = 0; i < vSelect.length; i++ )
	{
		if( vSelect.options[i].text == vOptionText )
		{
			return vSelect.options[i].value;
		}
	}
	
	return "";
}

function Select_GetIndexByOptionValue( vSelect, vOptionValue )
{
	if( vSelect.nodeName != "SELECT" )
		throw "Select_GetIndexByOptionValue expects a SELECT element";
		
	for( var i = 0; i < vSelect.length; i++ )
	{
		if( vSelect.options[i].value == vOptionValue )
		{
			return i;
		}
	}
	
	return -1;
}

function Select_GetIndexByOptionText( vSelect, vOptionText )
{
	if( vSelect.nodeName != "SELECT" )
		throw "Select_GetIndexByOptionText expects a SELECT element";
		
	for( var i = 0; i < vSelect.length; i++ )
	{
		if( vSelect.options[i].text == vOptionText )
		{
			return i;
		}
	}
	
	return -1;
}

function GenerateGuid()
{
	// Create a random client side string with guid formatting
	// normal guid :		d1a3c6eb-043b-47a4-a674-436bd28513ef
	// client random guid : 11406196-1681-0370-8793-803141905370
	var now = new Date();
	var rand = Math.random().toString();
	var gGuid = now.getTime() + rand.substr( rand.indexOf( "." ) + 1 ) + rand.substr( rand.indexOf( "." ) + 1 );
	gGuid = gGuid.substring( 0, 8 ) + "-" + gGuid.substring( 8, 12 ) + "-" + gGuid.substring( 12, 16 ) + "-" + gGuid.substring( 16, 20 ) + "-" + gGuid.substring( 20, 32 )
	
	return gGuid;
}