//所有的ZMAX扩展都遵循如下的代码规范
jQuery(document).ready(function(){	  
  //处理SITEBASE TOKEN变量声明失败 ：在某一些模板中，使用JFactory::getDocument()->addScriptDeclaration 可能会不起作用
  if(typeof ZMAX_SYSTEM_AJAX_SITE_BASE=="undefined")
  {
	  ZMAX_SYSTEM_AJAX_SITE_BASE="";
  }
  
  if(typeof ZMAX_SYSTEM_AJAX_TOKEN=="undefined")
  {
		ZMAX_SYSTEM_AJAX_TOKEN="";
  }
});


var gTime=60; //默认的倒计时长
var gTimer;//定时器全局对象
var gStr="";//全局提示字符串
var gSended = false; //记录是否已经发送短信


//响应joomla的标准校验方法  
jQuery(document).ready(function(){	  

	//第一步，找到captcha
	
	/*
	captcha = jQuery(".system-zmaxcaptcha-imagecaptcha").closest(".layui-form-item");
	phoneCaptcha = jQuery(".system-zmaxcaptcha-get-phonecode").closest(".layui-form-item");
	captcha.insertBefore(phoneCaptcha);
	*/
	
	
	
	
	
	
	
	//图片验证码
    document.formvalidator.setHandler('zmaximagecaptcha',
        function (value,element) {
			var name = jQuery(element).attr("name");
			return validatorCaptcha(value,"img",name,"");
        });
	//手机号	
	document.formvalidator.setHandler('phoneno',
        function (value) {
			if(validatemobile(value))		
			{
				return true;	
			}
			return false;
			
        });	
	//手机验证码
	document.formvalidator.setHandler('phonecaptcha',
		function (value,element) {
			//必须要在这里得到电话号码才行
			var phoneId = jQuery('.system-zmaxcaptcha-get-phonecode').data("phone");			
			var phoneNo = jQuery('#'+phoneId).val();
			var name = jQuery(element).attr("name");
			if(!validatemobile(phoneNo))		
			{
				jQuery('#'+phoneField).trigger("blur");
				return false;	
			}
			return validatorCaptcha(value,"phone",name,phoneNo);
        });	
		
	//手机验证码插件专用
	document.formvalidator.setHandler('plg-phonecaptcha',
		function (value) {
			
			//必须要在这里得到电话号码才行
			var $phoneField = jQuery('#jform_phoneno');
			var phone = $phoneField.val();
			if(!validatemobile(phone))		
			{
				return false;	
			}
			
			return validatorCaptcha(value,"phone",phone,"");
        });	
	
	//处理更换图像验证码
	jQuery(".system-zmaximagecaptcha-changeimage").click(function(){
		var captcha = jQuery(this);
		var dataId = captcha.attr("data-id");
		var name = captcha.data("name");
		var type="img";
		jQuery.ajax({
			type:'post',
			url:ZMAX_SYSTEM_AJAX_SITE_BASE+'index.php?option=com_zmaxcaptcha&task=ajaxChangeCode',
			cache:false,
			data:{
				type:type,
				name:name
			},
			dataType: "json",
			success:function(data)
			{
				if(data.err.code!=0) //有错误发生
				{
					layer.alert(data.err.errmsg,{icon: 2});	
					return false;
				}
				else
				{
					jQuery("#"+dataId).val("");
					jQuery("#"+dataId)[0].focus();
					var strRandom = Math.random();
					strRandom= '?t='+strRandom;
					strSrc = data.data+strRandom;
					captcha.attr("src",strSrc);
					return true;
				}
			},
			error: function(XMLHttpRequest, textStatus, errorThrown) {
					var errmsg = '<h3>操作失败，发生了错误</h3><strong>错误详情如下：</strong><p>XMLHttpRequest.status='+XMLHttpRequest.status+"</p>";
					errmsg=errmsg+'<p>XMLHttpRequest.readyState='+XMLHttpRequest.readyState+"</p>";
					errmsg=errmsg+'<p>textStatus='+textStatus+"</p>";
					
					layer.alert(errmsg,{icon: 2});
					return false;
			 }			
		});
	});
	
	
	
	//处理发送短信 phoneField专用
	jQuery(".system-zmaxcaptcha-get-phonecode").click(function(){
		var btn = jQuery(this);
		if(btn.hasClass("layui-disabled"))
		{
			return false;
		}
		
		var phoneId = btn.data("phone");
		var captchaId = btn.data("captcha");
		var name = btn.data("name");
		
		//var $phoneField = jQuery('input[name="'+phoneField+'"]');
		var $phoneField = jQuery('#'+phoneId);
		var phone = $phoneField.val();
		if(!validatemobile(phone))		
		{
			//layer.alert("请先输入正确的手机号码",{icon:2});
			layer.msg("无效的手机号码",{icon:5,shift:6});
			return false;	
		}
		
		//需要先验证验证码
		if(captchaId)
		{
			$captcha = jQuery('#'+captchaId);
			//触发他的校验
			$captcha.trigger("blur");
			if($captcha.hasClass("invalid"))
			{
				//layer.alert("请先输入正确的图像验证码",{icon:2});
				layer.msg("请先输入正确的图像验证码",{icon:5,shift:6});
				return false;
			}
		}
		
		if(gSended)
		{
			return false;
		}

		//STEP 2: 发送短信
		token="";
		jQuery.ajax({
			type:'post',
			url:ZMAX_SYSTEM_AJAX_SITE_BASE+'index.php?option=com_zmaxcaptcha&task=ajaxSendMsg',
			cache:false,
			async:false, //要求同步执行
			data:{
				phone_no:phone,
				name:name,
				token:token
			},
			dataType: "json",
			success:function(data)
			{
				if(data.err.code!=0) //有错误发生
				{
					layer.alert(data.err.errmsg,{icon: 2});	
					return false;
				}
				else
				{
					layer.msg(data.data);
					gSended = true; //标记已经发送了短信
					gTimer = setInterval(_callFunctionWithParams(btn),1000); //启动定时器	
					return true;
				}
			},
			error: function(XMLHttpRequest, textStatus, errorThrown) 
			{
				var errmsg = '<h3>操作失败，发生了错误</h3><strong>错误详情如下：</strong><p>XMLHttpRequest.status='+XMLHttpRequest.status+"</p>";
				errmsg=errmsg+'<p>XMLHttpRequest.readyState='+XMLHttpRequest.readyState+"</p>";
				errmsg=errmsg+'<p>textStatus='+textStatus+"</p>";
				
				layer.alert(errmsg,{icon: 2});
				return false;
			}
		});		
	});
	
	//处理发送短信 phonePlg专用
	jQuery(".system-plg-zmaxcaptcha-get-phonecode").click(function(){
		var btn = jQuery(this);
		if(btn.hasClass("layui-disabled"))
		{
			return false;
		}
		
		//STEP 1:检查是否显示图像验证码
		var imgCaptcha = btn.attr("show-img");
		if(imgCaptcha)
		{
			$captcha = jQuery('#imagecaptcha_jform_captcha');
			//触发他的校验
			$captcha.trigger("blur");
			if($captcha.hasClass("invalid"))
			{
				//layer.alert("请先输入正确的图像验证码",{icon:2});
				layer.msg("请先输入正确的图像验证码",{icon:5,shift:6});
				return false;
			}
			
		}
		
		//STEP 2:检查手机号是否正确
		var $phoneField = jQuery('#jform_phoneno');
		var phone = $phoneField.val();
		if(!validatemobile(phone))		
		{
			//layer.alert("请先输入正确的手机号码",{icon:2});
			layer.msg("请先输入正确的手机号码",{icon:5,shift:6});
			return false;	
		}

		if(gSended)
		{
			return false;
		}

		//STEP 2: 发送短信
		token="";
		jQuery.ajax({
			type:'post',
			url:ZMAX_SYSTEM_AJAX_SITE_BASE+'index.php?option=com_zmaxcaptcha&task=ajaxSendMsg',
			cache:false,
			async:false, //要求同步执行
			data:{
				phone_no:phone,
				token:token
			},
			dataType: "json",
			success:function(data)
			{
				if(data.err.code!=0) //有错误发生
				{
					layer.alert(data.err.errmsg,{icon: 2});	
					return false;
				}
				else
				{
					layer.msg(data.data);
					gSended = true; //标记已经发送了短信
					gTimer = setInterval(_callFunctionWithParams(btn),1000); //启动定时器	
					return true;
				}
			},
			error: function(XMLHttpRequest, textStatus, errorThrown) 
			{
				var errmsg = '<h3>操作失败，发生了错误</h3><strong>错误详情如下：</strong><p>XMLHttpRequest.status='+XMLHttpRequest.status+"</p>";
				errmsg=errmsg+'<p>XMLHttpRequest.readyState='+XMLHttpRequest.readyState+"</p>";
				errmsg=errmsg+'<p>textStatus='+textStatus+"</p>";
				
				layer.alert(errmsg,{icon: 2});
				return false;
			}
		});		
	});
	
});

//校验验证码
function validatorCaptcha(value,type,name,phone)
{
	var bResult = false;
	jQuery.ajax({
		type:'post',
		url:ZMAX_SYSTEM_AJAX_SITE_BASE+'index.php?option=com_zmaxcaptcha&task=ajaxValidator',
		cache:false,
		async:false, //要求同步执行
		data:{
			value:value,
			type:type,
			name:name,
			phone:phone
		},
		dataType: "json",
		success:function(data)
		{
			if(data.err.code!=0) //有错误发生
			{
				bResult = false;
			}
			bResult = data.data;
		}
	});	
	return bResult;	
}

function functionName(params)
{
	timeCount(params)
}
function _callFunctionWithParams(params)
{
	return function(){
		functionName(params);
	}
}

//倒计时
function timeCount($btn)
{	
	$btn.addClass("layui-disabled");//增加这个类
	var text=gTime+"(秒)后可重发";
	$btn.html(text);
	gTime--;
	if(gTime==0)
	{
		text="获取验证码";
		clearInterval(gTimer);
		$btn.removeClass("layui-disabled");
		$btn.html(text);
		gTime=60;
		gSended = false;
	}
}

//校验手机号的合法性
function validatemobile(mobile) 
{ 
	if(!mobile)
	{
		return false;
	}
	
   if(mobile.length==0) 
   { 		 
	  return false; 
   }     
   if(mobile.length!=11) 
   { 
	   return false; 
   } 
	
   //var myreg = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/; 
   var myreg = /^1[0-9]{10}$/;
   if(!myreg.test(mobile)) 
   { 
	   return false; 
   }
   return true;
} 


