<?php
/**
 * @package	AcyMailing for Joomla!
 * @version	5.6.0
 * @author	acyba.com
 * @copyright	(C) 2009-2016 ACYBA S.A.R.L. All rights reserved.
 * @license	GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
 */
defined('_JEXEC') or die('Restricted access');
?><?php

class testreceiverType{
	function display($selection = '', $group = '', $emails = ''){
		$app = JFactory::getApplication();
		$my = JFactory::getUser();
		if(empty($emails)) $emails = $my->email;

		$js = 'function timeoutAddNewTestAddress(currentValue){
					if(currentValue.length > 1 && ((currentValue.indexOf("@") != -1 && currentValue.slice(-1) == " ") || currentValue.slice(-1) == ";" || currentValue.slice(-1) == ",")){
						currentValue = currentValue.substring(0, currentValue.length - 1);
						setUser(currentValue);
						return;
					}
					setTimeout(function(){addNewTestAddress(currentValue);}, 500);
				}

			function addNewTestAddress(currentValue){';
		if($app->isAdmin()){
			$js .= 'if(currentValue != document.getElementById("message_receivers").value) return;

				try{
					var ajaxCall = new Ajax("index.php?option=com_acymailing&tmpl=component&ctrl=subscriber&task=getSubscribersByEmail&search="+currentValue,{
						method: "get",
						onComplete: function(responseText, responseXML) {
							document.getElementById("acymailing_divSelectReceiver").style.display = "block";
							document.getElementById("acymailing_receiversTable").innerHTML = responseText;
							receiversList = document.getElementById("acymailing_receiversTable");
							if(receiversList.getElementsByClassName("row_user").length==0) {
								document.getElementById("acymailing_divSelectReceiver").style.display = "none";
							}
						}
					}).request();

				}catch(err){
					new Request({
						url:"index.php?option=com_acymailing&tmpl=component&ctrl=subscriber&task=getSubscribersByEmail&search="+currentValue,
						method: "get",
						onSuccess: function(responseText, responseXML) {
							document.getElementById("acymailing_divSelectReceiver").style.display = "block";
							document.getElementById("acymailing_receiversTable").innerHTML = responseText;
							receiversList = document.getElementById("acymailing_receiversTable");
							if(receiversList.getElementsByClassName("row_user").length==0) {
								document.getElementById("acymailing_divSelectReceiver").style.display = "none";
							}
						}
					}).send();
				}';
		}
		$js .= '}

			var selected = new Array("'.str_replace(',', '","', $emails).'");
			function setUser(userEmail){
				userEmail = userEmail.replace(/^\s+|\s+$/gm,"");
				if(validateEmail(userEmail, "'.str_replace('"', '\\"', JText::_('SEND_TEST_TO')).'") && selected.indexOf(userEmail) == -1){
					selected.push(userEmail);
					document.getElementById("usersSelected").innerHTML += "<span class=\"selectedUsers\">"+userEmail+"<span class=\"removeUser\" onclick=\"removeUser(this, \'"+userEmail+"\');\"></span></span>";
					document.getElementById("test_emails").value = selected.join(",");
				}
				document.getElementById("message_receivers").value = "";
				document.getElementById("acymailing_divSelectReceiver").style.display = "none";
			}

			function removeUser(element, userEmail){
				var toRemove = element.parentElement;
				toRemove.parentElement.removeChild(toRemove);
				var index = selected.indexOf(userEmail);
				if (index > -1) {
					selected.splice(index, 1);
				}
				document.getElementById("test_emails").value = selected.join(",");
			}

			function showOptions(selection){
				if(selection == "users"){
					document.getElementById("userSelection").style.display = "";
					document.getElementById("groupSelection").style.display = "none";
				}else{
					document.getElementById("userSelection").style.display = "none";
					document.getElementById("groupSelection").style.display = "";
				}
			}

			function myKeyPress(e, value){
				var keynum;

				if(window.event) {
				  keynum = e.keyCode;
				}else if(e.which){
				  keynum = e.which;
				}

				if(keynum == 13){
					setUser(value);
					return false;
				}

				return true;
			}';

		$doc = JFactory::getDocument();
		$doc->addScriptDeclaration($js);
		?>
		<style>
			.removeUser{
				width: 20px;
				background-image: url(<?php echo ACYMAILING_LIVE; ?>/media/com_acymailing/images/closecross.png);
				background-size: cover;
				height: 20px;
				cursor: pointer;
				float: right;
			}

			.selectedUsers{
				background-color: #F5F5F5;
				padding-left: 5px;
				display: inline-block;
				border: solid 1px #C5C4C4;
				border-radius: 4px;
				margin-right: 3px;
				margin-top: 5px;
				line-height: 20px;
			}

			#acymailing_divSelectReceiver td{
				padding: 10px 5px;
			}

			#acymailing_divSelectReceiver{
				position: absolute;
				width: 400px;
				border: solid 1px #D3D3D3;
				z-index: 9999;
				background: white;
				box-shadow: 1px 1px 5px #D5D5DD;
			}

			#acymailing_receiversTable .row_user:hover{
				background-color: #EBEBEB;
				cursor: pointer;
			}

			.row_user{
				border-top: solid 1px #EBEBEB;
			}

			#usersSelected{
				margin-bottom: 2px;
				width: 100%;
				display: block;
			}
		</style>
		<?php
		echo acymailing_getFunctionsEmailCheck();
		if($app->isAdmin()){
			$values = array();
			$values[] = JHTML::_('select.option', 'users', JText::_('ACY_SUBSCRIBER'));
			$values[] = JHTML::_('select.option', 'group', JText::_('ACY_GROUP'));
			echo JHTML::_('select.genericlist', $values, 'test_selection', 'size="1" style="margin:0;" onchange="showOptions(this.value);"', 'value', 'text', $selection);
		}else{
			echo '<input class="inputbox" type="hidden" id="test_selection" name="test_selection" value="users" />';
		}
		?>
		<div id="userSelection" style="margin-top:5px;<?php if($selection == 'group') echo 'display:none;'; ?>">
			<input onkeypress="return myKeyPress(event, this.value);" style="width:212px;margin:0;" placeholder="<?php echo JText::_('EMAIL_ADDRESS'); ?>..." type="text" id="message_receivers" onkeyup="timeoutAddNewTestAddress(this.value);" class="inputbox" autocomplete="off"/>
			<span id="usersSelected">
				<?php
				$allEmails = explode(',', $emails);
				foreach($allEmails as $oneEmail){
					echo '<span class="selectedUsers">'.htmlspecialchars($oneEmail, ENT_COMPAT, 'UTF-8').'<span class="removeUser" onclick="removeUser(this, \''.htmlspecialchars($oneEmail, ENT_COMPAT, 'UTF-8').'\');"></span></span>';
				}
				?>
			</span>

			<div id="acymailing_divSelectReceiver" style="display:none; overflow-y:scroll !important;">
				<div id="acymailing_receiversTable"></div>
			</div>
			<input class="inputbox" type="hidden" id="test_emails" name="test_emails" value="<?php echo htmlspecialchars($emails, ENT_COMPAT, 'UTF-8'); ?>"/>
		</div>
		<?php
		if($app->isAdmin()){
			$db = JFactory::getDBO();
			if(ACYMAILING_J16){
				$db->setQuery('SELECT ug.id, ug.parent_id, ug.title AS text, COUNT(ugm.user_id) AS nbusers '.'FROM #__usergroups AS ug '.'LEFT JOIN #__user_usergroup_map ugm '.'ON ug.id = ugm.group_id '.'GROUP BY ug.id');
			}else{
				$db->setQuery('SELECT ug.id, ug.parent_id, ug.name AS text, COUNT(u.id) AS nbusers '.'FROM #__core_acl_aro_groups AS ug '.'LEFT JOIN #__users u '.'ON ug.id = u.gid '.'GROUP BY ug.id');
			}
			$values = $db->loadObjectList();
			$this->cats = array();
			if(!empty($values)){
				foreach($values as $oneCat){
					$this->cats[$oneCat->parent_id][] = $oneCat;
				}
			}
			$this->catvalues = array();
			$this->catvalues[] = JHTML::_('select.option', -1, '- - -');
			$this->_handleChildren();
			echo '<div id="groupSelection" style="'.($selection != 'group' ? 'display:none;' : '').'margin-top:5px;">'.JHTML::_('select.genericlist', $this->catvalues, 'test_group', 'size="1"', 'value', 'text', $group).'</div>';
		}
	}

	private function _handleChildren($parent_id = 0, $level = 0){
		if(empty($this->cats[$parent_id])) return;
		foreach($this->cats[$parent_id] as $cat){
			$addValue = JHTML::_('select.option', $cat->id, str_repeat(" - - ", $level).$cat->text);
			if($cat->nbusers > 10 || $cat->nbusers == 0) $addValue->disable = true;
			$this->catvalues[] = $addValue;
			$this->_handleChildren($cat->id, $level + 1);
		}
	}
}
