/**
 * @author stefan
 */
if(!CMS)	{
	var CMS = {
		load : false,
		
		onload : [],
		
		addOnload : function(func, args)	{
			if(this.load)	{
				this.exec([func, args]);
				return;
			}
			this.onload.push([func, args]);
		},
		
		exec : function(x)	{
			//x[0](x[1]);
			x[0].call(null, x[1]);
		},
		
		doOnload : function()	{
			while(this.onload.length > 0)	{
				this.exec(this.onload.pop());
			}
			this.load = true;
		}
		
	}
	window.onload = CMS.doOnload.bind(CMS);
}


CMS.Nodemanager = {
	loading : false,
	
	loadNodeOptions : function(select, url, id)	{
		
		this.loading = true;
		
		var param = new Hash();
		param.set('action', 'getNodeOptions');
		param.set('nodetype', select.options[select.selectedIndex].value)
		param.set('id', id)
		
		new Ajax.Request(url,{
			method     : 'post',
			parameters : param,
			onSuccess  : this.updateOptions.bind(this),
			onFailure  : this.onLoadNodeOptionsFailure.bind(this)
		});
	},
	
	updateOptions : function(transport)	{
		
		$('nodeoptions').innerHTML = transport.responseText;
		this.loading = false;
	},
	
	onLoadNodeOptionsFailure : function(failure)	{
		alert('failure: ' + failure.toSource());
		this.loading = false;
	},
	
	switchSubNodeDisplay : function(element)	{
		//alert(element.hasClassName('open'))
		if(element.hasClassName('open'))	{
			this.unregisterItem(element);
			this.closeNode(element);
		}
		else if(element.hasClassName('close'))	{
			this.registerItem(element);
			this.openNode(element);
		}
	},
	
	openNode : function(element)	{
		element.removeClassName('close');
		element.addClassName('open');
		var sibling = element.siblings();
		for ( var i = 0; i < sibling.length; i++ )	{
			if (sibling[i].hasClassName('blindElement')) {
				sibling[i].setStyle({
					display: 'block'
				});
			}
		}
	},
	
	closeNode : function(element)	{
		element.removeClassName('open');
		element.addClassName('close');
		var sub = element.parentNode.getElementsByClassName('blindElement');
		for ( var i = 0; i < sub.length; i++ )	{
			sub[i].setStyle({
				display:'none'
			});
		}
	},
		
	expandAll : function()	{
		var sub = document.getElementsByClassName('blindElement');
		for ( var i = 0; i < sub.length; i++ )	{
			sub[i].setStyle({
				display:'block'
			});
		}
		var arrows = document.getElementsByClassName('structureitem');
		
		var elementIds = [];
		
		for ( var i = 0; i < arrows.length; i++ )	{
			if(arrows[i].hasClassName('close'))	{
				arrows[i].removeClassName('close');
				arrows[i].addClassName('open');
			}
			elementIds.push(arrows[i].id);
		}
		
		this.writeCookie(elementIds);
		
	},
		
	collapseAll : function()	{
		var sub = document.getElementsByClassName('blindElement');
		for ( var i = 0; i < sub.length; i++ )	{
			sub[i].setStyle({
				display:'none'
			});
		}
		
		var arrows = document.getElementsByClassName('structureitem');
		
		for ( var i = 0; i < arrows.length; i++ )	{
			if(arrows[i].hasClassName('open'))	{
				arrows[i].removeClassName('open');
				arrows[i].addClassName('close');
			}
		}
		this.writeCookie([]);
	},
	
	// Funktionen um den Zustand de Baumes in einem Cookie zu peristieren (schön gesagt!)
	writeCookie : function(arr)	{
		jimAuld.utils.cookies.set('document.location.href+openNodes', arr.toString());
	},
	
	readCookie : function()	{
		var val = jimAuld.utils.cookies.get(document.location.href+'openNodes');
		if(!val)	{
			return [];
		}
		return val.split(',')
	},
	
	initOpened : function()	{
		var items = this.readCookie('nodes');
		for(var i = 0; i < items.length; i++)	{
			var element = $(items[i]);
			if(element && element.hasClassName('close'))	{
				this.switchSubNodeDisplay(element);
			}
		}
	},
	
	registerItem : function(element)	{
		var nodes = this.readCookie();
		if(nodes.indexOf(element.id == -1))	{
			nodes.push(element.id)
			this.writeCookie(nodes);
		}
		
	},
	
	unregisterItem : function(element)	{
		var nodes = this.readCookie();
		if(nodes.indexOf(element.id != -1))	{
			nodes = nodes.without(element.id);
			var sub = element.parentNode.getElementsByClassName('structureitem');
			for ( var i = 0; i < sub.length; i++)	{
				nodes = nodes.without(sub[i].id);
			}
			this.writeCookie(nodes);
		}
	},
	
	moveToHref : function(url, id)	{
		var input = document.getElementById('NavNode' + id);
		if(input.value)	{
			document.location.href = url +'?id=' + id + '&idx=' + input.value
		}
		return;;
	}
	
	
}

CMS.TimePublisher = {
	switchState : function(checkbox, id)	{
		//var divs = $(id).select('[class="tblrow"]');
		
		
		if(checkbox.checked)	{
			$('timepublisherstart').style.display = 'block';
			$('timepublisherend').style.display = 'block';
			
		}
		else	{
			$('timepublisherstart').style.display = 'none';
			$('timepublisherend').style.display = 'none';
		}
		
	},
	
	changeState : function(select)	{
		var divs = $$('div.timeproperty');
		if(select.checked)	{
			divs[0].style.display = 'block';
			divs[1].style.display = 'block';
		}
		else	{
			divs[0].style.display = 'none';
			divs[1].style.display = 'none';
		}
	}
}

CMS.AdminForm = {
	submit : function(close)	{
		var form = $('adminform');
		form.insert(
			new Element('input', {type:'hidden',name:'task',value:'save'}),
			{ position: content }
		);
		if(close)	{
			form.insert(
				new Element('input', {type:'hidden',name:'close',value:'close'}),
				{ position: content }
			);
		}
		form.submit();
	},
	
	cancel : function(close)	{
		var form = $('adminform');
		form.insert(
			new Element('input', {type:'hidden',name:'task',value:'cancel'}),
			{ position: content }
		);
		form.submit();
	},
	
	addSubContent : function()	{
		var form = $('adminform');
		form.insert(
			new Element('input', {type:'hidden',name:'task',value:'save'}),
			{ position: content }
		);
		form.insert(
			new Element('input', {type:'hidden',name:'addsubcontent',value:'addsubcontent'}),
			{ position: content }
		);
		form.submit();
	},
	
	moveSubContent : function(nodeid, direction)	{
		var form = $('adminform');
		form.insert(
			new Element('input', {type:'hidden',name:'task',value:'moveSubContent'}),
			{ position: content }
		);
		form.insert(
			new Element('input', {type:'hidden',name:'nodeid',value:nodeid}),
			{ position: content }
		);
		form.insert(
			new Element('input', {type:'hidden',name:'direction',value:direction}),
			{ position: content }
		);
		form.submit();
	}
}

function initControls()
    {
      if(!$('sitemap'))	{
	  	return;
	  }
	  var lLiItems = $('sitemap').getElementsBySelector('li');
      
      for ( var i=0; i<lLiItems.length; i++ ) {
        lLiItems[i].onmouseover = function()
        {     
          var lCont = this.getElementsBySelector('[class="nodeControlsHover"]');
          setControlItemStyle(this.down('span'));
          if ( lCont.length != 0 ) {
            setControlItemStyle(this.down('span'), false);
          }
        }
        
        lLiItems[i].onmouseout = function()
        {
          setControlItemStyle(this.down('span'), false);
          //setControlItemStyle(this.up('span', false);
        }
        
      }
    }
    
    function setControlItemStyle(pElement, pOpenOrClose)
    {
      if ( !pElement ) {
        return;
      }
      
      pOpenOrClose = ( pOpenOrClose == undefined ) ? true : pOpenOrClose;
      
      //alert(pOpenOrClose);
      
      if ( pElement.hasClassName('nodeControls') && pOpenOrClose ) {
        pElement.removeClassName('nodeControls');
        pElement.addClassName('nodeControlsHover');
      } else {
        pElement.removeClassName('nodeControlsHover');
        pElement.addClassName('nodeControls');
      }
    }
	
CMS.addOnload(initControls)
CMS.addOnload(CMS.Nodemanager.initOpened.bind(CMS.Nodemanager))


CMS.Bookmark = {
	add : function()	{
		var bookmarks = this.get();
		
		bookmarks[document.location] = document.title
		this.set(bookmarks);
		return;
	},
	
	remove : function(url)	{
		var bookmarks = this.get();
		delete bookmarks[url];
		this.set(bookmarks);
		return;
	},
	
	set : function(bookmarks)	{ 
		jimAuld.utils.cookies.set('bookmarks', Object.toJSON(bookmarks), 8760000);
	},
	
	get : function()	{
		var val = jimAuld.utils.cookies.get('bookmarks');
		if(!val)	{
			return {};
		}
		
		return eval(val.evalJSON() );
	}
}

CMS.Validator = {
	options : [],
	
	email : function(mail)	{
		var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
		if (!filter.test(mail)) {
			return false;
		}
		return true;
	},
	
	validateForm : function(form)	{
		this.options = []
		var pass = true;
		for(var i = 0; i < form.elements.length; i++)	{
			
			for(var prop in this.VALIDATE)	{
				if(form.elements[i].className.indexOf(prop) != -1)	{
					
					if(this.VALIDATE[prop](form.elements[i]))	{
						CMS.removeClassName(form.elements[i], 'CMS_VALIDATION_FAILED');
					}
					else	{
						pass = false;
						CMS.addClassName(form.elements[i], 'CMS_VALIDATION_FAILED');
					}
				}
			}
		}
		var errormsg = $('formproperty_errormsg');
		if(errormsg)	{
			if(pass)	{
				errormsg.setStyle({
					'display' : 'none'
				})
			}
			else	{
				errormsg.setStyle({
					'display' : 'block'
				})
			}
		}
		return pass;
	},
	
	VALIDATE : {
		CMS_EMAIL : function(elem)	{
			return /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(elem.value)
		},
		CMS_NOTEMPTY : function(elem)	{
			return /\S+/.test(elem.value)
		},
		CMS_INTEGER : function(elem)	{
			return /^\s*[0-9]+\s*$/.test(elem.value)
		},
		CMS_CHECKED : function(elem)	{
			return elem.checked;
		},
		CMS_REQUIRED : function(elem)	{
			
			if(elem.checked)	{
				return true;
			}
			
			for(var i = 0; i < elem.form.elements.length; i++)	{
				if(elem.form.elements[i].name == elem.name && elem.form.elements[i].checked)	{
					return true
				}
			}
			return false
		}
	}
}

CMS.addClassName = function(elem, className)	{
	if(elem.className.indexOf(className) == -1)	{
		elem.className = elem.className + ' ' + className;
	}
}

CMS.removeClassName = function(elem, className)	{
	while (true) {
		if (elem.className.indexOf(className) != -1) {
			var tmp = elem.className.gsub(className, '');
			elem.className = tmp.gsub('  ', ' ');
		}
		else {
			break;
		}
	}
	return;
}



