function checkDependents (elt)
{
	var disable = !elt.checked;
	var elts = document.getElementsByClassName('depends-' + elt.id);
	var effs = [];
	
	for (var i = 0; i < elts.length; i++)
	{
		if (elts[i].tagName.toLowerCase() == 'input')
		{
			if (elts[i].disabledBy == undefined) elts[i].disabledBy = [];
			
			if (disable)
			{
				elts[i].disabledBy.push(elt.id);
				elts[i].disabled = true;
				
				if (elts[i].type == 'radio' && elts[i].checked)
				{
					// Is there a defsel for this radio?
					var defsels = document.getElementsByClassName(elts[i].id + '-defsel');
					
					if (defsels.length == 1)
					{
						defsels[0].checked = true;
						var highlight = document.getElementById(elts[i].id + '-defsel-high');
						if (highlight) effs.push(new Effect.Highlight(highlight, { sync: true }));
					}
				}
			}
			else
			{
				var idx;
				
				while ((idx = elts[i].disabledBy.indexOf(elt.id)) != -1)
					elts[i].disabledBy.splice(idx,1);
				
				if (elts[i].disabledBy.length == 0)
					elts[i].disabled = false;
			}
		}
		else
		{
			var inputs = elts[i].getElementsByTagName('input');
			
			if (disable) Element.addClassName(elts[i], 'disabled');
			else Element.removeClassName(elts[i], 'disabled');
			
			for (var j = 0; j < inputs.length; j++)
			{
				if (inputs[j].disabledBy == undefined) inputs[j].disabledBy = [];
				
				if (disable)
				{
					inputs[j].disabledBy.push(elt.id);
					inputs[j].disabled = true;
				}
				else
				{
					var idx;
					
					while ((idx = inputs[j].disabledBy.indexOf(elt.id)) != -1)
						inputs[j].disabledBy.splice(idx,1);
				
					if (inputs[j].disabledBy.length == 0)
						inputs[j].disabled = false;
				}
			}
		}
	}
	return effs;
}

var divaRules =
{
	'a.help-link': function (elt)
	{
		elt.onclick = function ()
		{
			var text = document.getElementById(elt.id + '_text');
			
			if (text)
			{
				diva.popover.open(text);
				return false;
			}
		}
	},
	
	'#flash': function (elt)
	{
		new Effect.Fade(elt, { duration: 10 });
	},
	
	'span.op-edit-affil': function (elt)
	{
		elt.onclick = function ()
		{
			var id = elt.id.substr(9); // op_affil_xx
			var affil = $('op_affil');
			
			var inputBox = Builder.node('input', {id: 'op_affil_edit', type: 'text'});
			
			if (affil.firstChild.nodeValue != 'Unaffiliated')
				inputBox.value = affil.firstChild.nodeValue;
			
			affil.parentNode.replaceChild(inputBox, affil);
			
			elt.className = 'op-save-affil info';
			elt.innerHTML = 'Save affiliation';
			Behaviour.apply();
		};
	},
	
	'.op-save-affil': function (elt)
	{
		elt.onclick = function ()
		{
			var id = elt.id.substr(14); // op_affil_edit_xx
			var affilEdit = $('op_affil_edit');
			
			var affil = Builder.node('span', {id: 'op_affil'});
			
			if (affilEdit.value == '')
				affil.innerHTML = 'Unaffiliated';
			else
				affil.innerHTML = affilEdit.value;
			
			diva.invokeServerMethod('opportunities', 'affiliation', { id: id }, { postBody: 'affiliation=' + escape(affilEdit.value) });
			affilEdit.parentNode.replaceChild(affil, affilEdit);
			
			elt.className = 'op-edit-affil info';
			elt.innerHTML = 'Edit affiliation';
			Behaviour.apply();
		}
	},
	
	'input.dependency_check': function (elt)
	{
		checkDependents(elt);
		
		elt.onclick = function ()
		{
			effs = checkDependents(elt);
			new Effect.Parallel(effs, { duration: 3 });
		}
	},
	
	'#visibility_hidden': function (elt)
	{
		elt.onclick = function ()
		{
			var visibleControl = document.getElementById('visibility_visible');
			var toDisable = document.getElementsByClassName('vis-hidden-disable');
			var toReassign = [];
			var effs = checkDependents(visibleControl);
			
			for (var i = 0; i < toDisable.length; i++)
			{
				Element.addClassName(toDisable[i], 'disabled');
				var subInputs = toDisable[i].getElementsByTagName('input');
				
				for (var j = 0; j < subInputs.length; j++)
				{
					var control = subInputs[j];
					control.disabled = true;
					
					// If disabled and selected radio, reassign later...
					if (control.type == 'radio' && control.checked)
						toReassign.push(control.name);
				}
			}
			
			var toSelect = document.getElementsByClassName('vis-hidden-sel');
			for (var i = 0; i < toSelect.length; i++)
			{
				if (!toSelect[i].checked)
				{
					toSelect[i].checked = true;
					effs.push(new Effect.Highlight(toSelect[i].parentNode, { sync: true }));
					var toReassignIdx = toReassign.indexOf(toSelect[i].name);
					
					if (toReassignIdx != -1)
					{
						toReassign.splice(toReassignIdx, 1);
					}
				}
			}
			
			var inputs = elt.form.getElementsByTagName('input');
			
			for (var i = 0; i < toReassign.length; i++)
			{
				// Find the first in the same group that is not disabled,
				// select it and highlight it to alert the user of the
				// change.
				
				for (var j = 0; j < inputs.length; j++)
				{
					var control = inputs[j];
					if (!control.disabled && control.type == 'radio' && control.name == toReassign[i])
					{
						if (!Element.hasClassName(control, 'vis-hidden-sel'))
						{
							effs.push(new Effect.Highlight(control.parentNode, { sync: true }));
							control.checked = true;
						}
						break;
					}
				}
			}
			
			if (effs.length > 0) new Effect.Parallel(effs, { duration: 3, queue: 'end' });
		};
	},
	
	'#visibility_visible': function (elt)
	{
		elt.previous_onclick = elt.onclick;
		elt.onclick = function ()
		{
			checkDependents(elt);
			
			if (elt.checked)
			{
				var toEnable = document.getElementsByClassName('vis-hidden-disable');
				
				for (var i = 0; i < toEnable.length; i++)
				{
					Element.removeClassName(toEnable[i], 'disabled');
					var subInputs = toEnable[i].getElementsByTagName('input');
					
					for (var j = 0; j < subInputs.length; j++)
						subInputs[j].disabled = false;
				}
			}
		};
	},
	
	'div.my-page-module-popout-control': function (elt)
	{
		var id = elt.id.split('_')[1];
		var anchorId = 'my-page-module-popout-anchor_' + id;
		
		if (!document.getElementById(anchorId))
		{
			var anchor = Builder.node('a', { id: anchorId, href: 'javascript:void(null);', 'class': 'action' });
			var img = Builder.node('img', { src: 'images/icon_small_maximize.png', 'class': 'transparent', width: 16, height: 16 });
			
			anchor.appendChild(img);
			elt.appendChild(anchor);
			
			anchor.onclick = function ()
			{
				diva.invokeServerMethod('my', 'module', { id: id, mode: $F('viewmode'), account: $F('user') }, {
					callback: function (o)
					{
						var bodyDims = diva.getBodyDimensions();
						var contentBox = Builder.node('div', { style: 'width: ' +  Math.max(600, bodyDims.width * 0.66) + 'px;' });
						contentBox.innerHTML = o.responseText;
						diva.popover.open(contentBox);
					}
				});
			};
		}
	},
	
	'#fn': function (elt)
	{
		elt.onblur = function ()
		{
			if (trimSpaces(elt.value) == '')
			{
				Element.addClassName(elt, 'search-empty');
				elt.value = 'search';
			}
		};
		
		elt.onfocus = function ()
		{
			if (Element.hasClassName(elt, 'search-empty'))
			{
				Element.removeClassName(elt, 'search-empty');
				elt.value = '';
			}
		};
		elt.onblur();
	},
    
    '.form-account-autocomplete': function (elt)
    {
        if (elt)
        {
			var div = document.getElementsByClassName(elt, '.autocomplete');
			
            if (!div.length)
    		{
    			div = Builder.node('div', { 'class': 'autocomplete' });
                elt.appendChild(div);
    		}
            else
            {
                div = div[0];
            }
            
            new Ajax.Autocompleter('account', div, "rest?c=auth&m=autocomplete", 
                {
					afterUpdateElement: function(element, selected)
					{
                        var old = $('exact-account');
                        
                        if (old) old.remove();
						var id = selected.id.split('-')[2];
                        var hidden = Builder.node('input', {'type': 'hidden', name: 'exact-account', 'id': 'exact-account', value: id});
                        div.appendChild(hidden);
					},
                    
                    select: 'alias'
                }	
            );
        }
    },
    
    'div.post-teaser .blog-post-body p':  function (elt)
    {
        if (elt)
        {
          var found = elt.innerHTML.match(/^\s*(&nbsp;)*\s*$/);
          if (elt.nodeName != 'IMG' && found) 
          {
            if (elt.remove) 
            {   
                elt.remove();
            } 
            else 
            {
                if (elt.parentNode) {
                    elt.parentNode.removeChild(elt);
                }
            }
          }
        }
    },
    
    'div.post-teaser .blog-post-body p *': function(elt)
    {
        if (elt)
        {
            elt.style.fontSize = '12px';
        }
    }
    /*
    'form.popup-response-form': function (elt)
    {
        var i = 1;
        
        elt.onsubmit = function ()
        {
            var id = 'form-response-' + i++;
            var iframe = document.createElement('IFRAME');
            iframe.setAttribute('name', id);
            iframe.setAttribute('id', id);
            iframe.setAttribute('src', 'about:blank');
            iframe.style.position = 'absolute';
            iframe.style.top = '-1000px';
            iframe.style.left = '-1000px';
            document.body.appendChild(iframe);
            elt.setAttribute('target', id);
            
            var cb = function ()
            {
                iframe.detachEvent ? iframe.detachEvent('onload', cb) : iframe.removeEventListener('load', cb, false);
                
                // var doc = iframe.contentWindow ? 
                    // iframe.contentWindow.document : 
                    // iframe.contentDocument ? 
                        // iframe.contentDocument : 
                        // iframe.document;
                
                // var content = doc.body ? doc.body.innerHTML : null;
                
                iframe.style.top = '17%';
                iframe.style.left = '25%';
                iframe.style.width = '625px';
                iframe.style.height = '500px';
                iframe.style.zIndex = '9999';
            }

            iframe.attachEvent ? iframe.attachEvent('onload', cb) : iframe.addEventListener('load', cb, false);
        }
    }
    */
};

var fileRules = {
    '.add-folder-name': function (elt)
    {
        var select = $('add-folder');
        
        if (select)
        {
            if (select.value != 'new')
            {
                elt.style.display = 'none';
            }
            
            select.onchange = function ()
            {
                if (select.value == 'new')
                {
                    elt.style.display = 'block';
                }
                else
                {
                    elt.style.display = 'none';
                }
            }
        }
    },
    
    '.move-folder-name': function (elt)
    {
        var select = $('move-folder');
        
        if (select)
        {
            if (select.value != 'new')
            {
                elt.style.display = 'none';
            }
            
            select.onchange = function ()
            {
                if (select.value == 'new')
                {
                    elt.style.display = 'block';
                }
                else
                {
                    elt.style.display = 'none';
                }
            }
        }
    }
};

Behaviour.register(divaRules);
Behaviour.register(fileRules);
