if (typeof cafen == 'undefined') {	var $A = Array.from = function(iterable) {	  if (!iterable) return [];	  if (iterable.toArray) {	    return iterable.toArray();	  } else {	    var results = [];	    for (var i = 0; i < iterable.length; i++)	      results.push(iterable[i]);	    return results;	  }	}	Function.prototype.bind = function() {	  var __method = this, args = $A(arguments), object = args.shift();	  return function() {	    return __method.apply(object, args.concat($A(arguments)));	  }	}	var cafen = {		$:function() {			var _elements = new Array();			for (var i = 0; i < arguments.length; i++) {				var _element = arguments[i];				if (typeof _element == 'string')					_element = document.getElementById(_element);				if (arguments.length == 1)					return _element;				_elements.push(_element);			}			return _elements;		},		find : function(reg, str,bl) {			var m = [];			try {				if (m = str.match(eval('/' + reg + '/'+(bl ? 'i':'')))) 					return m;				else 					return false;			} catch(ex) {				return false;			}		},		Event  : {			KEY_BACKSPACE: 8,			KEY_TAB:       9,			KEY_RETURN:   13,			KEY_ESC:      27,			KEY_LEFT:     37,			KEY_UP:       38,			KEY_RIGHT:    39,			KEY_DOWN:     40,			KEY_DELETE:   46,			element: function(event) {				return event.target || event.srcElement;			},			isLeftClick: function(event) {				return 1;			},			pointerX: function(event) {				return event.pageX || (event.clientX +					(document.documentElement.scrollLeft || document.body.scrollLeft));			},			pointerY: function(event) {				return event.pageY || (event.clientY +				(document.documentElement.scrollTop || document.body.scrollTop));			},			stop: function(event) {				if (event.preventDefault) {					event.preventDefault();					event.stopPropagation();				} else {					event.returnValue = false;					event.cancelBubble = true;				}			},			findElement : function(event, tagName) {				var element = cafen.Event.element(event);				while (element.parentNode && (!element.tagName || (element.tagName.toUpperCase() != tagName.toUpperCase())))					element = element.parentNode;				return element;			},			observers: false,			_observeAndCache: function(element, name, observer, useCapture) {				if (!this.observers) this.observers = [];				if (element.addEventListener) {					this.observers.push([element, name, observer, useCapture]);					element.addEventListener(name, observer, useCapture);				} else if (element.attachEvent) {					try {						this.observers.push([element, name, observer, useCapture]);			  			element.attachEvent('on' + name, observer);					} catch(ex) {}				}			},			unloadCache: function() {				if (!cafen.Event.observers) return;				for (var i = 0; i < cafen.Event.observers.length; i++) {					cafen.Event.stopObserving.apply(this, cafen.Event.observers[i]);					cafen.Event.observers[i][0] = null;				}				cafen.Event.observers = false;			},			observe: function(element, name, observer, useCapture) {				var element = cafen.$(element);				useCapture = useCapture || false;				if (name == 'keypress' && (navigator.appVersion.match(/Konqueror|Safari|KHTML/) || element.attachEvent))					name = 'keydown';				this._observeAndCache(element, name, observer, useCapture);			},			stopObserving: function(element, name, observer, useCapture) {				var element = cafen.$(element);				useCapture = useCapture || false;				if (name == 'keypress' && (navigator.appVersion.match(/Konqueror|Safari|KHTML/) || element.detachEvent))					name = 'keydown';				if (element.removeEventListener) {					element.removeEventListener(name, observer, useCapture);				} else if (element.detachEvent) {					element.detachEvent('on' + name, observer);				}			}				}	}}cafen.JQueryObject = function(selector, context) {	context = context || document;	if (typeof selector == 'object')		return [selector];	var findObj = [];	var selectors = selector.split(' ');	var selectorArr = selectors[0].split(':');	var currSelector = selectorArr[0];	if (currSelector.indexOf('#') == 0) {		var id = currSelector.slice(1);		var childObjs = (context instanceof Array) ? context  : context.getElementsByTagName("*");		for(var j = 0; j < childObjs.length; j++) 			if(childObjs[j].id==id) 				findObj.push(childObjs[j]);	} else if (currSelector.indexOf('.') == 0) {		var className = currSelector.slice(1);		var childObjs = (context instanceof Array) ? context  : context.getElementsByTagName("*");		for(var j = 0; j < childObjs.length; j++) {			if (childObjs[j].className.match(new RegExp("(^|\\s)" + className + "(\\s|$)"))) 				findObj.push(childObjs[j]);		}	} else {		if (context instanceof Array) {			for(var j = 0; j < context.length; j++) 				if (context[j].tagName == currSelector)					findObj.push(context[j]);		} else {			var childObjs = context.getElementsByTagName(currSelector);			for(var j = 0; j < childObjs.length; j++) 				findObj.push(childObjs[j]);		}	}	if (findObj.length > 0) {		switch(selectorArr[1]) {			case 'first' :				findObj = [findObj[0]];				break;			case 'last' :				findObj = [findObj[findObj.length-1]];				break;			case 'even' :				var childs = findObj;				findObj = [];				for(var i = 0 ;  i < childs.length; i++) 					if (i % 2 == 0)						findObj.push(childs[i]);				break;			case 'odd' :				var childs = findObj;				findObj = [];				for(var i = 0 ;  i < childs.length; i++) 					if (i % 2 == 1)						findObj.push(childs[i]);				break;			case 'first-child' :				var childs = findObj;				findObj = [];				for(var i = 0 ;  i < childs.length; i++) {					if (	childs[i].childNodes.length > 0)						findObj.push(childs[i].childNodes[0]);				}			case 'last-child' :				var childs = findObj;				findObj = [];				for(var i = 0 ;  i < childs.length; i++) {					if (	childs[i].childNodes.length > 0)						findObj.push(childs[i].childNodes[childs[i].childNodes.length-1]);				}				break;			default :				if (selectorArr[1] != null && selectorArr[1] != '') {					var reg = [];					if (reg = cafen.find('eq\\(([0-9]+)\\)', selectorArr[1])) {						var idx = parseInt(reg[1]);						var childs = findObj;						findObj = [];						if ((childs.length - 1) >= idx)							findObj.push(childs[idx]);					} else if (reg = cafen.find('lt\\(([0-9]+)\\)', selectorArr[1])) {						var idx = parseInt(reg[1]);						var childs = findObj;						findObj = [];						for(var i = 0 ;  i < childs.length; i++) 							if (	i < idx)								findObj.push(childs[i]);							else								break;					} else if (reg = cafen.find('gt\\(([0-9]+)\\)', selectorArr[1])) {						var idx = parseInt(reg[1]);						var childs = findObj;						findObj = [];						for(var i = 0 ;  i < childs.length; i++) 							if (	i > idx)								findObj.push(childs[i]);					}				}				break;		}		selectors.shift();		if (selectors.length > 0) 			findObj = this.JQueryObject(selectors.join(' '), findObj);	}	return findObj;}cafen.J$ = function (ids) {	return new cafen.JQuery(this.JQueryObject(ids));}cafen.JQuery = function(objs) {	this._Objects = objs;	this.length = this._Objects.length;	this.eventQueues = {};}cafen.JQuery.prototype = {	length : 0,	size : function() {		return this.length;	},	get : function(idx) {		return cafen.J$(this._Objects[idx]);	},	eventQueues : {}, 	css : function(style) {		for(var i =0; i < this._Objects.length; i++) {			for(var name in style) {				if (name == 'opacity')					this.setOpacity(this._Objects[i],style[name]);				else					this._Objects[i].style[name] = style[name];			}		}			return this;	},	setOpacity : function(element, opa) {		if (document.all) {			element.style.filter = "alpha(opacity = "+opa+"%)";		 }else 			element.style.opacity =  opa/100;	},	doEvent : function(eventName, obj) {		if (this.eventQueues[eventName] != null)			this.eventQueues[eventName](obj);	},	attachEvent : function(name , event) {		if (this.eventQueues[name] == null) {			for(var i =0; i < this._Objects.length; i++) 				cafen.Event.observe(this._Objects[i], name , this.doEvent.bind(this,name, this._Objects[i]));		}		this.eventQueues[name] = event;		return this;	},	attr : function (attributes) {		for(var i =0; i < this._Objects.length; i++) {			for(var name in attributes)			this._Objects.setAttribute(name, attributes[name]);		}	},	animateStopProp : {},	animateCallBack : null,	animateSpeed : 100,	animate: function( prop, speed, callback ) {		this.animateStopProp = prop;		this.animateSpeed = speed;		this.animateCallBack = callback;		for(var name in prop) {			switch(name) {				default :					this.animateStart(name, prop[name] > 1 ? 1 : 100 , prop[name]);					break;			}		}	},	animateStart : function(proP, value, end) {		var styles = {};		switch(proP) {			case 'top' :			case 'left' :			case 'height' :			case 'width' :				styles[proP] = value +'px';				break;			case 'opacity' :				styles[proP] = value;				break;		}		for(var i =0; i < this._Objects.length; i++) 			this.css(styles);		if (value != end) {			if (value > end) 				window.setTimeout(this.animateStart.bind(this, proP, value - Math.round(Math.max(1,(value - end)/2)) , end), this.animateSpeed);			else {				window.setTimeout(this.animateStart.bind(this, proP, value + Math.round(Math.max(1,(end - value)/2)) , end), this.animateSpeed);			}		} else if (this.animateCallBack != null) {			this.animateStopProp[proP] = null;			var checkAllAni = true;			for (var name in this.animateStopProp) {				if (this.animateStopProp[name] != null) {					checkAllAni = false;					break;				}			}			if (checkAllAni) 				this.animateCallBack();		}	},	click : function(event) {		this.attachEvent('click', event);		return this;	},	mouseOver : function(event) {		this.attachEvent('mouseover', event);		return this;	},	mouseOut : function(event) {		this.attachEvent('mouseout', event);		return this;	},	show : function() {		this.css({display:'block'});		return this;	},	hide : function() {		this.css({display:'none'});		return this;	}}
