function dynamicPanels(){
	var elements = dojo.html.getElementsByClassName("optional-icon");
	for(var i = 0; i < elements.length; i++){
		new OptionalControl(elements[i]);
	}
	elements = dojo.html.getElementsByClassName("help");
	for(var i = 0; i < elements.length; i++){
		new DynamicHelp(elements[i]);
	}

	elements = dojo.html.getElementsByClassName("section");
	for(var i = 0; i < elements.length; i++){
		new DynamicPanel(elements[i]);
	}
}

function DynamicHelp(el){
	var e = el;
	var panel = getHelpPanel(e);
	var container = getContainer(e);
	var table = getTable(container);
	if(!panel) return;
	var visibility = false;
	e.onclick = show;
    dojo.style.hide(panel);
	function getHelpPanel(el) {
	    return dojo.html.getElementsByClass("help-panel", el.parentNode, "DIV")[0];
	}

	function getContainer(el){
		var e = el;
		while(e){
			e = e.parentNode;
			if(e && e.tagName == "DIV" && dojo.html.hasClass(e, "panel")){
				return e;
			}
		}
		return null;
	}

	function getTable(el){
		return el.getElementsByTagName("TABLE")[0];
	}

	function show(){
		e.onclick = hide;
		dojo.style.show(panel);
	}
	function hide(){
		e.onclick = show;
        dojo.style.hide(panel);
	}
}

function OptionalControl(el){
    var loading = true;
	var e = el;
	var panel = getControlPanel(e);
	var check = getCheckControl(e);
//	check.style.display = "none";

	var container = getContainer(e);

	var table = getTable(container);
	if(!panel) return;
	var visibility = true;
	e.checkbox = check;
	if(check.checked)
	    show();
	else
	    hide();

	function getCheckControl(el) {
		return dojo.html.getElementsByClass('optional-control', el.parentNode, 'SPAN')[0].childNodes[0];
	}

	function getControlPanel(el) {
	    return dojo.html.getElementsByClass('control-content', el.parentNode.parentNode, 'DIV')[0];
	}

	function getContainer(el){
		var e = el;
		while(e){
			e = e.parentNode;
			if(e && e.tagName == "DIV" && dojo.html.hasClass(e, "panel")){
				return e;
			}
		}
		return null;
	}

	function getTable(el){
		return el.getElementsByTagName("TABLE")[0];
	}

	function show(){
		e.src = Amria.Image + "delete.png";
		e.onclick = hide;
		dojo.style.show(panel);
		e.checkbox.checked = true;
		if(!loading)
		    setFocusOnFirstControlAvailable(e.parentNode.parentNode);
	}

	function hide(){
		e.src = Amria.Image + "edit.png";
		e.onclick = show;
		dojo.style.hide(panel);
		e.checkbox.checked = false;
		if(!loading)
		    setFocusOnFirstControlAvailable(e.parentNode.parentNode);
	}
	loading = false;
}

function setFocusOnFirstControlAvailable(el)
{
	    var ctrl = findFirstVisibleControl(el);
        if(ctrl && ctrl.focus)
        {
            try
            {
                ctrl.focus();
                ctrl.select();
            } catch(e) { }
        }
}

function DynamicPanel(el){
	var e = el;
	var panel = getPanel(e);
	if(!panel) return;
	var visibility = true;
	e.onclick = hide;

	var time = 100; // ms
	var steps = 10;

	function getPanel(el) {
		var children = el.parentNode.childNodes;
		var element = null;
		for (var i = 0; i < children.length; i++) {
			if(!children[i].tagName && children[i].tagName != "DIV") continue;
			var classNames = children[i].className.split(' ');
			for (var j = 0; j < classNames.length; j++) {
				if (classNames[j] == "panel") {
					return children[i];
				}
			}
		}
	}

	function show(){
		e.onclick = hide;
		dojo.lfx.html.wipeIn(panel, 200).play();
		dojo.lfx.html.fadeIn(panel, 200).play();
	}
	function hide(){
		e.onclick = show;
		dojo.lfx.html.wipeOut(panel, 200).play();
		dojo.lfx.html.fadeOut(panel, 200).play();
	}

}

function getVisibleFirstElementByTagNameAndAttribute(e, tag, attribute, value)
{
    var els = e.getElementsByTagName(tag);
    var i;
    for(i = 0; i < els.length; i++)
    {
        if(els[i][attribute] == value && els[i].style.display != "none" && els[i].style.visibility != "hidden") return els[i];
    }
    return null;
}

function getVisibleFirstElementByTagName(e, tag)
{
    var els = e.getElementsByTagName(tag);
    for(i = 0; i < els.length; i++)
    {
        if(els[i].style.display != "none" && els[i].style.visibility != "hidden") return els[i];
    }
    return null;
}


function findFirstVisibleControl(e)
{
	var ctrl = getVisibleFirstElementByTagNameAndAttribute(e, 'INPUT', 'type', 'text');
	if(!ctrl) ctrl = getVisibleFirstElementByTagName(e, 'TEXTAREA');
	return ctrl;
}

function focusOnFirst()
{
	var ctrl = findFirstVisibleControl(document);
    if(ctrl && ctrl.focus)
    {
        try
        {
            ctrl.focus();
            ctrl.select();
        }
        catch(e){}
    }
}

addLoadEvent(dynamicPanels);
addLoadEvent(focusOnFirst);

