var OrganizerTest = {
	setup: function()
	{
		var thisObj = this;
		this.test = 0;
	},
	move: function(value)
	{
		if (this.test != 0)
		{
			var oldstdelem = $('standard_' + this.test);
			oldstdelem.removeClassName('selected');
		}
		
		if (this.test == value)
		{
			this.test = 0;
			return false;
		}
		
		this.test = value;
		
		var stdelem = $('standard_' + this.test);
		stdelem.addClassName('selected');
		
		return false;
	},
	place: function(self)
	{
		if (this.test != 0)
		{
			var stdelem = $('standard_' + this.test);
			var parent_id = stdelem.next('li.place_button').identify().sub('place_', '');
			
			var target = self.up('li');
			var id = target.identify().sub('place_', '');
			
			if (id == this.test)
			{
				this.test = 0;
				stdelem.removeClassName('selected');
				return false;
			}
			
			var temp_id = this.test;
			
			stdelem.removeClassName('selected');
			stdelem.addClassName('modified');
			
			target.insert({before: stdelem});
			
			var data = $('organizer_data');

			var results_ref = data.select('div.parent_ref_' + temp_id);
			
			if (results_ref.length == 0)
			{
				var wrapper = new Element('div');
				wrapper.addClassName('standard_change');
				wrapper.addClassName('parent_ref_' + temp_id);
				
				var temp_name = $('name_' + temp_id).innerHTML;
				var name = $('name_' + id).innerHTML;
				
				wrapper.insert(new Element('div', {'class': 'change_parent'}).update('<b>' + temp_name + '</b> moved under <b>' + name + '</b>.'));
				wrapper.insert(new Element('input', {name: 'standard_change_parent', value: temp_id, type: 'hidden'}));
				wrapper.insert(new Element('input', {name: 'standard_new_parent_id', value: id, type: 'hidden'}));
				data.insert(wrapper);
			}
			else
			{
				results_ref.each(function(item)
				{
					var parent_item = item.down('input[name=standard_new_parent_id]');
					parent_item.setValue(id);
					
					var temp_name = $('name_' + temp_id).innerHTML;
					var name = $('name_' + id).innerHTML;
					
					var item_text = item.down('div');
					item_text.update('<b>' + temp_name + '</b> moved under <b>' + name + '</b>.');
				});
			}
			
			var results = data.select('div.ref_' + temp_id);
			
			if (results.length > 0)
			{
				results.each(function(item)
				{
					item.remove();
				});
			}
			
			this.addOrder(temp_id);
			
			this.reorderAll(parent_id);
			
			this.test = 0;
		}
		return false;
	},
	up: function(id)
	{
		var stdelem = $('standard_' + id);
		
		var target = stdelem.previous('li.standard');
		
		if (target != null && target != undefined)
		{
			target.insert({before: stdelem});
			stdelem.addClassName('modified');
			
			var data = $('organizer_data');
			
			var siblings = stdelem.previousSiblings('li.standard');
			var rank = siblings.length;
			
			var parent_id = target.next('li.place_button').identify().sub('place_', '');
			
			
			var results_ref = data.select('div.ref_' + id);
			
			if (results_ref.length == 0)
			{
				var wrapper = new Element('div');
				wrapper.addClassName('standard_change');
				wrapper.addClassName('ref_' + id);
				wrapper.addClassName('parent_' + parent_id);
				
				var name = $('name_' + id).innerHTML;
				
				wrapper.insert(new Element('div', {'class': 'change_order'}).update('<b>' + name + '</b> moved to order ' + rank + '.'));
				wrapper.insert(new Element('input', {name: 'standard_change_order', value: id, type: 'hidden'}));
				wrapper.insert(new Element('input', {name: 'standard_new_rank', value: rank, type: 'hidden'}));
				data.insert(wrapper);
			}
			
			this.reorderAll(parent_id);
		}

		return false;
	},
	down: function(id)
	{
		var stdelem = $('standard_' + id);

		var target = stdelem.next('li.standard');
		
		if (target != null && target != undefined)
		{
			target.insert({after: stdelem});
			stdelem.addClassName('modified');
			
			var data = $('organizer_data');
			
			var siblings = stdelem.previousSiblings('li.standard');
			var rank = siblings.length;
			
			var parent_id = target.next('li.place_button').identify().sub('place_', '');
			
			
			var results_ref = data.select('div.ref_' + id);
			
			if (results_ref.length == 0)
			{
				var wrapper = new Element('div');
				wrapper.addClassName('standard_change');
				wrapper.addClassName('ref_' + id);
				wrapper.addClassName('parent_' + parent_id);
				
				var name = $('name_' + id).innerHTML;
				
				wrapper.insert(new Element('div', {'class': 'change_order'}).update('<b>' + name + '</b> moved to order ' + rank + '.'));
				wrapper.insert(new Element('input', {name: 'standard_change_order', value: id, type: 'hidden'}));
				wrapper.insert(new Element('input', {name: 'standard_new_rank', value: rank, type: 'hidden'}));
				data.insert(wrapper);
			}
			
			this.reorderAll(parent_id);
		}
		
		return false;
	},
	reorderAll: function(parent_id)
	{
		var data = $('organizer_data');
		var results = data.select('div.parent_' + parent_id);
		
		if (results.length > 0)
		{
			results.each(function(item)
			{
				var item_id = item.down('input[name=standard_change_order]').getValue();
				var item_standard = $('standard_' + item_id);
				
				var item_siblings = item_standard.previousSiblings('li.standard');
				var item_rank = item_siblings.length;
			
				var rank_item = item.down('input[name=standard_new_rank]');
				rank_item.setValue(item_rank);
				
				var name = $('name_' + item_id).innerHTML;
				
				var item_text = item.down('div');
				item_text.update('<b>' + name + '</b> moved to order ' + item_rank + '.');
			});
		}
	},
	addOrder: function(id)
	{
		var data = $('organizer_data');
		var stdelem = $('standard_' + id);
		var parent_id = stdelem.next('li.place_button').identify().sub('place_', '');
		
		var siblings = stdelem.previousSiblings('li.standard');
		var rank = siblings.length;
	
		var wrapper = new Element('div');
		wrapper.addClassName('standard_change');
		wrapper.addClassName('ref_' + id);
		wrapper.addClassName('parent_' + parent_id);
		
		wrapper.insert(new Element('div', {'class': 'change_order'}).update('Order of ' + id + ' set to rank ' + rank + '.'));
		wrapper.insert(new Element('input', {name: 'standard_change_order', value: id, type: 'hidden'}));
		wrapper.insert(new Element('input', {name: 'standard_new_rank', value: rank, type: 'hidden'}));
		data.insert(wrapper);
	}
}

var standardstoggle = function(id, target, togglelink, view, edit)
{
    target = $(target);
    togglelink = $(togglelink);
    
    if(togglelink.hasClassName('plus'))
    {
        togglelink.removeClassName('plus').addClassName('minus');
        
        target.show();
        if(!target.standardsLoaded)
        {
            target.update(progressWheel('Loading Standards...'));
            new Ajax.Updater(target, baseURL+'/standards.nn', { 
                parameters: { id : id, url: portletURL, view: view, edit: edit }, 
                method: 'post',
                onSuccess: function() { target.standardsLoaded = true; },
                onFailure: function() { target.standardsLoaded = false; target.update('Failed to retrieve standards.  This may be caused by a bad connection to the server...'); }
            });
        }
    }
    else
    {
        togglelink.addClassName('plus').removeClassName('minus');
        
        target.hide();    
    }
    
    return false;
}

var addSelectValue = function(addValue, select, msg)
{
    select = $(select);
    
    if($(select).value == addValue)
    {
        var newval = prompt(msg,'');
        
        if(newval != null && newval != '')
        {
            var option = document.createElement('option');
            
            option.innerHTML = newval;
            option.value = newval;
            
            select.appendChild(option);
            select.options[select.options.length-1].selected = true;
        }
        else
        {
            select.options[0].selected = true;                
        }
    }
}

var removeProperty = function(propname, inputpropname)
{
    var div=$('prop_'+propname);
    if(div)
    {
        var label = $('proplabel_'+propname).innerHTML.replace(/:$/, '');
        
        var opt = document.createElement('option');
		
        opt.value = propname;
        opt.text = label;

		//This solution works for both IE and FF
		var select = $(inputpropname)
		select.options[select.length] = opt;

        div.parentNode.removeChild(div);
    }
    
    return false;
}

var addProperty = function(inputpropname, proplist)
{    
    var opts = $(inputpropname).options;
    var idx = $(inputpropname).selectedIndex;
    if(idx < 0) { return false; }
    var propname = opts[idx].value;
    var labelval = opts[idx].text;
    
    
    if(propname && !$('prop_'+propname))
    {
        $(inputpropname).remove(idx);
        var input;
        var postAddFunc = null;
        if(propname == 'example' || propname == 'purpose')
        {
            input = new Element('textarea', {cols: 105, rows: 2, name: propname, type: 'text', id: 'property_'+propname });
            input.setStyle({width: '100%'});
			// As of #626, these are once again textarea inputs
            //postAddFunc = function() { registerTextArea('property_'+propname, { toolbar: 'small' }) };
        }
        else
        {
            input = new Element('input', {name: propname, type: 'text', id: 'property_'+propname, size: 3});
        }
        
        
        labelval = Cognoti.getI18N('standards', 'property.'+labelval, labelval);
        
        var label = new Element('label', {'for': 'property_'+propname, 'id': 'proplabel_'+propname}).update(labelval+':');
        
        var div = new Element('div', { id: 'prop_'+propname });
        
        var a = new Element('button', { 'type': 'button', 'class': 'small_button', 'title': 'Remove Property'}).update('&times;');
        
        div.insert(a.wrap('span', { 'class': 'remove'}))
           .insert(' ')
           .insert(label)
           .insert(' ')
           .insert(input);
        
        $(proplist).appendChild(div);
        
        a.observe('click', function() { removeProperty(propname, inputpropname); });
        
        //create new property  

        if(postAddFunc)
        {
            postAddFunc();    
        }
            
    }
    
    return false;
}

