﻿var clip = {};
//clip渐变字体
clip.gradient = function(data){
	return{
		data:data,
		_:function(ele){
			if(typeof ele=="object") return ele;
			else if(typeof ele=="string"||typeof ele=="number") return document.getElementById(ele.toString());
			return null;
		},
		_clip:function(ele,tag){
			if(typeof ele=="object") return ele;
			else if(typeof ele=="string"||typeof ele=="number"){
				var elem = document.getElementsByTagName(tag);
				var arr = new Array();
				for(var i = 0,iarr = 0; i < elem.length; i++) {
					att = elem[i].getAttribute("clip");
					if(att == ele.toString()) {
						arr[iarr] = elem[i];
						iarr++;
					}
				}
				return arr;
			}else{
				return null;
			}
		},
		slip:function(c){
			return{r:parseInt(c.substring(1,3),16),g:parseInt(c.substring(3,5),16),b:parseInt(c.substring(5,7),16)};
		},
		vabs:function(s,e){
			return{r:e.r-s.r,g:e.g-s.g,b:e.b-s.b};
		},
		colorful:function(ele,s,e){
			ele = this._(ele);
			var r,g,b,t,v,num,font,href;
			if(ele.tagName=="A"){
				t="A";
				href = ele.href;
			}else{
				t="I";
			}
			v = this.vabs(s,e);	
			ele.style.cssText ="position:relative;display:inline-block;*display:inline;*zoom:1;";
			num = ele.scrollWidth;
			font = ele.innerHTML;
			for(var i=0;i<=num;i++){
				var j=i+1;
				r=s.r+Math.round(v.r/num*i);
				g=s.g+Math.round(v.g/num*i);
				b=s.b+Math.round(v.b/num*i);
				var iObj = document.createElement(t);
				iObj.innerHTML=font;
				iObj.style.clip="rect(auto "+j+"px auto "+i+"px)";
				iObj.style.color="rgb("+r+","+g+","+b+")";
				iObj.style.position="absolute";
				iObj.href=href;
				iObj.style.fontStyle="normal";
				iObj.style.left= -iObj.offsetLeft;	
				iObj.style.top = -iObj.offsetTop;
				ele.appendChild(iObj);
			}
		},
		check:function(c){		
			var reg = /^#[a-fA-F0-9]{6}-#[a-fA-F0-9]{6}$/;
			if(reg.test(c)) return{s:this.slip(c.split("-")[0]),e:this.slip(c.split("-")[1])}
			return false;
		},
		init:function(tag){
			if(tag){
				for(var i=0;i<tag.t.length;i++){
					var clips = this._clip("clip:g",tag.t[i]);
					for(var j=0;j<clips.length;j++){
						var self = clips[j];
						var rel = self.getAttribute("rel");
						if(rel&&this.check(rel)){
							this.colorful(self,this.check(rel).s,this.check(rel).e);
						}
					}
				}
			}	
		}	
	}
};
