
function $( id ) {
	return document.getElementById( id );
}

function isDefined( el ) {
	return ( typeof( el ) != 'undefined' );
}

function objFocus( oEl )
{
	if( oEl )
	{
		if( isDefined( oEl.focus ) )
			oEl.focus(); 
						
		if( isDefined( oEl.select ) )
			oEl.select(); 
	}
}

function elFocus( id ) 
{
	var oEl = $( id );
	
	if( oEl )
		objFocus( oEl );
}


function objEnable(oEl, bEnable)
{	
	if( oEl )
	{
		if( isDefined( oEl.disabled ) )
			oEl.disabled = !bEnable;
	}
}

function elEnable(id, bEnable)
{
	var oEl = $( id );
	
	if( oEl )
		objEnable(oEl, bEnable);
}

function objIsEnabled( oEl )
{
	if( oEl )
	{
		if( isDefined( oEl.disabled ) )
			return !oEl.disabled;
	}
		
	return false;	
}

function elIsEnabled( id )
{
	var oEl = $( id );
	
	if( oEl )
		return objIsEnabled( oEl );
	
	return false;
}

function elBlur( id )
{
	var oEl = $( id );
	
	if( oEl )
		objBlur( oEl );
}

function objBlur( oEl )
{
	if( oEl )
	{
		if( isDefined( oEl.blur ) )
			oEl.blur();
	}
}

function objCheck(oEl, bCheck)
{
	if( oEl )
	{
		if( isDefined( oEl.checked ) )
			oEl.checked = bCheck;
	}
}

function elCheck(id, bCheck)
{
	var oEl = $( id );
	
	if( oEl )
		objCheck(oEl, bCheck);
}

function objIsChecked( oEl )
{
	if( oEl )
	{
		if( isDefined( oEl.checked ) )
			return oEl.checked;
	}
	
	return false;
}

function elIsChecked( id )
{
	var oEl = $( id );
	
	if( oEl )
		return objIsChecked( oEl );
	
	return false;
}

function objClear( oEl )
{
	if( oEl )
	{
		if( isDefined( oEl.value ) )
			oEl.value = '';
	}
}

function elClear( id )
{
	var oEl = $( id );
	
	if( oEl )
		objClear( oEl );
}	

function objDisplay(oEl, bDisplay)
{
	if( oEl )
	{
		if( isDefined( oEl.style ) && isDefined( oEl.style.display ) )
			oEl.style.display = bDisplay? 'inline' : 'none';
	}
}

function elDisplay(id, bDisplay)
{
	var oEl = $( id );
	
	if( oEl )
		objDisplay(oEl, bDisplay);
}

function objVisibility(oEl, bVisible)
{
	if( oEl )
	{
		if( isDefined( oEl.style ) && isDefined( oEl.style.visibility ) )
			oEl.style.visibility = bVisible? 'visible' : 'hidden';
	}
}

function elVisibility(id, bVisible)
{
	var oEl = $( id );
	
	if( oEl )
		objVisibility(oEl, bVisible);
}

function objReadOnly(oEl, bReadOnly)
{
	if( oEl )
	{
		if( isDefined( oEl.readOnly ) )
			oEl.readOnly = bReadOnly;
		if( isDefined( oEl.tabIndex ) )
			oEl.tabIndex = ( bReadOnly )? -1 : 0;
	}
}

function elReadOnly(id, bReadOnly)
{
	var oEl = $( id );
	
	if( oEl )
		objReadOnly(oEl, bReadOnly);
}

function objSelectIndex(oEl, nIndex)
{
	if( oEl )
	{
		if(	isDefined( oEl.selectedIndex ) )
			oEl.selectedIndex = nIndex;
	}
}

function elSelectIndex(id, nIndex)
{
	var oEl = $( id );
	
	if( oEl )
		objSelectIndex(oEl, nIndex);
}

function objSetValue(oEl, sValue)
{
	if( oEl )
	{
		if( isDefined( oEl.value ) )
		{
			oEl.value = sValue;
			return true;
		}
	}
	
	return false;
}

function elSetValue(id, sValue)
{
	var oEl = $( id );
	
	if( oEl )
		return objSetValue(oEl, sValue);
	
	return false;
}

function objGetValue( oEl )
{
	if( oEl )
	{
		if( isDefined( oEl.value ) )
			return oEl.value;
	}
	
	return null;
}

function elGetValue( id )
{
	var oEl = $( id );
	
	if( oEl )
		return objGetValue( oEl );
	
	return null;
}

function elGetValueNumber( id )
{
	var nValue = elGetValue( id );
	
	if( nValue != null )
		return parseInt( nValue );
		
	return null;
}

function elGetValueFloat( id )
{
	var nValue = elGetValue( id );
	
	if( nValue != null )
		return parseFloat( nValue );
		
	return null;
}

function objFocusNext( oEl )
{ 	
	if( oEl && oEl.form && oEl.form.elements )
	{
		for (var i=0;i<oEl.form.elements.length;i++)
		{ 
			if(oEl.form.elements[i].name == oEl.name)
			{ 
				while( oEl.form.elements.length > ++i )
				{
					if( isDefined( oEl.isDisabled ) && !oEl.isDisabled )
					{
						objFocus( oEl.form.elements[i] );
						break;
					}
				}
				
				break;
			}
		}
	}
} 

function elFocusNext( id )
{
	var oEl = $( id );
	
	if( oEl )
		objFocusNext( oEl );
}

function select2text(oSelect, id_text)
{
	var oText = $( id_text );
	
	if( oSelect && oText )	
	{
		if( oSelect.selectedIndex != -1 )
		{
			if( parseInt( oSelect.value ) )
				oText.value = oSelect.options[ oSelect.selectedIndex ].id;
			else
				oText.value = '';
		}
			
	}
}

function text2select(oText, id_sel)
{
	var oSelect	= $( id_sel );

	if( oText && oSelect )
	{
		for (var i=0; i<oSelect.options.length; i++)
		{
			if(oSelect.options[i].id == oText.value)
			{
				if( oSelect.selectedIndex != i )
				{
					oSelect.selectedIndex = i;
					oSelect.onchange();
				}
				return true;
			}
		}
		
		if( oSelect.selectedIndex != -1 )
		{
			oSelect.selectedIndex = -1;		//няма съвпадение!
			oSelect.onchange();
		}	
	}
	
	return true;
}

// Поставяне на водещи символи пред стринг
// param: 	sString - стринг, който се форматира
// param: 	sLength - цялата дължина на стринга, заедно с водещите символи, по подразбиране = 8
// param:	sSymbol - водещ символ, по подразбиране  sSymbol = "0";
// result: 	форматиран стринг с водещи символи
function zero_padding (sString, sLength, sSymbol) {
	
	if (sLength) sLength = 8;
	if (sSymbol) sSymbol = '0';
	
	var numPads 	= sLength-sString.length;
	var leftPad 	= '';;
	
	for (i = 1; i<=numPads; i++)
		leftPad+=sSymbol;
	
	return leftPad+sString;
}

/**
*	Функции за закръгляне след определен брой знака след десетичната точка
*
*	@name roundUP, roundDown, round
*	@author dido2k
*	@param dNumber Числото, което ще се закръгля
*	@param nLength Брой символи след десетичната запетая
*/

function roundUP(dNumber, nLength) {
	return new Number( Math.ceil( parseFloat( dNumber ) * Math.pow(10, nLength ) ) * Math.pow( 10, -nLength ) ).toFixed( nLength );
}

function roundDown(dNumber, nLength) {
	return new Number( Math.floor( parseFloat( dNumber ) * Math.pow(10, nLength ) ) * Math.pow( 10, -nLength ) ).toFixed( nLength );
}

function round(dNumber, nLength) {
	return new Number( Math.round( parseFloat( dNumber ) * Math.pow(10, nLength ) ) * Math.pow( 10, -nLength ) ).toFixed( nLength );
}

function show_hide_loader (func) {
	//Показва панела за зареждане
	loader = $('loading');
	
	if( !loader ){
		loader = document.createElement("<DIV>");
		loader.appendChild(document.createTextNode('Зареждане ...'));
		loader.id = 'loading';
		loader.style.background = 'Maroon';
		loader.style.border = '1px solid gray';
		loader.style.textAlign = 'center';
		loader.style.color = 'White';
		loader.style.position = 'absolute';
		loader.style.width = 169;
		loader.style.height = 16;
		loader.style.bottom = 2;
		loader.style.right = 2;
		loader.style.zIndex = 1000;
		document.body.appendChild(loader);				
	}
	if( loader ) loader.style.display = (func == 1) ? 'block' : 'none';
}

/**
*	Функцията предоставя имплементация на DOM swapNode която не е имплементирана от Mozilla/Firefox
*
*	@name swapNode
*	@author dido2k
*	@param node обекта с който текушия обект ще си заменят местата
*/

if( typeof( Node ) != "undefined" )
{
	Node.prototype.swapNode = function( node ) 
	{
	    var nextSibling = this.nextSibling;
	    
	    var parentNode = this.parentNode;
	    
	    node.parentNode.replaceChild(this, node);
	    
	    parentNode.insertBefore(node, nextSibling); 
	 }
}

function attachEventListener(oElement, sEvent, fnHandler)
{
	if( typeof( window.addEventListener ) != "undefined" )
		oElement.addEventListener( sEvent, fnHandler, false);
	else if( window.attachEvent )
		oElement.attachEvent("on" + sEvent,  fnHandler);
}
