function TotalTopOffset(ctrl)
{
    if(ctrl)
        return ctrl.offsetTop+TotalTopOffset(ctrl.offsetParent);
    else
        return 0;
}
function TotalLeftOffset(ctrl)
{
    if(ctrl)
        return ctrl.offsetLeft+TotalLeftOffset(ctrl.offsetParent);
    else
        return 0;
}
function GetParent(ctrl)
{
    if(document.all)return ctrl.parentElement;
    else return ctrl.parentNode;
}



/***********************************
		DROP DOWN SCRIPT
***********************************/
function Unselectable(dom)
{
	dom.unselectable="on";
	AddClass(dom,"unselectable");
}


var Shadow=function(dom,doNotChangeParent)
{
	var parent=dom.parentElement||dom.parentNode;
	if(!doNotChangeParent)
	{
	 parent.style.visibility="hidden";
	 parent.style.display="block";
	}
	var sh=document.createElement("div");
	sh.className="shadow";
	var iIc=['xst','xsc','xsb'],jIc=['l','c','r'];
	this.widthers=[];
	this.heighters=[];
	var inc,inc2;
	for(var iI=0;iI<iIc.length;iI++)
	{
	    inc=document.createElement("div");
	    sh.appendChild(inc);
	    inc.className=iIc[iI];
	    if(inc.className=="xsc")
	    {
	        inc.style.height=Math.max(0,(parent.clientHeight||dom.clientHeight)-12)+"px";
		this.heighters.push(inc);
	    }
	    for(var jI=0;jI<jIc.length;jI++)
	    {
	        inc2=document.createElement("div");
	        inc2.className=inc.className+jIc[jI];
	        inc.appendChild(inc2);
	        if(jIc[jI]=='c'){inc2.style.width=dom.clientWidth+"px";this.widthers.push(inc2)}
	    }
	}
	sh.style.width=(dom.clientWidth+12)+"px";
	sh.style.height=(parent.clientHeight||dom.clientHeight)+"px";
	this.sh=sh;
	parent.insertBefore(sh,dom);
	if(!doNotChangeParent)
	{
	  parent.style.display="none";
	  parent.style.visibility="visible";
	}
}
Shadow.prototype=
{
	widthers:null,heighters:null,
	SetSize:function(width,height)
	{
		this.sh.style.width=(width+12)+"px";
		this.sh.style.height=height+"px";
		for(var wI=0;wI<this.widthers.length;wI++)this.widthers[wI].style.width=width+"px";
		for(var wI=0;wI<this.heighters.length;wI++)this.heighters[wI].style.height=(height-12)+"px";
	}
}

var closeControlsHandlers=[];
function CloseControls()
{
for(var fnI=0;fnI<closeControlsHandlers.length;fnI++)closeControlsHandlers[fnI]();
}

function DropdownInformation(rootId, newwidth, data) {
    var list = document.getElementById(rootId + "List");
    var options = document.getElementById(rootId + "Options");
    if (!options) return;
    if (newwidth != null)
        options.style.width = newwidth + "px";


    optionItem = document.createElement("div");
    optionItem.className = "info";
    var option = document.createElement("div");
    optionItem.appendChild(option);
    var dataElement = data;
    option.innerHTML = dataElement;

    options.appendChild(optionItem);


    var parent = options.parentElement || options.parentNode;
    for (var ci = 0; ci < parent.childNodes.length; ci++) {
        var ch = parent.childNodes[ci];
        if (ch.className == "shadow") {
            ch.style.display = "none";
            break;
        }
    }
    new Shadow(options);
}


var Dropdown=function(rootId,onclick,data)
{
    var list=document.getElementById(rootId+"List");
    var options=document.getElementById(rootId+"Options");
    if(!options)
    {
	options=document.createElement("div");
	options.id=rootId+"Options";
	options.className="dropdownOptions";
	(list.parentElement||list.parentNode).appendChild(options);
	options.style.width=list.style.width;
    }
    options.style.visibility="hidden";

    var optionsAndShadow=document.createElement("div");
    var optionsParent=options.parentElement||options.parentNode;
    optionsParent.replaceChild(optionsAndShadow,options);
    optionsAndShadow.appendChild(options);
    optionsAndShadow.style.width=options.style.width;
    SetHandler(list,"click", CreateDelegate(this.Toggle,this));
    this.TextCtrl=null;
    for(var ci=0;ci<list.childNodes.length;ci++)
    {
        var ch=list.childNodes[ci];
        if(ch.className=="sel")
	{
		this.TextCtrl=ch;
        	ch.style.width=(list.clientWidth-24)+"px";
		break;
	}
    }

    var ch;
    for(var ci=0;ci<options.childNodes.length;ci++)
    {
        ch=options.childNodes[ci];
        if(ch.className=="item")
        {
		SetHandler(ch,"mouseover",CreateDelegate(this.OnItemOver,this,[ch]));
		SetHandler(ch,"mouseout",CreateDelegate(this.OnItemOut,this,[ch]));
		if(onclick)
			SetHandler(ch,"click",CreateDelegate(this.OnItemClick,this,[ch,onclick]));
        }
    }
    if(typeof(data)=='object')
    {//An array
	var optionItem;
	for(var dI=0;dI<data.length;dI++)
	{
		optionItem=document.createElement("div");
		optionItem.className="item";
		var option=document.createElement("div");
		optionItem.appendChild(option);
		var dataElement=data[dI];
		if(typeof(dataElement)=="object")
		{//Sub array
			optionItem.value=dataElement[0];
			option.innerHTML=dataElement[1];
		}
		else
		{
			optionItem.value=dataElement;
			option.innerHTML=dataElement;
		}
		options.appendChild(optionItem);
		Unselectable(option);
		SetHandler(optionItem,"mouseover",CreateDelegate(this.OnItemOver,this,[optionItem]));
		SetHandler(optionItem,"mouseout",CreateDelegate(this.OnItemOut,this,[optionItem]));
		SetHandler(optionItem,"click",CreateDelegate(this.OnItemClick,this,[optionItem,onclick]));
	}
    }

    var closeFn=CreateDelegate(this.Close,this);
    SetHandler(document.body,"click",closeFn);
    closeControlsHandlers.push(closeFn);
    this.Options=optionsAndShadow;
    new Shadow(options);
    options.style.visibility="visible";

}

Dropdown.prototype=
{
    Options:null,TextCtrl:null,preventClose:false,
    Toggle:function(e)
    {
        this.preventClose=true;
        CloseControls();
        this.preventClose=false;
        if(this.Options.style.display=="block")this.Options.style.display="none";
        else{this.Options.style.display="block";}
        if (!e)e = window.event;
        e.cancelBubble=true;
        return false;
    },
    OnItemOver:function(item)
    {
        item.className="item over";
    },
    OnItemOut:function(item)
    {
        item.className="item";
    },
    Close:function()
    {
        if(this.preventClose)return;
        this.Options.style.display="none";
    },
    OnItemClick:function(item,handler)
    {
    CloseControls();
    this.TextCtrl.innerHTML=item.innerHTML;
    if(!handler)return;
    if(typeof(item.value)!="undefined"){handler(item.value);return;}
    var itemAttrs=item.attributes;
    for(var j=0;j<itemAttrs.length;j++)
     if(itemAttrs[j].name=="value")
     {
        handler(itemAttrs[j].value);
        return;
     }
    handler(this.TextCtrl.innerHTML);
    }
}



function SetHandler(obj,evt,fnc)
{
if(obj.addEventListener) obj.addEventListener(evt,fnc,false);
else obj.attachEvent("on"+evt,fnc);
}
function CreateDelegate(func,scope,args)
{
    return function(){func.apply(scope,args||arguments)}
}

function AddClass(dom,cls)
{
if((' '+(dom.className||'')+' ').indexOf(' '+cls+' ')>=0)return;
dom.className+=' '+cls;
}
function RemoveClass(dom,cls)
{
var i=(' '+(dom.className||'')+' ').indexOf(' '+cls+' ');
if(i<0)return;
dom.className=dom.className.substr(0,i-1)+dom.className.substr(i+cls.length);
}
function SetButton(buttonId)
{
    var button=document.getElementById(buttonId);
    SetHandler(button,"mouseover",CreateDelegate(AddClass,this,[button,"hover"]));
    SetHandler(button,"mouseout",CreateDelegate(RemoveClass,this,[button,"hover"]));
}

