/**
 * Visszaadja az id azonositoju elemet (document.getElementById)
 * Ha !_window, akkor window
 */
function byId( id, _window ){
    _window = _window ? _window : window;
    if ( _window.document ){
        return _window.document.getElementById( id );
    }
    if ( _window.contentDocument ){
        return _window.contentDocument.getElementById( id );
    }
    alert ( 'byId: sem document sem contentDocument!' );
    return null;
}

/**
 * Visszaadja a parent elem (elso) childId azonositoju gyereket
 */
function getChild ( parent, childId ){
    for ( var i = 0; i < parent.childNodes.length; i++ ){
        if ( parent.childNodes[i].id == childId ){
            return parent.childNodes[i];
        }
        var e = getChild ( parent.childNodes[i], childId );
        if ( e != null ){
            return e;
        }
    }
    return null;
}

/**
 * A text parameter osszes regexp reszet newStr-re csereli
 */
function replaceAll ( text, regexp, newStr ){
    var result = text;
    while ( result.indexOf ( regexp ) != -1 ){
        result = result.replace( regexp, newStr );
    }
    return result;
}

/**
 * A txt stringet input value attributumma kodolja
 */
function codeToValue ( txt ){
    return replaceAll ( txt, '"', '&quot;');
}

/**
 * A txt stringet js-parameterre kodolja
 */
function codeToParam ( txt ){
    var tmp = 'gy_hy_Aphoszttophe_';
    txt = replaceAll ( txt, '\'', tmp );
    return replaceAll ( txt, tmp,'\\\'' );
}

/**
 * A txt stringet html alakja kodolja (pl: div.innerHTML = codeToHtml ( '<xml-tag>xml-tag-value</xml-tag>' ) )
 */
function codeToHtml( txt ){
    return replaceAll( replaceAll ( txt, '<', '&lt;' ), '>', '&gt;' );
}

/**
 * A txt stringben minden space karaktert torol
 */
function trim ( txt ){
    return replaceAll ( txt, ' ','' );
}

/**
 * Visszaadja az obj poziciojat
 */
function findPos( obj ) {
    var curleft = 0;
    var curtop = 0;
    if ( obj.offsetParent ) {
        do {
            curleft += obj.offsetLeft;
            curtop += obj.offsetTop;
            obj = obj.offsetParent
        } while ( obj );
    }
    return {
        y: curtop,
        x: curleft
    };
}

/**
 * Visszaadja az (eger)esemeny alapjan a kurzor kordinatait
 */
function mouseCoords(ev){
    if(ev.pageX || ev.pageY){
        return {
            x:ev.pageX,
            y:ev.pageY
        };
    }
    return {
        x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
        y:ev.clientY + document.body.scrollTop  - document.body.clientTop
    };
}

/**
 * Visszaadja a scroll fuggoleges erteket
 */
function getScrollTop() {
    return window.pageYOffset ? window.pageYOffset :
    document.documentElement.scrollTop ? document.documentElement.scrollTop :
    document.body.scrollTop;
}

/**
 * Visszaadja a scroll vizszintes erteket
 */
function getScrollLeft() {
    return window.pageXOffset ? window.pageXOffset :
    document.documentElement.scrollLeft ? document.documentElement.scrollLeft :
    document.body.scrollLeft;
}

/**
 * Beallitja a scroll fuggoleges erteket
 */
function setScrollTop( top ) {
    if ( window.pageYOffset ){
        window.pageYOffset = top;
    } else if ( document.documentElement.scrollTop ){
        document.documentElement.scrollTop = top;
    } else if ( document.body.scrollTop ){
        document.body.scrollTop = top;
    }
}

/**
 * Beallitja a scroll vizszintes erteket
 */
function setScrollLeft( left ) {
    if ( window.pageXOffset ){
        window.pageXOffset = left;
    } else if ( document.documentElement.scrollLeft ){
        document.documentElement.scrollLeft = left;
    } else if ( document.body.scrollLeft ){
        document.body.scrollLeft = left;
    }
}

/**
 *  Beallitja a scroll v\zszintes es fuggoleges erteket
 */
function setScroll ( left, top ){
    this.setScrollLeft(left);
    this.setScrollTop(top);
}

/**
 * A parent minden gyerekelemet torli
 */
function removeAllChild ( parent ){
    while ( parent && parent.hasChildNodes() ){
        parent.removeChild( parent.firstChild );
    }
}

/**
 * Az _event billentyu esemeny alapjan kiertekeli az fnc kifejezest, ha ENTERT nyomtak
 */
function todoIfEnter ( _event, fnc ){
    var e = _event || window.event;
    var _keyCode = e.keyCode || e.which;
    if ( _keyCode == 13 ){
        eval ( fnc );
    }
}

/**
 * Beallitja a elem lathatosagat
 */
function setDivVisible ( elemId, visible ){
    var obj = byId( elemId );
    if ( obj ){
        obj.style.visibility = visible ? "visible" : "hidden";
    }
}

/**
 * Beallitja a elem megjeleniteset
 */
function setDivDisplay ( elemId, display ){
    var obj = byId( elemId );
    if ( obj ){
        obj.style.display = display ? "block" : "none";
    }
}

/**
 * Beallitja a elem lathatosagat es megjeleniteset
 */
function setDivVisibleAndDisplay ( elemId, visible ){
    setDivVisible( elemId, visible );
    setDivDisplay( elemId, visible );
}

/**
 * Visszaadja az elem lathatosagat
 */
function isVisible ( elemeId ){
    var result = false;
    var obj = byId( elemeId );
    if ( obj ){
        result = obj.style.visibility != "hidden";
    }
    return result;
}

/**
 * Visszaadja az elem megjelenithetoseget
 */
function isDisplay ( elemId ){
    var result = false;
    var obj = byId( elemId );
    if ( obj ){
        result = obj.style.display != "none";
    }
    return result;
}

/**
 * Visszaadja, hogy az elem lathato-e es megvan-e jelenitve
 */
function isVisibleAndDisplay ( elemId ){
    return isVisible ( elemId ) && isDisplay ( elemId );
}

/**
 * Beallitha az elem lathatosagat true-ra
 */
function showDiv ( elemId ){
    setDivVisible ( elemId, true );
}

/**
 * Beallitha az elem lathatosagat es megjelenithetoseget true-ra
 */
function showDivAndDisplay ( elemId ){
    setDivVisibleAndDisplay ( elemId, true );
}

/**
 * Beallitha az elem lathatosagat false-ra
 */
function hiddeDiv ( elemId ){
    setDivVisible ( elemId, false );
}

/**
 * Beallitha az elem lathatosagat es megjelenithetoseget false-ra
 */
function hiddeDivAndDisplay ( elemId ){
    setDivVisibleAndDisplay ( elemId, false );
}

/**
 * Beallitha az elem stilusnevet
 */
function setElementStyle( elemId, _styleName ) {
    byId( elemId ).className = _styleName;
}

/**
 * Lecserelei a dokumentum StyleSheet-jet a parameterben kapott styleSheet(ek)re
 */
function changeStyleSheet() {
    window.userHasChosen = true;
    for( var x = 0, ss = getAllSheets(); x < ss.length; x++ ) {
        if( getSSTitle( ss[x] ) ) {
            ss[x].disabled = true;
        }
        for( var y = 0; y < arguments.length; y++ ) {
            if( getSSTitle( ss[x] ) == arguments[y] ) {
                ss[x].disabled = false;
            }
        }
    }
}

/**
 * Visszaadja stilus title tulajdonsagat
 */
function getSSTitle(ss) {
    if( ss.title ) {
        return ss.title;
    } else if( ss.owningElement ) {
        return ss.owningElement.title;
    }
    return '';
}

/**
 * Visszaadja az osszes hasznalhto StyleSheet-et
 */
function getAllSheets( _document ) {
    _document = _document ? _document : document;
    if( _document.styleSheets && ( window.ScriptEngine || navigator.taintEnabled ) ) {
        return _document.styleSheets;
    }
    if( !_document.getElementsByTagName ) {
        return [];
    }
    for( var x = 0, Lt = _document.getElementsByTagName('link'), os = []; Lt[x]; x++ ) {
        var rel = Lt[x].rel ? Lt[x].rel : Lt[x].getAttribute ? Lt[x].getAttribute('rel') : '';
        if( typeof( rel ) == 'string' && rel.toLowerCase().indexOf('style') + 1 ) {
            os[os.length] = Lt[x];
        }
    }
    for( x = 0, St = _document.getElementsByTagName('style'); St[x]; x++ ) {
        os[os.length] = St[x];
    }
    return os;
}

/**
 * Az objektumhoz hozzarendeli az event esemenyt a handler kezelovel
 */
function eventPush(obj, event, handler) {
    if (obj.addEventListener) {
        obj.addEventListener(event, handler, false);
    } else if (obj.attachEvent) {
        obj.attachEvent('on'+event, handler);
    }
}

/**
 * Az objektumrol torli az event esemeny handler kezelojet
 */
function eventPop(obj, event, handler) {
    if (obj.removeEventListener) {
        obj.removeEventListener(event, handler, false);
    } else if (obj.detachEvent) {
        obj.detachEvent('on'+event, handler);
    }
}

/**
 * Egesz szam formazasa
 */
function formatInteger ( number, delim ){
    if ( !delim ){
        delim = '.';
    }
    var result = '';
    var tmp = number + '';
    var L = tmp.length;
    for ( var i = 0; i < tmp.length; i++ ) {
        if ((L - i) % 3 == 0 && i != 0) {
            result += delim;
        }
        result += tmp.charAt(i);
    }
    return result;
}
