var Techtribe =
{
	Common:
	{
		getElementsByClassName: function(needle) {
		  	var s = document.getElementsByTagName('*'), i = s.length, r = [], e, c;
		   needle = ' ' + needle + ' ';
		   while(i--)
		   {
		       e = s.item(i);
				if (e.className) {
		           c = ' ' + e.className + ' ';
		           if (c.indexOf(needle) != -1){
						r.push(e);
					}
		       }
		   }
		   return r;
		}
	},

	TransparantFix:
	{
		init: function() {
			this.fixDocumentPNG();
			this.fixDocumentBgPNG();
		},

		fixDocumentPNG: function() {
			var arVersion = navigator.appVersion.split("MSIE");
			var version = parseFloat(arVersion[1]);
			if(version >= 5.5 && version < 7) {
				var imgs = document.getElementsByTagName("img");
		  	for(var i=0;i<imgs.length;i++)
				{
		  		var img = imgs[i];
		  		if ((img.src.indexOf('.png') != -1) && (img.className.indexOf('beeldbank') == -1)) {
		  		img.style.width = img.width + "px";
					img.style.height = img.height + "px";
					img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'" + img.src + "\', sizingMethod='crop');";
		          img.src = "/static/project/img/trans.gif";
		  		}
		  	}
		  }
		},

		fixDocumentBgPNG: function() {
			var arVersion = navigator.appVersion.split("MSIE");
			var version = parseFloat(arVersion[1]);
		  if(version >= 5.5 && version < 7) {
		  	var imgs = Techtribe.Common.getElementsByClassName("bgTransparant");
				for (var i = 0; i < imgs.length; i++)
				{
					var imgUrl = Techtribe.Utils.getStyle(imgs[i], "backgroundImage");
					if(imgUrl){
						var imgUrlStripped = Techtribe.Utils.stripImgUrl(imgUrl);
						imgs[i].style.backgroundImage = "none";
						imgs[i].style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'" + imgUrlStripped + "\', sizingMethod='crop');";
					}
		  	}
		  }
		},

		fixSinglePNG: function(el) {
			var arVersion = navigator.appVersion.split("MSIE");
			var version = parseFloat(arVersion[1]);
		  if(version >= 5.5 && version < 7 && document.body.filters) {
				el.style.width = el.width + "px";
				el.style.height = el.height + "px";
				el.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'" + el.src + "\', sizingMethod='crop');";
		      el.src = "/static/project/img/trans.gif";
		  }
		},

		fixSingleBgPNG: function(el) {
			var arVersion = navigator.appVersion.split("MSIE");
			var version = parseFloat(arVersion[1]);
		  if(version >= 5.5 && version < 7 && document.body.filters) {
				var imgUrl = Techtribe.Utils.getStyle(el, "backgroundImage");
				if(imgUrl){
					var imgUrlStripped = Techtribe.Utils.stripImgUrl(imgUrl);
					el.style.background = "none";
					el.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'" + imgUrlStripped + "\', sizingMethod='crop');";
				}
		  }
		}
	},

	Utils:
	{
		//Gets Opacity
		getOpacity: function(imageobject) {
			if(imageobject.filters) {
				if(imageobject.filters['alpha']){
					return imageobject.filters['alpha'].opacity;
				}
			} else if(imageobject.style.MozOpacity) {
				return imageobject.style.MozOpacity * 100;
			}
			return null;
		},

		//Sets Opacity
		setOpacity: function(imageobject, value) {
			imageobject.style.opacity = value/10;
			imageobject.style.filter = 'alpha(opacity=' + value*10 + ')';
		},

		//Creates Div or Img element
		createElement: function(parent, el, elClass, id, innerValue, width, height, src) {
			if (el == "img"){
				var element = document.createElement(el);
				if (id){element.id = id;}
				element.src = src;
				appendedEl = parent.appendChild(element);
				if (width){appendedEl.width = width;}
				if (height){appendedEl.height = height;}
				if (elClass){appendedEl.className = elClass;}
				return appendedEl;
			} else {
				var element = document.createElement(el);
				if (id){element.id = id;}
				var appendedEl = parent.appendChild(element);
				if (innerValue){appendedEl.innerHTML = innerValue;}
				if (elClass){appendedEl.className = elClass;}
				return appendedEl;
			}
		},

		//Returns a number from a "value"px string
		stripValuePx: function(value) {
			return parseInt(value.substr(0, value.indexOf("px")));
		},

		stripImgUrl: function(value) {
			return value.substring(5, (value.length - 2));
		},

		//Returns window ACTUAL height
		getDisplayHeight: function() {
			var height;
			if (window.innerHeight > 0) {
				height = window.innerHeight;
				model.notIE = true;
			} else if (document.documentElement.clientHeight > 0) {
				height = document.documentElement.clientHeight;
			} else {
				height = document.body.clientHeight;
			}
			return height;
		},

		//Returns window ACTUAL Width
		getDisplayWidth: function(){
			var width;
			if (window.innerWidth > 0) {
				width = window.innerWidth;
			} else if (document.documentElement.clientWidth > 0) {
				width = document.documentElement.clientWidth;
			} else {
				width = document.body.clientWidth;
			}
			return width;
		},

		//get styles from HTML objects
		getStyle: function(x,styleProp){
		  if(!x){
		      return false;
		  }
		  if(x.currentStyle){
		      var y = x.currentStyle[styleProp];
		  } else if(window.getComputedStyle){
		      var y = document.defaultView.getComputedStyle(x,null).getPropertyValue(styleProp);
		  }
		  return y;
		},

		//Convert RGB to HEX values
		rgbConvert: function(str){
		 str = str.replace(/rgb\(|\)/g, "").split(",");
		 str[0] = parseInt(str[0], 10).toString(16).toLowerCase();
		 str[1] = parseInt(str[1], 10).toString(16).toLowerCase();
		 str[2] = parseInt(str[2], 10).toString(16).toLowerCase();
		 str[0] = (str[0].length == 1) ? '0' + str[0] : str[0];
		 str[1] = (str[1].length == 1) ? '0' + str[1] : str[1];
		 str[2] = (str[2].length == 1) ? '0' + str[2] : str[2];
		 return ('#' + str.join(""));
		}
	},

	XML:
	{
		//returns textNode of given elementNode
		getXmlNodeValue: function(xmlNode) {
			if(xmlNode.textContent) {return xmlNode.textContent;}
			else if(xmlNode.text){return xmlNode.text;}
			else if(xmlNode.firstChild.nodeValue){return xmlNode.firstChild.nodeValue;}
			else {return null;}
		},

		//returns all childeren of given parentNode
		childElements: function(parentNode) {
			var l= new Array();
			for (var i= 0; i<parentNode.childNodes.length; i++)
				if (parentNode.childNodes[i].nodeType==1){
				l[l.length]= parentNode.childNodes[i];
			}
			if (l.length){return l;}
			else{return false;}
		},

		//returns correct elements
		returnElements: function(parentNode, tagname) {
			var l= new Array();
			for (var i= 0; i<parentNode.childNodes.length; i++)
				if ((parentNode.childNodes[i].nodeType==1) && (parentNode.childNodes[i].tagName == tagname)){
				l[l.length]= parentNode.childNodes[i];
			}
			if (l.length){return l;}
			else{return false;}
		}
	},

	Geom:
	{
		Point2d: function(x, y)
		{
			this.x = x;
			this.y = y;
		}
	},

	Easing:
	{
		expoEaseIn: function (t, b, c, d) {
			return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
		},

		expoEaseBoth: function (t, b, c, d) {
			if (t==0) return b;
			if (t==d) return b+c;
			if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
			return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
		},

	    expoEaseOut: function (t, b, c, d) {
			return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
	    }
	}
}