


function ajaxSelectNode(elementid, nodetypes) {
	el(elementid + '_selector').style.display = "block";
	loadNodesXML(elementid, nodetypes);	
}

function loadNodesXML(elementid, nodetypes) {
	var myDataSet = eval("dsNodes" + elementid);
	myDataSet.setURL('/ameisen/components/structuredcontent.cfc?method=getPageTree&nodetypes=' + nodetypes, 'amdata/dataset', {useCache:false} );
	myDataSet.loadData();
}

function getSelectedValue(htmlselectbox) {
	return htmlselectbox.options[htmlselectbox.selectedIndex].value;
}

function getXmlHttpRequest() {
	http_request = false;
	
	if (window.XMLHttpRequest) { // Mozilla, Safari,...
			http_request = new XMLHttpRequest();
			if (http_request.overrideMimeType) {
					http_request.overrideMimeType('text/xml');
					// zu dieser Zeile siehe weiter unten
			}
	} else if (window.ActiveXObject) { // IE
			try {
					http_request = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
					try {
							http_request = new ActiveXObject("Microsoft.XMLHTTP");
					} catch (e) {}
			}
	}
	return http_request;
}

function log(logstring) {
	if( window.console ) 
		window.console.log(logstring);
}

function selectAll(checkboxelementname) {
	changeSelection(checkboxelementname, 1);
}

function unSelectAll(checkboxelementname) {
	changeSelection(checkboxelementname, 0);
}

function getAllSelected(checkboxelementname) {
	var elements = document.getElementsByName(checkboxelementname);
	var elementValues = "";
	for (var i =  0; i < elements.length; i++) {
		cEl = elements.item(i);
		if (cEl.tagName.toLowerCase() == "input" && cEl.type == "checkbox" && cEl.checked) {
			if (elementValues != "" && cEl.value != "")
				elementValues = elementValues + ",";
	
			elementValues = elementValues + "" + cEl.value;
		}		
	}
		return elementValues;
}

function getAllSelectedCount(checkboxelementname) {
var counter = 0;
	var elements = document.getElementsByName(checkboxelementname);
	for (var i =  0; i < elements.length; i++) {
		cEl = elements.item(i);
		if (cEl.tagName.toLowerCase() == "input" && cEl.type == "checkbox" && cEl.checked) {
			counter++;
		}		
	}
	return counter;
}


function changeSelection(checkboxelementname, toggleState) {
	// toggleState:
	// 0 == off
	// 1 == on
	// 2 == toggle
	var elements = document.getElementsByName(checkboxelementname);
	for (var i =  0; i < elements.length; i++) {
		cEl = elements.item(i);
		if (cEl.tagName.toLowerCase() == "input" && cEl.type == "checkbox") {
			if (toggleState == 2)
				cEl.checked = !cEl.checked;
			else
				cEl.checked  = toggleState == 1;
//			alert(dumpObj(elements.item(i)));
		}
	}
}


function openNodeSelector(jsfield, mode, queryappend) {
	window.open("/ameisen/edithandler/treeselector.cfm?jsfield=" + jsfield+ "&mode=" + mode + "&"+ queryappend, "nodeselector", "resizable,width=800,height=600,scrollbars");
} 

function showFileBrowser(parameters) {
	window.open("/ameisen/edithandler/filebrowser.cfm?" + parameters, "filebrowser", "resizable,width=800,height=600,scrollbars");
} 

function openPopupGenericEditor(useurl) {
	window.open(useurl, "poupeditor", "resizable,width=800,height=600,scrollbars");
}

function publishText(ldataid, field) {
	window.open("/ameisen/edithandler/publish.cfm?ldataid=" + ldataid + "&field=" + field, "publish" + ldataid + field, 
	"width=400,height=400");
} 

function openInsertImage(parameters) {
	window.open("/ameisen/edithandler/insertimage.cfm?" + parameters, "insertImageWindow", "resizable,width=800,height=600,scrollbars");
}


function refreshTree() {
//	parent.frames[1].location.href = parent.frames[1].location.href;
	parent.ameisenNavigation.location.replace(parent.ameisenNavigation.location.href);
}

function fckInsert(eltext) {
	parent.FCKeditorAPI.GetInstance("editdata").InsertHtml('<img src="/' + eltext + '">');
}

function editImageInsert(eltext) {
	parent.document.contentedit.editdata.value= "/" + eltext;

	if (eltext.substring(eltext.length -4) == ".swf") {
		parent.document.editdataflash.style.display = "block";
		parent.document.images["editdataimage"].style.display = "none";
		parent.document.images["editdataimage"].src = "";	

		parent.document.editdataflash.movie = "/" + eltext;
    if (parent.document.getElementById("editdataflashembed")) 
  		parent.document.getElementById("editdataflashembed").src = "/" + eltext;						
	} else {
		parent.document.editdataflash.style.display = "none";
		parent.document.images["editdataimage"].style.display = "block";
		parent.document.images["editdataimage"].src = "/" + eltext;
		
		parent.document.editdataflash.movie = "";
    if (parent.document.getElementById("editdataflashembed")) 		
  		parent.document.getElementById("editdataflashembed").value ="";	
	}
}

function editGenericImageInsert(field, eltext) {
	// Wert in verstecktem Feld setzen
	opener.document.contentedit[field].value= "/" + eltext;
	
	if (eltext.substring(eltext.length -4) == ".swf") {
		opener.document.getElementById(field + "_flash").style.display = "block";
		opener.document.getElementById(field + "_image").style.display = "none";
  	opener.document.getElementById(field + "_flash").movie = "/" + eltext;
		opener.document.getElementById(field + "_flash").data = "/" + eltext;
  } else {
		opener.document.getElementById(field + "_flash").style.display = "none";
		opener.document.getElementById(field + "_image").style.display = "block";	
		opener.document.getElementById(field + "_image").src = "/" + eltext;	
	}

	window.close();
}

function editGenericImageSelect(field, instanceid, displayurl) {
	// Wert in verstecktem Feld setzen
	opener.document.contentedit[field].value= "instance:" + instanceid;
//	opener.document.getElementById(field + "_flash").style.display = "none";
//		opener.document.getElementById(field + "_image").style.display = "block";	
		opener.document.getElementById(field + "_image").src = displayurl;	
	/*
	if (eltext.substring(eltext.length -4) == ".swf") {
		opener.document.getElementById(field + "_flash").style.display = "block";
		opener.document.getElementById(field + "_image").style.display = "none";
  	opener.document.getElementById(field + "_flash").movie = "/" + eltext;
		opener.document.getElementById(field + "_flash").data = "/" + eltext;
  } else {
		opener.document.getElementById(field + "_flash").style.display = "none";
		opener.document.getElementById(field + "_image").style.display = "block";	
		opener.document.getElementById(field + "_image").src = "/" + eltext;	
	}
*/
	window.close();
}

function resetImageField(field) {
	document.contentedit[field].value = "";
	document.getElementById(field + "_image").src = "";
}

function dumpObj(theObj) {
	var tx="";
	var props = new Array();
	for (var i in theObj) { 
		props.push(i); 
	}
//	props.sort();
	for (var i=0; i<props.length; i++) {
		try {
			tx+= "<b>" + props[i] + "</b> :: " + theObj[props[i]]+"\n";
		} catch (e) {
		}
	}

	return tx;
}

function breakout(gotourl) {
	parent.location.href=gotourl;
}


/**************************************************************************************************************************************************************************/
// list functions (used for doublebox-like styles)

function swapListElements(list, a, b) {
	aVal = list.options[a].value;
	aTxt = list.options[a].text;
	bVal = list.options[b].value;
	bTxt = list.options[b].text;
	list.options[b] = new Option(aTxt, aVal);
	list.options[a] = new Option(bTxt, bVal);		
	list.selectedIndex = b;
}
		
function moveUpListElement(list) {
	index = list.options.selectedIndex;
	if (index == -1) {
		alert("Please select an entry to move up");
		return;
	}
	
	if (index == 0)
		return; // silent failure
		
	swapListElements(list, index, index - 1);
}
		
function moveDownListElement(list) {
	index = list.options.selectedIndex;
	if (index == -1) {
		alert("Please select an entry to move down");
		return;
	}
	
	if (index == list.options.length - 1)
		return; // silent failure
		
	swapListElements(list, index, index + 1);
}
		
function setElementListVar(list, form, varName) {
		var sorted = "";
		for (i = 0; i < list.options.length; i++) {
			sorted += list.options[i].value + ",";
		}
		sorted = sorted.substring(0, sorted.length -1);
		list.form[varName].value = sorted;
}
/** 
 removes an element from listFrom
 fails silently, if listFrom is empty
 */
function removeFromList(listFrom) {
	if (listFrom.options.length <= 0)
		return;
	listFrom.options[listFrom.options.selectedIndex] = null;  
}


function moveAll(listFrom, listTo) {
	var useCounter = listFrom.length;
	for (var i = 0; i < useCounter; i++) {
		aVal = listFrom.options[0].value;
		aTxt = listFrom.options[0].text;
		listTo.options[listTo.length] = new Option(aTxt, aVal);		
		listFrom.options[0] = null;  
	}
}

/** 
 moves an element from listFrom to listTo
 fails silently, if listFrom is empty
 */ 
function moveElementBetweenLists(listFrom, listTo) {
	if (listFrom.length == 0 || listFrom.options.selectedIndex == -1)
		return;
	
	aVal = listFrom.options[listFrom.options.selectedIndex].value;
	aTxt = listFrom.options[listFrom.options.selectedIndex].text;
	listTo.options[listTo.length] = new Option(aTxt, aVal);		
	myIndex = listFrom.options.selectedIndex;
	listFrom.options[listFrom.options.selectedIndex] = null;  
	listFrom.options.selectedIndex = Math.max(Math.min(listFrom.length - 1, myIndex), 0);
}

function serializeSelect(selectItem) {
	var values = "";
	for (i = 0; i < selectItem.length; i++) {
			values = values + (values == "" ? "" : ",") + selectItem.options[i].value;;
	}
	return values;
}



/**************************************************************************************************************************************************************************/

function toggleVisibility(elementname) {
	var myEl = document.getElementById(elementname);
	if (myEl.style.display == "none") 
		myEl.style.display = "block";
	else
		myEl.style.display = "none";
}

/**************************************************************************************************************************************************************************/
function serializeSortable(element) { 
	element = $(element); 
	var options = Object.extend(Sortable.options(element), arguments[1] || {}); 
	var name = encodeURIComponent( (arguments[1] && arguments[1].name) ? arguments[1].name : element.id);
	if (options.tree) {
		return Sortable.tree(element, arguments[1]).children.map( 
			function (item) { 									
				return [name + Sortable._constructIndex(item) + "=" + encodeURIComponent(item.id)].concat(item.children.map(arguments.callee));
			}).flatten().join('&');										
	} else { 
		return Sortable.sequence(element, arguments[1]).map(
			function(item, index) { 
			return encodeURIComponent(item);
			//	return name + "[" + index + "]=" + encodeURIComponent(item); 
			}).join(','); 
	} 
} 

function toggleBlindLayer(myElement) {
	if (!myElement.amBlinded)
		myElement.amBlinded = 0;
	if (myElement.amBlinded == 1)  {
		blindUpLayer(myElement)
		myElement.amBlinded = 0;
	 } else {
		blindDownLayer(myElement);
		myElement.amBlinded = 1;		
	}
}

function blindUpLayer(myElement, top) {
	new Effect.BlindUp(myElement); 	
}

function blindDownLayer(myElement) {
	new Effect.BlindDown(myElement); 	
}

function updateFCKEditors(framearray) {
	for ( i = 0; i < framearray.length; ++i ) {
		if ( framearray[i].FCK ) 
			framearray[i].FCK.UpdateLinkedField();		
	}
}

function jsDump(myObj, asHTML) {
	myDump = "JAVASCRIPT OBJECT DUMP" + asHTML ? "<hr>" : "\n________________________________\n";
	myDump += "<table>"
	for(myVar in myObj) {
		if (asHTML) {
			myDump += "<tr><td>" + myVar + "</td><td>" + myObj[myVar] + "</td></tr>";
		} else {
			myDump = myDump + myVar + ': \t' + myObj[myVar] + '\n';
		}
	}
		myDump += "</table>"
	return myDump;
}

function el(elementid) {
	return document.getElementById(elementid);
}

function toggleAttachAndShowElement(elementToMove, referenceElement, attachLeft) {
	if (el(elementToMove).style.display == "none")
		attachAndShowElement(elementToMove, referenceElement, attachLeft);
	else
		el(elementToMove).style.display = "none";
}

function getWindowWidth() {
	if (self.innerHeight) { // all except IE
		return self.innerWidth;
	} else if (document.documentElement && document.documentElement.clientHeight) { // IE 6 Strict Mode
		return document.documentElement.clientWidth;
	} else if (document.body) { // other IEs
		return document.body.clientWidth;
	}
}

function getWindowHeight() {
	if (self.innerHeight) { // all except IE
		return self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // IE 6 Strict Mode
		return document.documentElement.clientHeight;
	} else if (document.body) { // other IEs
		return document.body.clientHeight;
	}
}

/** 
* moves elementToMove below referenceElement
*/
function attachAndShowElement(elementToMove, referenceElement, attachLeft) {
	var eRef = el(referenceElement);
	var eMove = el(elementToMove);
	eMove.style.position="absolute";
	eMove.style.display = 'block';
	var pos = getPosition(eRef);
	
	var moveToX = pos.x - (attachLeft ? 0 : eMove.offsetWidth - eRef.offsetWidth );
	var moveToY = pos.y + eRef.offsetHeight  + 2;

	// check, that element is not moved out of the screen
	if (attachLeft == true) {		
		if ((eMove.offsetWidth + moveToX) > getWindowWidth()) {
			moveToX = Math.max(0, getWindowWidth() - eMove.offsetWidth);
		}
	} else {
		//move to right
	}
	eMove.style.position="absolute";
	eMove.style.left = moveToX + "px";
	eMove.style.top = moveToY + "px";
}
	
function getPosition(myElement) {
	var pos = { x:0, y:0 };

	do {
		pos.x += isNaN(myElement.offsetLeft) ? 0 : myElement.offsetLeft;
		pos.y +=  isNaN(myElement.offsetTop) ? 0 : myElement.offsetTop;
	} while (myElement = myElement.offsetParent);

	return pos;
}


/********************************************** Spry **********************************************/
function filterDataSet(dataSet, column, expression) {
	if (expression == "") {
		dataSet.filter(null);
		return;
	}
	var filterColumn = column;
	var filterExpression = new RegExp(expression, "i");
	
	var filterFunc = function(ds, row, rowNumber) {
		var str = row[filterColumn];
		//alert(filterColumn + "//" + filterExpression);
		if (str && str.search(filterExpression) != -1)
			return row;
		return null;
	};

	dataSet.filter(filterFunc);
}	
