
/*

Requires that BrowserDetect was previously included

*/

var DomHelper = {

    selectoptionstoarray: function (selectobject)
    {
        var result= new Array();
        for (var pos=0, len=selectobject.options.length; pos<len; pos++)
        {
            result.push(DomHelper.selectoptionclone(selectobject.options[pos]));
        }
        return result;
    },
    
    selectarraytooptions: function (selectarray, selectobject)
    {
        for (var pos=0, len=selectarray.length; pos<len; pos++)
        {
            if (BrowserDetect.browser=="Explorer")
                selectobject.add(selectarray[pos])
            else
                selectobject.add(selectarray[pos], null);
        }
    },

    selectoptionclone: function (selectoption)
    {
        var newoption= document.createElement('option');
        newoption.value= selectoption.value; 
        newoption.text= selectoption.text;
        //newoption.style.fontSize= selectoption.style.fontSize
        return newoption;
    },

	selectadd: function (selectobject, newoption, checkifexists) 
    {
        var found= false;
        if (checkifexists)
        {
            for (var pos=0; pos<selectobject.options.length; pos++)
            {
                if (selectobject.options[pos].value==newoption.value)
                {
                    found= true;
                    break;
                }
            }
        }
    
        if (!found)
        {
            if (BrowserDetect.browser=="Explorer")
                selectobject.add(newoption)
            else
                selectobject.add(newoption, null);
        }
	},
	
	selectall: function (selectobject)
	{
	   for (var pos=0; pos<selectobject.options.length; pos++)
	   {
	       selectobject.options[pos].selected= true;
	   }
	},
	
	getselectedvaluelist: function (selectobject)
	{
	   var result= new Array();
	   for (var pos=0; pos<selectobject.options.length; pos++)
	   {
	       if (selectobject.options[pos].selected)
	           result.push(selectobject.options[pos].value); 
	   }
	   return result;
	},

    optionsarraymerge: function (arrayfrom, arrayto, arrayresults)
    {
        var arrayfrompos= 0;
        var arrayfromlen= arrayfrom.length;
        var arraytopos= 0;
        var arraytolen= arrayto.length;
        while (arrayfrompos<arrayfromlen && arraytopos<arraytolen)
        {
            var arrayfromitem= arrayfrom[arrayfrompos];
            var arraytoitem= arrayto[arraytopos];
            if (arrayfromitem.value<arraytoitem.value)
            {
                arrayresults.push(arrayfromitem);
                arrayfrompos++;
            }
            else if (arrayfromitem.value==arraytoitem.value)
            {
                arrayfrompos++;
                arraytopos++;
            }
            else if (arrayfromitem.value>arraytoitem.value)
            {
                arraytopos++;
            }
        }
        
        while (arrayfrompos<arrayfromlen)
        {
            var arrayfromitem= arrayfrom[arrayfrompos];
            arrayresults.push(arrayfromitem);
            arrayfrompos++;
        }
    },
    
    sortoptionbyvalue: function(a, b)
    {
        return a.value < b.value ? -1 : (a.value == b.value ? 0 : 1); 
    },

    sortoptionbytext: function(a, b)
    {
        return a.text < b.text ? -1 : (a.text == b.text ? 0 : 1);
    },

    selectmergeselected: function(selectfrom, selectto)
    {
        for (var pos=0; pos<selectfrom.options.length; pos++)
        {
            if (selectfrom.options[pos].selected && selectfrom.options[pos].value.length>0)
            {
                var newoption= document.createElement('option');
                newoption.value= selectfrom.options[pos].value; 
                newoption.text= selectfrom.options[pos].text;
                //newoption.style.fontSize= "10px";
                DomHelper.selectadd(selectto, newoption, true);
            }
        } 
    },
    
    selectremoveselected: function(selectobject)
    {
        var pos= 0;
        while (pos<selectobject.options.length)
        {
            if (selectobject.options[pos].selected)
            {
                selectobject.remove(pos);
            }
            else
            {
                pos++;
            }
        }
    },
    
    appendtoids: function(element, stringToAppend)
    {
        try
        {
            if (element.id && element.id.length>0)
                element.id+= stringToAppend;
        }
        catch(e)
        {
            //continue
        }

        for (var pos= 0; pos<element.childNodes.length; pos++)
        {
            try
            {
                DomHelper.appendtoids(element.childNodes[pos], stringToAppend);
            }
            catch(e)
            {
                //continue
            }
        }
    },
    
    indexofvalue: function(selectobject, value)
    {
        for (var pos=0, len=selectobject.options.length; pos<len; pos++)
        {
            if (selectobject.options[pos].value==value)
                return pos;
        }
        
        return -1;
    },
    
    selectbyvalue: function(selectobject, value)
    {
        for (var pos=0, len=selectobject.options.length; pos<len; pos++)
        {
            if (selectobject.options[pos].value==value)
            {
                selectobject.selectedIndex= pos;
                return;
            }
        }
    },

    limittext: function(limitField, limitNum)
    {
        if (limitField.value.length > limitNum)
        {
            limitField.value = limitField.value.substr(0, limitNum);
        }
    },

    preventdefault: function(event)
    {
        if (event.preventDefault) {
            event.preventDefault(); // The W3C DOM way
        } else {
            event.returnValue = false; // The IE way
        }
    },
    
    eventsource: function(event)
    {
        if (event.target)
            return event.target
        else if (event.srcElement)
            return event.srcElement;
        else
            return null;
    },
    
    numberofproperties: function(theobject)
    {
        var count= 0;
        for (var key in theobject)
        {
            if (typeof theobject[key] != "function")
                count++;
        }
        
        return count;
    },
    
    trim: function(thestring)
    {
        return thestring.replace(/^\s+|\s+$/g, '') ;
    }
};
