var Helpers = {
    GetElement: function(elName, form)
    {
        if(typeof elName == 'object')
            return elName;
        if(typeof form == 'string')
            form = document.forms[form];
            
        return (form && typeof form.elements[elName] != 'undefined')
                ? form.elements[elName] : document.getElementById(elName);
    }, 
    
    GetInputValue: function(el, form, nullIfHidden)
    {
        if(typeof el == 'string')
        {
            el = Helpers.GetElement(el, form);
        }
        if(!el)    
            return null;
        
        if(nullIfHidden === true)
        {
            if(!Helpers.IsElementVisible(el, form))
                return null;
        }
            
        var type = el.tagName ? el.tagName.toLowerCase() : '';
        if(type == 'input')
            type = el.type;
        var ret = null;
        switch(type)
        {
            case 'checkbox':
                ret = el.checked ? 1 : 0;
                break;
            case 'div':
            case 'span':
                ret = el.style.display == '' ? 1 : 0;
                break;
            case 'radio':
                if(el.length)
                {
                    for(var i = 0; i < el.length; ++i)
                    {
                        if(el[i].checked)
                        {
                            val = el[i].value;
                            break;
                        }
                    }
                }
                break;
            case 'select':
                if(el.selectedIndex >= 0)
                {
                    ret = el.options[el.selectedIndex].value;
                }
                else
                {
                    ret = null;
                }
                break;
            case 'hidden':
            case 'text':
            case 'textarea':
                ret = el.value;
                break;
            default:
                ret = null;
                break;
        }
        
        return ret;
    },
    
    SetInputValue: function(el, form, value)
    {
        if(typeof el == 'string')
        {
            el = Helpers.GetElement(el, form);
        }
        if(!el)    
            return false;
            
        var type = el.tagName ? el.tagName.toLowerCase() : '';
        if(type == 'input')
            type = el.type;
        
        var result = true;
        switch(type)
        {
            case 'checkbox':
                el.checked = value;
                break;
            case 'div':
            case 'span':
                el.style.display = value ? '' : 'none';
                break;
            case 'radio':
                result = false;
                if(el.length)
                {
                    for(var i = 0; i < el.length; ++i)
                    {
                        if(el[i].value == value)
                        {
                            el[i].checked = true;
                            result = true;
                            break;
                        }
                    }
                }
                break;
            case 'select':
                result = false;
                for(var j = 0; j < el.options.length; ++j)
                {
                    if(el.options[j].value == value)
                    {
                        el.options[j].selected = true;
                        result = true;
                        break;
                    }
                }
                break;
            case 'textarea':
            case 'text':
            case 'hidden':
                el.value = value;
            default:
                result = false;
        }
        
        return result;
    },
    
    GetInputText: function(el, form)
    {
        if(typeof el == 'string')
        {
            el = Helpers.GetElement(el, form);
        }
        if(!el)    
            return null;
            
        var type = el.tagName ? el.tagName.toLowerCase() : '';
        if(type == 'input')
            type = el.type;
        var ret = null;
        switch(type)
        {
            case 'div':
            case 'span':
                if(document.all)
                {
                    // ret = el.innerText; ? IE
					ret = el.innerHTML;
                }
                else
                {
                    // ret = el.textContent; ? Firefox
					ret = el.innerHTML;
                }
                break;
            case 'select':
                //ret = el.options[el.selectedIndex].text;
                if(el.selectedIndex >= 0)
                {
                    ret = el.options[el.selectedIndex].text;
                }
                else
                {
                    ret = null;
                }
                break;
            case 'textarea':
            case 'text':
            case 'hidden':
                ret = el.value;
            default:
                ret = null;
                break;
        }
        
        return ret;
    },
    
    GetItemFromObjectListByProp: function(list, propName, value)
    {
        //for(var i=0; i<list.length; i++)
        for(var prop in list)
        {
            if(list[prop][propName] == value)
                return list[prop];
        }
        return null;
    },
    
    SetText: function(el, value)
    {
        if(typeof el == 'string')
            el = Helpers.GetElement(el, null);
        
        if(!el)
            return;
        el.innerHTML = value;    
        //if(document.all)
//        {
//            el.innerText = value;
//        }
//        else
//        {                        
//            el.textContent = value;
//        }
    },
    
    //ez a verzio kiveszi a nem kivanatos elemeket
    _cache: new Object(),
    DisableSelectOptions: function(select, values, areAllowed, selectValue)
    {
        if(!this._cache[select.name]) //cache select options
        {
            this._cache[select.name] = new Array();
            for(var i=0; i<select.options.length; i++)
                this._cache[select.name][i] = select.options[i];
        }
        var selectedOption = select.options[select.selectedIndex];
        while(select.options.length>0)
            select.options[0] = null;
        
        var cachedOptions = this._cache[select.name];
        var selectIndex = 0;
        var oi = 0;
        var selectedSet = false;
        for(var j=0; j<cachedOptions.length; j++)
        {
            if(selectValue!==null && cachedOptions[j].value == selectValue)
            {
                selectIndex = oi;
                selectedSet = true;
            } 
            else if(!selectedSet && cachedOptions[j] == selectedOption)
            {
                selectIndex = oi;
            }
            found = Helpers.InArray(values, cachedOptions[j].value);
            if((found && areAllowed) || (!found && !areAllowed))
            {
	      try{
                select.options[select.options.length] = cachedOptions[j];
                lastAllowedOption = cachedOptions[j];
                oi++;
	      }catch(err){}
            }
        }
        if(select.options.length <= selectIndex)
            selectIndex = select.options.length - 1;
       
        select.selectedIndex = selectIndex;
    },
    
    //ez a verzio csak disablezza az elemeket es atszinezi szurkere
    DisableSelectOptions2: function(select, values, areAllowed)
    {
        var found;
        var selectNextPossible = false;
        var selected = select.selectedIndex;
        for(var i=0; i<select.options.length; i++)
        {
            found = Helpers.InArray(values, select.options[i].value);
            if((!found && areAllowed) || (found && !areAllowed))
            {
                select.options[i].disabled = true;
                //select.options[i].style.color = 'silver';
                if(selected == i)
                    selectNextPossible = true;
            }
            else
            {
                select.options[i].disabled = false;
                //select.options[i].style.color = '';
                if(selectNextPossible)
                {
                    select.options[i].selected = true;
                    selectNextPossible = false;
                }
            }
        }
        if(selectNextPossible) //ha utana mar nemvolt hasznalhato elem,akkor -1.-et jelolje ki
        {
            select.selectedIndex = -1;
        }
    },
    
    InArray: function(arr, value)
    {
        for(var i=0; i<arr.length; i++)
        {
            if(arr[i] == value)
                return true;
        }
        return false;
    },
   
    Log: function(str, obj)
    {
        if(typeof console != 'undefined')
            console.log(str, obj);
    },
    
    IsArray: function(o) 
    {
        return o != null && typeof o == "object" &&
            'splice' in o && 'join' in o;
    },
    
    _replaceCache: new Object(),
    ReplaceParams: function(str, param, value, strID)
    {
        if(strID !== null)
        {
            if(!this._replaceCache[strID])
            {
                //var st = str.indexOf(params[0]);
                //var p = {start:st, length:params[0].length};
                this._replaceCache[strID] = str;
            }
            
            str = '';
            if(this.IsArray(param) && this.IsArray(value) && param.length == value.length)
            {
                str = this._replaceCache[strID];
                for(var i=0; i<param.length; i++)
                   str = str.replace(param[i], value[i]); 
            }
            else
                str = this._replaceCache[strID].replace(param, value);
        }
        else
            str = str.replace(param, value);
        
        return str;
    },
    
    IsElementVisible: function(el, form)
    {
        el = this.GetElement(el, form);
        
        var visible = true;
        while(el && el.style)
        {
            if(el.style.display != '')
            {
                visible = false;
                break;
            }
            el = el.parentNode;
        }
        
        return visible;
    },
    
    ScrollToElement: function(el, form)
    {
        el = Helpers.GetElement(el, form);
        var x = 0;
        var y = 0;
                  
        while(el != null)
        {
            x += el.offsetLeft;
            y += el.offsetTop;
            el = el.offsetParent;
        }
                            		      
        window.scrollTo(x, y);
    },
    
    CopyObjectData: function(o, addToObject)
    {
        var tmp = addToObject!=null ? addToObject : new Object();
        for(var prop in o)
        {
            tmp[ prop ] = o[prop];
        }
        return tmp;
    }
};

Helpers.Events = {
    
    Stop: function(e)
    {
        if(e == null)
            return;
        if (e.preventDefault)
        {
          e.preventDefault();
          e.stopPropagation();
        }
        else
        {
          // e.returnValue = false; !! Ettol a sortól nem muködött az IE6. Magyarázat: Provides the value to be returned to the event's source element to allow or prohibit the element's default action connected with the event. If you set event.returnValue to false, the element does not carry out its normal operation, such as navigating to a link or submitting the form. This property does not influence an actual value you may wish to return from an event handler function.
          e.cancelBubble = true;
        }
    },
    
    Add: function(el, evName, funct)
    {
        if(el.addEventListener)
            el.addEventListener(evName, funct, false);
        else if(el.attachEvent)
        {
            var t = function(e)
            {
                funct.apply(el, [e]);
            };
            Helpers.Events._events.push({'element': el, 'event': evName, 'handler': funct});
            el.attachEvent("on" + evName, t);
        }
        else
        {
            el['on' + evName] = funct;
        }
    },
    
    Remove: function(el, evName, funct)
    {
        el.detachEvent("on" + evName, funct);
    },
    
    RemoveAll: function()
    {
        for(var i = 0, e = Helpers.Events._events; i < e.length; ++i)
            Helpers.Events.Remove(e[i].element, e[i].event, e[i].handler);
    },
    
    TargetElement: function(e)
    {
        return e && e.target ? e.target : (e && e.srcElement ? e.srcElement : null);
    },
    _events:  new Array()
};


if(typeof window.event !== "undefined")
{
    Helpers.Events.Add(window, "unload", function(){
        Helpers.Events.RemoveAll();
    });
}
