// JavaScript Document
/* 
	@ ×÷Õß£º±¼¸ç
	@ v1.0
	@ 2011-9-24
*/
$.fn.alertTs = function(options) {
	var org = {
		id          : "",
		act         : "click",
		face        : "left",
        width       : "", 
		height      : "",
		left        : "0px",
		top         : "0px",
	
		jiaoSize    : "14px",
		jiaoLoc     : "20px",
		borderStyle : "solid",
		borderColor :"#e4d074",
		borderWidth : "1px",
		bgColor     : "#fffddb",
		shadow      : "1px 1px 5px #c3c3c3",
		effect      : "",
		isShow      : false,
		level       : "50",
		aniSpeed    : 150,
		delaytime   : 200,
		tagtime     : 300
	}
	$.extend(org, options);
	var _this = $(this)
	var _cssK = _this.attr("id")+"k";
	var cssK  = "."+_cssK;
	var _cssJ = _this.attr("id")+"J";
	var cssJ  = "."+_cssJ;
	
	var loc_x = _this.offset().left;
	var loc_y = _this.offset().top;
	
	var loc_w = _this.width();
	var loc_h = _this.height();
	var flag  =  true;
	var isOver;
	var isOut;
	
	if( _this.attr("data-alt")!=undefined ){
		$("body").append("<div class="+_cssK+">"+ _this.attr("data-alt") +"</div>")	
		$(cssK).css({ padding:"8px 8px 6px 8px", "font-size":"12px", "line-height":"20px"});
		if(org.width!=""){ $(cssK).css("width",parseInt(org.width)+"px") }
        $(org.id).show();
	}else{
		$(org.id).wrap("<div class="+_cssK+"></div>");
		$(org.id).show();
	}




	$(cssK).prepend("<div class="+_cssJ+"></div>")
	$(cssK).css({ position:"absolute", "z-index":org.level, background:org.bgColor, border:org.borderWidth+" "+org.borderStyle+" "+org.borderColor, "box-shadow":"1px 1px 5px #c3c3c3" });
	
	if( parseInt(org.jiaoSize)>0 ){
		setJiao();	
	}
	
	$(cssK).hide();
	if( org.isShow ){ show() }
	
	$(window).resize(function(){ 
		loc_x = _this.offset().left; 
		loc_y = _this.offset().top;
		setLoc();
	})
	
	function timerShow(){ return function(){ show() } }
	function timerHide(){ return function(){ hide(); }}
	function timerSet( str ) {
		var t
		if( str =="show" ){
			t = timerShow();
			return setTimeout(t, org.delaytime);
		}else{
			t = timerHide();
			return setTimeout(t, org.delaytime);
		}
	}
	
	switch( org.act ){
		case "tagOver":
			_this.hover(function(){
				isOver = timerSet("show");
			},function(){
				clearTimeout( isOver );
				hide();
			})
			break;
		case "click":
			_this.click(function(){ show();})
			break;
		case "otherClick":
			_this.click(function(event){ 
				event.stopPropagation(); 
				show();
			});
			$(org.id).click(function(event){ event.stopPropagation() });
			$(document).click(function(event){ hide() });			
			break;
		case "hover":
			var setTimeOut = timerHide();
			_this.hover(function(){ 
				clearTimeout( isOut );
				isOver = timerSet("show");
			},function(){
				clearTimeout( isOver );
				if( !$(org.id+":visible") )return;
				isOut = setTimeout(setTimeOut, org.delaytime);
			});
			
			$(org.id).hover(function(){
				clearTimeout( isOut );
			},function(){
				isOut = setTimeout(setTimeOut, org.delaytime);
			})
			break;
		default:
			break;
	}
	_this.bind("show", function(event){ show() });
	_this.bind("hide", function(event){ hide() });
	
	$(cssK+" .close").click(function(){ hide() })
	
	function show(){
		if( !flag ) return;
		flag = false; 
		
		resize();
		switch( org.effect ){
			case "show":
				$(cssK).show( org.aniSpeed );
				break;	
			case "slide" :
				$(cssK).slideDown(org.aniSpeed);
				break;
			case "fade":
				$(cssK).fadeIn(org.aniSpeed);
			default:
				$(cssK).show();
				break;
		}
	}
	
	function hide(){
		var speed = org.aniSpeed*0.7
		switch( org.effect ){
			case "show"	:
				$(cssK).hide(speed, function(){ flag=true });
				break;
			case "slide" :
				$(cssK).slideUp(speed, function(){ flag=true });
				break;
			case "fade" :
				$(cssK).fadeOut(speed, function(){ flag=true });
				break;
			default:
				$(cssK).hide(); flag=true;
				break;
		}
	}
	
	function setJiao(){
		var i = 0;
		var j = 0;
		var ph = parseInt(org.borderWidth)*2;
		switch(org.face){
			case "top"	:
				extH = parseInt(org.jiaoSize);
				while( extH>0 ){
					$(cssJ).append("<ol></ol>");
					$( cssJ+" ol" ).eq(i).css({ top:i+"px", width:extH+"px", left:setF(extH+ph)+"px" });
					extH=extH-2; i++;
				}
			
				extH = parseInt(org.borderWidth)*2;
				for(var k=0; k<parseInt(org.borderWidth); k++){
					$(cssJ).append("<ol class='nav'></ol>");
					$( cssJ+" ol" ).eq(i).css({ top:i+"px", width:extH+"px", left:setF(extH)+"px" });
					extH=extH-2; i++;
				}
				
				$(cssJ).css({ width:i+"px", bottom:-i+"px", left:org.jiaoLoc, width:(parseInt(org.jiaoSize)+ph)+"px", height:i+"px"});
				$( cssJ+" ol").css({ height:"1px" });
				$( cssJ+" ol:not(.nav)"  ).css({ height:"1px", border:org.borderWidth+" "+org.borderStyle+" "+org.borderColor, "border-top":"0", "border-bottom":"0" });
				break;
			case "right":
				var extH = 2;
				for(var k=0; k<parseInt(org.borderWidth); k++){
					$(cssJ).append("<ol class='nav'></ol>");
					$( cssJ+" ol" ).eq(i).css({ left:i+"px", height:extH+"px", top:setF(extH)+"px" });
					extH=extH+2; i++;
				}
			
				extH = 2;
				while( extH < parseInt(org.jiaoSize) ){
					$(cssJ).append("<ol></ol>");
					$( cssJ+" ol" ).eq(i).css({ left:i+"px", height:extH+"px", top:setF(extH+ph)+"px" });
					extH=extH+2; i++;
				}
				
				$(cssJ).css({ width:i+"px", left:-i+"px", top:org.jiaoLoc, height:(parseInt(org.jiaoSize)+ph)+"px"});
				$( cssJ+" ol" ).css({ width:"1px" })
				$( cssJ+" ol:not(.nav)"  ).css({ width:"1px", border:org.borderWidth+" "+org.borderStyle+" "+org.borderColor, "border-left":"0", "border-right":"0" });
				break;
			case "bottom":
				var extH = 2;
				for(var k=0; k<parseInt(org.borderWidth); k++){
					$(cssJ).append("<ol class='nav'></ol>");
					$( cssJ+" ol" ).eq(i).css({ top:i+"px", width:extH+"px", left:setF(extH)+"px" });
					extH=extH+2; i++;
				}
				
				extH = 2;
				while( extH < parseInt(org.jiaoSize)){
					$(cssJ).append("<ol></ol>");
					$( cssJ+" ol" ).eq(i).css({ top:i+"px", width:extH+"px", left:setF(extH+ph)+"px" });
					extH=extH+2; i++;
				}
				
				$(cssJ).css({ width:i+"px", top:-i+"px", left:org.jiaoLoc, width:(parseInt(org.jiaoSize)+ph)+"px", height:i+"px"});
				$( cssJ+" ol").css({ height:"1px" });
				$( cssJ+" ol:not(.nav)"  ).css({ height:"1px", border:org.borderWidth+" "+org.borderStyle+" "+org.borderColor, "border-top":"0", "border-bottom":"0" });
				break;
			case "left":
				var extH = parseInt(org.jiaoSize);
				while( extH>0 ){				
					$(cssJ).append("<ol></ol>");
					$( cssJ+" ol" ).eq(i).css({ left:i+"px", height:extH+"px", top:setF(extH+ph)+"px" });
					extH=extH-2; i++;
				}
				
				extH = parseInt(org.borderWidth)*2;
				for(var k=0; k<parseInt(org.borderWidth); k++){
					$(cssJ).append("<ol class='nav'></ol>");
					$( cssJ+" ol" ).eq(i).css({ left:i+"px", height:extH+"px", top:setF(extH)+"px" });
					extH=extH-2; i++;
				}
				
				$(cssJ).css({ width:i+"px", right:-i+"px", top:org.jiaoLoc, height:(parseInt(org.jiaoSize)+ph)+"px"});
				$( cssJ+" ol" ).css({ width:"1px" })
				$( cssJ+" ol:not(.nav)" ).css({ width:"1px", border:org.borderWidth+" "+org.borderStyle+" "+org.borderColor, "border-left":"0", "border-right":"0" });
				break;
			default:
				break;
		}
		
		$(cssJ).css({ position:"absolute" });
		$( cssJ+" ol:not(.nav)" ).css({ background:org.bgColor, position:"absolute", overflow:"hidden", padding:"0", margin:"0", "z-index":"10" });
		$( cssJ+" .nav" ).css({ background:org.borderColor, position:"absolute", overflow:"hidden", padding:"0", margin:"0", "z-index":"10" });
	} //setJiao
	
	function setF( getH ){
		var n1 = (parseInt(org.jiaoSize)+parseInt(org.borderWidth)*2)/2;
		return n1-getH/2;
	}
	
	function resize(){
		loc_x = _this.offset().left; 
		loc_y = _this.offset().top;
		setLoc();
	}
	
	function setLoc(){
		var x,y;
		var pd = 3;
		switch(org.face){
			case "top":
				x = loc_x + parseInt(org.left)-parseInt(org.jiaoLoc);
				y = loc_y - $(cssK).outerHeight() + parseInt(org.top) - $(cssJ).height() - pd;
				break;
			case "right":
				x = loc_x + loc_w + $(cssJ).width() + parseInt(org.left) + pd;
				y = loc_y + parseInt(org.top) - parseInt(org.jiaoLoc);
				break;
			case "bottom":
				x = loc_x + parseInt(org.left)-parseInt(org.jiaoLoc);
				y = loc_y + loc_h + parseInt(org.top) + $(cssJ).height() + pd;
				break;
			case "left":
				x = loc_x - $(cssK).outerWidth() - $(cssJ).width() + parseInt(org.left) - pd;
				y = loc_y - parseInt(org.jiaoLoc) + parseInt(org.top);
				break;
			default:
				break;
		}
		$(cssK).css({ left:x+"px", top:y+"px" });
	}
	
}

