var lastHeight = 0, lastWidth = 0;
var loadFunctions = [];
var resizeFunctions = [];

var doModal = !(typeof showModalDialog == "undefined");

var siteElements = new Array();

function setProxySiteElementDescendantsState(nodeID,state){
	for(var i=0;i<siteElements.length;i++){
		var siteElement = siteElements[i];
		
		if(siteElement.ParentNodeID == nodeID){
			setProxySiteElementState(siteElement.NodeID,state);
			if(siteElement.Nodetype == "section"){
				setProxySiteElementDescendantsState(siteElement.NodeID,state);
			}
		}
	}
}

function setProxySiteElementAncestorsState(nodeID,state){
	for(var i=0;i<siteElements.length;i++){
		var siteElement = siteElements[i];
		
		if(siteElement.NodeID == nodeID){
			setProxySiteElementState(siteElement.NodeID,state);
			setProxySiteElementAncestorsState(siteElement.ParentNodeID,state);
		}
	}
}

function setProxySiteElementState(nodeID,state){
	var elementID = "select_" + nodeID;
	var element = document.getElementById(elementID);
	
	if(element){
		element.checked = state;
	}	
}

function toggleProxySiteSubPages(element){
	proxySitePageSelectorChanged = true;
	
	var nodeID = element.getAttribute("id").replace("select_","");
	
	if(element.checked){
		setProxySiteElementDescendantsState(nodeID,true);
		setProxySiteElementAncestorsState(nodeID,true);
	} else {
		setProxySiteElementDescendantsState(nodeID,false);
	}
}

function enableProxySiteParentSections(element){
	var tagName = element.tagName.toLowerCase();
	
	if(tagName == "li"){
		var checkbox = getChildNode(element,"input");
		
		if(checkbox){
			checkbox.checked = true;
		}
	}
	
	if(tagName != "div"){
		enableProxySiteParentSections(element.parentNode)
	}
}


var proxySitePageSelectorChanged = false;

function proxySitePagePreview(proxySiteNodeID,pageNodeID){
	if(proxySitePageSelectorChanged){
		if(window.confirm("Changes have been made. Do you wish to save these changes?")){
			alert("save & preview");		
		} else {
			window.location.href = "/wcm/system/pages/adminhandler.aspx?page=explorer&selectedid=" + proxySiteNodeID + "&actionid=" + proxySiteNodeID + "&viewid=" + proxySiteNodeID + "&action=Preview&parameters=" + pageNodeID;
		}	
	} else {
		var url = "/wcm/system/pages/adminhandler.aspx?page=explorer&selectedid=" + proxySiteNodeID + "&actionid=" + proxySiteNodeID + "&viewid=" + proxySiteNodeID + "&action=Preview&parameters=" + pageNodeID;
		window.location.href = url;
	}
}

function selectProxySitePages(proxySiteNodeID){
	var pagesContainer = document.getElementById("templateSitePages");
	
	var selectedPageNodeIDs = "";
	var unselectedPageNodeIDs = "";
	
	for(var i=0;i<siteElements.length;i++){
		var siteElement = siteElements[i];
		var elementID = "select_" + siteElement.NodeID;
		var element = document.getElementById(elementID);
		
		if(element){
			if(element.checked){
				selectedPageNodeIDs += siteElement.NodeID + ",";
			} else {
				unselectedPageNodeIDs += siteElement.NodeID + ",";
			}
		}		
	}

	window.location.href = "/wcm/system/pages/adminHandler.aspx?page=explorer&selectedid=" + proxySiteNodeID + "&actionid=" + proxySiteNodeID + "&viewid=" + proxySiteNodeID + "&action=SelectPagesProcess&blacklist=" + unselectedPageNodeIDs;
}

function collapseProxySiteSection(nodeID){
	var elementID = "expand_collapse_" + nodeID;
	var element = document.getElementById(elementID);

	element.innerHTML = '<img src="/wcm/system/img/explorer/expand_section.gif"/>';
	element.href = "javascript:expandProxySiteSection('" + nodeID + "');";
	
	toggleProxySiteDescendantsVisibility(nodeID,false);
}

function expandProxySiteSection(nodeID){
	var elementID = "expand_collapse_" + nodeID;
	var element = document.getElementById(elementID);

	element.innerHTML = '<img src="/wcm/system/img/explorer/collapse_section.gif"/>';
	element.href = "javascript:collapseProxySiteSection('" + nodeID + "');";
	
	toggleProxySiteDescendantsVisibility(nodeID,true);
}

function toggleProxySiteDescendantsVisibility(nodeID,visible){
	for(var i=0;i<siteElements.length;i++){
		var siteElement = siteElements[i];
		
		if(siteElement.ParentNodeID == nodeID){
			var trID = "tr_" + siteElement.NodeID;
			var tr = document.getElementById(trID);
			
			if(visible){
				tr.style.display = "";
			} else {
				tr.style.display = "none";
			}
			
			if(siteElement.Nodetype == "section"){
				toggleProxySiteDescendantsVisibility(siteElement.NodeID,visible)
			}
		}
	}
}

function getXMLHTTPRequest(){
	var xmlhttp=false;
	// JScript gives us Conditional compilation, we can cope with old IE versions.
	// and security blocked creation of the objects.

	try{
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	}catch(e){
		try {
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		}catch(e){
			xmlhttp = false;
		}
	}
	if(!xmlhttp && typeof XMLHttpRequest!='undefined') {
		xmlhttp = new XMLHttpRequest();
	}
	return(xmlhttp);
}


function panelStateChanged(userName,item){
	if(elm("taskPanel"+item)!=null){
			
		// send 
		var state = (elm("taskPanel"+item).style.display);
		var frameDoc = getXMLHTTPRequest();
		var url = "/wcm/system/pages/toggleTaskPanel.aspx?panel=" + item + "&state=" + state + "&username=" + userName;
		
		if(frameDoc){
			frameDoc.open("GET",url,true);
			
			var envelope = frameDoc;
			
			frameDoc.onreadystatechange = function(){
				if(envelope.readyState == 4){
					//alert('yay ...');
					//alert(envelope.responseText);
				}
			}
			frameDoc.send();
		}
	}
}


var tempBody = null;

function ieIframeResize(){
	if(tempBody != null){
		var frame = document.getElementById? document.getElementById('genericView'): document.all? document.all['genericView']: null;
		if(frame==null){
			frame = document.getElementById? document.getElementById('previewIFrame'): document.all? document.all['previewIFrame']: null;
			tempBody.style.overflow = "hidden";
		}
		var height = tempBody.scrollHeight;
		
		// give it a minimum in case there is no content
		if(height < 400){
			height = 400;
		}
		
		// put a bit extra on for luck
		height += 400;

		frame.style.height = (height) + "px";
		
		var contentWidth = tempBody.scrollWidth;
		var containerWidth = parseInt(frame.style.width);
		if(containerWidth < contentWidth){
			//frame.style.width = contentWidth + "px";
		}
	}
	tempBody = null;	
}

function frameLoaded(bodyElement){
	// This should get called by the contents of the frame
	// and allows us to resize the frame to avoid clipping 
	// content or using unneccessary scrollbars

	// it needs to run on a timer to allow the iframe contents
	// to fully render, otherwise the height measurement may
	// be incorrect.
	tempBody = bodyElement;
	setTimeout(ieIframeResize,500);
}



function setFrameHeight(){
	var iFrame = $("#genericView");
	var innerDoc = (iFrame.get(0).contentDocument) ? iFrame.get(0).contentDocument : iFrame.get(0).contentWindow.document;
	innerDoc = $($(innerDoc).find("body")[0]);
	
	if(($.browser.msie) && ($.browser.version.substr(0,1) == "6")){
		//alert("do ie 6 version");
		// this is the code all browsers used to use
		tempBody = innerDoc;
		setTimeout(ieIframeResize,500);
	} else {
		//alert($.browser.msie + " " + $.browser.version);
		var body = $("body");
				
		var innerHeight = innerDoc.height();
		var thisHeight = body.innerHeight() - 300;
	
		if(innerHeight != 0){
			if(innerHeight > thisHeight){
				iFrame.css("height", innerHeight);
			} else {
				iFrame.css("height", thisHeight);
			}
		} else {
			iFrame.css("height", thisHeight);
		}
	}
}

function setFrameWidth(){
	var body = $("body");
	var iFrame = $("#genericView");
	
	var thisWidth = body.innerWidth();
	iFrame.css("width", thisWidth - 250);
}

function addNode(combo){
	//alert(selectedID + ' ' + combo.options[combo.selectedIndex].value);
	var nodetype = combo.options[combo.selectedIndex].value;
	if(nodetype != ''){
		callAction('Add',selectedID,nodetype);
	}
}


function loggedOutRedirect(){
	//alert("Your session timeout has expired, you will ned to re-login");
	
	//window.location.href="/wcm/system/pages/login.aspx";
}

function getRandomURLBit(){
	var oDate = new Date();
	var sRandom='rqsb=' + oDate.valueOf()
	
	return(sRandom);
}

window.onload=function(){
	items = new ItemList();
	
	initTaskPanels();
	/*
	initTaskPanels();
	initTreePanel();

	resizer(true);
	
	elm("content").style.visibility = "visible";
	*/
	for(var i=0;i<loadFunctions.length;i++){
		loadFunctions[i]();
	}
}

window.onresize=resizer;

function addLoader(func){
	loadFunctions[loadFunctions.length] = func;
}

function addResizer(func){
	resizeFunctions[resizeFunctions.length] = func;
}

function ItemList(){
	this.topPanel = elm("topPanel");
	this.userPanel = elm("userPanel");
	this.leftPanel = elm("leftPanel");
	this.rightPanel = elm("rightPanel");
	this.showhideBar = elm("showhideBar");
	this.taskPanelHolder = elm("taskPanelHolder");
	this.rightHolder = elm("rightHolder");
	this.editorView = elm("editorView");
	this.treeviewPanel = elm("treeviewPanel");
	this.treeScrollPanel = elm("treeScrollPanel");

	this.genericView = elm("genericView");
	
	this.bTree = false;
	this.TaskPanels = [];
	this.PanelIdx = [];
}

function elm(id){
	return(document.getElementById(id));
}

function resizer(forceResize){
	var w = document.body.clientWidth;
	var h = document.body.clientHeight;
	var offset = 0;
	
	// only bother to do this if it's actually a resize - for some reason
	// this handler gets triggered 2-3 times for each actual resize event.
	if( (lastHeight!=h) || (lastWidth!=w) || (forceResize) ){ 
		
		var top = 20;

		/*		
		if(items.userPanel){
			items.userPanel.style.pixelTop = top-20;
		}
		
		items.leftPanel.style.pixelTop = top;
		items.leftPanel.style.pixelWidth = 209;
		items.leftPanel.style.pixelHeight = h - top;
				
		if(items.leftPanel.clientHeight < items.taskPanelHolder.offsetHeight){
			items.taskPanelHolder.style.pixelWidth = 165;
		} else {
			items.taskPanelHolder.style.pixelWidth = 180;
		}
		
		if(items.bTree){
			offset = 207;
			items.treeviewPanel.style.pixelLeft = 209;
			items.treeviewPanel.style.pixelTop = top;
			items.treeviewPanel.style.pixelHeight = h - top -1;
			items.treeviewPanel.style.display = "block";

			items.treeScrollPanel.style.pixelHeight = h - top -2;
			items.treeScrollPanel.style.pixelWidth = 206;
		}
		
		items.rightPanel.style.pixelLeft = 215 +offset;
		items.rightPanel.style.pixelWidth = w -215 -offset;
		items.rightPanel.style.pixelHeight = h - top;
		items.rightPanel.style.pixelTop = top;
		
		
		items.editorView.style.pixelTop = 20;
		items.editorView.style.pixelHeight = 
			items.rightPanel.style.pixelHeight -44;
		items.editorView.style.pixelWidth = w - 239 -offset;

		if (items.genericView != null){
			items.genericView.style.pixelHeight = items.rightPanel.style.pixelHeight - 46;
			
			items.genericView.style.pixelWidth = w - 242 -offset;
			items.genericView.style.pixelLeft = 12;
			items.genericView.style.pixelTop = 12;
		}
		*/

		lastHeight = h; lastWidth = w;
		
		for(var i=0;i<resizeFunctions.length;i++){
			resizeFunctions[i]();
		}
	}
}

function initTaskPanels(){
	/*
	//var sSearch = String(window.location.search);
	var sSearch = String(window.location).split('?')[1];
	var iLoc = sSearch.indexOf("taskbars(");
	var iStart = iEnd = -1;
	var aTaskPanels = null;

	if(iLoc>-1){
		iStart = iLoc +9;
		while( iLoc < sSearch.length ){
			if(sSearch.substr(iLoc,1) == ")"){
				iEnd = iLoc;
				break;
			}
			iLoc++;
		}
	}

	if( iEnd > -1 ){
		
		aTaskPanels = String( sSearch.substring( iStart, iEnd ) ).split(",");
		for( var i=0; i<aTaskPanels.length ; i++ ){
			//alert(aTaskPanels[i]);
			toggleTaskPanel(aTaskPanels[i]);
		}
	}
	*/
}

function toggleTaskPanelWithCallback(userName,item){
	panelStateChanged(userName,item);
	
	toggleTaskPanel(item);	
}

function toggleTaskPanel(item){
	if(elm("taskPanel"+item)!=null){
		var test = String(elm("taskPanel"+item).style.display);
		//alert('ttp' + test);
		if(( test == "none" )||(test == "")){
			elm("taskPanel"+item).style.display = "block";
			//elm("taskButton"+item).innerHTML = "5";
			if(!items.TaskPanels[item]){
				items.TaskPanels[item]="OPEN";
				items.PanelIdx[items.PanelIdx.length]=item;
			} else {
				items.TaskPanels[item]="OPEN";
			}
		} else {
			elm("taskPanel"+item).style.display = "none";
			//elm("taskButton"+item).innerHTML = "6";
			items.TaskPanels[item]="SHUT";
		}
		//resizer(true);
	}
}

function initTreePanel(){
//	var sSearch = String(window.location.search);
	var sSearch = String(window.location).split('?')[1];
	if(sSearch.indexOf("treeview=true") > -1){
		toggleTreePanel();
	}
}

function toggleTreePanel(){
	items.bTree = !items.bTree;
	if(items.bTree){
		var sViewID = getCurrentViewID();
//		var sSelectedID = getCurrentSelectedID();
		document.images("hiddenBarHandle").src = "/wcm/system/img/hiddenbar_close.gif";
		
		items.treeScrollPanel.src = 
			"adminHandler.aspx?page=generic&view=Hierarchy#TV_"+sViewID;
//			+ "?viewid="
//			+ sViewID
//			+"&selectedid="
//			+ sSelectedID
	} else {
		document.images("hiddenBarHandle").src = "/wcm/system/img/hiddenbar_open.gif";
		items.treeScrollPanel.src = "";
	}
	resizer(true);
}

function treeLoaded(){
	elm("treeStatus").style.display = "none";
}

function action(){
	alert('action');
	return(false);
}

function getTaskBars(){
	var sTaskBars = "";
		
	//alert(items.PanelIdx.length);
	if(items.PanelIdx.length>0){
		
		sTaskBars += "&taskbars(";
		for(var i=0;i<items.PanelIdx.length;i++){
			if(items.TaskPanels[items.PanelIdx[i]]=="OPEN"){
				sTaskBars += items.PanelIdx[i] + ",";
			}
		}
		sTaskBars += ")";
	}
	return(sTaskBars);
}

var items = null;

function getCurrentViewID(){
/*
	if(aSession['viewid']){
		return(aSession['viewid']);
	} else {
		return('1');
	}
*/

	if(viewID){
		return(viewID);
	} else {
		return('1');
	}

}

function getCurrentSelectedID(){
	/*
	if(aSession['selectedid']){
		return(aSession['selectedid']);
	} else {
		return('1');
	}
	*/
	
	if(selectedID){
		return(selectedID);
	} else {
		return('1');
	}
}

function navigate(nodeid){
	nodeid = nodeid.replace('&','%26');
	var sPage=GetQueryStringValue("page","explorer");
	var sSearch = "?page="+sPage+"&viewid="+nodeid;
	sSearch += "&selectedid="+nodeid;
	if(items!=null){
		if(items.bTree){
			sSearch += "&treeview=true";
		}
	}

	sSearch += getTaskBars() + "&" + getRandomURLBit();
	document.body.disabled="true";
//	document.body.style.cursor="wait";
	window.location.search = sSearch;
	return(false);
}

function togglePanel(action,panel){
	var sPage=GetQueryStringValue("page","explorer");
	var sSearch = "?page="+sPage+"&" + action + "panel=" + panel;

	sSearch += getTaskBars() + "&" + getRandomURLBit();
	document.body.disabled="true";
//	document.body.style.cursor="wait";
	window.location.search = sSearch;
	return(false);
}

function showTab(tab){
	var sPage=GetQueryStringValue("page","explorer");
	var sSearch = "?page="+sPage+"&showtab=" + tab;

	sSearch += getTaskBars() + "&" + getRandomURLBit();
	document.body.disabled="true";
//	document.body.style.cursor="wait";
	window.location.search = sSearch;
	return(false);
}


function select(nodeid){
	nodeid = nodeid.replace('&','%26');
	var sPage=GetQueryStringValue("page","explorer");
	var sSearch = "?page="+sPage+"&selectedid="+nodeid;
	
	if(items!=null){
		if(items.bTree){
			sSearch += "&treeview=true";
		}
	}
	sSearch += getTaskBars() + "&" + getRandomURLBit();
	window.location.search = sSearch;

	return(false);
}

// TAI - The listview calls a select function on a single-click.  In a popup, this function is defined in listview.js.
//       Other places, this function is defined here in explorer.js.  This little wrapper is to prevent breakage after
//       an alteration to the single-click behaviour in the popup.
function newSelect(nodeid){
	select(nodeid);
}

function getActionListItems(){
	var actionPanel = document.getElementById("taskPanelHolder");
	var listItems = actionPanel.getElementsByTagName("li");
	return(listItems);
}

function getCheckedListViewItems(){
	var checkBoxes = document.getElementsByTagName("input");
	var result = new Array();
	//result.
	
	for(var i=0;i<checkBoxes.length;i++){
		var checkBox = checkBoxes[i];
		//alert(checkBox.type);
		if(checkBox.type == "checkbox"){
			if(checkBox.checked){
				result.push(checkBox);
			}
		}
	}
	
	
	return(result);
}

function adjustActionsForMultiSelect(){
	var checkedItems = getCheckedListViewItems();
	
	if(checkedItems.length == 1){
		multiSelectAvailable = false;
		showActionsForSingleSelect();
	} else {
		multiSelectAvailable = true;
		showActionsForMultiSelect();
	}
}

function changeActionState(action,enabled){
	var anchors = action.getElementsByTagName("a");
	
	if(anchors.length == 1){
		var anchor = anchors[0];

		if(enabled){
			anchor.style.color = "#000066";
			anchor.href = anchor.href.replace("noAction","callAction");
		} else {
			anchor.style.color = "#aaaaaa";
			anchor.href = anchor.href.replace("callAction","noAction");
		}
	}
}

function changeActionsState(actions,multiSelect){
	for(var i=0;i<actions.length;i++){
		var action = actions[i];
		
		if(multiSelect){
			if(action.getAttribute("multiselect") == "true"){
				changeActionState(action,true);		
			} else {
				changeActionState(action,false);
			}
		} else {
			changeActionState(action,true);		
		}
	}
}

function showActionsForMultiSelect(){
	var actions = getActionListItems();
	changeActionsState(actions,true);
}

function showActionsForSingleSelect(){
	var actions = getActionListItems();
	changeActionsState(actions,false);
}

var multiSelectAvailable = false;

function noAction(sAction,nodeID,parameters){

}

function callAction(sAction,nodeID,parameters){
	if(multiSelectAvailable){
		multiCallAction(sAction,nodeID,parameters);
	} else {
		singleCallAction(sAction,nodeID,parameters);
	}
}

function multiCallAction(sAction,nodeID,parameters){
	alert('multi call action');
}

/* LV */
function singleCallAction(sAction,nodeID,parameters){
	var sSearch = window.location.search;
	var aSearch = [];
	aSearch[0]="action="+sAction;
	aSearch[1]="actionid="+nodeID;
	aSearch[2]="selectedid="+selectedID;
	aSearch[3]="viewid="+viewID;
	
	sSearch = "&";
	for(var i=0; i<aSearch.length; i++){
		if(aSearch[i]!=""){
			sSearch += aSearch[i] + "&";
		}
	}
	 
	if(String(parameters) != ""){
		if(String(parameters) != "undefined"){
			sSearch += "parameters=" + escape(parameters) + "&";
		}
	}
	 
	// dont know why but this causes an error if called after the confirmation dialog..
	// items collection in getTaskBars is null
	try{
		var sPage=GetQueryStringValue("page","explorer");
		sSearch = sSearch.substr(0,sSearch.length-1);
		sSearch = "?page="+sPage+sSearch;
		sSearch += getTaskBars() + "&";
	} catch(e){
	
	}
	sSearch += getRandomURLBit() + "&";
	
	//alert(sSearch);

	if(sAction.indexOf("Cancel")==-1){
		if(document.forms["WCM_EditForm"]){
			document.forms["WCM_EditForm"].action = "adminHandler.aspx" + sSearch + "&return=true";
			document.forms["WCM_EditForm"].parameters.value = sSearch;
			
			if(validateEditForm()){
				document.forms["WCM_EditForm"].submit();
			}
			
		} else {
			window.location.search = sSearch;
		}
	} else {
		window.location.search = sSearch;
	}	
}


function openPreview(previewUrl){
	previewUrl = previewUrl.replace(/&amp;/g, '&');
	window.open(previewUrl);
}

/*
function validateEditorForm(){
	try{
		//if(htmlEdit1){
			copyHTMLFromEditor("data");
			//document.forms["WCM_EditForm"].data.value = htmlEdit1.document.body.innerText;
		//}
	} catch(e){
	
	}	
}*/

function popupDialog(sURL,width,height){
	var docHeight = document.body.clientHeight;
	var docWidth = document.body.clientWidth;
	var dialog = elm("popupFrame");
	dialog.style.pixelWidth = width;
	dialog.style.pixelHeight = height;
	
	dialog.style.pixelLeft = (docWidth/2) - (width/2);
	dialog.style.pixelTop = (docHeight/2) - (height/2);
	dialog.style.visibility = "visible";
	dialog.src = sURL;
	return(false);
}

function closeDialog(){
	var dialog = elm("popupFrame");
	dialog.style.visibility = "hidden";
	dialog.src = "";
	return(false);

}

function popupFileSelector(sType,sRoot,sFilter,sSelect,sSelectOnNavigate,title,width,height,formElement,nodeId){

	var sOpts = 
		"status:no"+
		";help:no"+
		";resizable:yes"+
		";dialogHeight:"+height+"px"+
		";dialogWidth:"+width+"px";
	var sURL =
		"/wcm/system/pages/adminHandler.aspx?page=dialog"+
		"&title="+title+
		"&popup=true";

	var aParams = [];
	aParams[0] = sType;
	aParams[1] = sRoot;
	
	//moz hack
	if(!doModal) sURL += "&ap0=" + sType + "&ap1=" + sRoot;
	
	if(sFilter != ""){
		aParams[2] = "," + sFilter.replace(" ","") + ",";
		if(!doModal) sURL += "&ap2=" + "," + sFilter.replace(" ","") + ",";
	} else {
		aParams[2] = "";
		//if(!doModal) sURL += "&ap2=";
	}
	if(sSelect != ""){
		aParams[3] = "," + sSelect.replace(" ","") + ",";
		if(!doModal) sURL += "&ap3=" + "," + sSelect.replace(" ","") + ",";
	} else {	
		aParams[3] = "";
		//if(!doModal) sURL += "&ap3=";
	}
	if((sSelectOnNavigate != "") && (String(sSelectOnNavigate) != "undefined")){
		aParams[4] = "," + sSelectOnNavigate.replace(" ","") + ",";
		if(!doModal) sURL += "&ap4=" + "," + sSelectOnNavigate.replace(" ","") + ",";
	} else {	
		aParams[4] = ",";
		//if(!doModal) sURL += "&ap4=,";
	}
	
	try{
		/* 26/09/2005 Rob Thijssen - Use window.open for firefox
		 * https://bugzilla.mozilla.org/show_bug.cgi?id=194404
		 * var dlgResult=showModalDialog(sURL,aParams,sOpts);
		 */
		if(doModal) {
		
			var dlgResult=showModalDialog(sURL,aParams,sOpts);
		}
		else {
		
			var dlgResult=window.open(sURL, title, "width=" + width + ",height=" + height + ",dependent=1,modal=1");
		}
		//var dlgResult=showModalDialog(sURL,aParams,sOpts));		
		
		//if(String(""+dlgResult) != "loggedout"){
		//	loggedOutRedirect();
		//}
	} catch(e){
	}

	if(dlgResult) {
		var chosenNodeId = dlgResult[0];
		var displayField = document.getElementById(formElement);

		// If an asset (e.g. an uploaded file) is chosen then a path is returned rather than a node id
		if(isNaN(chosenNodeId)) {
			displayField.value = chosenNodeId;
			if(displayField.onchange) {
				displayField.onchange(displayField);
			}
		} else {
			// Call getpagefullhref.aspx to get the fully-qualified hrefs of
			// the link being edited and the link target the user navigated to
			var ajaxParams = {
				type:		"GET",
				url:		"/wcm/system/pages/getpagefullhref.aspx?nodeid[]=" + nodeId + "&nodeid[]=" + chosenNodeId,
				dataType:	"json",
				success:	function(jsonResponse) {
								// If the scheme (i.e. http/s) and authority (hostname + port) match then they are within the same website
								// so insert a relative link, else insert an absolute link
								if(jsonResponse[0].Scheme == jsonResponse[1].Scheme
									&& jsonResponse[0].Authority == jsonResponse[1].Authority) {
									var linkHref = jsonResponse[1].PathAndQuery;
								} else {
									var linkHref = jsonResponse[1].Href;
								}

								displayField.value = linkHref;
								if(displayField.onchange) {
									displayField.onchange(displayField);
								}
							},
				error:		ajaxFailed
			};

			$.ajax(ajaxParams);
		}
	}
	return(false);
}

function ajaxFailed(XmlHttpRequest, textStatus, errorThrown) {
	alert(textStatus);
	alert(errorThrown);
	alert(XmlHttpRequest.responseText);
}

function popupSelector(sType,sRoot,sFilter,sSelect,sSelectOnNavigate,title,width,height,formElement){
	var sOpts = 
		"status:no"+
		";help:no"+
		";resizable:yes"+
		";dialogHeight:"+height+"px"+
		";dialogWidth:"+width+"px";
	var sURL =
		"adminHandler.aspx?page=dialog"+
		"&title="+title+
		"&popup=true";
	var aParams = [];
	aParams[0] = sType;
	aParams[1] = sRoot;
 
	//moz hack
	if(!doModal) sURL += "&ap0=" + sType + "&ap1=" + sRoot;
	
	if(sFilter != ""){
		aParams[2] = "," + sFilter.replace(" ","") + ",";
		if(!doModal) sURL += "&ap2=" + "," + sFilter.replace(" ","") + ",";
	} else {
		aParams[2] = "";
	}
	if(sSelect != ""){
		aParams[3] = "," + sSelect.replace(" ","") + ",";
		if(!doModal) sURL += "&ap3=" + "," + sSelect.replace(" ","") + ",";
	} else {	
		aParams[3] = "";
	}
	if((sSelectOnNavigate != "") && (String(sSelectOnNavigate) != "undefined")){
		aParams[4] = "," + sSelectOnNavigate.replace(" ","") + ",";
		if(!doModal) sURL += "&ap4=" + "," + sSelectOnNavigate.replace(" ","") + ",";
	} else {	
		aParams[4] = ",";
	}
	
	
	/* 26/09/2005 Rob Thijssen - Use window.open for firefox
	 * https://bugzilla.mozilla.org/show_bug.cgi?id=194404
	 * var dlgResult=showModalDialog(sURL,aParams,sOpts);
	 */
	  
	if(doModal) {
		var dlgResult=showModalDialog(sURL,aParams,sOpts);
	} else {
		var ref = window.open(sURL, title, "width=" + width + ",height=" + height + ",dependent=1,modal=1");
		//var ref = window.open(sURL, "width=" + width + ",height=" + height + ",dependent=1");
		
		ref.returnValueCallback = returnValueCallback
		ref.formElement = formElement;
		
		var dlgResult = null;
	}
	
	if( dlgResult ){
		document.forms["WCM_EditForm"].elements[formElement].value = dlgResult[0];
		document.forms["WCM_EditForm"].elements[formElement+"_description"].value = dlgResult[1];
	}
	return(false);
}

function showDialog(dialogUrl, resultElement)
{
	var ref = window.open(dialogUrl, "", "width=400,height=400,resizable=1,dependent=1,modal=1");
	
	ref.returnValueCallback = returnValueCallback
	ref.formElement = resultElement;
}

function showSizedDialog(dialogUrl, resultElement,width,height)
{
	var ref = window.open(dialogUrl, "", "width=" + width + ",height=" + height + ",resizable=0,dependent=1,modal=1");
	
	ref.returnValueCallback = returnValueCallback
	ref.formElement = resultElement;
}

function returnValueCallback(formElement, ret)
{
	if (ret)
	{
		var valueField = document.forms["WCM_EditForm"].elements[formElement];
		var descField = document.forms["WCM_EditForm"].elements[formElement+"_description"];
		
		if (valueField)
			valueField.value = ret[0];
			
		if (descField)
			descField.value = ret[1];
	}
}

var wcmadmin_clickTimer=null;
var wcmadmin_bEventFired=false;
var iClickTimeout=400;
function wcmadmin_doClick(handler){

	wcmadmin_clickTimer=null;
	wcmadmin_bEventFired=true;
	if(handler){
		eval(handler);
	}
}

function escapeHandler(handler){
	var re=/'/g
	var re2=/\\\\'/g
	
	ret = handler.replace(re, "\\'");
	ret = ret.replace(re2, "\\\\\\'"); // Yes, really.  Have to be careful not to break already-escaped single quotes in the javascript
	
	return(ret);
}

document.onclick=function(evt)
{
	var parent=null;
	
	/* Map IE events to the moz dom bits */
	if (!evt){
		evt = window.event;
		evt.target = evt.srcElement;
	}
	
	var handler = "";
	
	if(!evt.target.clickhandler)
	{
		parent=evt.target.parentNode;
		
		while(parent != null && parent != 'undefined'){
		
			if(parent.clickhandler)
			{
				evt.returnValue=false;
				
				handler = escapeHandler(String(parent.clickhandler));
				
				wcmadmin_clickTimer = setTimeout('wcmadmin_doClick(\''+handler+'\');',iClickTimeout);
				break;
			}	
			else
			{
				parent=parent.parentNode;	
			}
		}
	}
	else
	{	
		evt.returnValue = false;
		
		handler = escapeHandler(String(evt.target.clickhandler));
		
		wcmadmin_clickTimer = setTimeout('wcmadmin_doClick(\''+handler+'\');',iClickTimeout);
	}
}

// The Double-click event handler
document.ondblclick=function(evt){

	var parent=null;

	/* Map IE events to the moz dom bits */
	if (!evt){
		evt = window.event;
		evt.target = evt.srcElement;
	}

	var handler = "";
	
	// Check for an event handler on the clicked element
	if(!evt.target.dblclickhandler){
	
		// No handler on the clicked element, check through parent elements
		parent=evt.target.parentNode;
		
		while(parent!=null){
		
			if(parent.dblclickhandler){
			
				// Found an event handler
				evt.returnValue=false;
				handler=String(parent.dblclickhandler);
				
				if((!wcmadmin_bEventFired)||(wcmadmin_clickTimer)){
					if(wcmadmin_clickTimer){
						clearTimeout(wcmadmin_clickTimer);
						wcmadmin_clickTimer=null;
					}
					eval(handler);
				}
				wcmadmin_bEventFired=false;
				break;
			} else {
				parent=parent.parentNode;
			}
		}
	} else {
		evt.returnValue=false;
		handler=String(evt.target.dblclickhandler);

		if((!wcmadmin_bEventFired)||(wcmadmin_clickTimer)){
			if(wcmadmin_clickTimer){
				clearTimeout(wcmadmin_clickTimer);
				wcmadmin_clickTimer=null;
			}
			document.body.disabled="true";
//			document.body.style.cursor="wait";
			eval(handler);
		}
		wcmadmin_bEventFired=false;
	}
}

function switchBreadcrumbMode(){
	var breadcrumbTrail = $("#breadcrumbTrail");
	var breadcrumbTrailInput = $("#breadcrumbTrailInput");
	
	if(breadcrumbTrailInput.css("display") == "none"){
		var width = breadcrumbTrail.width();
		var input = $("#breadcrumbTrailInput input");
		input.width(width - 50);
		breadcrumbTrail.css("display", "none");
		breadcrumbTrailInput.css("display", "block");
		
		input.select();
	} else {
		breadcrumbTrail.css("display", "block");
		breadcrumbTrailInput.css("display", "none");
	}
}

function uniqueWarning(column, check){
	var values = new Array();
	var message = "";
	var checkBits = check.split("|");
	
	// unless ie6
	var isIE6 = ($.browser.msie && $.browser.version.substr(0,1)<7);
	
	if(!isIE6){
		column = column -1;
	}
	
	if(checkBits.length = 2){
		check = checkBits[0];
		message = checkBits[1];
	}
	var errorFound = false;
	if(check == "*"){
		$("div.listView div.list table tr").each(
			function(index, item){
				var tr = $(item);
				var col = tr.contents("td:eq(" + column + ")");
				var value = col.html().toLowerCase();
				
				if(values[value]){
					values[value].css({"color":"red", "font-weight":"bold"});
					col.css({"color":"red", "font-weight":"bold"});
					errorFound = true;
				} else {
					values[value] = col;
				}
			}
		);
	} else {
		$("div.listView div.list table tr").each(
			function(index, item){
				var tr = $(item);
				var col = tr.contents("td:eq(" + column +  ")");
				var value = col.html().toLowerCase();
				
				if(value == check){
					if(values[value]){
						values[value].css({"color":"red", "font-weight":"bold"});
						col.css({"color":"red", "font-weight":"bold"});
						errorFound = true;
					} else {
						values[value] = col;
					}
				}
			}
		);
	}
	
	if(errorFound){
		var listDiv = $("div.listView div.list");
		if(listDiv){
			var div = listDiv.prepend("<div class=\"listViewError\"><img height=\"16px\" width=\"16px\" src=\"/wcm/system/img/editor/warning.gif\">" + message + "</div>")
			var width = $("div.listView div.list table").css("width");
			div.css({"width":width})
		}
	}
}
