
/*
**
**
**  Juliet Javascript Framework
**  juliet.superhero.es
**
**  ian coyle, superheroes inc
**  www.superhero.es
**  
**  additional credits:
**  Tween Easing Equations: Robert Penner / http://www.robertpenner.com
**  AJAX / Screen Detection: Peter-Paul Koch / http://www.quirksmode.org
**
**
**
*/

var Juliet = new Object();

/*
**  
**  CORE
**
*/

var JTweenController = function(){
	this._tweens = new Array()
	this._tweenDelays = new Array()
}
var _j = JTweenController.prototype
_j.Delegate = function(scope,method){
	var args = new Array() ;
	var l = arguments.length ;
	for(var i = 2 ; i < l ; i++) args[i - 2] = arguments[i] ;
	return (function(){method.apply(scope,args)})
}
_j.Tween = function(obj){
	if (this._tweens[obj]!=undefined){
		//this._tweens[obj].Kill()
		//this.Kill()
		for (var d in this._tweenDelays[obj]){
			window.clearTimeout(this._tweenDelays[obj][d])
		}
	}
	this._tweens[obj] = new Array()
	this._tweenDelays[obj] = new Array()
	var id = obj
	for(var i=1; i<arguments.length; i++){
		var tweenProperty = arguments[i].tweenProperty
		var tweenDuration = arguments[i].tweenDuration
		var tweenEase = arguments[i].tweenEase
		var tweenStart = arguments[i].tweenStart
		var tweenEnd = arguments[i].tweenEnd
		var onTweenComplete = arguments[i].onTweenComplete
		var onTweenChange = arguments[i].onTweenChange
		var onTweenStart = arguments[i].onTweenStart
		var tweenDelay = arguments[i].tweenDelay
		this._tweens[obj].push(new JTween(id,tweenProperty,tweenDuration,tweenEase,tweenStart,tweenEnd,onTweenStart,onTweenChange,onTweenComplete))
		if (tweenDelay!=undefined){
			this._tweenDelays[obj][i-1] = setTimeout(this.Delegate(this,this._delayTween,obj,(i-1)),tweenDelay*1000)
		}else{
			this._tweens[obj][i-1].Start()
		}
	}
}
_j._delayTween = function(tweenID,delayID){
	window.clearTimeout(this._tweenDelays[tweenID][delayID])
	this._tweens[tweenID][delayID].Start()
}
_j.Kill = function(id,sid){
	this._tweens[id][sid].Kill()
}

var JTween = function(id,tProp,tDuration,tEase,tStart,tEnd,otStart,otChange,otComplete){
	this.documentID = id
	this.ele = (typeof(id)=="string") ? document.getElementById(this.documentID) : id
	this.tweenProperty = this.cleanProp(tProp)
	this.tweenType =  (this.tweenProperty.indexOf("()")>-1) ? "method" : "property"
	this.tweenDuration = tDuration
	this.tweenEase = tEase
	this.tweenStart = this.initPosition(tStart)
	this.tweenEnd = this.initPosition(tEnd)
	this.onTweenComplete = otComplete
	this.onTweenChange = otChange
	this.onTweenStart = otStart
	this._msrment = (typeof(tEnd)=="string") ? tEnd.substring(this.tweenEnd.toString().length,tEnd.length) : "px"
	this._time = 0
	this._timeStart = 0
	this._delta = 0
	this._timeout
}

var _jt = JTween.prototype
_jt.initPosition = function(v){
	return ( (typeof(v)=="string") ? (v.indexOf(",")>-1) ? new Array(parseInt(v.split(",")[0]),parseInt(v.split(",")[1])) : parseInt(v) : parseInt(v))
}
_jt.Delegate = function(scope,method){return (function(){method.apply(scope)})}
_jt.cleanProp = function(prop){
	var indx = prop.indexOf("-")
	var rProp = prop
	if (indx>-1){
		rProp = prop.split("-").join("")
		rProp = rProp.substring(0,indx) + rProp.charAt(indx).toUpperCase() + rProp.substring(indx+1,rProp.length)
	}
	return rProp
}
_jt.Start=function(){
   this._timeStart = new Date().getTime()
   this._tween(this.tweenStart)
   this.Broadcast("onTweenStart")
   this._iterate()
}
_jt.Kill=function(){
	window.clearTimeout(this._timeout)
}
_jt._tween=function(){
	if (this.tweenType == "method") {
	// 	method tween
		var method = this.tweenProperty.substring(0,this.tweenProperty.indexOf("()"))
		var delta1 = this.tweenEnd[0] - this.tweenStart[0]
		var delta2 = this.tweenEnd[1] - this.tweenStart[1]
		var arg1 = this[this.tweenEase](this._time/1000,this.tweenStart[0],delta1,this.tweenDuration)
		var arg2 = this[this.tweenEase](this._time/1000,this.tweenStart[1],delta2,this.tweenDuration)
		var args = new Array()
		for (var i = 0;i<this.tweenStart.length;i++){
			var d = this.tweenEnd[i] - this.tweenStart[i]
			args[i] = this[this.tweenEase](this._time/1000,this.tweenStart[i],d,this.tweenDuration)
		}
		this.ele[method](arg1,arg2)
	}else{
	//	property tween
		var pos	 = this[this.tweenEase](this._time/1000,this.tweenStart,this._delta,this.tweenDuration)
		switch (this.tweenProperty){
			
			case "alpha":
			case "opacity":
				if(this.ele.filters) this.ele.filters.alpha['opacity'] = pos;
				this.ele.style['opacity'] = pos / 100;
				this.ele.style['-moz-opacity'] = pos / 100;
			break;
				
			default:
				if (this.tweenProperty.indexOf("color") > -1){
					this._tweenColor(pos)
				}else{
					this.ele.style[this.tweenProperty] = pos + this._msrment
				}
			break;
		}
	}
}
_jt._tweenColor=function(pos){
	
}

_jt._tweenComplete=function(){
	if (this.tweenType == "method") {
	// 	method tween
		var method = this.tweenProperty.substring(0,this.tweenProperty.indexOf("()"))

		var arg1 = this.tweenEnd[0]
		var arg2 = this.tweenEnd[1]
		this.ele[method](arg1,arg2)
		
	}else{
	//	property tween
		
		var pos	 = this.tweenEnd
		
		switch (this.tweenProperty){
			
			case "alpha":
			case "opacity":
				if(this.ele.filters) this.ele.filters.alpha['opacity'] = pos;
				this.ele.style['opacity'] = pos / 100;
		//		this.ele.style['-moz-opacity'] = pos / 100;
			break;
				
			default:
				if (this.tweenProperty.indexOf("color") > -1){
					this._tweenColor(pos)
				}else{
					this.ele.style[this.tweenProperty] = pos + this._msrment
				}
			break;
		}
	}

}

_jt._iterate = function(){
	if (this._time/1000 <= this.tweenDuration) {
		this._time = new Date().getTime() - this._timeStart
		this._delta = this.tweenEnd - this.tweenStart
		this._tween()

		window.clearTimeout(this._timeout)
		this._timeout = setTimeout(this.Delegate(this,this._iterate),10)
	}else{
		
		window.clearTimeout(this._timeout)
		this._tweenComplete()

		this.Broadcast("onTweenComplete")
	}
}

_jt.Broadcast=function(evt){
	if (this[evt]!=undefined) this[evt]()
}

_jt.easeOutQuart = function(t,b,c,d){return c*((t=t/d-1)*t*t*t*t + 1) + b;}
_jt.easeInOutQuart = function(t,b,c,d){if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;return c/2*((t-=2)*t*t*t*t + 2) + b;}
_jt.easeInQuad = function (t, b, c, d) {return c*(t/=d)*t + b;}
_jt.easeOutQuad = function (t, b, c, d) {return -c *(t/=d)*(t-2) + b;}
_jt.easeInOutQuad= function(t, b, c, d) {if ((t/=d/2) < 1) return c/2*t*t + b;return -c/2 * ((--t)*(t-2) - 1) + b;}
_jt.easeInQuart= function (t, b, c, d) {return c*(t/=d)*t*t*t + b;}
_jt.easeOutQuart= function(t, b, c, d) {return -c * ((t=t/d-1)*t*t*t - 1) + b;}
_jt.easeInOutQuart= function (t, b, c, d) {if ((t/=d/2) < 1) return c/2*t*t*t*t + b;return -c/2 * ((t-=2)*t*t*t - 2) + b;}
_jt.easeInQuint= function (t, b, c, d) {return c*(t/=d)*t*t*t*t + b;}
_jt.easeOutQuint= function (t, b, c, d) {return c*((t=t/d-1)*t*t*t*t + 1) + b;}
_jt.easeInOutQuint= function(t, b, c, d) {if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;return c/2*((t-=2)*t*t*t*t + 2) + b;}
_jt.easeInSine= function (t, b, c, d) {return -c * Math.cos(t/d * (Math.PI/2)) + c + b;}
_jt.easeOutSine= function (t, b, c, d) {return c * Math.sin(t/d * (Math.PI/2)) + b;}
_jt.easeInOutSine= function (t, b, c, d) {return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;}
_jt.easeNoneLinear= function (t, b, c, d) {return c*t/d + b;}
_jt.easeInLinear= function (t, b, c, d) {return c*t/d + b;}
_jt.easeOutLinear= function (t, b, c, d) {return c*t/d + b;}
_jt.easeInOutLinear= function(t, b, c, d) {return c*t/d + b;}
_jt.easeInExpo= function (t, b, c, d) {return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;}
_jt.easeOutExpo= function (t, b, c, d) {return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;}
_jt.easeInOutExpo= 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;}
_jt.easeInElastic=function (t, b, c, d, a, p) {if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;if (!a || a < Math.abs(c)) { a=c; var s=p/4; }else var s = p/(2*Math.PI) * Math.asin (c/a);return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;}
_jt.easeOutElastic= function  (t, b, c, d, a, p) {if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;if (!a || a < Math.abs(c)) { a=c; var s=p/4; }else var s = p/(2*Math.PI) * Math.asin (c/a);return (a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b);}
_jt.easeInOutElastic= function (t, b, c, d, a, p) {if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);if (!a || a < Math.abs(c)) { a=c; var s=p/4; }else var s = p/(2*Math.PI) * Math.asin (c/a);if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;}
_jt.easeInCubic= function (t, b, c, d) {return c*(t/=d)*t*t + b;}
_jt.easeOutCubic= function (t, b, c, d) {return c*((t=t/d-1)*t*t + 1) + b;}
_jt.easeInOutCubic= function (t, b, c, d) {if ((t/=d/2) < 1) return c/2*t*t*t + b;return c/2*((t-=2)*t*t + 2) + b;}
_jt.easeInCir= function (t, b, c, d) {return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;}
_jt.easeOutCir= function (t, b, c, d) {return c * Math.sqrt(1 - (t=t/d-1)*t) + b;}
_jt.easeInOutCir= function (t, b, c, d) {if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;}
_jt.easeInBack= function (t, b, c, d, s) {if (s == undefined) s = 1.70158;return c*(t/=d)*t*((s+1)*t - s) + b;}
_jt.easeOutBack= function (t, b, c, d, s) {if (s == undefined) s = 1.70158;return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;}
_jt.easeInOutBack= function(t, b, c, d, s) {if (s == undefined) s = 1.70158;if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;}
_jt.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 AJAXController = function(){
	this.XMLHttpFactories = [
		function () {return new XMLHttpRequest()},
		function () {return new ActiveXObject("Msxml2.XMLHTTP")},
		function () {return new ActiveXObject("Msxml3.XMLHTTP")},
		function () {return new ActiveXObject("Microsoft.XMLHTTP")}
	];
}

var _a = AJAXController.prototype
_a.query=function(url,params,XHO,callback,pst){
	if (params){

		var delim = "?"
		for (var p in params){
			url+=delim + p + "=" + params[p]
			if (delim=="?") delim="&"
		}
	}
	
	//XHO = this.createXMLHTTPObject()
	XHO.onreadystatechange=callback 
	
//	var method = (pst!=undefined) ? "GET" : "POST"
	
	var method = "GET"
	
	
	XHO.open(method,url,true)
	
	XHO.send(null)
	return XHO

}
_a.post=function(){
}
_a.createXMLHTTPObject=function(){
	var xmlhttp = false;
	for (var i=0;i<this.XMLHttpFactories.length;i++) {
		try {
			xmlhttp = this.XMLHttpFactories[i]();
		}
		catch (e) {
			continue;
		}
		break;
	}

	return xmlhttp;
}
_a.getNodeValue=function(id, parentElem, index) {
	if (!index) index=0
    var result = "";
	if (id.indexOf(":")>-1){
		var prefix=id.split(":")[0]
		var local=id.split(":")[1]
	}else{
		local=id
	}
    if (prefix && window.ActiveXObject) {
        // IE 
        result = parentElem.getElementsByTagName(prefix + ":" + local)[index];
    } else {
		//sfri / fx
        result = parentElem.getElementsByTagName(local)[index];
    }
    if (result) {
        if (result.childNodes.length > 1) {
            return result.childNodes[1].nodeValue;
        } else {
            return result.firstChild.nodeValue;    		
        }
    } else {
        return "";
    }
}
_a.getNodes=function(id, parentElem) {
    var results = "";
	if (id.indexOf(":")>-1){
		var prefix=id.split(":")[0]
		var local=id.split(":")[1]
	}else{
		local=id
	}
    if (prefix && window.ActiveXObject) {
        // IE 
        results = parentElem.getElementsByTagName(prefix + ":" + local);
    } else {
		//sfri / fx
        results = parentElem.getElementsByTagName(local);
    }
    return results

}
var URIController = function(){
	/* URI PREFS */
	this._dbug = false;
	this._mode=1 // 1 = values only, 2 = object
	this._intrvl = undefined;
	this._initialized = false
	this._useraction = false
	this._listener = undefined
	this._uriHash = ""
	this._parsedURIHash = ""
}
var _u = URIController.prototype
_u.attachListener = function(obj){
	this._listener = obj
}
_u.setMode=function (m){
	this._argumentMode = m
}
_u.initialize=function(dbug){
	if (dbug) this.setDebugMode(dbug)
	this._uriHash=this.getURIHash()
	this._parsedURIHash=this.parseURIHash()
	if (this._uriHash) this.broadcast()
	this.initInterval()
	this._initialized = true
}
_u.Delegate = function(scope,method){
	var args = new Array() ;
	var l = arguments.length ;
	for(var i = 2 ; i < l ; i++) args[i - 2] = arguments[i] ;
	return (function(){method.apply(scope,args)})
}
_u.parseURIHash=function(index){
	var uri_hash = window.location.hash.substring(1,window.location.hash.length)
	
	var uri_hash_values = new Array()
	if (uri_hash.indexOf("&")>-1){
		var uri_hash_arry = uri_hash.split("&")
		for (var i=0;i<uri_hash_arry.length;i++){
			uri_hash_values.push(uri_hash_arry[i])
		}
	}else{
		var uri_hash_values = new Array()
		uri_hash_values.push(uri_hash)
	}
	//alert(uri_hash_values)
	return(uri_hash_values)

}
_u.getURIHash=function(){
	var uri_hash = window.location.hash.substring(1,window.location.hash.length)
	return (uri_hash)
}

_u.setDebugMode=function(v){
	this._dbug = v
}
_u.initInterval=function(){
	this._intrvl = setTimeout(this.Delegate(this,this._iterate),500)
}

_u._iterate=function(){
	this._temp++
	
	if (this._uriHash!=this.getURIHash()){
		this._uriHash=this.getURIHash()
		this._parsedURIHash=this.parseURIHash()
		
		this.broadcast()
	}
	this._intrvl = setTimeout(this.Delegate(this,this._iterate),500)
}
_u.href = function(id,args){
	if (id){
		this._useraction = true
		//this.broadcast(id,args)
		if (args){
			id += (args.charAt(0)=="&") ? args : "&" + args
		}
		window.location.hash = id
		//this.broadcast()
	}
}
_u.broadcast=function(){
	var id = this._uriHash.split("&")[0]
	switch (this._mode){
		case 1:
			
			var _args = new Array()
			
			for (var i=0;i<this._parsedURIHash.length;i++){
				_args[i] = (this._parsedURIHash[i].indexOf("=")>-1) ? this._parsedURIHash[i].split("=")[1] : this._parsedURIHash[i]
			}
			
			//alert(id.split("=")[0] + " : "+ _args)
			this._listener[id.split("=")[0]].apply(this,_args)
				
		
		break;
		
		case 2:
			
		break;
	
	}
	
	
}




/*
**
** Attention: System Controller is in  alpha.
** 
*/

var SystemController = function(){}
var _s = SystemController.prototype
_s.resolution = function(){return (screen.width + "x" + screen.height);}
_s.resolutionY = function(){return (screen.height);}
_s.resolutionX = function(){return (screen.width);}

_s.availSize = function(){return (screen.availWidth + "x" + screen.availHeight )}
_s.availY = function(){return (screen.availHeight);}
_s.availX = function(){return (screen.availWidth);}

_s.viewportSize = function(d){
	
	
	var x,y;

	if (self.innerHeight) // all except Explorer
	{
		x = self.innerWidth;
		y = self.innerHeight;
	}

	else if (document.documentElement && document.documentElement.clientHeight)
		// Explorer 6 Strict Mode
	{
		x = document.documentElement.clientWidth;
		y = document.documentElement.clientHeight;
	}
	else if (document.body) // other Explorers
	{
		x = document.body.clientWidth;
		y = document.body.clientHeight;
	}
	
	switch (d){
		case "y":
			return y;
		break;
		case "x":
			return x;
		break;
		default:
			return (x + "x" + y )
		break;
	}
}
_s.viewportY = function(){return this.viewportSize("y")}
_s.viewportX = function(){return this.viewportSize("x")}

_s.scrollOffset = function(d){
	var x,y;
	if (self.pageYOffset) // all except Explorer
	{
		x = self.pageXOffset;
		y = self.pageYOffset;
	}
	else if (document.documentElement && document.documentElement.scrollTop)
		// Explorer 6 Strict
	{
		x = document.documentElement.scrollLeft;
		y = document.documentElement.scrollTop;
	}
	else if (document.body) // all other Explorers
	{
		x = document.body.scrollLeft;
		y = document.body.scrollTop;
	}
	
	switch (d){
		case "y":
			return y;
		break;
		case "x":
			return x;
		break;
		default:
			return (x + "x" + y )
		break;
	}
}
_s.scrollOffsetY = function(){return this.scrollOffset("y")}
_s.scrollOffsetX = function(){return this.scrollOffset("x")}

_s.pageSize =function(d){
	var x,y;
	var test1 = document.body.scrollHeight;
	var test2 = document.body.offsetHeight
	if (test1 > test2)
	{
		x = document.body.scrollWidth;
		y = document.body.scrollHeight;
	}
	else 
	{
		x = document.body.offsetWidth;
		y = document.body.offsetHeight;
	}
	switch (d){
		case "y":
			return y;
		break;
		case "x":
			return x;
		break;
		default:
			return (x + "x" + y )
		break;
	}
}
_s.pageSizeY=function(){return this.pageSize("y");}
_s.pageSizeX=function(){return this.pageSize("x");}

 
Juliet.JTween		= new JTweenController();
Juliet.AJAX		= new AJAXController();
Juliet.URI		= new URIController();
Juliet.System	= new SystemController();


/*
**  
**  UTILITIES
**
*/

var Utils = function(){

}
_u = Utils.prototype
_u.createCorners=function(cname,topCorner,rightCorner,bottomCorner,leftCorner){
		var corners = 	this.getElementsByClassName(cname)	for (var ele in corners){		var thisElement = corners[ele]		var div = document.createElement('div')		div.innerHTML = '<img src="' + topCorner + '" style="position:absolute;top:0;left:0" />'		div.innerHTML += '<img src="' + rightCorner + '" style="position:absolute;top:0;right:0" />'		div.innerHTML += '<img src="' + bottomCorner + '" style="position:absolute;bottom:0;right:0" />'		div.innerHTML += '<img src="' + leftCorner + '" style="position:absolute;bottom:0;left:0" />'				//if (thisElement.style.position != 'absolute') thisElement.style.position='relative'		thisElement.appendChild(div)	}}_u.getElementsByClassName=function(strClass, strTag, objContElm) {  strTag = strTag || "*";  objContElm = objContElm || document;  var objColl = objContElm.getElementsByTagName(strTag);  if (!objColl.length &&  strTag == "*" &&  objContElm.all) objColl = objContElm.all;  var arr = new Array();  var delim = strClass.indexOf('|') != -1  ? '|' : ' ';  var arrClass = strClass.split(delim);  for (var i = 0, j = objColl.length; i < j; i++) {    var arrObjClass = objColl[i].className.split(' ');    if (delim == ' ' && arrClass.length > arrObjClass.length) continue;    var c = 0;    comparisonLoop:    for (var k = 0, l = arrObjClass.length; k < l; k++) {      for (var m = 0, n = arrClass.length; m < n; m++) {        //if (arrClass[m] == arrObjClass[k]) c++;        if (arrObjClass[k].indexOf(arrClass[m])>-1) c++;        if (( delim == '|' && c == 1) || (delim == ' ' && c == arrClass.length)) {          arr.push(objColl[i]);          break comparisonLoop;        }      }    }  }  return arr;}


Juliet.Utilities	= new Utils();

Juliet.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: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			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.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
Juliet.BrowserDetect.init();


