/*

Version 0.1.2

This file contains common leanopen JS functions.
To maintain backwards compatibility please create a new version of the file if an newer version of an function is not compitable with an older version.

This file may not be copied or used without persmission of LeanOpen Webdevelopment.

(c) LeanOpen.com 2010

Last Edited by Milan Jansen @ 1-06-2010 : 14:00

*/

// The functions below are (c) LeanOpen Webdevelopment

function loJSinit(){
onchangeinputs();
simpleDrop();
}

function simpleDrop(){
dropoptions = new Array();
droptitle = new Array();
drop = document.getElementsByClassName('simpledrop');
for(var i=0; i<drop.length;i++){
	for(var i2=0;i2<drop[i].getElementsByTagName('div').length;i2++){
		if(drop[i].getElementsByTagName('div')[i2].className == 'options'){
		dropoptions[i] =  drop[i].getElementsByTagName('div')[i2];
		break;
		}
	}
	
	for(var i2=0;i2<drop[i].getElementsByTagName('span').length;i2++){
		if(drop[i].getElementsByTagName('span')[i2].className == 'title'){
		droptitle[i] =  drop[i].getElementsByTagName('span')[i2];
		break;
		}
	}	
	
	drop[i].style.overflow = 'hidden';
	drop[i].origHeight = drop[i].offsetHeight;
	drop[i].style.height = drop[i].offsetHeight - dropoptions[i].offsetHeight + 'px';
	drop[i].newHeight = drop[i].offsetHeight;
	drop[i].titleObje = droptitle[i]
	drop[i].onclick = function(){if(parseInt(this.style.height) != parseInt(this.origHeight)){setTimeout("document.body.addEventListener('click',closeDrops,false)",1);  this.titleObje.className = 'active'; this.style.height = this.origHeight + 'px';}else{  this.titleObje.className = 'title'; document.body.removeEventListener('click',closeDrops,false); this.style.height = this.newHeight+'px'}}
}
}

function closeDrops(){
//alert('test');
drop = document.getElementsByClassName('simpledrop');
for(var i=0; i<drop.length;i++){
if(parseInt(drop[i].style.height) != parseInt(drop[i].newHeight)){
drop[i].style.height = drop[i].newHeight+'px';
drop[i].titleObje.className = 'title';
}
}
document.body.removeEventListener('click',closeDrops,false);
}

function slideToDiv(to,parent,correctie,plus,maxv){
if(!correctie){correctie = 0};
parent = document.getElementById(parent);
min = parseInt(parent.getElementsByTagName('div')[0].style.marginLeft);
if(!parent.getElementsByTagName('div')[0].style.marginLeft){min = 0};

if(to != 'next'){
to = document.getElementById(to);
if(BrowserDetect.browser == 'Explorer' && BrowserDetect.version < 8){
max = to.offsetLeft*-1;
//alert(max)
}
else{
max = min + ((to.offsetLeft+correctie)*-1);
}
}
else{
max = min - plus;
}
fact = ((max-min)/800);
if(fact < 0){fact = fact*-1};
//alert(fact);
if(max != maxv*-1 && (min == 0 || isInt(min/800))){
startTransition(parent.getElementsByTagName('div')[0],'marginLeft',min,max,5,'px','sum',1);
slidefail = false;
}
else{
slidefail = true;
}
}

function setNext(Obj){
if(!slidefail){

for(i=0;i<Obj.parentNode.getElementsByTagName('a').length;i++){
if(Obj.parentNode.getElementsByTagName('a')[i].className == 'active'){
if(Obj.parentNode.getElementsByTagName('a')[(i+2)]){
Obj.parentNode.getElementsByTagName('a')[i].className = '';
Obj.parentNode.getElementsByTagName('a')[(i+1)].className = 'active'
}
break;
}
}
}
slidefail = true;
}

function setToActive(Obj){

for(i=0;i<Obj.parentNode.getElementsByTagName('a').length;i++){
Obj.parentNode.getElementsByTagName('a')[i].className = '';
}

Obj.className = 'active';
}

function onchangeinputs(){
origvalue = new Array;
onch = document.getElementsByClassName('valuetag');
for(var i=0; i<onch.length;i++){
 if(onch[i].tagName == 'INPUT'){
  onch[i].origval = onch[i].value;
  onch[i].onfocus = function(){if(this.value == this.origval){this.value = ''; this.className = 'text'}};
  onch[i].onblur = function(){if(this.value == ''){this.value = this.origval; this.className = 'valuetag'}}
 }
}
}

/*
	Developed by Robert Nyman, http://www.robertnyman.com
	Code/licensing: http://code.google.com/p/getelementsbyclassname/
*/	
var getElementsByClassName = function (className, tag, elm){
	if (document.getElementsByClassName) {
		getElementsByClassName = function (className, tag, elm) {
			elm = elm || document;
			var elements = elm.getElementsByClassName(className),
				nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
				returnElements = [],
				current;
			for(var i=0, il=elements.length; i<il; i+=1){
				current = elements[i];
				if(!nodeName || nodeName.test(current.nodeName)) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	else if (document.evaluate) {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = "",
				xhtmlNamespace = "http://www.w3.org/1999/xhtml",
				namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
				returnElements = [],
				elements,
				node;
			for(var j=0, jl=classes.length; j<jl; j+=1){
				classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
			}
			try	{
				elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
			}
			catch (e) {
				elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
			}
			while ((node = elements.iterateNext())) {
				returnElements.push(node);
			}
			return returnElements;
		};
	}
	else {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = [],
				elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
				current,
				returnElements = [],
				match;
			for(var k=0, kl=classes.length; k<kl; k+=1){
				classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
			}
			for(var l=0, ll=elements.length; l<ll; l+=1){
				current = elements[l];
				match = false;
				for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
					match = classesToCheck[m].test(current.className);
					if (!match) {
						break;
					}
				}
				if (match) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	return getElementsByClassName(className, tag, elm);
};

function startTransition(Obj,type,min,max,step,unit,opr,speed,start){

	if(!Obj.id){ Obj.id = giveUnusedID()};
	if(!start){start = 1}
	var timer = start;
	
	if(min<max){
		var xfact = max-min;
		var x= 0;
		if(xfact<0) xfact=xfact*-1;
		for(var i=min;i<=max;i = i+step){
			setTimeout("document.getElementById('"+Obj.id+"').style."+type+" = '"+i+unit+"'",timer);
			if(opr == 'sum'){
				timer = timer + speed;
			}
			else if(opr == 'sin'){
				// Sin timing function 
				
				x = x+(1.2/xfact);
				
				timer = timer + 3*(1.5-(1.3*Math.pow(Math.sin((Math.PI*x)/2),2))*0.5);
			}
		}
	}
	else{
		var xfact = min-max;
		var x= 0;
		if(xfact<0) xfact=xfact*-1;
		for(var i=min;i>=max;i = i-step){
			setTimeout("document.getElementById('"+Obj.id+"').style."+type+" = '"+i+unit+"'",timer);
			if(opr == 'sum'){
				timer = timer + speed;
			}
			else if(opr == 'sin'){
			
				// Sin timing function 
				
				x = x+(1.2/xfact);
				
				timer = timer + 3*(1.5-(1.3*Math.pow(Math.sin((Math.PI*x)/2),2))*0.5);
			
			}
		}
	}

}


function startCSS3Transition(Obj,transitions,values,speed,start,modif){
if(!Obj.id){ Obj.id = giveUnusedID()};
if(!modif){modif = 'linear'}
if(BrowserDetect.browser == 'Safari' || BrowserDetect.browser == 'Chrome'){
setTimeout("document.getElementById('"+Obj.id+"').style.webkitTransition = 'all "+speed+"ms "+modif+"'",start);
}
else if(BrowserDetect.browser == 'Firefox'){
setTimeout("document.getElementById('"+Obj.id+"').style.mozTransition = 'all "+speed+"ms "+modif+"'",start);
}

for(var i=0;i<transitions.length;i++){
setTimeout("document.getElementById('"+Obj.id+"').style."+transitions[i]+" = '"+values[i]+"';",start);

}

if(BrowserDetect.browser == 'Safari' || BrowserDetect.browser == 'Chrome'){
setTimeout("document.getElementById('"+Obj.id+"').style.webkitTransition = 'none'",start+speed+1);
}
else if(BrowserDetect.browser == 'Firefox'){
setTimeout("document.getElementById('"+Obj.id+"').style.mozTransition = 'none'",start+speed+10);
}

}

function giveUnusedID(){
	i = 0;
	while(document.getElementById("wa"+i)){
		i++;	
	}
	return "lo"+i;
}

function ajaxGET(url,div,execute){
var returnText = "";
var xmlhttp=new XMLHttpRequest();
	xmlhttp.onreadystatechange=function(){
	if(xmlhttp.readyState<4){
		// Loading
	}else if(xmlhttp.readyState==4){
		if(div){document.getElementById(div).innerHTML = xmlhttp.responseText;}
   	if(execute){returnText =xmlhttp.responseText; eval(execute)}
   }
}


xmlhttp.open("GET",url,true);
xmlhttp.send(null);
}




function ajaxPOST(url,params,div,execute){

var returnText = "";
var xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function(){
	if(xmlhttp.readyState<4){
		// Loading
	}else if(xmlhttp.readyState==4){
		if(div){document.getElementById(div).innerHTML = xmlhttp.responseText;}
   	if(execute){returnText =xmlhttp.responseText; eval(execute)}
   }
}


//Sending
xmlhttp.open("POST",url,true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.setRequestHeader("Content-length", params.length);
xmlhttp.setRequestHeader("Connection", "close");
xmlhttp.send(params);
}



// The functions and classes below are not created by LeanOpen.


function innerSize(){
	//IE
	if(!window.innerWidth)
	{
		//strict mode
		if(!(document.documentElement.clientWidth == 0))
		{
			w = document.documentElement.clientWidth;
			h = document.documentElement.clientHeight;
		}
		//quirks mode
		else
		{
			w = document.body.clientWidth;
			h = document.body.clientHeight;
		}
	}
	//w3c
	else
	{
		w = window.innerWidth;
		h = window.innerHeight;
	}
	return [w,h];
}

function include(filename)
{
	var head = document.getElementsByTagName('head')[0];
	
	script = document.createElement('script');
	script.src = filename;
	script.type = 'text/javascript';
	
	head.appendChild(script)
}

function isInt(x) { 
   var y=parseInt(x); 
   if (isNaN(y)) return false; 
   return x==y && x.toString()==y.toString(); 
 } 

var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{
			string: navigator.userAgent,
			subString: "Chrome",
			identity: "Chrome"
		},
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari",
			versionSearch: "Version"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			   string: navigator.userAgent,
			   subString: "iPhone",
			   identity: "iPhone/iPod"
	    },
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};

BrowserDetect.init();