HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux WebLive 5.15.0-79-generic #86-Ubuntu SMP Mon Jul 10 16:07:21 UTC 2023 x86_64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/html/wpmuhibbah_err/wp-content/plugins/organization-chart/admin/assets/js/tree_page.js
var wpda_chart_content_loaded = false;
var params_for_chart = {}
var wpdevart_chart = {
	ids: { 'tree': 'wpdevart_tree', 'editor_parent': 'org_chart_tinymce_container', 'editor': 'org_chart_tinymce', 'editorhtml': 'org_chart_tinymce-html', 'editortmce': 'org_chart_tinymce-tmce' },
	initial_tree_string: "{}",
	default_info: { "image_url": wpdaTreePageInfo['plug_url'] + 'admin/assets/images/staff-icon.jpg', "node_title": "Title", "node_description": "Description", "theme": "0" },
	themes_select: '',
	popup_select: '',
	current_edited_element: null,

	start: function () {
		var first_element_add_button = document.getElementById("wpdevart_tree").getElementsByClassName('wpdevart_tree_node')[0].getElementsByTagName('button')[0];
		var first_edit_icon = document.getElementById("wpdevart_tree").getElementsByClassName('wpdevart_tree_node')[0].getElementsByClassName('edit_tree_node')[0];
		this.initial_tree_string = window.wpdaTreePageInfo['initial_tree_string'];
		this.themes_select = window.wpdaTreePageInfo['themes_select'];
		this.popup_select = window.wpdaTreePageInfo['popup_select'];
		this.edit_node_functionality(first_edit_icon);
		this.add_node_functionality(first_element_add_button);
		this.initial_existing_tree();
	},

	initial_existing_tree: function () {
		var self = this;
		var tree_info = self.initial_tree_string;
		var main_node_info = self.default_info;
		if (Object.keys(tree_info).length == 0) {
			return false;
		} else {
			if (Object.keys(tree_info[0]['node_info']).length != 0) {
				main_node_info = tree_info[0]['node_info'];
			}
			document.getElementById(self.ids.tree).getElementsByClassName('wpdevart_node_info')[0].value = JSON.stringify(main_node_info);
			document.getElementById(self.ids.tree).getElementsByClassName('wpdevart_tree_node')[0].getElementsByTagName('img')[0].setAttribute('src', main_node_info['image_url']);
			document.getElementById(self.ids.tree).getElementsByClassName('node_title')[0].innerHTML = main_node_info['node_title'];
			document.getElementById(self.ids.tree).getElementsByClassName('node_desc')[0].innerHTML = main_node_info['node_description'];
			this.updatePopupLinkIcons(document.getElementById("wpdevart_tree").getElementsByClassName('wpdevart_tree_node')[0], main_node_info);
			self.make_tree_by_object(tree_info[0].chidrens, document.getElementById(self.ids.tree).children[0].children[0]);
		}
	},
	// recursive function 
	make_tree_by_object: function (node_info, parent_element) {
		var self = this, element_to_appended;
		var count_elements = Object.keys(node_info).length;
		for (var i = 0; i < count_elements; i++) {
			if (i == 0) {
				element_to_appended = self.tree_node_element(true, node_info[i]['node_info']);
				parent_element.appendChild(element_to_appended)
			} else {
				element_to_appended = self.tree_node_element(false, node_info[i]['node_info']);
				parent_element.getElementsByTagName('ul')[0].appendChild(element_to_appended)
			}
			if (Object.keys(node_info[i].chidrens).length != 0) {
				if (i == 0) {
					self.make_tree_by_object(node_info[i].chidrens, element_to_appended.children[0])
				} else {
					self.make_tree_by_object(node_info[i].chidrens, element_to_appended)
				}
			}
		}
	},

	add_node_functionality: function (add_button_node) {
		var self = this;
		add_button_node.addEventListener("click", function () {
			var appended_node = this.parentNode.parentNode.getElementsByTagName('ul')[0];
			if (typeof (appended_node) != 'undefined' && appended_node != null) {
				this.parentNode.parentNode.getElementsByTagName('ul')[0].appendChild(self.tree_node_element(false));
			} else {
				this.parentNode.parentNode.appendChild(self.tree_node_element(true));
			}

		});
	},

	add_brother_node_functionality: function (add_button_node, left = true) {
		var self = this;
		add_button_node.addEventListener("click", function () {
			var target_element = this.parentNode.parentNode;
			if (left) {
				target_element.parentNode.insertBefore(self.tree_node_element(false), target_element);
			} else {
				target_element.parentNode.insertBefore(self.tree_node_element(false), target_element.nextSibling);
			}
		});
	},

	remove_node_functionality: function (node) {
		node.addEventListener("click", function () {
			var conf_answer;
			if (node.parentNode.parentNode.getElementsByTagName('ul').length > 0) {
				var conf_answer = confirm("Important! If you delete this element, then other elements under the following element will be removed as well.");
				if (conf_answer == false)
					return false;
			}
			parentNodeUl = node.parentNode.parentNode.parentNode;
			if (parentNodeUl.getElementsByTagName('li').length == 1) {
				parentNodeUl.parentNode.removeChild(parentNodeUl)
			} else {
				parentNodeUl.removeChild(node.parentNode.parentNode);
			}
		});
	},

	edit_node_functionality: function (node) {
		var self = this;
		node.addEventListener("click", function () {
			self.current_edited_element = this.parentNode;
			self.wpdevart_create_popup();
		});
	},

	wpdevart_create_popup: function () {
		var self = this;
		var overlay = this.createHtmlElement('div', { 'class': 'wpdevart_overlay' });
		var container = this.createHtmlElement('div', { 'class': 'wpdevart_popup_container' });
		var header_line = this.createHtmlElement('div', { 'class': 'wpdevart_popup_header_line' });
		var header_line_text = this.createHtmlElement('span', {}, 'Edit the element information');
		var close_button = this.createHtmlElement('button', {}, 'x');

		//connect elements together		
		document.body.appendChild(container);
		document.body.appendChild(overlay);
		container.appendChild(header_line);
		header_line.appendChild(header_line_text);
		header_line.appendChild(close_button);
		container.appendChild(self.createPopupInnerHtml());

		//set functionality		
		close_button.addEventListener('click', function () {
			self.wpdevart_remove_popup();
		});
		overlay.addEventListener('click', function () {
			self.wpdevart_remove_popup();
		});
		self.add_tab_functionality();
		var mediaUploader;
		document.getElementById('wpdevart_upload_button_image_for_tree').addEventListener('click', function (e) {
			e.preventDefault();
			if (mediaUploader) {
				mediaUploader.open();
				return;
			}
			mediaUploader = wp.media.frames.file_frame = wp.media({
				title: 'Choose Image',
				button: {
					text: 'Choose Image'
				}, multiple: false
			});
			mediaUploader.on('select', function () {
				var attachment = mediaUploader.state().get('selection').first().toJSON();
				document.getElementById('wpdevart_upload_image_for_tree').value = attachment.url;
			});
			mediaUploader.open();
		});
		document.getElementById('node_url_all_item').addEventListener('click', function (e) {
			if (document.getElementById('node_url_all_item').checked) {
				document.getElementById('node_url_image').checked = true;
				document.getElementById('node_url_title').checked = true;
				document.getElementById('node_url_description').checked = true;
			}
		});
		document.getElementById('node_popup_all_item').addEventListener('click', function (e) {
			if (document.getElementById('node_popup_all_item').checked) {
				document.getElementById('node_popup_image').checked = true;
				document.getElementById('node_popup_title').checked = true;
				document.getElementById('node_popup_description').checked = true;
			}
		});
		document.getElementById('wpdevart_update_tree_info').addEventListener('click', function (e) {
			self.update_tree_node_info();
			self.wpdevart_remove_popup();
		});

		self.write_node_info_inside_popup();
		// switch from textarea to html in tinymce
		this.goEditorToTMCE();
	},

	createPopupInnerHtml: function () {
		var self = this;
		let tabsContainer = this.createHtmlElement('div', { 'id': 'wpdevart-popup-tabs-container', 'class': 'div-for-clear' });
		let tabsLinksContainer = this.createHtmlElement('div', { 'id': 'wpdevart_popup-tabs', 'class': 'div-for-clear' });
		let tabsLinkInfo = this.createHtmlElement('div', { 'id': 'wpdevart_popup-tab-info', 'class': 'wpdevart_tab show' }, "Information");
		let tabsLinkPopup = this.createHtmlElement('div', { 'id': 'wpdevart_popup-tab-popup', 'class': 'wpdevart_tab' }, "Popup");
		let tabsLinkStyle = this.createHtmlElement('div', { 'id': 'wpdevart_popup-tab-style', 'class': 'wpdevart_tab' }, "Styling");
		let tabsContentsContainer = this.createHtmlElement('div', { 'id': 'wpdevart-tabs-item-container', 'class': 'div-for-clear' });
		let tabsContentInfo = this.createHtmlElement('div', { 'id': 'wpdevart_popup-tab-info_container', 'class': 'wpdevart_container wpdevart-item-section', 'style': 'display: block' });
		let tabsContentPopup = this.createHtmlElement('div', { 'id': 'wpdevart_popup-tab-popup_container', 'class': 'wpdevart_container wpdevart-item-section' });
		let tabsContentStyle = this.createHtmlElement('div', { 'id': 'wpdevart_popup-tab-style_container', 'class': 'wpdevart_container wpdevart-item-section' });
		// Image parameter
		let infoParamImg = this.createHtmlElement('div', { 'class': 'parameter_line' });
		let infoParamImgDesc = this.createHtmlElement('div', { 'class': 'param_desc' });
		let infoParamImgDescSpan = this.createHtmlElement('span', {}, 'Type the URL');
		let infoParamImgParam = this.createHtmlElement('div', { 'class': 'param' });
		let infoParamImgParamInput = this.createHtmlElement('input', { 'id': 'wpdevart_upload_image_for_tree', 'type': 'text' });
		let infoParamImgParamButton = this.createHtmlElement('button', { 'id': 'wpdevart_upload_button_image_for_tree', 'class': 'button' }, 'Upload');
		infoParamImg.appendChild(infoParamImgDesc);
		infoParamImg.appendChild(infoParamImgParam);
		infoParamImgDesc.appendChild(infoParamImgDescSpan);
		infoParamImgParam.appendChild(infoParamImgParamInput);
		infoParamImgParam.appendChild(infoParamImgParamButton);
		// Title parameter		
		let infoParamTitle = this.createHtmlElement('div', { 'class': 'parameter_line' });
		let infoParamTitleDesc = this.createHtmlElement('div', { 'class': 'param_desc' });
		let infoParamTitleDescSpan = this.createHtmlElement('span', {}, 'Type the title');
		let infoParamTitleParam = this.createHtmlElement('div', { 'class': 'param' });
		let infoParamTitleParamInput = this.createHtmlElement('input', { 'id': 'node_title', 'type': 'text', 'class': 'title_input' });
		infoParamTitle.appendChild(infoParamTitleDesc);
		infoParamTitle.appendChild(infoParamTitleParam);
		infoParamTitleDesc.appendChild(infoParamTitleDescSpan);
		infoParamTitleParam.appendChild(infoParamTitleParamInput);
		// Description parameter
		let infoParamDescription = this.createHtmlElement('div', { 'class': 'parameter_line' });
		let infoParamDescriptionDesc = this.createHtmlElement('div', { 'class': 'param_desc' });
		let infoParamDescriptionDescSpan = this.createHtmlElement('span', {}, 'Type the description');
		let infoParamDescriptionParam = this.createHtmlElement('div', { 'class': 'param' });
		let infoParamDescriptionParamTextarea = this.createHtmlElement('textarea', { 'id': 'node_description' });
		infoParamDescription.appendChild(infoParamDescriptionDesc);
		infoParamDescription.appendChild(infoParamDescriptionParam);
		infoParamDescriptionDesc.appendChild(infoParamDescriptionDescSpan);
		infoParamDescriptionParam.appendChild(infoParamDescriptionParamTextarea);
		// Link parameter
		let infoParamUrl = this.createHtmlElement('div', { 'class': 'parameter_line' });
		let infoParamUrlDesc = this.createHtmlElement('div', { 'class': 'param_desc' });
		let infoParamUrlDescSpan = this.createHtmlElement('span', {}, 'Type a Url');
		let infoParamUrlParam = this.createHtmlElement('div', { 'class': 'param' });
		let infoParamUrlParamInput = this.createHtmlElement('input', { 'id': 'node_url', 'type': 'text', 'class': 'title_input' });
		infoParamUrl.appendChild(infoParamUrlDesc);
		infoParamUrl.appendChild(infoParamUrlParam);
		infoParamUrlDesc.appendChild(infoParamUrlDescSpan);
		infoParamUrlParam.appendChild(infoParamUrlParamInput);
		// Link area parameter
		let infoParamLinkArea = this.createHtmlElement('div', { 'class': 'parameter_line' });
		let infoParamLinkAreaDesc = this.createHtmlElement('div', { 'class': 'param_desc' });
		let infoParamLinkAreaDescSpan = this.createHtmlElement('span', {}, 'Select the link area');
		let infoParamLinkAreaParam = this.createHtmlElement('div', { 'class': 'param' });
		let infoParamLinkAreaParamCheckboxAll = this.createHtmlElement('input', { 'id': 'node_url_all_item', 'type': 'checkbox', 'value': 'all' });
		let infoParamLinkAreaParamLabelAll = this.createHtmlElement('label', { 'for': 'node_url_all_item' }, 'All item');
		let infoParamLinkAreaParamCheckboxImage = this.createHtmlElement('input', { 'id': 'node_url_image', 'type': 'checkbox', 'value': 'image' });
		let infoParamLinkAreaParamLabelImage = this.createHtmlElement('label', { 'for': 'node_url_image' }, 'Image');
		let infoParamLinkAreaParamCheckboxTitle = this.createHtmlElement('input', { 'id': 'node_url_title', 'type': 'checkbox', 'value': 'title' });
		let infoParamLinkAreaParamLabelTitle = this.createHtmlElement('label', { 'for': 'node_url_title' }, 'Title');
		let infoParamLinkAreaParamCheckboxDesc = this.createHtmlElement('input', { 'id': 'node_url_description', 'type': 'checkbox', 'value': 'description' });
		let infoParamLinkAreaParamLabelDesc = this.createHtmlElement('label', { 'for': 'node_url_description' }, 'Description');
		infoParamLinkArea.appendChild(infoParamLinkAreaDesc);
		infoParamLinkArea.appendChild(infoParamLinkAreaParam);
		infoParamLinkAreaDesc.appendChild(infoParamLinkAreaDescSpan);
		infoParamLinkAreaParam.appendChild(infoParamLinkAreaParamCheckboxAll);
		infoParamLinkAreaParam.appendChild(infoParamLinkAreaParamLabelAll);
		infoParamLinkAreaParam.appendChild(infoParamLinkAreaParamCheckboxImage);
		infoParamLinkAreaParam.appendChild(infoParamLinkAreaParamLabelImage);
		infoParamLinkAreaParam.appendChild(infoParamLinkAreaParamCheckboxTitle);
		infoParamLinkAreaParam.appendChild(infoParamLinkAreaParamLabelTitle);
		infoParamLinkAreaParam.appendChild(infoParamLinkAreaParamCheckboxDesc);
		infoParamLinkAreaParam.appendChild(infoParamLinkAreaParamLabelDesc);
		// Link in new tab parameter
		let infoParamLinkNewTab = this.createHtmlElement('div', { 'class': 'parameter_line' });
		let infoParamLinkNewTabDesc = this.createHtmlElement('div', { 'class': 'param_desc' });
		let infoParamLinkNewTabDescSpan = this.createHtmlElement('span', {}, 'Open the URL in a new tab');
		let infoParamLinkNewTabParam = this.createHtmlElement('div', { 'class': 'param' });
		let infoParamLinkNewTabParamCheckbox = this.createHtmlElement('input', { 'id': 'node_url_open_new_tab', 'type': 'checkbox', 'value': 'yes' });
		let infoParamLinkNewTabParamLabel = this.createHtmlElement('label', { 'for': 'node_url_open_new_tab' }, 'Yes');
		infoParamLinkNewTab.appendChild(infoParamLinkNewTabDesc);
		infoParamLinkNewTab.appendChild(infoParamLinkNewTabParam);
		infoParamLinkNewTabDesc.appendChild(infoParamLinkNewTabDescSpan);
		infoParamLinkNewTabParam.appendChild(infoParamLinkNewTabParamCheckbox);
		infoParamLinkNewTabParam.appendChild(infoParamLinkNewTabParamLabel);
		// responsive after element
		let infoParamResponsiveAfterElement = this.createHtmlElement('div', { 'class': 'parameter_line' });
		let infoParamResponsiveAfterElementDesc = this.createHtmlElement('div', { 'class': 'param_desc' });
		let infoParamResponsiveAfterElementDescSpan = this.createHtmlElement('span', {}, 'Responsive view after this element');
		let infoParamResponsiveAfterElementParam = this.createHtmlElement('div', { 'class': 'param' });
		let infoParamResponsiveAfterElementParamCheckbox = this.createHtmlElement('input', { 'id': 'node_responsive_after_element', 'type': 'checkbox', 'value': 'yes' });
		let infoParamResponsiveAfterElementParamLabel = this.createHtmlElement('label', { 'for': 'node_responsive_after_element' }, 'Yes');
		infoParamResponsiveAfterElement.appendChild(infoParamResponsiveAfterElementDesc);
		infoParamResponsiveAfterElement.appendChild(infoParamResponsiveAfterElementParam);
		infoParamResponsiveAfterElementDesc.appendChild(infoParamResponsiveAfterElementDescSpan);
		infoParamResponsiveAfterElementParam.appendChild(infoParamResponsiveAfterElementParamCheckbox);
		infoParamResponsiveAfterElementParam.appendChild(infoParamResponsiveAfterElementParamLabel);
		this.setElementPro(infoParamResponsiveAfterElementParamCheckbox);
		// Popup area parameter
		let popupParamPopupArea = this.createHtmlElement('div', { 'class': 'parameter_line' });
		let popupParamPopupAreaDesc = this.createHtmlElement('div', { 'class': 'param_desc' });
		let popupParamPopupAreaDescSpan = this.createHtmlElement('span', {}, 'Select the Popup area');
		let popupParamPopupAreaParam = this.createHtmlElement('div', { 'class': 'param' });
		let popupParamPopupAreaParamCheckboxAll = this.createHtmlElement('input', { 'id': 'node_popup_all_item', 'type': 'checkbox', 'value': 'all' });
		let popupParamPopupAreaParamLabelAll = this.createHtmlElement('label', { 'for': 'node_popup_all_item' }, 'All item');
		let popupParamPopupAreaParamCheckboxImage = this.createHtmlElement('input', { 'id': 'node_popup_image', 'type': 'checkbox', 'value': 'image' });
		let popupParamPopupAreaParamLabelImage = this.createHtmlElement('label', { 'for': 'node_popup_image' }, 'Image');
		let popupParamPopupAreaParamCheckboxTitle = this.createHtmlElement('input', { 'id': 'node_popup_title', 'type': 'checkbox', 'value': 'title' });
		let popupParamPopupAreaParamLabelTitle = this.createHtmlElement('label', { 'for': 'node_popup_title' }, 'Title');
		let popupParamPopupAreaParamCheckboxDesc = this.createHtmlElement('input', { 'id': 'node_popup_description', 'type': 'checkbox', 'value': 'description' });
		let popupParamPopupAreaParamLabelDesc = this.createHtmlElement('label', { 'for': 'node_popup_description' }, 'Description');
		popupParamPopupArea.appendChild(popupParamPopupAreaDesc);
		popupParamPopupArea.appendChild(popupParamPopupAreaParam);
		popupParamPopupAreaDesc.appendChild(popupParamPopupAreaDescSpan);
		popupParamPopupAreaParam.appendChild(popupParamPopupAreaParamCheckboxAll);
		popupParamPopupAreaParam.appendChild(popupParamPopupAreaParamLabelAll);
		popupParamPopupAreaParam.appendChild(popupParamPopupAreaParamCheckboxImage);
		popupParamPopupAreaParam.appendChild(popupParamPopupAreaParamLabelImage);
		popupParamPopupAreaParam.appendChild(popupParamPopupAreaParamCheckboxTitle);
		popupParamPopupAreaParam.appendChild(popupParamPopupAreaParamLabelTitle);
		popupParamPopupAreaParam.appendChild(popupParamPopupAreaParamCheckboxDesc);
		popupParamPopupAreaParam.appendChild(popupParamPopupAreaParamLabelDesc);
		// popup theme
		let popupParamSelectTheme = this.createHtmlElement('div', { 'class': 'parameter_line' });
		let popupParamSelectThemeDesc = this.createHtmlElement('div', { 'class': 'param_desc' });
		let popupParamSelectThemeSpan = this.createHtmlElement('span', {}, 'Select the popup theme');
		let popupParamSelectThemeParam = this.createHtmlElement('div', { 'class': 'param' });
		popupParamSelectTheme.appendChild(popupParamSelectThemeDesc);
		popupParamSelectTheme.appendChild(popupParamSelectThemeParam);
		popupParamSelectThemeDesc.appendChild(popupParamSelectThemeSpan);
		popupParamSelectThemeParam.innerHTML = self.popup_select;

		// Popup html parameter
		let popupParamHtml = this.createHtmlElement('div', { 'class': 'parameter_line param_line_full_width' });
		let popupParamHtmlDesc = this.createHtmlElement('div', { 'class': 'param_desc param_desc_top' });
		let popupParamHtmlDescSpan = this.createHtmlElement('span', {}, 'Popup message');
		let popupParamHtmlParam = this.createHtmlElement('div', { 'id': 'org_chart_popup_popup_param_container', 'class': 'param' });
		let popupParamHtmlParamTextarea = this.getTemporaryEditor();
		popupParamHtml.appendChild(popupParamHtmlDesc);
		popupParamHtml.appendChild(popupParamHtmlParam);
		popupParamHtmlDesc.appendChild(popupParamHtmlDescSpan);
		popupParamHtmlParam.appendChild(popupParamHtmlParamTextarea);

		// theme parameter
		let styleParamSelectTheme = this.createHtmlElement('div', { 'class': 'parameter_line' });
		let styleParamSelectThemeDesc = this.createHtmlElement('div', { 'class': 'param_desc' });
		let styleParamSelectThemeSpan = this.createHtmlElement('span', {}, 'Select the theme');
		let styleParamSelectThemeParam = this.createHtmlElement('div', { 'class': 'param' });
		styleParamSelectTheme.appendChild(styleParamSelectThemeDesc);
		styleParamSelectTheme.appendChild(styleParamSelectThemeParam);
		styleParamSelectThemeDesc.appendChild(styleParamSelectThemeSpan);
		styleParamSelectThemeParam.innerHTML = self.themes_select;
		//button for update
		let updateButtonContainer = this.createHtmlElement('div');
		let updateButtonButton = this.createHtmlElement('button', { 'id': 'wpdevart_update_tree_info', 'class': 'button-primary action wpdevart_popup_update' }, 'Update');
		updateButtonContainer.appendChild(updateButtonButton);
		// connect elements together
		tabsContainer.appendChild(tabsLinksContainer);
		tabsContainer.appendChild(tabsContentsContainer);
		tabsLinksContainer.appendChild(tabsLinkInfo);
		tabsLinksContainer.appendChild(tabsLinkPopup);
		tabsLinksContainer.appendChild(tabsLinkStyle);
		tabsContentsContainer.appendChild(tabsContentInfo);
		tabsContentsContainer.appendChild(tabsContentPopup);
		tabsContentsContainer.appendChild(tabsContentStyle);
		tabsContentInfo.appendChild(infoParamImg);
		tabsContentInfo.appendChild(infoParamTitle);
		tabsContentInfo.appendChild(infoParamDescription);
		tabsContentInfo.appendChild(infoParamUrl);
		tabsContentInfo.appendChild(infoParamLinkArea);
		tabsContentInfo.appendChild(infoParamLinkNewTab);
		tabsContentInfo.appendChild(infoParamResponsiveAfterElement);
		tabsContentPopup.appendChild(popupParamPopupArea);
		tabsContentPopup.appendChild(popupParamSelectTheme);
		tabsContentPopup.appendChild(popupParamHtml);
		tabsContentStyle.appendChild(styleParamSelectTheme);
		tabsContentsContainer.appendChild(updateButtonContainer);
		return tabsContainer;
	},
	// fill info form node to popup for editing node
	write_node_info_inside_popup: function () {
		var self = this, title = 'Title', desc = 'Description', image_url = this.default_info.image_url, theme = '0', node_url = '', node_url_open_area = { 'item': false, 'image': false, 'title': false, 'desc': false }, popup_html = '', popup_area = { 'item': false, 'image': false, 'title': false, 'desc': false }, popup_theme = '0', node_responsive_after_element = false, node_url_open_new_tab = false;
		if (self.current_edited_element != null) {
			var info_string = self.current_edited_element.getElementsByClassName('wpdevart_node_info')[0].value;
			if (info_string != '') {
				var info_obj = JSON.parse(info_string)
				title = info_obj['node_title']
				desc = info_obj['node_description']
				image_url = info_obj['image_url']
				theme = info_obj['theme']
				//check link in tree info
				if ('node_url' in info_obj) {
					node_url = info_obj['node_url']
				}
				//check link area in tree info
				if ('node_url_o_a' in info_obj) {
					if ('item' in info_obj['node_url_o_a'])
						node_url_open_area['item'] = info_obj['node_url_o_a']['item'];
					if ('image' in info_obj['node_url_o_a'])
						node_url_open_area['image'] = info_obj['node_url_o_a']['image'];
					if ('title' in info_obj['node_url_o_a'])
						node_url_open_area['title'] = info_obj['node_url_o_a']['title'];
					if ('desc' in info_obj['node_url_o_a'])
						node_url_open_area['desc'] = info_obj['node_url_o_a']['desc'];
				}
				//check link in new tab in tree info
				if ('node_url_o_n_t' in info_obj) {
					node_url_open_new_tab = info_obj['node_url_o_n_t']
				}
				//check link in new tab in tree info
				if ('node_responsive_after' in info_obj) {
					node_responsive_after_element = info_obj['node_responsive_after']
				}
				//check link in new tab in tree info
				if ('popup_o_a' in info_obj) {
					if ('item' in info_obj['popup_o_a'])
						popup_area['item'] = info_obj['popup_o_a']['item'];
					if ('image' in info_obj['popup_o_a'])
						popup_area['image'] = info_obj['popup_o_a']['image'];
					if ('title' in info_obj['popup_o_a'])
						popup_area['title'] = info_obj['popup_o_a']['title'];
					if ('desc' in info_obj['popup_o_a'])
						popup_area['desc'] = info_obj['popup_o_a']['desc'];
				}
				//check link in tree info
				if ('popup_html' in info_obj) {
					popup_html = info_obj['popup_html']
				}
				if ('popup_theme' in info_obj) {
					popup_theme = info_obj['popup_theme']
				}

			}
		}
		document.getElementById('wpdevart_upload_image_for_tree').value = image_url;
		document.getElementById('node_title').value = title;
		document.getElementById('node_description').value = desc;
		document.getElementById('node_url').value = node_url;
		//check already checked link area
		if (node_url_open_area['item'] === "1" || node_url_open_area['item'] === true)
			document.getElementById('node_url_all_item').checked = true;
		if (node_url_open_area['image'] === "1" || node_url_open_area['image'] === true)
			document.getElementById('node_url_image').checked = true;
		if (node_url_open_area['title'] === "1" || node_url_open_area['title'] === true)
			document.getElementById('node_url_title').checked = true;
		if (node_url_open_area['desc'] === "1" || node_url_open_area['desc'] === true)
			document.getElementById('node_url_description').checked = true;
		if (node_url_open_new_tab === "1" || node_url_open_new_tab === true)
			document.getElementById('node_url_open_new_tab').checked = true;
		if (node_responsive_after_element === "1" || node_responsive_after_element === true)
			document.getElementById('node_responsive_after_element').checked = true;
		//check already checked popup area
		if (popup_area['item'] === "1" || popup_area['item'] === true)
			document.getElementById('node_popup_all_item').checked = true;
		if (popup_area['image'] === "1" || popup_area['image'] === true)
			document.getElementById('node_popup_image').checked = true;
		if (popup_area['title'] === "1" || popup_area['title'] === true)
			document.getElementById('node_popup_title').checked = true;
		if (popup_area['desc'] === "1" || popup_area['desc'] === true)
			document.getElementById('node_popup_description').checked = true;
		this.setTemporaryEditorValue(popup_html);
		document.getElementById('node_theme').value = theme;
		document.getElementById('node_popup_theme').value = popup_theme;
	},
	// update node information coming from popup
	update_tree_node_info: function () {
		var self = this, info_array = {};
		info_array['image_url'] = document.getElementById('wpdevart_upload_image_for_tree').value;
		info_array['node_title'] = document.getElementById('node_title').value;
		info_array['node_description'] = document.getElementById('node_description').value;
		info_array['node_url'] = document.getElementById('node_url').value;
		//o_a is open area
		info_array['node_url_o_a'] = {};
		info_array['node_url_o_a']['item'] = document.getElementById('node_url_all_item').checked;
		info_array['node_url_o_a']['image'] = document.getElementById('node_url_image').checked;
		info_array['node_url_o_a']['title'] = document.getElementById('node_url_title').checked;
		info_array['node_url_o_a']['desc'] = document.getElementById('node_url_description').checked;
		//o_a for popup		
		info_array['popup_o_a'] = {};
		info_array['popup_o_a']['item'] = document.getElementById('node_popup_all_item').checked;
		info_array['popup_o_a']['image'] = document.getElementById('node_popup_image').checked;
		info_array['popup_o_a']['title'] = document.getElementById('node_popup_title').checked;
		info_array['popup_o_a']['desc'] = document.getElementById('node_popup_description').checked;
		info_array['popup_html'] = self.getTemporaryEditorValue();
		info_array['popup_theme'] = document.getElementById('node_popup_theme').value;

		info_array['node_url_o_n_t'] = document.getElementById('node_url_open_new_tab').checked;
		info_array['node_responsive_after'] = document.getElementById('node_responsive_after_element').checked;
		info_array['theme'] = document.getElementById('node_theme').value;

		self.current_edited_element.getElementsByTagName('img')[0].setAttribute('src', info_array['image_url']);
		self.current_edited_element.getElementsByClassName('node_title')[0].innerHTML = info_array['node_title'];
		self.current_edited_element.getElementsByClassName('node_desc')[0].innerHTML = info_array['node_description'];
		self.current_edited_element.getElementsByClassName('wpdevart_node_info')[0].value = JSON.stringify(info_array);
		this.updatePopupLinkIcons(self.current_edited_element, info_array);
	},
	//popup tab functionality
	add_tab_functionality: function () {
		var tabs = document.getElementById('wpdevart_popup-tabs').children;
		for (var i = 0; i < tabs.length; i++) {
			tabs[i].addEventListener('click', function () {
				var container_id = '';
				for (var j = 0; j < tabs.length; j++) {
					tabs[j].setAttribute('class', 'wpdevart_tab');
					container_id = tabs[j].getAttribute('id') + '_container';
					document.getElementById(container_id).style.display = 'none';
				}
				this.setAttribute('class', 'wpdevart_tab show');
				container_id = this.getAttribute('id') + '_container';
				document.getElementById(container_id).style.display = 'block';
			})
		}
	},
	// remove popup
	wpdevart_remove_popup: function () {
		this.removeTemporaryEditor();
		document.getElementsByClassName('wpdevart_overlay')[0].parentNode.removeChild(document.getElementsByClassName('wpdevart_overlay')[0])
		document.getElementsByClassName('wpdevart_popup_container')[0].parentNode.removeChild(document.getElementsByClassName('wpdevart_popup_container')[0]);
		this.current_edited_element = null;
	},
	// make new node
	tree_node_element: function (with_ul = true, info = null) {
		var self = this;
		if (info == null || Object.keys(info).length == 0) {
			info = self.default_info;
		}
		var Ul = this.createHtmlElement('ul');
		var li = this.createHtmlElement('li');
		var Div = this.createHtmlElement('div', { 'class': 'wpdevart_tree_node' });
		var Img = this.createHtmlElement('img', { 'src': info['image_url'] });
		var imgSpan = this.createHtmlElement('span', { 'class': 'node_img' });
		var Br = this.createHtmlElement('br');
		var Button = this.createHtmlElement('button', { 'class': 'add_child_button', 'type': 'button' });
		var Button_bro_right = this.createHtmlElement('button', { 'class': 'add_bro_right', 'type': 'button' });
		var Button_bro_left = this.createHtmlElement('button', { 'class': 'add_bro_left', 'type': 'button' });
		var trash_icon = this.createHtmlElement('span', { 'class': 'dashicons dashicons-trash remove_tree_node' });
		var edit_icon = this.createHtmlElement('span', { 'class': 'dashicons dashicons-edit edit_tree_node' });
		var info_for_node = this.createHtmlElement('input', { 'class': 'wpdevart_node_info', 'type': 'hidden', 'value': JSON.stringify(info) });
		var title = this.createHtmlElement('div', { 'class': 'node_title' }, info['node_title']);
		var description = this.createHtmlElement('div', { 'class': 'node_desc' }, info['node_description']);
		Ul.appendChild(li);
		li.appendChild(Div);
		imgSpan.appendChild(Img);
		Div.appendChild(imgSpan);
		Div.appendChild(Br);
		self.add_brother_node_functionality(Button_bro_right, false);
		self.add_brother_node_functionality(Button_bro_left, true);
		self.add_node_functionality(Button);
		self.remove_node_functionality(trash_icon);
		self.edit_node_functionality(edit_icon);
		Div.appendChild(Button);
		Div.appendChild(Button_bro_right);
		Div.appendChild(Button_bro_left);
		Div.appendChild(trash_icon);
		Div.appendChild(edit_icon);
		Div.appendChild(title);
		Div.appendChild(description);
		Div.appendChild(info_for_node);
		this.updatePopupLinkIcons(Div, info);
		if (with_ul)
			return Ul
		return li
	},
	/*Save*/
	make_from_tree_json: function () {
		var tree = {}, self = this;
		tree_start_node = document.getElementById(self.ids.tree).children[0].children[0].children[0];
		tree = self.get_all_childs(tree_start_node, tree);
		return tree
	},

	get_all_childs: function (node, tree_json) {
		var tree_childs = node.parentNode.parentNode.children, value = '', self = this;
		for (var i = 0; i < tree_childs.length; i++) {
			tree_json[i] = {};
			var node_info = tree_childs[i].children[0].getElementsByClassName('wpdevart_node_info')[0].value;
			if (node_info != '')
				tree_json[i]['node_info'] = JSON.parse(node_info);
			else
				tree_json[i]['node_info'] = {};
			if (typeof (tree_childs[i].children[1]) != 'undefined') {
				tree_json[i]['chidrens'] = self.get_all_childs(tree_childs[i].children[1].children[0].children[0], {});
			} else {
				tree_json[i]['chidrens'] = {};
			}
		}
		return tree_json;
	},
	//editor functions
	checkEditor: function () {
		if (document.getElementById(this.ids.editor) == null || document.getElementById(this.ids.editorhtml) == null || document.getElementById(this.ids.editortmce) == null || typeof (tinymce) == 'undefined') {
			return false;
		}
		return true;
	},

	goEditorToTMCE: function () {
		if (this.checkEditor()) {
			document.getElementById(this.ids.editortmce).click();
		}
	},

	getTemporaryEditor: function () {
		if (!this.checkEditor()) {
			document.getElementById(this.ids.editor_parent).children[0].remove();
			return this.createHtmlElement('textarea', { 'id': this.ids.editor });
		}
		tinymce.remove('#' + this.ids.editor);
		document.getElementById(this.ids.editorhtml).click();
		return document.getElementById('org_chart_tinymce_container').children[0];
	},

	getTemporaryEditorValue: function () {
		if (!this.checkEditor()) {
			return document.getElementById(this.ids.editor).value;
		}
		tinymce.get(this.ids.editor).save();
		return document.getElementById(this.ids.editor).value;
	},

	setTemporaryEditorValue: function (value) {
		if (!this.checkEditor()) {
			document.getElementById(this.ids.editor).value = value
			return null;
		}
		if (tinymce.get(this.ids.editor) == null) {
			document.getElementById(this.ids.editor).value = value
			return null;
		}
		tinymce.get(this.ids.editor).setContent(value);
		tinymce.get(this.ids.editor).save()
	},

	removeTemporaryEditor() {
		document.getElementById(this.ids.editor).value = '';
		if (!this.checkEditor()) {
			return null;
		}
		if (document.getElementById(this.ids.editor).parentElement.parentElement.getAttribute('id') == 'wp-' + this.ids.editor + '-wrap') {
			tinymce.get(this.ids.editor).setContent('');
			tinymce.get(this.ids.editor).save()
			tinymce.remove('#' + this.ids.editor);
			document.getElementById(this.ids.editorhtml).click();
			document.getElementById(this.ids.editor_parent).appendChild(document.getElementById(this.ids.editor).parentElement.parentElement);
		}
	},
	updatePopupLinkIcons: function (node, nodeinfo) {
		this.removeVisualIcon(node);
		if (nodeinfo['popup_html'] != null && nodeinfo['popup_html'] != '') {
			if (nodeinfo['popup_o_a']['item'] == '1' || nodeinfo['popup_o_a']['item'] == true) {
				var popup_icon = this.createHtmlElement('span', { 'class': 'node_popup_icon all_item' });
				node.appendChild(popup_icon);
			}
			if (popup_icon == null) {
				if ((nodeinfo['popup_o_a']['image'] == '1' || nodeinfo['popup_o_a']['image'] == true)) {
					var popup_icon_img = this.createHtmlElement('span', { 'class': 'node_popup_icon img_item' });
					node.getElementsByClassName('node_img')[0].appendChild(popup_icon_img);
				}
				if ((nodeinfo['popup_o_a']['title'] == '1' || nodeinfo['popup_o_a']['title'] == true)) {
					var popup_icon_title = this.createHtmlElement('span', { 'class': 'node_popup_icon title_item' });
					node.getElementsByClassName('node_title')[0].appendChild(popup_icon_title);
				}
				if ((nodeinfo['popup_o_a']['item'] == '1' || nodeinfo['popup_o_a']['desc'] == true)) {
					var popup_icon_description = this.createHtmlElement('span', { 'class': 'node_popup_icon description_item' });
					node.getElementsByClassName('node_desc')[0].appendChild(popup_icon_description);
				}
			}
		}
		if (nodeinfo['node_url'] != null && nodeinfo['node_url'] != '') {
			var additionalClass = '';
			if (nodeinfo['node_url_o_a']['item'] == '1' || nodeinfo['node_url_o_a']['item'] == true) {
				if (popup_icon != null)
					additionalClass = ' move_link_right';
				var link_icon = this.createHtmlElement('span', { 'class': 'node_link_icon all_item' + additionalClass });
				node.appendChild(link_icon);
				additionalClass = '';
			}
			if (link_icon == null) {
				if ((nodeinfo['node_url_o_a']['image'] == '1' || nodeinfo['node_url_o_a']['image'] == true)) {
					if (popup_icon_img != null)
						additionalClass = ' move_link_right';
					var link_icon_img = this.createHtmlElement('span', { 'class': 'node_link_icon img_item' + additionalClass });
					console.log(link_icon_img)
					console.log(node.getElementsByClassName('node_img')[0])
					node.getElementsByClassName('node_img')[0].appendChild(link_icon_img);
					additionalClass = '';
				}
				if ((nodeinfo['node_url_o_a']['title'] == '1' || nodeinfo['node_url_o_a']['title'] == true)) {
					if (popup_icon_title != null)
						additionalClass = ' move_link_right';
					var link_icon_title = this.createHtmlElement('span', { 'class': 'node_link_icon title_item' + additionalClass });
					node.getElementsByClassName('node_title')[0].appendChild(link_icon_title);
					additionalClass = '';
				}
				if ((nodeinfo['node_url_o_a']['item'] == '1' || nodeinfo['node_url_o_a']['desc'] == true)) {
					if (popup_icon_description != null)
						additionalClass = ' move_link_right';
					var link_icon_description = this.createHtmlElement('span', { 'class': 'node_link_icon description_item' + additionalClass });
					node.getElementsByClassName('node_desc')[0].appendChild(link_icon_description);
				}
			}
		}
	},
	removeVisualIcon: function (node) {
		let popup_icons = node.getElementsByClassName('node_popup_icon');
		let link_icons = node.getElementsByClassName('node_link_icon');
		if (popup_icons != null) {
			let count = popup_icons.length;
			for (let i = 0; i < count; i++) {
				popup_icons[0].remove();
			}
		}
		if (link_icons != null) {
			let count = link_icons.length;
			for (let i = 0; i < count; i++) {
				link_icons[0].remove();
			}
		}
	},
	/*###################### HELPER FUNCTIONS ###########################*/
	createHtmlElement: function (tag = "", attr = {}, innerHTML = "") {
		let el = document.createElement(tag);
		for (const key in attr) {
			el.setAttribute(key, attr[key]);
		}
		if (innerHTML != '') {
			el.innerHTML = innerHTML;
		}
		return el;
	},

	setElementPro: function (element) {
		proElementText = this.createHtmlElement('span',{'class':'wpda_pro_feature'},' (Pro)')
		element.parentElement.parentElement.getElementsByClassName('param_desc')[0].appendChild(proElementText);
		element.addEventListener('mousedown', function () {
			alert('If you want to use this feature upgrade to Organization Chart Pro');
			return false;
		})
	}
}



function submitButton(value) {
	if (!wpda_chart_content_loaded) {
		alert('please wait until content load');
		return;
	}
	document.getElementById("adminForm").setAttribute("action", document.getElementById("adminForm").getAttribute("action") + "&task=" + value);
	document.getElementById("wpdevart_chart_tree_all_info").value = JSON.stringify(wpdevart_chart.make_from_tree_json());
	document.getElementById("adminForm").submit();
}

document.addEventListener('DOMContentLoaded', function () {
	wpdevart_chart.start();
	wpda_chart_content_loaded = true;
})