Array.prototype.S = String.fromCharCode(2);
Array.prototype.in_array = function(e)
{
var re = new RegExp(this.S+e+this.S);
return re.test(this.S+this.join(this.S)+this.S);
}

function DataContent()
{       
        this.Parent;                // Parent Tags
        this.ParentID;
        this.Children;                // Children Tags
        this.ChildrenID;
}

function DataServer()
{
        this.mList = new Array();
        this.ListCount = function(){return this.mList.length;}
        this.GetListObj = function(n)
        {
                if (n<this.ListCount()) return this.mList[n];
                return null;
        }
        this.Add = function(sParent,sParentID,sChildren,sChildrenID)
        {
                obj = new DataContent();
                obj.Parent         = sParent;
                obj.ParentID         = sParentID;
                obj.Children = sChildren;
                obj.ChildrenID = sChildrenID;
                this.mList[this.ListCount()] = obj;
        }
}

function getTriggerNode(e) {
        return (document.all)?event.srcElement:e.target;
}

function getObject(objID)
{
        return document.getElementById(objID);
}

function CreateList(objName,objData,objSelected)
{
        var listBox = getObject(objName[0]);
        if(!listBox) return;
        var strOutput = "";
        var liClass = "";
		var ext = '';
        var id = 0;
        var op_txt = new Array();
        var op_val = new Array();
        var sub_val = new Array();
        if (objSelected[0])
        {
                for(i=0;i<objData.ListCount();i++)
                        if(objData.GetListObj(i).ParentID==objSelected[0])
                        {
                                id = i;
                                break;
                        }
                if(i==objData.ListCount()){
                        listBox.innerHTML="";
                        listBox.className="Blank";
                        return false;
                }
        }
        if(objName[1])
                for(i=0;i<objName[1].ListCount();sub_val.push(objName[1].GetListObj(i++).ParentID));
        tmpobj = objData.GetListObj(id);
        if (tmpobj.Children.length==0)
        {
                for(i=0;i<objData.ListCount();op_txt.push(objData.GetListObj(i).Parent),op_val.push(objData.GetListObj(i++).ParentID));
        }
        else
        {
                op_txt = tmpobj.Children;
                op_val = tmpobj.ChildrenID;
        }
        for(i=0;i<op_txt.length;i++)
        {
                if(sub_val.in_array(op_val[i]))
                        liClass = "IsParent";
                if(op_val[i] == objSelected[1]){
                        liClass += " Selected";
                }
				if(objName[0] == "Category_GameArea"){
						ext = " onclick='ffss("+op_val[i]+");' ";
				}
                strOutput += '<li id="'+objName[0]+'__'+op_val[i]+'" class="'+liClass+'" '+ext+'>'+op_txt[i]+'</li>';
                liClass = '';
        }
        listBox.innerHTML = strOutput;
        strOutput = "";
        listBox.className="";
}

function changeCategoryStyle(ulID,liCurr){
        if(lastSelectItem[ulID]){
                lastSelectItem[ulID].className=lastSelectItem[ulID].className.replace("Selected","").replace(/\s+$/,"");
        }
        liCurr.className += " Selected";
        lastSelectItem[ulID] = liCurr;
}

function changeCategory(evnt)
{
        var obj = getTriggerNode(evnt);
        var obj2 = obj;
        if(obj2.nodeName=="DIV") return (0);
        if(obj.nodeName != "LI")
                obj = obj.parentNode;
        while(obj2.nodeName != "UL")
                obj2 = obj2.parentNode;
        if(obj.nodeName != "LI") return;
        changeCategoryStyle(obj2.id,obj);
        var parentID = (obj.id).split("__")[1];
        switch(obj2.id)
        {
                case gametype:
                        CreateList([gamearea,gameserverData],gameareaData,[parentID,0]);
                break;
        }
}


