/**
 *		Lots of useful functions
 *		------------------------
 */
function getById( _id ) {
	return document.getElementById( _id );
}

function getByClass( _class, element, objects ) {
	if ( ! objects )
		objects = [];
		
	if ( ! element ) {
        var _elements = document.body.childNodes;
	} else {
        var _elements = element.childNodes;
	}
	
	if ( _elements.length > 0 ) {
        for ( var i in _elements ) {
		    if ( _elements[i] ) {
		        if ( typeof _elements[i].nodeName !== 'undefined' &&
					 _elements[i].nodeName !== '#text' &&
					 _elements[i].nodeName !== '#comment' &&
					 _elements[i].nodeName !== 'SCRIPT' ) {
					
					if ( _elements[i].className.indexOf(' ') !== -1 ) {
						class_names = _elements[i].className.split(' ');

						for ( j in class_names ) {
							if ( class_names[j] == _class )
								objects.push( _elements[i] );
						}
					} else {
						if ( _elements[i].className == _class )
							objects.push( _elements[i] );
					}
					
	                if ( _elements[i].childNodes.length > 0 ) {
	                    getByClass( _class, _elements[i], objects );
					}
				}
			}
		}
	}
	return objects;
}

function getBy( attr ) {
	var ipat = /^(#)/;
	var cpat = /^(.)/;
	
	if ( ipat.test( attr ) ) {
		_id = attr.replace( '#', '' );
		return getById( _id );
	}
	else {
		_cl = attr.replace( '.', '' );
		return getByClass( _cl );
	}
}

function getChildren( element, node_name ) {
	var childs	= [];
	var nodes	= element.childNodes;

	for ( var i = 0; i < nodes.length; i++ ) {
		if ( nodes[i].nodeName == node_name )
			childs.push( nodes[i] );
	}
	return childs;
}

function cloneObj( el ) {
	var newObj = el.cloneNode(false);
	var childs = el.childNodes;

	if ( childs.length > 0 ) {
		for ( var i=0; i < childs.length; i++ ) {
			newNode = cloneObj( childs[i] );
			if ( newNode )	
				newObj.appendChild( newNode );
		}
	}
	return newObj;
}

// This function inserts newNode after referenceNode
function insertAfter( refNode, newNode )
{
    refNode.parentNode.insertBefore( newNode, refNode.nextSibling );
}

function getXY( id ) {
	var obj = getById( id );
	var xy = [];
	
	xy[0] = obj.offsetLeft;
	xy[1] = obj.offsetTop;
	
	return xy;
}

function getStyle( obj, styleProp )
{
	if ( obj.currentStyle )
		var y = obj.currentStyle[styleProp];
	else if ( window.getComputedStyle )
		var y = document.defaultView
					.getComputedStyle( obj, null ).getPropertyValue(styleProp);
	return y;
}

function fadeIn( obj, callback ) {
	var opacity = 0;
	var opac_IE = 0;
	var display = getStyle( obj, 'display' );
	var obj_op  = getStyle( obj, 'opacity' );

	if ( display == 'none') {
		obj.style.opacity = 0;
		obj.style.display = 'block';
	}
	
	if ( obj_op > 0 && obj_op < 1 ) {
		opacity = Number( obj_op );
	}
	
	var i = setInterval( function() {
		if ( opacity >= 1 ) {
			obj.style.opacity = 1;
			obj.style.filter  = "alpha(opacity = 100)";
	
			clearInterval(i);
			
			if ( callback )
				callback( obj );
		}
		
		if ( opacity < 1 ) {
			opacity += 0.05;
			opac_IE += 5;

			opacity = Number( opacity.toFixed(2) );
		}
		
		obj.style.opacity = opacity;
		obj.style.filter  = "alpha(opacity = " + opac_IE + ")";
	}, 20 );
}

function fadeOut( obj, callback ) {
	var opacity = 1.00;
	var opac_IE = 100;
	
	var fout = setInterval( function() {
		if ( opacity == 0 ) {
			obj.style.opacity = 0;
			obj.style.display = 'none';
			clearInterval( fout );
			
			if ( callback ) callback();
		}
		
		if ( opacity > 0 ) {
			opacity -= 0.05;
			opac_IE -= 5;
			
			opacity = opacity.toFixed(2);

			obj.style.opacity = opacity;
			obj.style.filter  = "alpha(opacity = " + opac_IE + ")";
		}
	}, 20 );
}

function fileExtension( str ) {
	var separator = str.lastIndexOf('.');
	return str.substr( separator+1 );
}

function isValidExtension( formats, str ) {
	for ( i in formats ) {
		if ( fileExtension( str ) === formats[i] )
			return true;
	}
	return false;
}

function setFileInput( objclass, formats, errormsg, callback ) {
	var elements = getByClass( objclass );

	for ( i in elements ) {
		elements[i].onclick = function() {			
			real_id		= this.id.split('-')[1];
			label_id	= 'label-' + real_id;
			real_label	= getById( label_id );
			
			real_input = getById( real_id );
			real_input.click();
			
			real_input.onchange = function() {
				if ( isValidExtension( formats, this.value ) ) {
					real_label.innerHTML = this.value;
					
					if ( callback )
						callback( this );
						
				} else {
					real_label.innerHTML = errormsg;
				}
			}
		}
	}
}

function showShadowBox() {
	var totalHeight = self.screen.availHeight + 40;
	var sb = getByClass( 'shadow-box' )[0];
	sb.style.height = totalHeight + "px";
	
	fadeIn( sb );
}

function startLoader( input_id ) {
	var frame = getById( input_id + '_frame' );
	var loader = document.createElement('div');
	loader.setAttribute( 'class', 'loadergif' );
	
	frame.parentNode.appendChild( loader );
}

function stopLoader( el ) {
	var container = el.frameElement.parentNode;
	var loader = getByClass( 'loadergif', container );
	
	loader[0].style.display = 'none';
}
















