/**
 * Library
 *
 * Biblioteka podstawowych funkcji
 *
 * @author: fruitmedia
 * @copyright: fruitmedia
 * @license: commercial. Single license for RealDom.pl
 * @version: ver. 0.2
 * @contact: njoy@vp.pl
 *
 * PLEASE DO NOT USE WITHOUT PERMISSION
 */


/**
 * Dodaje obsluge funkcji push dla tablic w IE  5.0
 */
if (!Array.prototype.push) {
    
    Array.prototype.push = function(e){
        
        this[this.length] = e;
    
    };

}




/**
 * funkcja do implementacji w klasie
 */
function getUserAgentParams() {
    
    /**
     * user agents params
     */
    var params = new Array();
     
    params.opera = (navigator.userAgent.indexOf("Opera")>-1);
    
    params.ie = (navigator.appName == "Microsoft Internet Explorer") 
        && (!this.agentOP) && (!navigator.product);
        params.gecko = (navigator.product=="Gecko") && (!this.agentOP);
    
    params.ie5 =     (navigator.appName == "Microsoft Internet Explorer") 
            && (!this.agentOP) && (!navigator.product) 
            && (!document.documentElement.clientHeight);
    
    // wykryj rozmiar okna przegladarki
    if (!params.ie) {
        
        params.width = window.innerWidth;
        params.height = window.innerHeight;
    
    } else {
        
        if ( document.documentElement.clientHeight ) {
            
            params.width = document.documentElement.clientWidth;
            params.height = document.documentElement.clientHeight;
            
        } else {
            
            params.width = document.body.clientWidth;
            params.height = document.body.clientHeight;            
            
        }

    }
    
    return params;
    
}

/**
 * Nakladaka na funkcje innerHTML
 * return void
 */
function printIn(htmlObj, content) {
    
    if (htmlObj) {
        
        htmlObj.innerHTML = content;
    
    } else {
        
        fatalError('Element html \'' + htmlObj + '\' dla ktorego chcesz uzyc metody printIn nie istnieje');
            
    }

}

/**
 * Nakladka na funkcje getElementById
 * @return htmlElement
 */
function getNodeById(elem_id){
    
    var element = document.getElementById(elem_id);
    
    if(element){
        
        return element;
        
    } else {
        
        fatalError('Element html o ID \'' + elem_id + '\' nie istnieje');
        
    }
    
}


/**
 * Wysiwtla alert z informacja o bledzie
 * return void
 */
function fatalError(message){
    
    alert('FATAL ERROR: ' + message);
    return false;
    
}


/**
 * sprawdza czy zmienna jest zdefiniowana (czy istnieje)
 */
function isset(varname){

    return (typeof(window[varname]) != 'undefined');

}

/**
 * funkcja sprawdza czy element jest obiektem
 */
function isObject(variable){

    return (typeof(variable) == "object");

}

/**
 * funkcja sprawdza czy element jest tablica
 */
function isArray(variable){
    
  return (isObject(variable) && (variable.length) &&(!isString(variable)));

}

/**
 * funcja sprawdza czy element jest funkcja
 */
function isFunction(variable){
    
    return (typeof(variable) == "function");

}

/**
 * funkcja sprawdza czy element jest ciagiem znakow
 */
function isString(variable) {
  return (typeof(variable) == "string");
}



/**
 * Zwraca tablice z elementami ktoe posiadaja atrybut klas z okreslona wartoscia
 * @return array
 */
function getElementsByClassName(objId, tagName, className){
    
    if (isObject(objId)) {
        
        var htmlObj = objId;
        
    } else {
        
        var htmlObj = getNodeById(objId);
           
    }
    
    var classElems = new Array();
    
    var tagElem = htmlObj.getElementsByTagName(tagName);
    
    var counter = tagElem.length;
    
    if (counter > 0) {
    
        var j = 0;
        
        for (i = 0; i < counter; i++) {
            
            if(tagElem[i].className == className){
                
                classElems[j] = tagElem[i];
                
                j++;
            }
            
        }
        
    }
    
    return classElems;
    
}
