/**

 * $Id: admin.js 82 2008-02-03 23:14:53Z root $

 * $LastChangedDate: 2008-02-03 17:14:53 -0600 (dom, 03 feb 2008) $

 * $LastChangedBy: root $

 * Xmap by Guillermo Vargas

 * a sitemap component for Joomla! CMS (http://www.joomla.org)

 * Author Website: http://joomla.vargas.co.cr

 * Project License: GNU/GPL http://www.gnu.org/copyleft/gpl.html

*/

var divloading=null;

var divOptions = null;

var currSitemapMenu = null;

var menudelay=null;



function menu_listItemTask( id, task, option ) {

	var f = document.frmSettings;

	cb = eval( 'f.' + id );

	if (cb) {

		cb.checked = true;

		submitbutton(task);

	}

	return false;

}



function changeDisplayImage(sitemap) {

	if (document.frmSettings.ext_image.value !='') {

		document.frmSettings.imagelib.src='../components/com_xmap/images/' + document.frmSettings.ext_image.value;

	} else {

		document.frmSettings.imagelib.src='../images/blank.png';

	}

}



function addExclude(sitemap) {

	var exclude = document.frmSettings.exclmenus.value.split(',');

	exclude.push( document.frmSettings.excl_menus.value );

	//remove duplicates;

	var tmp = new Object();

	for(var i = 0; i < exclude.length; i++) {

		var id = parseInt(exclude[i]);


		if( isNaN(id))

			continue;



		tmp[ id ] = id;

	}

	exclude = new Array();

	for(var k in tmp) {

		exclude.push( tmp[k] );

	}

	document.frmSettings.exclmenus.value = exclude.join(',');

}



function addSitemap() {

	showLoading();

	var myAjax = new Ajax(

	ajaxURL +'&action=add_sitemap',

	{

		method: 'get', 

		onComplete: showSitemap

	}).request();

}



function saveProperty(sitemapid,property,value) {

	showLoading();

	var myAjax = new Ajax(

	ajaxURL,

	{

		method: 'post', 

		postBody: 'option=com_xmap&task=ajax_request&action=save_property&sitemap='+sitemapid+'&property='+property+'&value='+escape(value), 

		onComplete: checkResultSave.bindAsEventListener(this,[sitemapid])

	}).request();

}



function setAsDefault() {

	showLoading();

	sitemapid=currSitemapMenu;

	var myAjax = new Ajax(

	ajaxURL,

	{

		method: 'post', 

		postBody: 'option=com_xmap&task=ajax_request&action=set_default&sitemap='+sitemapid, 

		onComplete: checkResultSetDefault.bindAsEventListener(this,[sitemapid])

	}).request();

}



function changePluginState(pluginid) {

	showLoading();

	sitemapid=currSitemapMenu;

	var myAjax = new Ajax(

	ajaxURL,

	{

		method: 'post', 

		postBody: 'option=com_xmap&task=ajax_request&action=change_plugin_state&plugin='+pluginid, 

		onComplete: checkResultChangePluginState.bindAsEventListener(this,[pluginid])

	}).request();

}



function checkResultChangePluginState (ajaxResponse,pluginid) {

	hideLoading();

	var pluginimg = $('pluginstate'+pluginid);

	var plugin = $('plugin'+pluginid);

	if ( ajaxResponse == '1' ) {

		pluginimg.src = 'images/publish_g.png';

		plugin.removeClass('unpublished');

		plugin.addClass('published');

		pluginimg.title='Published';

	} else if ( ajaxResponse == '0' ) {

		pluginimg.src = 'images/publish_x.png';

		plugin.removeClass('published');

		plugin.addClass('unpublished');

		pluginimg.title='Unpublished';

	} else {

		alert(ajaxResponse);

	}

}



function deleteSitemap() {

	if (confirm(deleteSitemapConfirmMessage)) {

		showLoading();

		sitemapid=currSitemapMenu;

		var myAjax = new Ajax(

		ajaxURL,

		{

			method: 'post', 

			postBody: 'option=com_xmap&task=ajax_request&action=delete_sitemap&sitemap='+sitemapid, 

			onComplete: checkResultDelete.bindAsEventListener(this,[sitemapid])

		}).request();

	}

}



function uninstallPlugin(pluginid) {

	if (confirm(unistallPluginConfirmMessage)) {

		showLoading();

		var myAjax = new Ajax(

		ajaxURL,

		{

			method: 'post', 

			postBody: 'option=com_xmap&task=ajax_request&action=uninstallplugin&plugin='+pluginid, 

			onComplete: checkResultUninstallPlugin.bindAsEventListener(this,[pluginid])

		}).request();

	}

}



function clearCacheSitemap() {

	showLoading();

	sitemapid=currSitemapMenu;

	var myAjax = new Ajax(

	ajaxURL,

	{

		method: 'post', 

		postBody: 'option=com_xmap&task=ajax_request&action=clean_cache_sitemap&sitemap='+sitemapid, 

		onComplete: function (ajaxResponse) {hideLoading();alert(ajaxResponse);}

	}).request();

}



function copySitemap() {

	showLoading();

	sitemapid=currSitemapMenu;

	var myAjax = new Ajax(

	ajaxURL,

	{

		method: 'post', 

		postBody: 'option=com_xmap&task=ajax_request&action=copy_sitemap&sitemap='+sitemapid, 

		onComplete: showSitemap

	}).request();

}

function settingsSitemap() {

	showLoading();

	sitemapid=currSitemapMenu;

	var container = $('sitemapsettings');

	var outer = $('divbg');

	if (!container) {

		container = new Element ('div',{

			'id':'sitemapsettings',

			'name':'sitemapsettings',

			'class':'settings settingssitemap'

		});

		outer.setOpacity(0.6);

		outer.appendChild (container);

		var body = document.getElementsByTagName("body").item(0);

		body.appendChild(container);

	}

	container.setHTML(loadingMessage);

	outer.setStyle('display','');

	centerElement(outer,true);

	container.setStyle('display','');

	centerElement(container);



	var myAjax = new Ajax(

	ajaxURL,

	{

		method: 'post', 

		postBody: 'option=com_xmap&task=ajax_request&action=edit_sitemap_settings&sitemap='+sitemapid, 

		onComplete: showSitemapSettings

	}).request();

}

function settingsPlugin(pluginid) {

	showLoading();

	sitemapid=currSitemapMenu;

	var container = $('pluginsettings');

	var outer = $('divbg');

	if (!container) {

		container = new Element ('div',{

			'id':'pluginsettings',

			'name':'pluginsettings',

			'class':'settings settingsplugin'

		});

		outer.setOpacity(0.6);

		outer.appendChild (container);

		var body = document.getElementsByTagName("body").item(0);

		body.appendChild(container);

	}

	container.setHTML(loadingMessage);

	outer.setStyle('display','');

	centerElement(outer,true);

	container.setStyle('display','');

	centerElement(container);



	var myAjax = new Ajax(

	ajaxURL,

	{

		method: 'post', 

		postBody: 'option=com_xmap&task=ajax_request&action=edit_plugin_settings&plugin='+pluginid, 

		onComplete: showPluginSettings

	}).request();

}



function optionsMenuSettings(sitemapid,menutype,menu) {

	showLoading();

	closeMenu(menu);

	var container = $('menuoptions');

	var outer = $('divbg');

	if (!container) {

		container = new Element ('div',{

			'id':'menuoptions',

			'name':'menuoptions',

			'class':'settings settingsmenu'

		});

		outer.setOpacity(0.6);

		outer.appendChild (container);

		var body = document.getElementsByTagName("body").item(0);

		body.appendChild(container);

	}

	container.setHTML(loadingMessage);

	outer.setStyle('display','');

	centerElement(outer,true);

	container.setStyle('display','');

	centerElement(container);



	var myAjax = new Ajax(

		ajaxURL,

		{

			method: 'post', 

			postBody: 'option=com_xmap&task=ajax_request&action=menu_options&sitemap='+sitemapid+'&menutype='+menutype, 

			onComplete: showOptionsMenuSettings

		}).request();

}



function saveSettings(id,action,container) {

	showLoading();

	var theForm = $('frmSettings'+id);

	var postVars = 'option=com_xmap&task=ajax_request&action='+action+'&' + theForm.toQueryString();

	var myAjax = new Ajax(

		ajaxURL,

		{

			method: 'post',

			postBody: postVars,

			onComplete: checkResultSaveSettings.bindAsEventListener(this,[id,container])

		}).request();

}



function saveMenuOptions() {

	showLoading();

	var theForm = $('frmMenuOptions');

	var postVars = 'option=com_xmap&task=ajax_request&action=save_menu_options&' + theForm.toQueryString();

	var myAjax = new Ajax(

		ajaxURL,

		{

			method: 'post',

			postBody: postVars,

			onComplete: checkResultSaveMenuOptions

		}).request();

}



function checkResultDelete(ajaxResponse,sitemapid) {

	hideLoading();

	if (ajaxResponse != '1') {

		alert(ajaxResponse);

	}else{

		var sitemap = $('sitemap'+sitemapid);

		sitemap.remove();

	}

}



function checkResultUninstallPlugin(ajaxResponse,pluginid) {

	hideLoading();

	if (ajaxResponse != '1') {

		alert(ajaxResponse);

	}else{

		var sitemap = $('plugin'+pluginid);

		sitemap.remove();

	}

}



function checkResultSetDefault(ajaxResponse,sitemapid) {

	hideLoading();

	var img;

	if (ajaxResponse != '1') {

		alert(ajaxResponse);

	}else{

		if (sitemapdefault ) {

			img = $('imgdefault'+sitemapdefault);

			if (img) 

				img.src=mosConfigLiveSite+ '/administrator/components/com_xmap/images/no_default.gif';

		}

		sitemapdefault = sitemapid;

		var img = $('imgdefault'+sitemapid);

		img.src =mosConfigLiveSite+'/administrator/components/com_xmap/images/default.gif';

	}

}

function checkResultSaveSettings(ajaxResponse,sitemapid,container) {

	hideLoading();

	if (ajaxResponse != '1') {

		alert(ajaxResponse);

	}else{

		closeSettings(container);

	}

}

function checkResultSaveMenuOptions(ajaxResponse) {

	hideLoading();

	if (ajaxResponse != '1') {

		alert(ajaxResponse);

	}else{

		closeSettings('menuoptions');

	}

}





function checkResultSave(ajaxResponse,sitemapid) {

	hideLoading();

	if (ajaxResponse != '1') {

		alert(ajaxResponse);

	}

}



function showSitemap(ajaxResponse) {

	hideLoading();

	var container = $('sitemaps');

	var sitemap = new Element ('div');

	sitemap.setHTML(ajaxResponse);

	container.appendChild(sitemap);

}



function showSitemapSettings(ajaxResponse) {

	hideLoading();

	var container = $('sitemapsettings');

	var outer = $('divbg');

	window.onscroll=function(outer,container) {centerElement(outer,true);centerElement(container);}.pass([outer,container]);

	container.setHTML(ajaxResponse);

	centerElement(outer,true);

	centerElement(container);

	outer.setStyle('display','');

	container.setStyle('display','');

	var SettTooltips = new Tips($$('#sitemapsettings .hasTip'), { maxTitleChars: 50, fixed: false});

}



function showPluginSettings(ajaxResponse) {

	hideLoading();

	var container = $('pluginsettings');

	var outer = $('divbg');

	window.onscroll=function(outer,container) {centerElement(outer,true);centerElement(container);}.pass([outer,container]);

	container.setHTML(ajaxResponse);

	centerElement(outer,true);

	centerElement(container);

	outer.setStyle('display','');

	container.setStyle('display','');

	var SettTooltips = new Tips($$('#pluginsettings .hasTip'), { maxTitleChars: 50, fixed: false});

}



function showOptionsMenuSettings(ajaxResponse) {

	hideLoading();

	var container = $('menuoptions');

	var outer = $('divbg');

	window.onscroll=function(outer,container) {centerElement(outer,true);centerElement(container);}.pass([outer,container]);

	container.setHTML(ajaxResponse);

	centerElement(outer,true);

	centerElement(container);

	outer.setStyle('display','');

	container.setStyle('display','');

	var SettTooltips = new Tips($$('#menuoptions .hasTip'), { maxTitleChars: 50, fixed: false});

}



function closeSettings(name) {

	window.onscroll=null;

	var outer = $('divbg');

	var container = $(name);

	outer.setStyle('display','none');

	container.setStyle('display','none');

}



function editTextField(elm,id,prop) {

	if ( !elm.editing) {

		elm.editing = true;

		elm.oldInnerHTML = elm.innerHTML;

		var input = document.createElement('INPUT');

		input.type='text';

		input.name=prop;

		input.id=prop+id;

		input.value=elm.innerHTML;

		input.size=30;

		input.onblur=updateSitemapProperty.pass([elm,input,id]);

		input.onkeyup=checkKey.bindAsEventListener(this,[elm,input,id]);

		Element.setHTML(elm,'');

		elm.appendChild(input);

	}

}

function checkKey (e,elm,input,id){

	if(!e) { e=window.event; }

	if(e.keyCode == 13){

		updateSitemapProperty(elm,input,id,e);

		return false;

	}

}

function updateSitemapProperty(elm,input,id,event) {

	if (elm.oldInnerHTML != input.value) {

		saveProperty(id,input.name,input.value);

	} 

	var value = input.value;

	Element.remove(input);

	elm.editing=false;

	elm.innerHTML = value;

}

function optionsMenu(id) {

	currSitemapMenu=id;

	if (!divOptions) {

		divOptions = $('optionsmenu');

		divOptions.setStyle('display','');

		divOptions.set({'events':{'click': closeOptionsMenu}});

	}

	if (divOptions.sitemapid && divOptions.sitemapid != id) {

		divOptions.setStyle('visibility','hidden');

		

	}

	divOptions.sitemapid=id;

	var elm = $('optionsbut'+id);

	var pos = elm.getPosition();

	var dim1 = elm.getSize();

	var dim2 = divOptions.getSize();

	divOptions.setStyle('left',(pos.x+dim1.size.x-dim2.size.x) + 'px');

	divOptions.setStyle('top',(pos.y + dim1.size.y + 2) + 'px');



	divOptions.clicks=0;

	if (divOptions.style.visibility == 'visible') {

		divOptions.setStyle('visibility','hidden');

	} else {

		divOptions.setStyle('visibility','visible');

	}

}



function handleClick() {

	if ( divOptions && divOptions.clicks >= 1 ) {

		closeOptionsMenu();

	} else if ( divOptions ) {

		divOptions.clicks++;

	}

}

function closeOptionsMenu() {

	divOptions.setStyle('visibility','hidden');

}

function showMenuOptions(elmid,menuname,sitemap) {

	var menu = $('divoptions');

	var elm = $(elmid);

	if (menu.blocked)

		return false;

	if (menu.parent && menu.parent != elm) {

		closeMenu(menu);

	}

	clearDelay();

	menu.blocked=true;

	menu.setHTML('');

	menu.appendChild( new Element('div',{

		'events': {

			'click':moveMenuPosition.pass([sitemap,menuname,'-1',menu]),

			'mouseover': clearDelay

		},

		'class': 'menuoption'

	}).setHTML(moveUMenuMessage));

	menu.appendChild( new Element('div',{

                'events': {

                        'click':moveMenuPosition.pass([sitemap,menuname,'1',menu]),

			'mouseover': clearDelay

                },

                'class': 'menuoption'

        }).setHTML(moveDMenuMessage));

	menu.appendChild( new Element('div',{

                'events': {

                        'click':removeMenuFromSitemap.pass([sitemap,menuname,menu]),

			'mouseover': clearDelay

                },

                'class': 'menuoption'

        }).setHTML(deleteMenuMessage));

	menu.appendChild( new Element('div',{

                'events': {

                        'click':optionsMenuSettings.pass([sitemap,menuname,menu]),

			'mouseover': clearDelay

                },

                'class': 'menuoption'

        }).setHTML(editMenuOptionsMessage));

	menu.setStyle('display','');

	var pos = elm.getPosition();

	var dim1 = elm.getSize(elm);

	var dim2 = menu.getSize();

	elm.addClass('menuoptionhover');

	menu.set({

		'events': {

			'mouseover': clearDelay

		},

        	'styles':{

        		'visibility':'visible',

        		'z-index':'10',

			'left':(pos.x+dim1.size.x-dim2.size.x) + 'px',

			'top':(pos.y + dim1.size.y) + 'px'

        	}

	});

	elm.menu=menu;

	menu.parent=elm;

}

function showMenusList (sitemap,elmid) {

	var menulist = $('menulistdropdown');

	if  (!menulist) {

		var menulist = new Element ('div',{

			'class':'menulistdrop',

			'id':'menulistdropdown'

		});

		var theform = new Element('form',{

			'name':'frmmenulist',

			'id':'frmmenulist'

		});

		theform.appendChild(menulist);

		var body = document.getElementsByTagName("body").item(0);

		body.appendChild(theform);

	} else {

		if ((menulist.currSitemap && menulist.currSitemap == sitemap) || elmid==null) {

			menulist.currSitemap = '';

			menulist.setStyle('display','none');

			return true;

		}

		menulist.setStyle('display','none');

		menulist.setHTML('');

	}

	var elm = $(elmid);

	menulist.currSitemap = sitemap;

	var menu;

	var checkbox;

	for(i=0;i<menus.length;i++){

	 	var menu = $(menus[i]+sitemap);

		if (!menu) {

			menu=document.createElement('DIV');

			checkbox=document.createElement('INPUT');

			checkbox.setAttribute('type','checkbox');


			checkbox.setAttribute('name','menus[]');

			checkbox.setAttribute('id','menu_'+sitemap+menus[i]);

			checkbox.setAttribute('value',menus[i]);

			menu.appendChild(checkbox);

			var label = document.createElement('label');

			label.setAttribute('for','menu_'+sitemap+menus[i]);

			label.appendChild(document.createTextNode(menus[i]));

			menu.appendChild(label);

			menulist.appendChild(menu);

		}

	}

	menu=document.createElement('DIV');

	var option= new Element ('div',{

		'events': {'click':addMenusToSitemap.pass([sitemap])},

		'class':'menulistoption'

	});

	option.appendChild(document.createTextNode(addMessage));

	menu.appendChild(option);

	var option= new Element ('div',{

		'events': {'click':showMenusList.pass([sitemap,elm.id])},

		'class':'menulistoption'

	});

	option.appendChild(document.createTextNode(cancelMessage));

	menu.appendChild(option);

	menulist.appendChild(menu);

	//var pos = Position.cumulativeOffset(elm);

	var pos = elm.getPosition();

	var dim = elm.getSize();

	menulist.set({'styles':{left: pos.x + 'px',top: (pos.y + dim.size.y) + 'px'}});

	menulist.setStyle('display','');

}

function addMenusToSitemap (sitemap) {

	//Close the menu

	showMenusList(sitemap,null);

	showLoading();

	var theform = $('frmmenulist');

	var postVars= 'option=com_xmap&task=ajax_request&action=add_menu_sitemap&sitemap='+sitemap+'&'+theform.toQueryString();

				var myAjax = new Ajax(

	ajaxURL,

				{

		method: 'post',

		postBody: postVars,

		update: 'menulist'+sitemap,

		onComplete: hideLoading

	}).request();

}

function removeMenuFromSitemap (sitemap,menuname,menu) {

	showLoading();

	closeMenu(menu);

	var postVars= 'option=com_xmap&task=ajax_request&action=remove_menu_sitemap&sitemap='+sitemap+'&menu='+menuname;

	var myAjax = new Ajax(

	ajaxURL,

				{

		method: 'post',

		update:'menulist'+sitemap,

		postBody: postVars,

		onComplete: hideLoading

	}).request();

}

function moveMenuPosition (sitemap,menuname,move,menu) {

	//Close the menu

	closeMenu(menu);

	showLoading();

	var postVars= 'option=com_xmap&task=ajax_request&action=move_menu_sitemap&sitemap='+sitemap+'&menu='+menuname+'&move='+move;

	var myAjax = new Ajax(

	ajaxURL,

				{

		method: 'post',

		update: 'menulist'+sitemap,

		postBody: postVars,

		onComplete: function () {hideLoading(); closeMenu()}

	}).request();

}

function refreshMenuList (sitemap) {

	showLoading();

	var myAjax = new Ajax(

				ajaxURL+ 'action=get_menus_sitemap&sitemap='+sitemap,

				{

						method: 'get',

						update: 'menulist'+sitemap,

						onComplete: function () {hideLoading(); closeMenu()}

				}).request();

}

function hideOptions (menu) {

	if (menu) {

		menu.blocked=false;

		menudelay = window.setTimeout(closeMenu.pass([menu]),300);

	}

}

function closeMenu (menu) {

	if (!menu) {

		menu = $('divoptions');

	}

	menu.blocked=false;

	if (menu.parent && menu.parent.removeClass) {

		menu.parent.removeClass('menuoptionhover');

	}

	menu.parent=null;

	menu.setStyle('display','none');

	clearDelay();

}

function clearDelay(){

	if (menudelay){

		window.clearTimeout(menudelay);

	}

}

function centerElement(elm,resize) {

	var x,y,w,h;

	if (self.innerHeight) { // all except Explorer

		x = (self.innerWidth/2) + self.pageXOffset;

		y = (self.innerHeight/2) + self.pageYOffset;

		w = self.innerWidth;

		h = self.innerHeight;

	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode

		x = (document.documentElement.clientWidth/2) + document.documentElement.scrollLeft;

		y = (document.documentElement.clientHeight/2) + document.documentElement.scrollTop;

		w = document.body.clientWidth;

		h = document.body.clientHeight;

	} else if (document.body) { // other Explorers

		x = (document.body.clientWidth/2) + document.body.scrollLeft;

		y = (document.body.clientHeight/2) + document.body.scrollTop;

		w = document.body.clientWidth;

		h = document.body.clientHeight;

	}

	if (resize) {

		elm.setStyle('width',w);

		elm.setStyle('height',h);

	}

	dim = elm.getSize();

	elm.setStyle('left',Math.round(x - (dim.size.x/2)) + 'px');

	elm.setStyle('top',Math.round(y- (dim.size.y/2))+ 'px');

}

function showLoading() {

	if (!divloading) {

		divloading = $('divloading');

	}

	loadingPosition(divloading);

	var body = document.getElementsByTagName("body").item(0);

	window.onscroll=loadingPosition.pass([divloading]);

	divloading.setStyle('display','');

}

function hideLoading() {

	if (divloading) {

		divloading.setStyle('display','none');

		var body = document.getElementsByTagName("body").item(0);

		body.onscroll=null;

	}

}

function loadingPosition(div) {

	if (self.innerHeight) { // all except Explorer

		y = self.pageYOffset;

	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode

		y = document.documentElement.scrollTop;

	} else if (document.body) { // other Explorers

		y =  document.body.scrollTop;

	} else {

		return false;

	}

	Element.set(div,{'styles':{top: (y+3)+'px'}});

}

