﻿ /*************(Ziv)Compact Self Framework ****************
   * @Author : Ziv                                *
   * @E-Mail : Ziv@ibw.cn				          *
   * @Copyright: (c) 2009-09-12  Ziv               *
   * @Inspiration: [Pro JavaScript Techniques],[Mootools 1.2.3]    *
   * @Update: GMT 2009-11-07                          *
   ****************************************************/


String.prototype.camelCase = function()
{
	return this.replace(/-\D/g,function(match)
	{
		return match.charAt(1).toUpperCase();
	});
}

String.prototype.hyphenate = function()
{
	return this.replace(/[A-Z]/g,function(match)
	{
		return ('-' + match.charAt(0).toLowerCase());
	});
}
Array.prototype.each = function(fn){
	for(i = 0;i < this.length;i++){
		fn.call(this[i],i,this);
	}
}
var ziv;
if(typeof ziv == 'undefined'){
var ziv = {version:"1.0",lastModify:"09-11-07"};

};
ziv.dom = {
		$id:function(name){
			return (typeof name == "string" ?  document.getElementById(name) : name);; 
			},

		$tag:function(name,elem){
			if(!arguments[1]){
				return document.getElemensByTagName(name);
				}else{
				return this.$id(elem).getElementsByTagName(name);
				}
			},
		$class:function(parent,_className,tag){
				var ret = [];
				var collection = (parent ? this.$id(parent) : document).getElementsByTagName(tag ? tag : "*");
				for(i = 0;i < collection.length;i++){
					if(collection[i].className.toLowerCase() == _className)	
					ret[ret.length] = collection[i];
				}
				return ret;
			},
		$prev:function(elem){
			do{
				elem = elem.previousSibling;
			}while( elem && elem.nodeType != 1);
				return elem;
		},
		$next:function(elem){
			do{
				elem = elem.nextSibling;
			}while(elem && elem.nodeType != 1);
			return elem;
		},
		$first:function(elem){
			elem = elem.firstChild;
			return elem && elem.nodeType != 1 ? this.$next(elem) : elem;
		},
		$last:function(elem){
			elem = elem.lastChild;
			return elem && elem.nodeType != 1 ? this.$prev(elem) : elem;
		},
		$parent:function(elem,num){
			num = num || 1;
			for(var i = 0;i < num;i++)
				if(elem != null) elem = elem.parentNode;
			return elem;
		},
		$serial:function(parent,elem){
			var _pa = this.$id(parent);
			var _fi = this.$first(_pa);
			var _la = this.$last(_pa);
			var i = 1;
			while(elem != _fi && _fi.nextSibling){
				_fi = this.$next(_fi);
				i++;
			}
			return i;
		},
		$push:function(parent,elem){
			this.$id(parent).insertBefore(elem,this.$first(this.$id(parent)));
				
		}
	};

ziv.tools = {
	$A:function(collection){
		var _els = [];
		if(collection instanceof Array)
		{
			for(var i = 0;i != collection.length;i++)
			{
				_els[_els.length] = D.$id(collection[i]);
			}
		}else if(typeof collection == 'object' && typeof collection['length'] != 'undefined' && collection['length'] > 0)
		{
			for(var i = 0;i != collection.length;i++)
			{
				_els[_els.length] = D.$id(collection[i]);
			}
		}else
			{
				_els[0] = D.$id(collection);
			}
			return _els;
	},
	getStyles:function(elem,property){
		if(elem.currentStyle) return elem.currentStyle[property.camelCase()];
		var computed = document.defaultView.getComputedStyle(elem,null);
		return (computed) ? computed.getPropertyValue([property.hyphenate()]) : null;
	},
	each:function(iterable,fn){
		for(i = 0;i < iterable.length;i++){
			fn.call(iterable[i],i);
			}
		},
	hasClass:function(elem,cls){
		var reg = new RegExp('(^|)' + cls + '(|$)');
		return reg.test(elem.className);
		},
	addClass:function(elem,cls){
		if(!this.hasClass(elem,cls)){
			elem.className += " " + cls;
			}
		},
	removeClass:function(elem,cls){
			OldClassName = elem.className.replace(/^\s+|\s+$/g,"");
			if(OldClassName != ""){
				var reg = new RegExp("\\b" + cls + "\\b\\s*","");
				elem.className = OldClassName.replace(reg,"");
			}
		},
	toggleClass:function(elem,cls){
		this.hasClass(elem,cls) ? this.removeClass(elem,cls) : this.addClass(elem,cls);
		},
	addEvent:function(elem,evType,fn){
			if(elem.addEventListener){
					elem.addEventListener(evType,fn,false);
			}else if(elem.attachEvent){
					elem.attachEvent("on" + evType,function(){fn.call(elem);});
			}else{
					elem["on" + evType] = fn;
			}
		}
	}
ziv.Tweener = {
	easeNone: function(t, b, c, d) {
      	  return c*t/d + b;
   	 },  
	easeOutBounce:function(t,b,c,d){
		  if((t/=d) <(1/2.75)) {
            		return c*(7.5625*t*t) + b;
      		  } else if(t <(2/2.75)) {
            		return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
        		} else if(t <(2.5/2.75)) {
         		   return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
        		} else {
          		  return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
      		  }
	}
}

		
var D = ziv.dom;
var T = ziv.tools;
var Fx = ziv.Tweener;
				
