// JavaScript Document

//以下部分为黄山添加 2010.06.21 多方方式登入，一个页面上有若干个登录的地方也可以，只要遵循下面的控件属性
// 引入jqurey必须置于本文件的相邻位置前方
// 【特别注意】这里为jquery添加了多库共存，必须在引用jquery和本文件之间没有使用$的地方
// 账户名控件 添加类 multiLoginAccount
// 用户名控件 添加类 multiLoginUsername name=username
jQuery.noConflict();
//test
//var PassportDomain='http://local.passport.yoka.com/';
var PassportDomain='http://passport.yoka.com/';
//html代码
var MultiLoginHtml='\
<style>\
#multiLoginHint{font:12px/22px "宋体"; width:150px; border:solid 1px #999; background:white; \text-align:left; display:none; position:absolute;color:#333;z-index:99999}\
#multiLoginHint .d0{ padding-left:8px;color:#ff6000; border-bottom:solid 1px #999;text-align:left;background:#fff6df}\
#multiLoginHint .d0 .a0{ color:#999; font-weight:bold; margin-right:4px; float:right; font-size:14px; text-decoration:none}\
#multiLoginHint .d1{height:120px; overflow-y:auto; overflow-x:hidden;text-align:left;}\
#multiLoginHint .d1 a{ display:block; height:24px; overflow:hidden; padding-left:16px;color:#333; text-decoration:none}\
#multiLoginHint .d1 a.a1{background:url(http://ss1.yokacdn.com/www/public/i/hy_1218key3.gif) no-repeat 2px 6px}\
#multiLoginHint .d1 a span{color:red}\
#multiLoginHint .d1 a:hover{ background-color:#fdd463; color:#000}\
#multiLoginHint .d1 a.a2{ background-color:#fdd463; color:#000}\
#multiLoginHint .d2{ padding-left:8px; border-top:solid 1px #999;text-align:left}\
</style>\
<div id="multiLoginHint">\
	<div class="d0"><a class="a0" href="#" title="关闭">&times;</a>选择登录用户</div>\
	<div class="d1"></div>\
	<div class="d2">无匹配用户，查看<a href="http://www.yoka.com/help/login.shtml" target="_blank" style="color:#3A7AC2">帮助</a></div>\
</div>\
';
//处理函数
var Uri=PassportDomain+'multiLogin.php?jsoncallback=?';
document.write(MultiLoginHtml);

jQuery.fn.selectRange = function(start, end) {
    return this.each(function() {
        if(this.setSelectionRange) {
            this.focus();
            this.setSelectionRange(start, end);
        } else if(this.createTextRange) {
            var range = this.createTextRange();
            range.collapse(true);
            range.moveEnd('character', end);
            range.moveStart('character', start);
            range.select();
        }
    });
};

//测试
//$i=0;
//function debug(msg){
//	jQuery('#debug').append(jQuery('<div>'+$i+':'+msg+'</div>'));
//	$i++;
//}
//jQuery('body').prepend(jQuery('<div id="debug" style="background:white; text-align:left; padding:12px; width:200px; position:absolute; top:0; left:0"></div>').click(function(){jQuery(this).children('div').remove();}));

//首先绑定顶部的控件动作，如果这个js在控件之前被引入，则需要下面的ready中的绑定
jQuery('.multiLoginAccount').unbind('focus').focus(function(){
	if(jQuery(this).val()=='用户名/邮箱/手机'){
		jQuery(this).val('');
	}
	//根据需要，修改不同频道的颜色
	color=(window.location.href.toLowerCase().indexOf('http://www.yoka.com/men/')==0 || window.location.href.toLowerCase().indexOf('http://men.yoka.com')==0)?'white':'#333';
	jQuery('.multiLoginAccount').css({color:color});
}).blur(function(){
	if(jQuery(this).val()==''){
		jQuery(this).val('用户名/邮箱/手机').css({color:'#999'});
	}
}).change(function(e){
	//修正右键粘贴输入问题
	var oldValue=jQuery(this).data('value')?jQuery(this).data('value'):'';
	if(oldValue==''){
		jQuery('.multiLoginUsername').val(jQuery(this).val());
	}
}).attr('autocomplete','off');

function maskName(name){
	function start(n){
		var v='';
		for(i=0;i<n;i++){
			v+='*';
		}
		return '<span>'+v+'</span>';
	}
	var len=name.length;mask='';
	if(len==2){
		mask=name.substr(0,1)+start(1);
	}else if(len<12){
		n=Math.floor(len/3);
		h=Math.ceil(len/3);
		t=h+n;
		mask=name.substr(0,h)+start(n)+name.substr(t);
	}else{
		n=4;
		h=Math.ceil(len/3);
		t=h+n;
		mask=name.substr(0,h)+start(n)+name.substr(t);
	}
	return mask;
}

function makeList(data,acountObj){
//	if(typeof(account)!='undefined'){
//		jQuery('#multiLoginAccount').val(account);
//	}
	//debug('makelist:'+account);
	jQuery('#multiLoginHint .d1').html('');
	jQuery.each(data,function(i,n){
		jQuery('<a href="#"></a>').html(maskName(n[0])).addClass(n[1]==1?'a1':'')
		.attr('title',n[1]==1?'验证账户':'').data('data',n)
		.click(function(){
			jQuery('.multiLoginAccount').val(jQuery(this).data('data')[2]);
			jQuery('.multiLoginUsername').val(jQuery(this).data('data')[0]);
			jQuery('#multiLoginHint').hide();
			//jQuery('input[name="password"]').focus();
			return false;
		}).mouseover(function(){
			jQuery(this).addClass('a2').siblings('.a2').removeClass('a2');
		}).appendTo(jQuery('#multiLoginHint .d1'));;
	});
	if(jQuery('#multiLoginHint .d1 a').length==0){
		jQuery('#multiLoginHint').hide();
		//alert('没有找到对应电子邮件/手机号的用户名，请用用户名登录。');
		return;
	}else if(jQuery('#multiLoginHint .d1 a').length==1){
		var start=jQuery('.multiLoginAccount').val().length;
		jQuery('#multiLoginHint .d1 a:first').click();
		jQuery('.multiLoginAccount').selectRange(start,100);
	}else{
		obj=acountObj;
		jQuery('#multiLoginHint').show().css({top:obj.offset().top+jQuery('.multiLoginAccount').outerHeight(),left:obj.offset().left,opacity:0.95}).find('.d1 a:first').addClass('a2').end().find('.d1').scrollTop(0);
	}
}

function preMakeList(list,account,acountObj){
	var emails=[];data=[];
	jQuery.each(list,function(i,n){
		if(n[2].toLowerCase().indexOf(account.toLowerCase())==0){
			data.push(n);
			if(jQuery.inArray(n[2],emails)<0){
				emails.push(n[2]);
			}
		}
	});
	if(emails.length==0){
		jQuery('#multiLoginHint .d1').html('');
		jQuery('#multiLoginHint').hide();
		return;
	}else if(emails.length>1){
		jQuery('#multiLoginHint').hide();
		return;
	}
	//debug('Email:'+emails.toString());
	//debug('Data:'+data.length);
	makeList(data,acountObj);
}

function selectByArrow(code){
	if(jQuery('#multiLoginHint:visible').length==0){
		return false;
	}
	var obj=jQuery('#multiLoginHint .d1 .a2');
	var parent=jQuery('#multiLoginHint .d1');
	switch(code){
		case 9:
		case 13:
			obj.click();
			jQuery('#multiLoginHint').hide();
			return false;
		case 38:
			if(obj.prev('a').length==0){
				obj.siblings('a:last').andSelf().toggleClass('a2');
			}else{
				obj.prev('a').andSelf().toggleClass('a2');
			}
			//根据需要滚动
			var newObj=jQuery('#multiLoginHint .d1 .a2');
			if(newObj.position().top<60 || newObj.position().top>80){
				parent.scrollTop(parent.scrollTop()+newObj.position().top-70);
			}
			return;
		case 40:
			if(obj.next('a').length==0){
				obj.siblings('a:first').andSelf().toggleClass('a2');
			}else{
				obj.next('a').andSelf().toggleClass('a2');
			}
			//根据需要滚动
			var newObj=jQuery('#multiLoginHint .d1 .a2');
			if(newObj.position().top<60 || newObj.position().top>80){
				parent.scrollTop(parent.scrollTop()+newObj.position().top-70);
			}
			return;
	}
}

jQuery(document).ready(function(){
	jQuery('.multiLoginAccount').unbind('focus').focus(function(){
		if(jQuery(this).val()=='用户名/邮箱/手机'){
			jQuery(this).val('');
		}
		//根据需要，修改不同频道的颜色
		color=(window.location.href.toLowerCase().indexOf('http://www.yoka.com/men/')==0 || window.location.href.toLowerCase().indexOf('http://men.yoka.com')==0)?'white':'#333';
		jQuery('.multiLoginAccount').css({color:color});
	}).unbind('blur').blur(function(){
		if(jQuery(this).val()==''){
			jQuery(this).val('用户名/邮箱/手机').css({color:'#999'});
		}
	}).unbind('change').change(function(e){
		//修正右键粘贴输入问题
		var oldValue=jQuery(this).data('value')?jQuery(this).data('value'):'';
		if(oldValue==''){
			jQuery('.multiLoginUsername').val(jQuery(this).val());
		}
	}).keydown(function(e){
		if(e.keyCode==13){
			selectByArrow(e.keyCode);
			return false;
		}
		if(e.keyCode==9){
			selectByArrow(e.keyCode);
			return true;
		}		
	}).keyup(function(e){
		var acountObj=jQuery(this);
		var account=jQuery.trim(jQuery(this).val());
		var oldValue=jQuery(this).data('value')?jQuery(this).data('value'):'';
		//修正删除键的联动问题
		if(e.keyCode==8){
			jQuery('#multiLoginHint .d1').html('');
		}
		if(e.keyCode==9){
			return true;
		}
		if(e.keyCode==38 || e.keyCode==40){
			selectByArrow(e.keyCode);
			return true;
		}
		if(e.keyCode==13){
			return false;
		}
		if(account==oldValue || jQuery.inArray(e.keyCode,[37,39])>-1 ){
			jQuery('#multiLoginHint').hide();
			return;
		}else{
			jQuery(this).data('value',account);
		}

		//debug('keyup:'+account);
		jQuery('.multiLoginUsername').val(account);
		//如果是手机号 t=0
		if(account.search(/^1(3|5|8)\d{9}$/)==0){
			//debug('getdata:mobile server:'+account);
			jQuery.getJSON(Uri,{'t':0,'mobile':account},function(data){makeList(data,acountObj);});
			return;
		}
		//如果是电子邮件 t=1
		if(account.indexOf('@')>0){
			var emailName=account.split('@')[0];
			if(typeof(jQuery('#multiLoginHint').data(emailName))=='undefined'){
				jQuery.getJSON(Uri,{'t':1,'email':account},function(data){
					//debug('getdata:from server:'+account);
					jQuery('#multiLoginHint').data(emailName,data);
					preMakeList(data,account,acountObj);
				});
			}else{
				preMakeList(jQuery('#multiLoginHint').data(emailName),account,acountObj);
			}
			return;
		}
		//否则，不予提示
		jQuery('#multiLoginHint').hide();
	}).parents('form').submit(function(){
		var username=jQuery(this).find('input[name="username"]').val();
		if(username.indexOf('@')>-1){
			if(jQuery('#multiLoginHint .d1 a').length<1){
				alert('账号错误，您输入的邮箱不存在');return false;				
			}else{
				alert('请在下列框选择您需要登录的用户名');return false;				
			}
		}
		if(username.search(/^1(3|5|8)\d{9}$/)==0 && jQuery('#multiLoginHint .d1 a').length>1){
			alert('请在下拉框选择您需要登录的用户名');return false;
		}
	});
}).click(function(){
	jQuery('#multiLoginHint').hide();
});

