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: "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"
		}
	]
};

BrowserDetect.init();




function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}

function addEvent( obj, type, fn ) {
	if (obj.addEventListener) {
		obj.addEventListener( type, fn, false );
		EventCache.add(obj, type, fn);
	}
	else if (obj.attachEvent) {
		obj["e"+type+fn] = fn;
		obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
		obj.attachEvent( "on"+type, obj[type+fn] );
		EventCache.add(obj, type, fn);
	}
	else {
		obj["on"+type] = obj["e"+type+fn];
	}
}

var EventCache = function(){
	var listEvents = [];
	return {
		listEvents : listEvents,
		add : function(node, sEventName, fHandler){
			listEvents.push(arguments);
		},
		flush : function(){
			var i, item;
			for(i = listEvents.length - 1; i >= 0; i = i - 1){
				item = listEvents[i];
				if(item[0].removeEventListener){
					item[0].removeEventListener(item[1], item[2], item[3]);
				};
				if(item[1].substring(0, 2) != "on"){
					item[1] = "on" + item[1];
				};
				if(item[0].detachEvent){
					item[0].detachEvent(item[1], item[2]);
				};
				item[0][item[1]] = null;
			};
		}
	};
}();
addEvent(window,'unload',EventCache.flush);

function byId(id){return document.getElementById(id)}

function removeHTMLTags(htmlString){
	if(htmlString){
	  var mydiv = document.createElement("div");
	   mydiv.innerHTML = htmlString;

		if (document.all) // IE Stuff
		{
			return mydiv.innerText;
		   
		}   
		else // Mozilla does not work with innerText
		{
			return mydiv.textContent;
		}                           
  }
} 


/*******************/
// IE issues
/*******************/
var oldIE = (BrowserDetect.browser == 'Explorer' && BrowserDetect.version < 7)? true : false;
var IE7 = (BrowserDetect.browser == 'Explorer' && BrowserDetect.version == 7)? true : false;

function minWidth(){	
	this.minW = 1000;	
	this.body = false;
	this.div = false;
	
	this.init = function(){
		
		this.body = document.getElementsByTagName("body")[0];
		this.div = byId('shadow-container');
		this.minW = 1000;
	}
	
	this.fixIE6 = function(){
		var winW = document.documentElement.clientWidth;
		if(winW < this.minW){			
			if(this.body) this.body.style.width = minW + 'px';
			if(this.div){
				this.div.style.width = minW + 'px';
				//this.div.style.backgroundPosition = (this.minW - winW) + "px 0";
			}
		}else{
			if(this.body) this.body.style.width = 'auto';
			if(this.div){
				this.div.style.width = 'auto';
				//this.div.style.backgroundPosition = "50% 0";
			}
		}
	}
	
	this.fixIE7 = function(){	
		var winW = document.documentElement.clientWidth;		
		if(this.div){			
			if( winW < (this.minW+7) ){			
				var dist = ( (this.minW - winW) < 11 )? (this.minW - winW) : 10;
				dist = (dist < 0)? dist : "-"+dist;
				dist = parseInt(dist);
				//alert(dist)
				dist = (dist > -10 && dist < 0)? dist-2 :  -10;
				//alert(dist)
				this.div.style.backgroundPosition = dist + "px 0";
			}else{
				this.div.style.backgroundPosition = "50% 0";
			}
		}
	}
	
}

if(BrowserDetect.browser == 'Explorer'){ 
	this.minWidth = new minWidth();
	var fix = this.minWidth;
		
	if(BrowserDetect.version < 7){
		addEvent(window, "load", function(){ fix.init(); fix.fixIE6(); })
		addEvent(window, "resize", fix.fixIE6 )
	}else if(BrowserDetect.version == 7){	
		addEvent(window, "load", function(){ fix.init(); fix.fixIE7(); })
		addEvent(window, "resize", fix.fixIE7 )
	}
}



/**************************************************/
//                          SHARE BUTTONS
/**************************************************/

function shareButtons(){
	this.print = byId('print');
	this.email = byId('email');
	this.digg = byId('digg');
	this.delicious = byId('delicious');
	this.twitter = byId('twitter');
	this.facebook = byId('facebook');
	this.blogger = byId('blogger');
	this.rss = byId('rss');
	this.share = byId('share');
	
	this.url    = escape( location.href );   
	this.title  = escape( document.title );  	
	this.printLinks = new Array();
	
	this.printMode = function(thisObj){
		/*
		var Links = document.getElementsByTagName('link');
		for(x in Links){
			if( Links[x].rel == "stylesheet" && Links[x].media == "print" ){			
				Links[x].media = 'all';
				this.printLinks.push(Links[x])
			}
		} 
		
		var logo = byId('logo');
		if(logo){
			var img = logo.getElementsByTagName('img');
			if(img.length > 0){
				img[0].oldSRC = img[0].src;
				img[0].src = "/Images/logo_grey.gif";				
			}
		}
		
		var obj = thisObj;
		if(byId('nView')){
			byId('nView').style.display = "block";
		}else{
			var a = document.createElement('a');
			a.onclick = function(){ thisObj.normalMode(); return false;}
			a.innerHTML = "&#171;&nbsp;Back to Normal View";
			a.id = "nView";

			var parent = (logo)? logo : document;
			parent.insertBefore(a,parent.firstChild);
		}
		*/
		scroll(0,0);
		window.print();
		return false;
	}
	
	this.normalMode = function(){
		for(x in this.printLinks){
			this.printLinks[x].media = "print";
		}
		
		if(byId('nView')){
			byId('nView').style.display = "none";
		}
		
		var logo = byId('logo');
		if(logo){
			var img = logo.getElementsByTagName('img');
			if(img.length > 0){
				if(typeof img[0].oldSRC != 'undefined' ){ 					
					img[0].src = img[0].oldSRC;
				}				
			}
		}
		
		
	}
	
	this.assignButtons = function(){	
		var t = this;
		if(this.share){
			this.share.onclick = function(){ return false; }
		}
		
		if(this.print){			 
			this.print.href = "#top";
			this.print.onclick = function(){ t.printMode(t); return false;}
		}
		
		if(this.email){
			this.email.href="mailto:?subject="+this.title+"&body="+this.title + escape("\n") + this.url;
		}
		
		if(this.digg){
			this.digg.href = "http://digg.com/submit?phase=2&url="+ this.url +"&title="+ this.title;
			this.digg.target="_blank";
		}
		if(this.delicious){			
			this.delicious.href = "http://del.icio.us/post?url="+  this.url  +"&title=" +this.title;
			this.target="_blank";
		}
		if(this.twitter){
			this.twitter.href = "http://twitter.com/home?status=Currently reading " +this.title +": " + this.url;
			this.twitter.target="_blank";
		}
		if(this.facebook){		
			this.facebook.href = "http://www.facebook.com/share.php?u=" + this.url+ "&t=" +this.title
			this.facebook.target="_blank";
		}
		if(this.blogger){
			this.blogger.href = "http://www.blogger.com/blog_this.pyra?t&u="+this.url+"&n="+this.title
			this.blogger.target="_blank";
		}
		
		if(this.rss){
			this.rss.onclick = function(){ return false; };
			if(this.rss.href.indexOf(".rss") < 0 ){
				var links = document.getElementsByTagName("link");
				for(x in links){
					if(typeof links[x].title != 'undefined' && links[x].title.toLowerCase() == 'rss'){
						this.rss.href = links[x].href;
						this.rss.onclick = function(){ return true; };
						break;
					}
				}				
			}
		}
		
	}
	this.assignButtons();
}

/**************************************************/
//			BOXES				  //
/**************************************************/
function boxHover(){
	var divs = getElementsByClass('info-box');
	
	this.oneBox = function(div){		 
					
		var As = div.getElementsByTagName('a');
		if(As.length > 0){
			var url = As[0].href;
			div.onclick = function(){ document.location = url  }
			div.style.cursor = 'pointer';			
			div.title = (As[0].getAttribute("title"))? As[0].getAttribute("title") : removeHTMLTags(As[0].innerHTML);
		}
									
		
		if( !div.getAttribute('rel') || ( div.getAttribute('rel') &&  div.getAttribute('rel') != 'nohover' ) ){				
		
			div.onmouseover = function(){			
					this.style.backgroundPosition = '0 -92px';
				}
			div.onmouseout = function(){			
					this.style.backgroundPosition = '0 0';
				}	
		}				
	}
	
	for(x in divs){
		var b = new this.oneBox(divs[x]);
	}
}



/**************************************************/
//			MENU LAST ITEM		  //
/**************************************************/
function fixMenu(){
	var nav = byId('navmenu');
	if(nav){
		// Fix Last Item
		var LIs = $('#navmenu').children('li');		
		var l = LIs.length;
		LIs[l-2].className+=" last";
		LIs[l-1].className+=" last";	
				
		
		// Remove Titles
		var As = nav.getElementsByTagName('a');
		for(var i=0,l=As.length;i<l;i++){
			As[i].removeAttribute('title');
		}
		
	}
}

/**************************************************/
//			FONT SIZE		  //
/**************************************************/

function fontSize(){
	this.min = 10;
	this.max = 18;
	this.def = 12;
	this.el = null;
	this._this = this;
	
	this.init = function(elem, increase_btn, decrease_btn){
		if(elem.length > 0){
			this.el = elem;
			this.load();
			var _this = this._this;
			increase_btn.click(function(){_this.increase(); return false; })
			decrease_btn.click(function(){_this.decrease(); return false;})
		}
	}
	
	this.increase = function() {		
		if(this.el){
			var s = (this.el.css('fontSize')) ? parseInt(this.el.css('fontSize').replace("px","")) : this.def;		  			
			if(s!=this.max){ s += 1;}
			this.el.css('fontSize', s+"px")
			this.save(s); 		
		}
		return false;
	}
	
	this.decrease = function() {		
		if(this.el){			
			var s = (this.el.css('fontSize')) ? parseInt(this.el.css('fontSize').replace("px","")) : this.def;		  			
			if(s!=this.min) { s -= 1;}
			this.el.css('fontSize', s+"px")
			this.save(s); 
		}
		return false;
	}
	
	this.save = function(size){		
		$.cookie('ibs_font_size', size, { path: '/', expires: 365 })
	}
	
	this.load = function(){		
		if($.cookie('ibs_font_size')){
			this.el.css('fontSize', $.cookie('ibs_font_size')+"px")
		}
	}
}

/**************************************************/
//			MENU LAST ITEM		  //
/**************************************************/

function initiateSearch(divHolder, words){
	
	this.counter = 0;
	
	this.findParent = function(el, parentNodeTagName){
		this.counter++;
		if(el && parentNodeTagName.length > 0){
			var parent = el.parentNode;
			if(parent.nodeName.toLowerCase() == parentNodeTagName.toLowerCase()){
				return parent;				
			}else{
				if(parent.nodeName.toLowerCase() == "body" || parent.nodeName.toLowerCase() == "html"){
					return false;
				}else{
					return this.findParent(parent, parentNodeTagName);
				}
			}
		}	
	}
	
	if(divHolder){
		var inputs = divHolder.getElementsByTagName('input');
		
		this.el = false;
		var w = words;
		
		for(x in inputs){
			if(typeof inputs[x] != "object") continue;
						
			if( inputs[x].type.toLowerCase() == "text"){
				this.el = inputs[x];	
				if(words.length >0){
					this.el.value = words;
					var el = this.el;
					addEvent(this.el, "focus", function(){if(el.value == w){el.value = "";}} );
					addEvent(this.el, "blur", function(){if(el.value == ""){el.value = w;}} );					
				}				
			}
			
		}	
		
		
		
		for(x in inputs){
			if(typeof inputs[x] != "object") continue;
			
			if( inputs[x].type.toLowerCase() == "image" || inputs[x].type.toLowerCase() == "submit"){
				
				var el = false;
				if(this.el){
					el = this.el;
				}
				
				var parent = this.findParent(inputs[x] ,"form");
				
				inputs[x].onclick = function(){ 
											if(el){ if(el.value == w){ el.value = ""; } }											
											if(parent){ 
												parent.action = location.href; 
												//alert('onlick');
												//parent.onsubmit = function(){alert('Submit'); return false;}
											}
										};					
			}
		}
	}
}

function ip_address_to_number(IPaddress) {
	if (IPaddress == '') {
		return 0;
	} else {
		ips = IPaddress.split('.');
		return (ips[3] + ips[2] * 256 + ips[1] * 65536 + ips[0] * 16777216);
	}
}

/**************************************************/
// 		MAIN LAUNCH FUNCTION	  	   //
/**************************************************/

function __ibsLaunch(){
	boxHover();
	fixMenu();		
	var p = new shareButtons();		
	//initiateSearch(byId('search'), "Search IBS.net");	
}
addEvent(window, "load", __ibsLaunch);


