/**
 * PAGEBUTLER JavaScript
 * (c) Copyright 2004-2008 Media Trooper GmbH
 * www.mediatrooper.de
 */

Object.extend(Prototype.Browser, {
     WebKit419: Prototype.Browser.WebKit && (Prototype.BrowserFeatures.XPath),
     WebKit420: Prototype.Browser.WebKit && (!Prototype.BrowserFeatures.XPath),
     IE6:      Prototype.Browser.IE && (typeof window.XMLHttpRequest == "undefined"),
     IE7:      Prototype.Browser.IE && (typeof window.XMLHttpRequest == "object")
});

function submitAdminForm( sa )
{
	var f = document.getElementById('adminform');
	if( sa )
	{
		f.submitaction.value = sa;
	}
	if( f.getAttribute("ajax") )
	{
		var tas = f.getElementsByTagName("iframe");
		if( tas.length>0 )
		{
			tinyMCE.triggerSave();
		}
		for (i = 0; i < tas.length; i++)
		{ 
			if( tas[i].className=="mceEditorIframe" )
			{
				tinyMCE.execCommand("mceRemoveControl", false, tas[i].id); 
			}
		}
		submitAjaxForm('adminform','ajaxAdminForm');
	}
	else
	{
		f.submit();
	}
}

function ow(url,w,h,addons) 
{
	if(addons==undefined) addons="";
	var w = window.open(url, "_blank", "width="+w+",height="+h+","+addons);
	if(w && w.focus) w.focus();
}

function pbRedirect( url, pause )
{
	window.setTimeout("document.location='"+url+"';", pause*1000);
}

function getSelectValue( domid )
{
	var s = document.getElementById(domid);
	var i = s.selectedIndex;
	return s.options[i].value;
}

function clearInput(i,s)
{
	if(i.value==s)i.value='';
}
function unclearInput(i,s)
{
	if(i.value=='')i.value=s;
}

var logoutDone = false;
function logmeout()
{
	if( logoutDone==true )
	{
		return false;
	}
	logoutDone = true;
	new Effect.Fade('container', {duration: 0.5});
	ajaxRemoteFunction('ajaxBuddy', '/admin/contacts/logout');
	return false;
}
function showAjaxBuddy()
{
	new Effect.SlideDown('ajaxBuddy', {duration: 0.5});
}

function checkedRow( e )
{
	var e = $(e);
	if( e.checked==true )
	{
		e.up('tr').addClassName("active");
	}
	else
	{
		e.up('tr').removeClassName("active");
	}
}

function overRow( e,status )
{
	var e = $(e);
	if( status==true )
	{
		e.addClassName("over");
	}
	else
	{
		e.removeClassName("over");
	}
}

function checkedItem( e )
{
	var e = $(e);
	if( e.checked==true )
	{
		e.up('div').addClassName("active");
	}
	else
	{
		e.up('div').removeClassName("active");
	}
}

/**
 * CONTENT EDITOR
 */

var currentPageNavigationId = 0;
function checkTypSelection( typeDomid, contentDomid )
{
	var v = getSelectValue( typeDomid );
	if( v=='content' )
	{
		document.getElementById( contentDomid ).style.display = "block";
	}
	else
	{
		document.getElementById( contentDomid ).style.display = "none";
	}
}

function copyTitleToName(fm, targetId)
{
	var t = document.getElementById(targetId);
	var v = fm.value.toLowerCase();
	v = v.replace(/-/g, "_");
	v = v.replace(/\W/g, "");
	v = v.replace(/_/g, "-");
	if( t )
	{
		t.value = v;
	}
	return true;
}

function setCurrentPageNavigationId(i)
{
	currentPageNavigationId = i;
}

function updateCurrentPageNavigationSelect()
{
	if(currentPageNavigationId)
	{
		document.getElementById('navilink'+currentPageNavigationId).style.fontWeight = "bold";
	}
}

function changePageNavigationId( newnav )
{
	
}

function updateNaviTreeSelect(preselecid,selfid)
{
	var wi = document.getElementById('selectwebsite').selectedIndex;
	var wv = document.getElementById('selectwebsite').options[wi].value;
	if( document.getElementById('selectlanguage').selectedIndex )
	{
		var li = document.getElementById('selectlanguage').selectedIndex;
		var lv = document.getElementById('selectlanguage').options[li].value;
	}
	else
	{
		var lv = document.getElementById('selectlanguage').value;
	}
	ajaxRemoteFunction('navigationidselect', '/admin/pages/naviaddtreeselect/'+wv+'/'+lv+'/'+preselecid+'/'+selfid);
}

// ---------------------------------------
//  CEL = Content Editor List
// ---------------------------------------
function CEL() {
	
	var CEL_contentTypeId = 0;
	var CEL_offset = 0;
	var CEL_offsetSteps = 25;
	var CEL_searchword = "";
	var CEL_itemcount = 0;
	var CEL_orderby = "";
	var CEL_orderdesc = false;
	var CEL_requestident = 0;
	var CEL_lastsearchtime = 0;
	var CEL_searchevent = false;
	var CEL_parentContentId = 0;
	var CEL_treemode = false;
	
	this.setTypeId = function (contenttypeid)
	{
		CEL_contentTypeId = contenttypeid;
	}
	this.isSortable = function ()
	{
		
	}
	this.setParentContentId = function(id)
	{
		CEL_parentContentId = id;
	}
	this.setItemcount = function (i)
	{
		CEL_itemcount = Number(i);
	}
	this.setOffsetSteps = function (i)
	{
		CEL_offsetSteps = Number(i);
	}
	this.activateTree = function ()
	{
		// ist tree-datenbasis
		CEL_treemode = true;
	}
	this.reloadSearchword = function ()
	{
		var s = document.getElementById('searchtext'+CEL_contentTypeId).value;
		CEL_searchword = s;
	}
	this.changeItemsPerPage = function(i)
	{
		this.setOffsetSteps(i);
		this.requestList();
	}
	this.handleSearch = function (force)
	{
		var s = document.getElementById('searchtext'+CEL_contentTypeId).value;
		var jetzt = new Date();
	  	var Zeit = jetzt.getTime() - 500;
	  	if(force || (s.length>1 && CEL_lastsearchtime<Zeit && s!=CEL_searchword))
		{
			CEL_lastsearchtime = jetzt.getTime();
			CEL_searchword = s;
			CEL_offset = 0;
			this.requestList();
			if(CEL_searchevent)
				window.clearInterval(CEL_searchevent);
			CEL_searchevent = window.setInterval("myCEL"+CEL_contentTypeId+".handleSearch()", 500);
		}
	}
	this.clearSearch = function ()
	{
		if(CEL_searchevent)
			window.clearInterval(CEL_searchevent);
		document.getElementById('searchtext'+CEL_contentTypeId).blur();
		document.getElementById('searchtext'+CEL_contentTypeId).value = "Suchbegriff";
		CEL_searchword = "";
		CEL_lastsearchtime = 0;
		this.requestList();
	}
	this.requestList = function ()
	{
		var orderdesc = 0;
		if( CEL_orderdesc )
			orderdesc = 1;
		CEL_requestident++;
		document.getElementById('waitimage'+CEL_contentTypeId).style.display='block';
		var url = "/admin/contents/list_view/"+CEL_contentTypeId+
										"/"+CEL_requestident+"?r="+Math.random();
		//ajaxRemoteFunction("ajaxContentList"+CEL_contentTypeId, url);
		
		new Ajax.Updater("ajaxContentList"+CEL_contentTypeId, url, {
			parameters: { 	offset: CEL_offset,
							offsetSteps: CEL_offsetSteps,
							searchword: CEL_searchword,
							orderby: CEL_orderby,
							orderdesc: orderdesc,
							parentContentId: CEL_parentContentId
						},
			method: 'post',
			asynchronous:true, 
			evalScripts:true
			});
	}
	this.next = function ()
	{
		CEL_offset += CEL_offsetSteps;
		this.requestList();
	}
	this.back = function ()
	{
		CEL_offset -= CEL_offsetSteps;
		if( CEL_offset<0 )
		{
			CEL_offset=0;
		}
		this.requestList();
	}
	this.redrawToolbar = function (requestident)
	{
		if( CEL_offset<=0 )
		{
			document.getElementById('backBtnOn'+CEL_contentTypeId).style.display = "none";
			document.getElementById('backBtnOff'+CEL_contentTypeId).style.display = "block";
		}
		else
		{
			document.getElementById('backBtnOn'+CEL_contentTypeId).style.display = "block";
			document.getElementById('backBtnOff'+CEL_contentTypeId).style.display = "none";
		}
		if( (CEL_offset+CEL_offsetSteps)>=CEL_itemcount )
		{
			document.getElementById('nextBtnOn'+CEL_contentTypeId).style.display = "none";
			document.getElementById('nextBtnOff'+CEL_contentTypeId).style.display = "block";
		}
		else
		{
			document.getElementById('nextBtnOn'+CEL_contentTypeId).style.display = "block";
			document.getElementById('nextBtnOff'+CEL_contentTypeId).style.display = "none";
		}
		var rangeTo = (CEL_offset+CEL_offsetSteps);
		if(rangeTo>CEL_itemcount)
		{
			rangeTo=CEL_itemcount;
		}
		document.getElementById('rangeText'+CEL_contentTypeId).innerHTML = (CEL_offset+1)+"-"+rangeTo+" / "+CEL_itemcount+"";
		// wait-image
		if(requestident==CEL_requestident)
		{
			document.getElementById('waitimage'+CEL_contentTypeId).style.display='none';
		}
	}
}

/**
 * ASSETS-LIST ContentHandler
 */

var ALcount = 0;
function ALassetAd(id,name,assetId)
{
	ALcount++;
	var newAssetSelectid = id+'-'+ALcount;
	var emptyAsset = 	'<div class="alitem" id="alitem_'+newAssetSelectid+'"><div id="ajaxcontainer_'+newAssetSelectid+'"></div>'+
						'<input type="hidden" name="'+name+'[]" value="'+assetId+'" id="'+newAssetSelectid+'" /></div>';
	var container = document.getElementById('al_container_'+id);
	var h = container.innerHTML;
	container.innerHTML = h + emptyAsset;
	ajaxRemoteFunction('ajaxcontainer_'+newAssetSelectid+'','/admin/assets/viewsmall/'+assetId+'/'+newAssetSelectid+'');
	ALsortingStart(id);
}

var currentChoosedAssetDivId = "";
function chooseAsset(id)
{
	var parentId = id.substring(0,id.lastIndexOf("-"));
	if( currentChoosedAssetDivId!="" )
	{
		var currentParentId = currentChoosedAssetDivId.substring(0,currentChoosedAssetDivId.lastIndexOf("-"));
		if(currentParentId!=parentId)
		{
			document.getElementById('al_options_'+currentParentId+'_on').style.display = 'none';
			document.getElementById('al_options_'+currentParentId+'_off').style.display = 'block';
		}
		document.getElementById('alitem_'+currentChoosedAssetDivId).style.borderColor = '#ffffff';
	}
	if( currentChoosedAssetDivId==id )
	{
		currentChoosedAssetDivId = "";
		document.getElementById('al_options_'+parentId+'_on').style.display = 'none';
		document.getElementById('al_options_'+parentId+'_off').style.display = 'block';
	}
	else
	{
		var alitem = document.getElementById('alitem_'+id);
		alitem.style.borderColor = '#f4a022';
		currentChoosedAssetDivId = id;
		document.getElementById('al_options_'+parentId+'_on').style.display = 'block';
		document.getElementById('al_options_'+parentId+'_off').style.display = 'none';
	}
	//document.getElementById('al_options_'+parentId).blur();
}
function ALsortingStart(id)
{
	Sortable.create('al_container_'+id, {tag:'div',only:'alitem',overlap:'horizontal',constraint:false});
}
function deleteChoosedAsset()
{
	var id = currentChoosedAssetDivId;
	if( id!='' )
	{
		var parentId = id.substring(0,id.lastIndexOf("-"));
		var alitem = document.getElementById('alitem_'+id);
		alitem.innerHTML='';
		alitem.style.display = 'none';
		currentChoosedAssetDivId = "";
		ALsortingStart(parentId);
		document.getElementById('al_options_'+parentId+'_on').style.display = 'none';
		document.getElementById('al_options_'+parentId+'_off').style.display = 'block';
	}
}

/* NOT IN USE: */
function deleteDroppedAsset(element)
{
	var id = element.id.substring(element.id.indexOf("_")+1,100);
	chooseAsset(id);
	deleteChoosedAsset();
}
function ALregisterTrashElement(id)
{
	Droppables.add('actionbar_'+id, {
	   accept: 'alitem',
	   onDrop: function(element) 
	     { deleteDroppedAsset(element); }});
}


/**
 * ASSETS MANAGER
 */

var idForAssetSelection = "";
var editorForAssetSelection = "";
var currentSelectedAssetId = 0;
var currentSelectedFolderId = 0;
var currentSelectedAssetData = "";
var currentAssetFolderId = 0;
var viewtypeForAssetSelection = "";
var assetMultiselect = new Hash();
var assetManagerFancyZoom = null;
function initAssetsManagerLink(linkid,divid,viewtype,autostart)
{
	var myFancyZoom = new FancyZoom(linkid,{"width":650,"height":400});
	myFancyZoom.setAssetmanager(divid,viewtype);
	if(autostart)
	{
		myFancyZoom.open();
	}
}
function initAssetsManager(folder_id)
{
	assetMultiselect = new Hash();
	ajaxRemoteFunction('assetsManagerContent', '/admin/asset_folders/index/'+folder_id);
}
function hideAssetsManager()
{
	/*document.getElementById('assetsFolder').style.display = 'none';
	document.getElementById('assetsList').style.display = 'none';
	document.getElementById('assetListActionBar').style.display = 'none';
	new Effect.BlindUp('assetsManager', {duration: 0.5});*/
	FancyZoomBox.hide();
}
function startSelectAsset(assetid, divid, viewtype)
{
	idForAssetSelection = divid;
	if( viewtype )
		viewtypeForAssetSelection = viewtype;
	else
		viewtypeForAssetSelection = "view";
	//ajaxRemoteFunction( "AjaxHolderForAssetsManager", "/admin/assets/manager/"+assetid );
	
}
function addFolder()
{
	ajaxRemoteFunction('assetsManagerOptions', '/admin/asset_folders/add/'+currentAssetFolderId);
	$('assetsManagerOptions').show();
}
function openFolder(folder_id)
{
	ajaxRemoteFunction('assetsManagerContent', '/admin/asset_folders/index/'+folder_id);
	$('assetsManagerOptions').update("");
	$('assetsManagerOptions').hide();
}
function registerAssetItem( assetid, asset_data )
{
	$('assetitem_'+assetid).observe("click",function(event){clickAsset(assetid, asset_data, event)});
}
function clickFolder(folderid)
{
	if( doubleClickFolderId(folderid) )
	{
		return;
	}
	// hier asset selection lösen:
	if( assetMultiselect.keys().length>0 )
	{
		// kein shift mehr, alles löschen
		assetMultiselect.each(function(p){
			document.getElementById('assetitemthumb_'+p.key).style.borderColor = '#222';
		});
		currentSelectedAssetId = 0;
		assetMultiselect = new Hash();
	}
	// folder hervorheben:
	resetFolderSelection();
	document.getElementById('folderitemthumb_'+folderid).style.borderColor = '#f4a022';
	currentSelectedFolderId = folderid;
	// optionen einblenden:
	ajaxRemoteFunction( 'assetsManagerOptions', '/admin/asset_folders/options/'+folderid );
	$('assetsManagerOptions').show();
}
function resetFolderSelection()
{
	if( currentSelectedFolderId>0 )
	{
		document.getElementById('folderitemthumb_'+currentSelectedFolderId).style.borderColor = '#222';
		currentSelectedFolderId = 0;
	}
}
function clickAsset(assetid, asset_data, event)
{
	var shiftPressed = false;
	if(event)
	{
		Event.stop(event); 
		if(event.shiftKey) { shiftPressed=true; }
	}
	
	resetFolderSelection();
	currentSelectedAssetData = asset_data;
	if( assetMultiselect.keys().length>0 && shiftPressed==false )
	{
		// kein shift mehr, alles löschen
		assetMultiselect.each(function(p){
			document.getElementById('assetitemthumb_'+p.key).style.borderColor = '#222';
			if( p.key==assetid )
			{
				currentSelectedAssetId = 0;
				//document.getElementById('assetitemthumb_'+p.key).style.borderColor = '#222';
			}
		});
		assetMultiselect = new Hash();
	}
	if( assetMultiselect.get(assetid) )
	{
		currentSelectedAssetId = 0;
		assetMultiselect.unset(assetid);
		document.getElementById('assetitemthumb_'+assetid).style.borderColor = '#222';
	}
	else
	{
		document.getElementById('assetitemthumb_'+assetid).style.borderColor = '#f4a022';
		currentSelectedAssetId = assetid;
		assetMultiselect.set(assetid, asset_data);
	}
	
	finishAssetSelection(assetid);
}
function finishAssetSelection(assetid)
{
	if( assetMultiselect.keys().length==1 )
	{
		// nur bei einem asset doubleclick!!
		if( doubleClickAssetId(assetid)==true )
			return;
		assetid = assetMultiselect.keys()[0];
		$('assetsManagerOptions').show();
		ajaxRemoteFunction( 'assetsManagerOptions', '/admin/assets/options/'+assetid );
	}
	else if( assetMultiselect.keys().length>1 )
	{
		$('assetsManagerOptions').show();
		ajaxRemoteFunction( 'assetsManagerOptions', '/admin/assets/multi_options' );
	}
	else if( assetMultiselect.keys().length==0 )
	{
		$('assetsManagerOptions').update("");
		$('assetsManagerOptions').hide();
	}
}
function addToAssetSelection(assetid)
{
	document.getElementById('assetitemthumb_'+assetid).style.borderColor = '#f4a022';
	currentSelectedAssetId = assetid;
	assetMultiselect.set(assetid, "");
	finishAssetSelection(assetid);
}
function preselectAsset(assetid)
{
	alert("preselectasset "+assetid);
	clickAsset(assetid);
	var posTop = document.getElementById('assetitemthumb_'+assetid).offsetTop - document.getElementById('assetsListScrollFrame').offsetTop;
	var itemHeight = document.getElementById('assetitemthumb_'+assetid).offsetHeight;
	var assetsListScrollFrame = document.getElementById('assetsListScrollFrame');
	if( posTop > (assetsListScrollFrame.offsetHeight-itemHeight) )
	{
		assetsListScrollFrame.scrollTop = posTop-4;
	}
}
function reloadAssetList()
{
	assetMultiselect = new Hash();
	currentSelectedFolderId = 0;
	ajaxRemoteFunction( 'assetsManagerContent', '/admin/asset_folders/index/'+currentAssetFolderId );
}
function deleteAsset(assetid)
{
	var assetItem = document.getElementById('assetitem_'+assetid);
	assetItem.style.display = 'none';
	if( assetMultiselect.get(assetid) )
	{
		assetMultiselect.unset(assetid);
	}
	resetAssetListOptions();
}
function initDeleteAssets()
{
	var ids = assetMultiselect.keys().join(",");
	ajaxRemoteFunction( 'assetsManagerOptions', '/admin/assets/delete/'+ids );
}
function resetAssetListOptions()
{
	currentSelectedAssetId = 0;
	currentSelectedFolderId = 0;
	assetMultiselect = new Hash();
	//document.getElementById('assetOptions').style.display = 'none';
	//document.getElementById('assetListUploaderFrame').style.display = 'block';
}
var assetsmanagerDoubleClickId = 0;
var assetsmanagerDoubleTime = 0;
function doubleClickAssetId(assetid)
{
	var jetzt = new Date();
	var zeit = jetzt.getTime();
	if( assetsmanagerDoubleClickId==assetid )
	{
		if(assetsmanagerDoubleTime+400 > zeit)
		{
			selectAsset(assetid);
			return true;
		}
	}
	assetsmanagerDoubleTime = zeit;
	assetsmanagerDoubleClickId = assetid;
	return false;
}
var assetsmanagerDoubleClickFolderId = 0;
function doubleClickFolderId(folderid)
{
	var jetzt = new Date();
	var zeit = jetzt.getTime();
	if( assetsmanagerDoubleClickFolderId==folderid )
	{
		if(assetsmanagerDoubleTime+400 > zeit)
		{
			openFolder(folderid);
			return true;
		}
	}
	assetsmanagerDoubleTime = zeit;
	assetsmanagerDoubleClickFolderId = folderid;
	return false;
}
function selectAssets()
{
	if( viewtypeForAssetSelection=="mce" || viewtypeForAssetSelection=="mce2" )
	{
		alert("In den Text-Editor kann nur ein Asset gleichzeitig eingefügt werden.");
	}
	else if( viewtypeForAssetSelection != "viewsmall" )
	{
		alert("In dieses Feld kann nur ein Asset eingefügt werden.");
	}
	else
	{
		var container = $('ajaxcontainer_'+idForAssetSelection).up(".noinput");
		var name = container.down("input").getAttribute("name");
		var assetId;
		var id = container.identify();
		id = id.substring(13,id.length);
		
		assetMultiselect.each(function(p){
			
			ALcount++;
			assetId = p.key;
			var newAssetSelectid = id+'-'+ALcount;
			var emptyAsset = 	'<div class="alitem" id="alitem_'+newAssetSelectid+'"><div id="ajaxcontainer_'+newAssetSelectid+'"></div>'+
								'<input type="hidden" name="'+name+'" value="'+assetId+'" id="'+newAssetSelectid+'" /></div>';
			container.insert({bottom:emptyAsset});
			ajaxRemoteFunction('ajaxcontainer_'+newAssetSelectid+'','/admin/assets/viewsmall/'+assetId+'/'+newAssetSelectid+'');
			
		});
		
		$('ajaxcontainer_'+idForAssetSelection).up(".alitem").remove();
		currentChoosedAssetDivId = "";
		ALsortingStart(id);
		
		setTimeout("hideAssetsManager();",100);
		//
		// reset manager
		idForAssetSelection = "";
		currentSelectedAssetId = 0;
		currentSelectedAssetData = "";
	}
}
function selectAsset(assetid)
{
	if( viewtypeForAssetSelection=="mce" )
	{
		// in html-editor einfügen
		var inst = tinyMCE.getInstanceById(idForAssetSelection);
		var elm = inst.selection.select;
		if (elm != null && elm.nodeName == "IMG") 
		{
			var w = elm.getAttribute('width');
			if(!w) w=200;
			var h = elm.getAttribute('height');
			if(!h) h=100;
			var src = '/assets/thumb/'+assetid+'/'+w+'x'+h+'/'+currentSelectedAssetData;
			elm.setAttribute('src', src);
			elm.setAttribute('assetid', assetid);
		} 
		else 
		{
			var src = '/assets/thumb/'+assetid+'/200x100/'+currentSelectedAssetData;
			var html = "<img";
	
			html += makeAttrib('src', src);
			html += makeAttrib('assetid', assetid);
			html += makeAttrib('alt');
			html += makeAttrib('title');
			html += makeAttrib('width');
			html += makeAttrib('height');
			html += makeAttrib('id');
			html += makeAttrib('class', '');
			html += " />";
	
			inst.execCommand("mceInsertContent", false, html);
		}
	}
	else if( viewtypeForAssetSelection=="mce2" )
	{
		// link einfügen
		var inst = tinyMCE.getInstanceById(idForAssetSelection);
		var elm = inst.selection.select;
		var src = '/assets/download/'+assetid+'/'+currentSelectedAssetData;
		var html = "<a";
	
		html += makeAttrib('href', src);
		html += makeAttrib('assetid', assetid);
		html += makeAttrib('class', '');
		html += ">"+currentSelectedAssetData+"</a>";

		inst.execCommand("mceInsertContent", false, html);
	}
	else
	{
		document.getElementById(idForAssetSelection).value = assetid;
		ajaxRemoteFunction( 'ajaxcontainer_'+idForAssetSelection, '/admin/assets/'+viewtypeForAssetSelection+'/'+assetid+'/'+idForAssetSelection );
		//$('ajaxcontainer_'+idForAssetSelection).scrollTo();
	}
	setTimeout("hideAssetsManager();",100);
	//
	// reset manager
	idForAssetSelection = "";
	currentSelectedAssetId = 0;
	currentSelectedAssetData = "";
}
function resetAssetInput(divid)
{
	document.getElementById(divid).value = 0;
	ajaxRemoteFunction( 'ajaxcontainer_'+divid, '/admin/assets/view/0/'+divid );
}
function uploadAssetInput(divid)
{
	ajaxRemoteFunction( 'ajaxcontainer_'+divid, '/admin/assets/innerupload/'+divid );
}
function setFolderIdForUpload(folderid)
{
	alert("nicht mehr setFolderIdForUpload aufrufen");
	return true;
	/*  currentAssetFolderId = folderid;
	var frame = getFrame('assetListUploaderFrame');
	var inp = frame.getElementById('assetUploadFolderId');
	if(inp)
		inp.value = folderid;
	else
		window.setTimeout("setFolderIdForUpload('"+folderid+"')",100);*/
}
function getFrame( frameIdName )
{
	d = document;
	f = d.frames ? d.frames[frameIdName] : d.getElementById(frameIdName);
	p = f.document || f.contentWindow.document;
	return p;
}

//uploads im amanager
function assetUpload_fileQueued( file )
{
	// füge eine datei der uploadliste nach ID:assetupload hinzu
	var item_div_id = "uploadasset_"+file.id;
	var icon = new Element("img",{"src":"/pb/img/assetListDocument.gif","width":"119","height":"94"});
	var thumb = new Element("div", {"class":"thumb"}).insert(icon);
	var filename = new Element("div", {"class":"filename"}).update(file.name);
	var imgsize = new Element("div", {"class":"imgsize"}).update("warte...");
	var fd = new Element("div", {"class":"item","id":item_div_id}).insert(thumb);
	fd.insert(filename);
	fd.insert(imgsize);
	$('assetuploaditem').insert({'after': fd});
}

function assetUpload_uploadStart( file )
{
	// starte den upload
	// icon wechseln
	var item = $("uploadasset_"+file.id);
	item.down(".imgsize").update("starte...");
}

function assetUpload_uploadProgress( file, bytes_complete, bytes_total )
{
	// progress des uploads merken
	var item = $("uploadasset_"+file.id);
	item.down(".imgsize").update(Math.round(bytes_complete/bytes_total*100)+" %");
}

function assetUpload_uploadError( file, error_code, message )
{
	// progress des uploads merken
	var item = $("uploadasset_"+file.id);
	item.down(".imgsize").update("Fehler.");
}

function assetUpload_uploadSuccess( file, server_data, received_response )
{
	// progress des uploads merken
	var item = $("uploadasset_"+file.id);
	if( server_data=="ERR" )
	{
		item.remove();
	}
	else
	{
		// okay
		var assetid = server_data;
		item.replace('<div class="item" id="assetitem_'+assetid+'"></div>');
		ajaxRemoteFunction( 'assetitem_'+assetid+'', '/admin/assets/swfupload2/'+assetid );
	}
}

function assetUpload_uploadComplete( file )
{
	// nix machen wenn complete...
}


/**
 * AJAX
 */

function submitAjaxForm(formId,updatedivid)
{ 
	var actionurl = document.getElementById(formId).action;
	new Ajax.Updater(updatedivid, actionurl, {asynchronous:true, evalScripts:true, parameters:Form.serialize(formId), requestHeaders:['X-Update', updatedivid]}) 
}
function ajaxRemoteFunction(domid, url)
{
	new Ajax.Updater(domid,url, {asynchronous:true, evalScripts:true, requestHeaders:['X-Update', domid]});
}
function ajaxRemoteFunctionTimed(domid, url, tt)
{
	window.setTimeout("ajaxRemoteFunction('"+domid+"','"+url+"')", tt);
}
function keyPressHandler(e, domid, url) 
{
	return keyPressHandlerFunc(e, "ajaxRemoteFunction('"+domid+"', '"+url+"')");
}
function keyPressHandlerFunc(ev, func) 
{
	var key = ev.which || ev.keyCode;
  	if( key==Event.KEY_ESC )
	{
		window.setTimeout(func, 10);
	}
	//alt--->
	var e = ev;
	var kC  = (window.event) ?    // MSIE or Firefox?
		event.keyCode : e.keyCode;
	var Esc = (window.event) ?   
		27 : e.DOM_VK_ESCAPE // MSIE : Firefox
	if(kC==Esc)
	{
		window.setTimeout(func, 10);
	}
	return true;
}


/**
 * ALL MIGHTY HIDER 
 */
 
var HidedElements = new Array();
var HideDuration = 0.4;

function switchHideElement( elemid )
{
	if( HidedElements[elemid]!=undefined )
	{
		new Effect.BlindDown(elemid, {duration: HideDuration});
		HidedElements[elemid] = undefined;
		document.getElementById('imgbtn_'+elemid).src = '/pb/img/masp_titleopened.gif';
	}
	else
	{
		new Effect.BlindUp(elemid, {duration: HideDuration});
		HidedElements[elemid] = true;
		document.getElementById('imgbtn_'+elemid).src = '/pb/img/masp_titleclosed.gif';
	}
}
function resetHideElement( elemid, hiddenOrNot )
{
	if( hiddenOrNot==true )
	{
		HidedElements[elemid] = true;
		document.getElementById(elemid).style.display='none';
		document.getElementById('imgbtn_'+elemid).src = '/pb/img/masp_titleclosed.gif';
	}
	else
	{
		HidedElements[elemid] = undefined;
	}
}
function doHideElement( elemid )
{
	if( HidedElements[elemid]==undefined )
	{
		new Effect.BlindUp(elemid, {duration: HideDuration});
		HidedElements[elemid] = true;
		document.getElementById('imgbtn_'+elemid).src = '/pb/img/masp_titleclosed.gif';
	}
}
function undoHideElement( elemid )
{
	if( HidedElements[elemid]!=undefined )
	{
		new Effect.BlindDown(elemid, {duration: HideDuration});
		HidedElements[elemid] = undefined;
		document.getElementById('imgbtn_'+elemid).src = '/pb/img/masp_titleopened.gif';
	}
}



/**
 * Sonstige Helferlein
 */

function setAttrib(elm, attrib, value) 
{
	if (typeof(value) == "undefined" || value == null)
		value = "";
		
	if (value != "") 
	{
		elm.setAttribute(attrib, value);

		if (attrib == "style")
			attrib = "style.cssText";

		if (attrib == "width") 
		{
			attrib = "style.width";
			value = value + "px";
			value = value.replace(/%px/g, 'px');
		}

		if (attrib == "height") 
		{
			attrib = "style.height";
			value = value + "px";
			value = value.replace(/%px/g, 'px');
		}

		if (attrib == "class")
			attrib = "className";

		eval('elm.' + attrib + "=value;");
	} else
		elm.removeAttribute(attrib);
}

function makeAttrib(attrib, value) 
{
	if (typeof(value) == "undefined" || value == null)
		value = "";
		
	if (value == "")
		return "";

	// XML encode it
	value = value.replace(/&/g, '&amp;');
	value = value.replace(/\"/g, '&quot;');
	value = value.replace(/</g, '&lt;');
	value = value.replace(/>/g, '&gt;');

	return ' ' + attrib + '="' + value + '"';
}

function reloadLightbox()
{
	myLightbox.updateImageList();
}



var ContentTree = Class.create({

	initialize: function( mainid, content_type_id ) 
	{
		this.mainid = mainid;
		this.content_type_id = content_type_id;
		this.loadLevel(0);
		this.myRows = new Hash();
	},
	
	loadLevel: function( tree_parent_id )
	{
		var url = '/admin/contents/tree_level/'+this.content_type_id;
		var e = $(this.mainid+this.content_type_id+'-'+tree_parent_id);
		var _this = this;
		new Ajax.Updater(e.identify(), url, {
			parameters: { tree_parent_id: tree_parent_id },
			asynchronous:true, 
	   		evalScripts:true, 
	   		onComplete: function(transport) {
				_this.createSortable();
			}
		});
	},
	
	createSortable: function()
	{
		var _this = this;
		Sortable.create("ajaxContentTree"+this.content_type_id+"-0", 
	   	{
	   		tag:'div', 
	   		only:'sortmee', 
	   		hoverclass:'over', 
	   		handle:'handle',
	   		tree:true,
	   		treeTag:'div', 
		   		onUpdate:function(sortable)
		   			{
		   				new Ajax.Request('/admin/contents/tree_sort/'+_this.content_type_id, {
		   						asynchronous:true, 
		   						parameters:Sortable.serialize("ajaxContentTree"+_this.content_type_id+"-0")
		   						})
   					} 

	   	});
	},
	
	addLevel: function( tree_parent_id )
	{
		var e = $('ctreerow_'+tree_parent_id);
		var newDiv = new Element('div',{id:this.mainid+this.content_type_id+'-'+tree_parent_id,style:'margin-left:13px'});
		newDiv.insert(new Element('img',{src:'/pb/img/wait.gif'}));
		e.insert(newDiv,{position:'bottom'});
	},
	
	removeLevel: function( tree_parent_id )
	{
		var e = $(this.mainid+this.content_type_id+'-'+tree_parent_id);
		e.remove();
	},
	
	registerRow: function( content_id )
	{
		this.myRows.set(content_id, {div:'ctreerow_'+content_id,opened:false,contentcount:0});
		
		var _this = this;
		
		$('openbtn_'+content_id).observe('click', function(e){_this.onClickTree(content_id);});
		
		var url = '/admin/contents/tree_count/'+this.content_type_id;
		new Ajax.Request(url, {
			parameters: { tree_parent_id: content_id },
			asynchronous:true, 
	   		onSuccess: function(transport) {
	   			var v = transport.responseText.evalJSON();
				_this.setRowContentcount(content_id,v.value);
			}
		});
	},
	
	setRowContentcount: function(content_id,count)
	{
		var r = this.myRows.get(content_id);
		r.contentcount = count;
		this.myRows.set(content_id,r);
		this.handleRowState(content_id);
	},
	
	handleRowState: function(content_id)
	{
		var r = this.myRows.get(content_id);
		var emptyfilename = "_empty";
		if( r.contentcount>0 )
		{
			emptyfilename = "";
		}
		if(r.opened==true)
		{
			$('openbtn_'+content_id).src = '/pb/img/tree_opened'+emptyfilename+'.gif';
		}
		else
		{
			$('openbtn_'+content_id).src = '/pb/img/tree_closed'+emptyfilename+'.gif';
		}
	},
	
	onClickTree: function(content_id)
	{
		var r = this.myRows.get(content_id);
		if( r.opened==true )
		{
			this.removeLevel(content_id);
			r.opened = false;
		}
		else
		{
			this.addLevel(content_id);
			this.loadLevel(content_id);
			r.opened = true;
		}
		this.myRows.set(content_id,r);
		this.handleRowState(content_id);
	}

});


var ContentSelector = Class.create({
  
	initialize: function( content_type_id, mainid ) 
	{
		this.mainid = mainid;
		this.content_type_id = content_type_id;
		this.containers = 0;
		this.can_add_slots = true;
		this.isSortable = false;
		this.searchresult = new Element('div', {'class': 'searchresult'});
		$(this.mainid).insert(this.searchresult, { position: 'after' });
		this.searchresult.hide();
	},
	
	activateSortable: function ()
	{
		this.isSortable = true;
		this.createSortable();
	},
	
	setCanAddSlots: function(state)
	{
		this.can_add_slots = state;
	},
	
	addSlot: function(content_id,fieldname)
	{
		this.containers++;
		var _this = this;
			
		if(content_id==undefined) content_id = 0;
		if(fieldname==undefined) fieldname = this.mainid+'[]';
		
		// hält die condition
		var container = new Element('div', { 'class': 'slot', 'num': this.containers});
		
		// suchfeld
		var searchfield = new Element('input', { 'class': 'search','name': 'search'+this.containers});
		searchfield.observe('keyup', this.onChangeSearch.bindAsEventListener(this));
		searchfield.observe('blur', function(){_this.onLeaveSearchfield(searchfield);});
		container.insert(searchfield, { position: 'after' });
		
		// suche und gefunden
		var contentsholder = new Element('div', { 'class': 'contentsholder','preselected':content_id });
		contentsholder.update(new Element('input', {'type':'hidden','value':content_id,'name':fieldname}));
		var selectedcotnentholder = new Element('div', {'class': 'selectedcontent'})
		selectedcotnentholder.observe('click', function(){_this.activateSearch(searchfield);});
		contentsholder.insert(selectedcotnentholder, { position: 'bottom' });
		container.insert(contentsholder, { position: 'after' });
		searchfield.searchword = '';
		searchfield.myContentsholder = contentsholder;
		
		// hinzu-button
		if( this.can_add_slots==true )
		{
			var addbtn = new Element('div', { 'class': 'addbtn' });
			addbtn.update(new Element('img',{'src':'/img/icons/add.png'}));
			addbtn.observe('click', this.onClickAddButton.bindAsEventListener(this));
			container.insert(addbtn, { position: 'after' });
		}
		
		// entfernen-button
		if( this.containers>1 )
		{
			var delbtn = new Element('div', { 'class': 'delbtn' });
			delbtn.update(new Element('img',{ 'src': '/img/icons/delete.png' }));
			delbtn.observe('click', this.onClickDelButton.bindAsEventListener(this));
			container.insert(delbtn, { position: 'after' });
		}
		
		// an hauptcontainer andocken
		$(this.mainid).insert(container, { position: 'bottom' });
		
		// add-button vom container drüber hiden
		if( before = container.previous('.slot') )
		{
			before.down('.addbtn').hide();
		}
		
		// ajax für contentinhalt
		if( content_id )
		{
			new Ajax.Request('/admin/contents/quickget', {
				parameters: { content_id: content_id },
				onComplete: function(transport) {
				    var v = transport.responseText.evalJSON();
					_this.setContent(searchfield,v.id,v.name);
				}
			});
		}
		else
		{
			selectedcotnentholder.update("<p class='grey'>Hier klicken, um zu suchen...</p>");
		}
		searchfield.hide();
		this.createSortable();
	},
	
	activateSearch: function(searchfield)
	{
		searchfield.show();
		searchfield.myContentsholder.down('.selectedcontent').hide();
		searchfield.focus();
		if( searchfield.searchword!='' )
		{
			this.requestList(searchfield);
		}
	},
	
	onLeaveSearchfield: function(searchfield)
	{
		searchfield.hide();
		searchfield.myContentsholder.down('.selectedcontent').show();
		var _this = this;
		//this.searchresult.hide();
		setTimeout(function(){_this.searchresult.hide();},200);
	},
	
	onClickAddButton: function(ev)
	{
		this.addSlot();
	},
	
	onClickDelButton: function(ev)
	{
		var e = ev.element();
		var container = e.up('.slot');
		this.removeSlot( container );
	},
	
	removeSlot: function(container)
	{
		//add-button vom container drüber zeigen
		if( this.can_add_slots==true )
		{
			if( container.down('.addbtn').getStyle('display')!='none' )
			{
				if( before = container.previous('.slot') )
				{
					before.down('.addbtn').show();
				}
			}
		}
		container.replace('');
	},
	
	onChangeSearch: function(ev)
	{
		var searchfield = ev.element();
		var sc = searchfield.myContentsholder.down('.selectedcontent');
		var key = ev.which || ev.keyCode; 
	  	if( key==Event.KEY_ESC )
	  	{
	  		// zurücksetzen
	  		searchfield.value = "";
	  		if(searchfield.searchword!="")
		  	{
		  		searchfield.searchword = "";
		 	 	this.searchresult.hide();
				sc.show();
				searchfield.hide();
		  	}
	  	}
	  	else
	  	{
	  		// suchen
		  	var s = searchfield.value;
		  	if( s.length>2 )
		  	{
		 	 	if(s!=searchfield.searchword)
		 	 	{
		 	 		// neues suchwort
		 	 		searchfield.searchword = s;
		 	 		this.requestList(searchfield);
		 	 	}
		  	}
		  	else if(searchfield.searchword!="")
		  	{
		  		searchfield.searchword = "";
		 	 	this.searchresult.hide();
				//sc.show();
				//searchfield.hide();
		  	}
		 }
	},
	
	handleResult: function(searchfield,r)
	{
		if(r.length>0)
		{
			var _this = this;
		
			this.searchresult.update("");
			r.each(function(o) {
				_this.addResultRow(searchfield,o);
			});
			var xy = searchfield.myContentsholder.viewportOffset();
			this.searchresult.setStyle({
				top:xy[1]+'px',
				left:xy[0]+'px'
			});
			this.searchresult.show();
		}
		else
		{
			this.searchresult.update("");
			this.searchresult.hide();
		}
	},
	
	addResultRow: function(searchfield,o)
	{
		var _this = this;
		var row = new Element('div').addClassName('row').update(o.name);
		row.observe('click', function(){_this.setContent(searchfield,o.id,o.name);});
		row.observe('mouseover', function(){ overRow( row,true ) });
		row.observe('mouseout', function(){ overRow( row,false ) });
		this.searchresult.insert(row,{position:'bottom'});
	},
	
	setContent: function(searchfield,id,name)
	{
		var sc = searchfield.myContentsholder.down('.selectedcontent');
		sc.update(name);
		sc.show();
		this.searchresult.hide();
		searchfield.myContentsholder.down('input').value = id;
		// neue ausgangsposition...
		searchfield.hide();
	},
	
	requestList: function(searchfield)
	{
		var _this = this;
		
		var url = '/admin/contents/quicksearch/'+this.content_type_id;
		new Ajax.Request(url, {
			parameters: { searchword: searchfield.searchword },
			asynchronous:true, 
	   		onSuccess: function(transport) {
	   			var v = transport.responseText.evalJSON();
				_this.handleResult(searchfield,v);
			}
		});
	},
	
	createSortable: function()
	{
		if( this.isSortable==false )
			return false;
		var _this = this;
		Sortable.create(this.mainid, 
	   	{
	   		tag:'div', 
	   		only:'slot', 
	   		hoverclass:'over'
	   	});
		return true;
	}
	
	

});



var CAL = Class.create({
  
	initialize: function( content_type_id, options ) 
	{
		var _this = this;
		this.itemsperblock = 20;
		this.itemheight = 23;
		this.firstoffsettop = 0;
		this.content_type_id = content_type_id;
		this.searchword = "";
		this.resultidentifier = 0;
		
		// container für die blocks
		this.MAINID = "CAL_"+Math.round(Math.random()*100000)+"_"+content_type_id;
		document.write('<div id="'+this.MAINID+'" class="CAL"></div>');
		
		// action bar ####################
		
		// searchfield
		this.searchfield = new Element("input",{'type':'text','class':'search'});
		this.searchfield.onChangeHandle = function() { _this.onChangeSearch(); };
		var searchform = new Element("form",{'class':'applesearch'});
		var fieldset = new Element("fieldset");
		var label = new Element("label",{'for':this.searchfield.identify()}).update("suchen");
		fieldset.insert(label);
		fieldset.insert(this.searchfield);
		searchform.insert(fieldset);
		
		//searchword
		if( options.searchword!=undefined )
		{
			this.searchfield.value = options.searchword;
	  		this.searchword = options.searchword;
		}
		
		// sortable
		this.isSortable = false;
		if( options.isSortable!=undefined )
		{
			this.isSortable = options.isSortable;
		}
		
		// ergebniszähler
		this.rowcount = new Element("div",{'class':'rowcount'});
		
		// Batch-Actions
		this.batchactions = new Element("div",{'class':'batchactions'});
		var openbutton = new Element("span",{'class':'openlink'});
		openbutton.update("Stapel-Verarbeitung");
		//openbutton.observe('click', this.toggleBatchactions.bindAsEventListener(this));
		//openbutton.observe('mouseover', this.showBatchactions.bindAsEventListener(this));
		this.batchactions.insert(openbutton);
		this.batchactionspopup = new Element("div",{'class':'popup'});
		//this.batchactionspopup.observe('mouseout', this.hideBatchactions.bindAsEventListener(this));
		var delaction = new Element("a",{'class':'dellink'});
		delaction.update("Alle löschen");
		delaction.observe('click', this.clickDeleteAll.bindAsEventListener(this));
		this.batchactionspopup.insert(delaction);
		
		// hinzu-button
		this.addbtn = new Element('div', { 'class': 'addbtn' });
		this.addbtn.update(new Element('img',{'src':'/img/icons/add.png'}));
		this.addbtn.observe('click', this.onClickAddButton.bindAsEventListener(this));
		
		// blockelement
		this.actiondiv = new Element("div",{'class':'CAL_action'});
		this.actiondiv.insert(searchform);
		this.actiondiv.insert(this.rowcount);
		this.actiondiv.insert(this.batchactions);
		this.actiondiv.insert(this.batchactionspopup);
		this.actiondiv.insert(this.addbtn);
		
		// zum dom hinzu
		$(this.MAINID).insert({'before':this.actiondiv});
		applesearch.init( searchform.identify() );
		this.batchactionspopup.hide();
		// action bar ####################
		
		// liste laden
		this.reload();
		
		// scrolling abfragen
		new PeriodicalExecuter(function(pe) {
		  _this.checkScroll();
		}, 0.3);
	},
	
	toggleBatchactions: function()
	{
		if( this.batchactionspopup.visible() )
		{
			this.hideBatchactions();
		}
		else
		{
			this.showBatchactions();
		}
	},
	
	showBatchactions: function()
	{
		this.batchactions.addClassName("opened");
		this.batchactionspopup.show();
	},
	
	hideBatchactions: function()
	{
		this.batchactions.removeClassName("opened");
		this.batchactionspopup.hide();
	},
	
	onClickAddButton: function()
	{
		this.addbtn.hide();
		document.location = '/admin/contents/add/'+this.content_type_id;
	},
	
	clickDeleteAll: function()
	{
		this.hideBatchactions();
		var c = confirm("Sollen diese Datensätze wirklich gelöscht werden?");
		if (c == true)
		{
			this.deleteAll(0);
		}
	},
	
	deleteAll: function(remaining)
	{
		$(this.MAINID).update("");
		if( remaining )
		{
			this.rowcount.update( "lösche "+remaining+" ..." );
		}
		else
		{
			this.rowcount.update( "lösche ..." );
		}
		var _this = this;
		new Ajax.Request('/admin/contents/list2_deleteall', {
			parameters: { 	content_type_id: this.content_type_id,
							searchword: this.searchword },
			onComplete: function(transport) {
				var v = transport.responseText.evalJSON();
				if( v.remaining==0 )
				{
					_this.rowcount.update( "fertig!" );
					_this.reload();
				}
				else
				{
					_this.deleteAll(v.remaining);
				}
			}
		});
	},
	
	reload: function()
	{
		this.hideBatchactions();
		$(this.MAINID).update("");
		this.rowcount.update( "loading" );
		this.last_scroll_position = -1;
		this.lastOverItem = false;
		this.blocklist = new Hash();
		var _this = this;
		this.resultidentifier++;
		var ri = this.resultidentifier;
		new Ajax.Request('/admin/contents/list2_getstats', {
			parameters: { 	content_type_id: this.content_type_id,
							searchword: this.searchword },
			onComplete: function(transport) {
				if(_this.resultidentifier==ri)
				{
					var v = transport.responseText.evalJSON();
					_this.handleStats(v);
				}
			}
		});
	},
	
	onChangeSearch: function(ev)
	{
		this.hideBatchactions();
		/* var key = ev.which || ev.keyCode; 
	  	if( key==Event.KEY_ESC )
	  	{
	  		// zurücksetzen
	  		this.searchfield.value = "";
	  		if(this.searchword!="")
		  	{
		  		this.searchword = "";
		 	 	this.reload();
		  	}
	  	}
	  	else
	  	{ */
	  		// suchen
		  	var s = this.searchfield.realvalue;
		  	if( s.length>2 )
		  	{
		 	 	if( s!=this.searchword )
		 	 	{
		 	 		// neues suchwort
		 	 		this.searchword = s;
		 	 		this.reload();
		 	 	}
		  	}
		  	else if(this.searchword!="")
		  	{
		  		this.searchword = "";
		 	 	this.reload();
		  	}
		 //}
	},
	
	handleStats: function( r )
	{
		var blocks = 0;
		if( r.totalitems>0 )
		{
			blocks = Math.ceil( r.totalitems / this.itemsperblock );
		}
		this.rowcount.update( r.totalitems );
		for( var i=0;i<blocks;i++ )
		{
			var blockdiv = new Element('div', {'class':'block'});
			blockdiv.select_offset = i*this.itemsperblock;
			blockdiv.setStyle({'height':(this.itemsperblock*this.itemheight)+'px'});
			blockdiv.loaded = false;
			$(this.MAINID).insert({'bottom':blockdiv});
			this.blocklist.set(i,blockdiv);
			if( this.firstoffsettop==0 )
			{
				this.firstoffsettop = blockdiv.viewportOffset().top;
			}
		}
		
		// tablehead
		var table = new Element("table",{'class':'CAL_thead','cellpadding':'0','cellspacing':'0'});
		this.tablehead = new Element("thead");
		table.insert(this.tablehead);
		var tr = new Element("tr");
		this.tablehead.insert(tr);
		var _this = this;
		r.thead.each(function(o,i){
			var th = new Element("th").update(o.title);
			if(i==0)
			{
				th.setStyle({'width':'auto'});
			}
			else
			{
				th.setStyle({'width':o.width+'px'});
			}
			tr.insert(th);
		});
		$(this.MAINID).insert({'top':table});
	},
	
	checkScroll: function()
	{
		if( !this.blocklist.get(0) )
			return false;
		
		var currentScroll = document.viewport.getScrollOffsets().top;
		if( this.last_scroll_position==currentScroll )
			return false;
			
		this.last_scroll_position = currentScroll;
		
		var middleBlockNum = Math.round( (currentScroll-this.firstoffsettop)/(this.itemheight*this.itemsperblock) );
		
		for( var i=middleBlockNum-2;i<middleBlockNum+3;i++)
		{
			this.loadBlock(i);
		}
	},
	
	onMouseOverItem: function(ev, e)
	{
		this.hideBatchactions();
		var content_id = e.readAttribute('content_id');
		if( this.lastOverItem!=e )
		{
			/*if( this.lastOverItem )
			{
				this.lastOverItem.opened = false;
				var olde = this.lastOverItem;
				new PeriodicalExecuter(function(pe) {
					if( olde.getHeight()==olde.originalHeight || olde.opened==true )
					{
						pe.stop();
					}
					else
					{
						var diff = olde.getHeight() - Math.ceil( ( olde.getHeight()-olde.originalHeight ) / 3 );
						olde.setStyle({	
							'height': diff+'px'
						});
					}
				}, 0.02);
			}
			if( e.originalHeight==undefined )
			{
				e.originalHeight = e.getHeight();
			}
			e.opened = true;
			
			// hoehe feststellen
			var endh = e.down("table").getHeight();
			
			// smooth resize
			new PeriodicalExecuter(function(pe) {
				if( e.getHeight()==endh || e.opened==false )
				{
					pe.stop();
				}
				else
				{
					var diff = e.getHeight() + Math.ceil( ( endh-e.getHeight() ) / 3 );
					e.setStyle({	
						'height': diff+'px'
					});
				}
			}, 0.02);*/
			
			//
			this.lastOverItem = e;
		}
		e.down("tr").addClassName('over');
	},
	
	onMouseOutItem: function(ev, e)
	{
		var content_id = e.readAttribute('content_id');
		e.down("tr").removeClassName('over');
		
	},
	
	createSortable: function(i)
	{
		//alert(i);
		var blockdiv = this.blocklist.get(i);
		if( !blockdiv )
			return false;
		var blockdiv_id = blockdiv.identify();
		var starting_pos = i*this.itemsperblock;
		var _this = this;
		Sortable.create(blockdiv_id, 
	   	{
	   		tag:'div', 
	   		only:'sortmee', 
	   		hoverclass:'over', 
	   		handle:'handle',
	   		tree:false,
	   		onUpdate:function(sortable)
   			{
   				new Ajax.Request('/admin/contents/sorting2/'+_this.content_type_id+'/'+blockdiv_id+'/'+starting_pos, {
   						asynchronous: true, 
   						parameters: Sortable.serialize(blockdiv_id),
   						onSuccess: function(transport) {
				   			var v = transport.responseText.evalJSON();
							v.each(function(n){
								$("positionnum"+n.id).update(n.position);
								//alert(n.position)
							});
						}
   					});
			}
	
	   	});
	},
	
	loadBlock: function(i)
	{
		var blockdiv = this.blocklist.get(i);
		if( !blockdiv )
			return false;
		if( blockdiv.loaded==true )
			return true;
		blockdiv.loaded = true;
		var _this = this;
		new Ajax.Updater(blockdiv.identify(),'/admin/contents/list2_getblock', {
			parameters: { 	content_type_id: this.content_type_id,
							offset: blockdiv.select_offset,
							limit: this.itemsperblock,
							searchword: this.searchword },
			onComplete: function(transport) {
				blockdiv.setStyle({'height':'auto'});
				var contentids = blockdiv.down(".json").innerHTML.evalJSON();
				contentids.each(function(o){
					$(o).observe('mouseover', _this.onMouseOverItem.bindAsEventListener( _this, $(o) ));
					$(o).observe('mouseout', _this.onMouseOutItem.bindAsEventListener( _this, $(o) ));
				});
				if( _this.isSortable==true )
				{
					_this.createSortable(i);
				}
			}
		});
		return true;
	}

});

var currentActiveConfigPulldown = null;
var ConfigPulldown = Class.create({
	
	initialize: function( _id, _action ) 
	{
		this.id = _id;
		this.action = _action;
		this.form = null;
		this.isOpen = false;
		this.isOver = false;
		this.lastFormValues = "";
		this.arrowimg = $(this.id).down(".arrow").down("img");
		
		// popupbox zeichnen
		this.popupbox = new Element("div",{'class':'configpulldown_popupbox'});
		$(this.id).insert({'top':this.popupbox});	
		this.popupbox.hide();
		
		// mouseover
		var button = $(this.id).down(".button");
		button.observe('mouseover', this.onMouseOver.bindAsEventListener(this));
		button.observe('mouseout', this.onMouseOut.bindAsEventListener(this));
		button.observe('click', this.onClick.bindAsEventListener(this));
		
		// inhalt laden
		var _this = this;
		new Ajax.Updater(this.popupbox.identify(), this.action, 
		{
			asynchronous:true, 
			evalScripts:true, 
			parameters: { },
			onComplete: function(transport) {
			    _this.registerform();
			}
		});
		
	},
	
	registerform: function()
	{
		this.form = this.popupbox.down("form");
		this.lastFormValues = this.form.serialize();
	},
	
	submitform: function()
	{
		var current_form_values = this.form.serialize();
		if( current_form_values==this.lastFormValues )
		{
			return;
		}
		var _this = this;
		new Ajax.Updater(this.popupbox.identify(), this.action, 
		{
			asynchronous:true, 
			evalScripts:true, 
			parameters:current_form_values,
			onComplete: function(transport) {
				_this.registerform();
			}
		});
		this.form = null;
	},
	
	onClick: function()
	{
		if( this.isOpen==false )
		{
			this.popupbox.show();
			$(this.id).addClassName("configpulldown_active");
			this.arrowimg.src = "/pb/img/popupbox_up.png";
			if( currentActiveConfigPulldown!=null )
			{
				currentActiveConfigPulldown.onClick();
			}
			currentActiveConfigPulldown = this;
		}
		else
		{
			currentActiveConfigPulldown = null;
			this.popupbox.hide();
			if( this.isOver==false )
			{
				$(this.id).removeClassName("configpulldown_active");
			}
			this.arrowimg.src = "/pb/img/popupbox_down.png";
			if( this.form!=null )
			{
				this.submitform();
			}
		}
		this.isOpen = !this.isOpen;
	},
	
	onMouseOver: function()
	{
		$(this.id).addClassName("configpulldown_active");
		this.isOver = true;
	},
	
	onMouseOut: function()
	{
		if( this.isOpen==false )
		{
			$(this.id).removeClassName("configpulldown_active");
		}
		this.isOver = false;
	}
	
});



var DeviceSelector = Class.create({
  
	initialize: function( mainid ) 
	{
		this.mainid = mainid;
		this.containers = 0;
		this.javafinder = false;
		
		// resultbox
		this.resultbox = new Element("div",{'class':'resultbox'});
		$(this.mainid).insert({'after':this.resultbox});	
		this.resultbox.hide();
	},
	
	addSearchCondition: function(type,value)
	{
		this.containers++;
		
		if(type==undefined) type = false;
		if(value==undefined) value = false;
		
		// hält die condition
		var container = new Element('div', { 'class': 'condition', 'num': this.containers});
		
		// typ auswahl
		var typeselect = new Element('select', { 'class': 'typeselect','name': 'typeselect[]','preselected':type}); //, 'id': this.mainid+'-conditiontype_'+this.containers
		if( type!=false )
		{
			typeselect.insert(new Element('option',{'value':type,'selected':'selected'}).update(type));
		}
		typeselect.observe('change', this.onChangeTypeselect.bindAsEventListener(this));
		container.insert(typeselect);
		
		// eingabefeld-halter
		var inputholder = new Element('div', { 'class': 'inputholder','preselected':value });
		inputholder.update(new Element('input', {'name': 'typevalue[]', 'class': 'value','value':value}));
		container.insert(inputholder);
		
		// hinzu-button
		var addbtn = new Element('div', { 'class': 'addbtn' });
		addbtn.update(new Element('img',{'src':'/img/icons/add.png'}));
		addbtn.observe('click', this.onClickAddButton.bindAsEventListener(this));
		container.insert(addbtn);
		
		// entfernen-button
		var delbtn = new Element('div', { 'class': 'delbtn' });
		delbtn.update(new Element('img',{ 'src': '/img/icons/delete.png' }));
		delbtn.observe('click', this.onClickDelButton.bindAsEventListener(this));
		container.insert(delbtn);
		if( this.containers==1 )
		{
			delbtn.hide();
		}
		
		// an hauptcontainer andocken
		$(this.mainid).insert(container);
		
		// add-button vom container drüber hiden und delete-button zeigen
		if( before = container.previous('.condition') )
		{
			before.down('.addbtn').hide();
			before.down('.delbtn').show();
		}
		
		// ajax für selectfeld
		var _this = this;
		new Ajax.Updater(typeselect.identify(), '/admin/device_capability_types/selectorbox', {
			parameters: { },
			onComplete: function(transport) {
			    var preselected = typeselect.readAttribute('preselected');
			    if( preselected )
			    {
			    	setValue(typeselect,preselected);
			    	_this.changeTypeselect(typeselect);
			    }
			}
		});
	},
	
	addJavaFinder: function()
	{
		// hält das handy-suchfeld
		this.javafinder = new Element('div', {'class': 'javafinder'});
		$(this.mainid).insert({'after':this.javafinder});
		
		// hinweis
		var text = new Element('div', {'class':'text'}).update('Java-Konfiguration finden. Modellname eingeben:');
		this.javafinder.insert(text);
		
		// eingabefeld
		this.javafinder.inputfield = new Element('input', {'type':'text','class':'input'});
		this.javafinder.insert(this.javafinder.inputfield);
		
		// submit button
		var submitbtn = new Element('img', {'src':'/img/icons/database_go.png','class':'submitbtn'});
		submitbtn.observe('click', this.onClickJavaFinderButton.bindAsEventListener(this));
		this.javafinder.insert(submitbtn);
	},
	
	onClickJavaFinderButton: function()
	{
		var _this = this;
		new Ajax.Request('/admin/devices/javafinder_search', {
			parameters: {'searchword':this.javafinder.inputfield.value},
			onComplete: function(transport) {
			    //alert(transport.responseText);
				var v = transport.responseText.evalJSON();
			    _this.handleJavaFinderSearchResult(v.devices);
			}
		});
	},
	
	handleJavaFinderSearchResult: function(devices)
	{
		if( devices==false )
		{
			// kein ergebnis
		}
		else
		{
			//alert(devices);
			this.resultbox.update('');
			var _this = this;
			devices.each(function(device){
				var row = new Element("a",{'href':'javascript:void(0);'}).update(device.name);
				row.conditions = device.conditions;
				row.observe('click', function(){
					_this.addJaveConditions(device.conditions);
				});
				_this.resultbox.insert(row);
			});
			this.resultbox.show();
		}
	},
	
	addJaveConditions: function(conditions)
	{
		var d = $H(conditions);
		var _this = this;
		d.each(function(p){
			_this.addSearchCondition(p.key,p.value);
		});
		this.resultbox.hide();
	},
	
	onClickAddButton: function(ev)
	{
		this.addSearchCondition();
	},
	
	onClickDelButton: function(ev)
	{
		var e = ev.element();
		var container = e.up('.condition');
		this.removeSearchCondition( container );
	},
	
	requestResult: function()
	{
		// loading img
		this.resultbox.show();
		this.resultbox.update(new Element('img',{src:'/pb/img/wait.gif'}));
		
		// ajax
		var conditions = this.getConditions();
		var _this = this;
		new Ajax.Updater(this.resultbox.identify(), '/admin/devices/selectorresult/', {
			parameters: {'conditions':conditions.join(';')},
			onComplete: function(transport) {
				_this.resultbox.show();
			}
		});
	},
	
	getConditions: function()
	{
		var conditions = [];
		var c = $(this.mainid).down('.condition');
		while( c )
		{
			var type_id = c.down('.typeselect').getValue();
			var value = c.down('.value').getValue();
			conditions.push(type_id,value);
			c = c.next('.condition');
		}
		return conditions;
	},
	
	removeSearchCondition: function(container)
	{
		//add-button vom container drüber zeigen
		if( container.down('.addbtn').getStyle('display')!='none' )
		{
			if( (before = container.previous('.condition'))!=false )
			{
				before.down('.addbtn').show();
			}
		}
		// delete button prüfen
		if( container.siblings().length<2)
		{
			if( (before = container.previous('.condition'))!=false
				&& !container.next('.condition') )
			{
				before.down('.delbtn').hide();
			}
			if( (after = container.next('.condition'))!=false
				&& !container.previous('.condition') )
			{
				after.down('.delbtn').hide();
			}
		}
		
		container.replace('');
	},
	
	onChangeTypeselect: function(ev)
	{
		var e = ev.element();
		this.changeTypeselect(e);
	},
	
	changeTypeselect: function(e)
	{
		var type_id = e.getValue();
		var inputholder = e.next('.inputholder');
		if( type_id )
		{
			new Ajax.Updater(inputholder.identify(), '/admin/device_capability_types/selectorinput/'+escape(type_id), {
				parameters: { },
				onComplete: function(transport) {
					var fe = inputholder.down('.value');
				    fe.writeAttribute('name','typevalue[]');
				    var preselected = inputholder.readAttribute('preselected');
				    if( preselected )
				    {
						setValue(fe,preselected);
					}
				}
			});
		}
		else
		{
			inputholder.update('<p>Bitte wählen...</p>');
		}
	}

});


function setValue(fe,val)
{
	if(fe.options)
	{
		for(var index in fe.options)
    	{
    		if(fe.options[index].value==val)
    		{
    			fe.selectedIndex = index;
    			return true;
    		}
    	}
	}
	else
	{
		fe.value = val;
		return true;
	}
}


