

/*** File "libs.js" starts here. ***/

/*@cc_on _d=document;eval('var document=_d')

var e = "abbr,article,aside,audio,bb,canvas,datagrid,datalist,details,dialog,eventsource,figure,footer,header,hgroup,mark,menu,meter,nav,output,progress,section,time,video".split(','),
i = e.length;
while (i--) {
	document.createElement(e[i])
}

@*/

$.fn.markCurrentLocation = function() {
	var path = window.location.href;
	var pathname = document.location.pathname;
	var hostname = document.location.protocol+'//'+document.location.hostname;
	return this.each(function(){
		var self = $(this);
		var href = self.attr('href');

		if(path == href){
			var linkLabel = self.text();
			self
				.before('<em><span class="emcontent">'+linkLabel+'</span></em>')
				.remove()
		}else if(RegExp(hostname+href).test(path)){
			self
				.wrap('<em></em>')
		}
	})
};

$.fn.orderedFigure = function() {
	return this.each(function(){
		var self = $(this);
		var cont = self.html();
		var cont2 = cont.replace(/(\d)(st|nd|rd|th)/g,'$1<sup>$2</sup>')
		self.html(cont2);
	})
};

$.fn.notify = function(type) {
	var to = {backgroundColor: "white"};
	var duration = 1000;
	switch(type){
		case 'alert':
			var from = {backgroundColor:'#ff9797'};
			break;
		default:
			var from = {backgroundColor:'#fef794'};
			break;
	}
	return this.each(function(){
		$(this).css(from).stop().animate(to,duration,function(){$(this).removeAttr('style')});
	});
};

var iaMobileNavInit = function(){
	$('<div id="shield" />')
		.appendTo('body')
		.css('height',$(document).height()+6)
		.click(function(){
			$(this).toggle();
			$('header nav').hide();
			$('.forRMB').removeClass('focus')
		})
		.hide();

	$('#iMenu')
		.click(function(){
			$('#shield').toggle();
			$(this).toggleClass('focus')
			$('#iLang').removeClass('focus')
			$('.langSelector').hide()
			$('.mainNav').toggle()
			return false;
		})

	$('#iLang')
		.click(function(){
			$('#shield').toggle();
			$(this).toggleClass('focus')
			$('#iMenu').removeClass('focus')
			$('.mainNav').hide()
			$('.langSelector').toggle()
			return false;
		})
};


/*** File "jquery.browser.addEnvClass.js" starts here. ***/

(function(){
	var ua = navigator.userAgent;
	var b = jQuery.browser;
	b.engine = '';
	b.mobile = false;

	if(/Windows/.test(ua)){
		b.os = 'win';
		b.win = true;
	}else if(/Mac/.test(ua)){
		b.os = 'mac';
		b.mac = true;
	}else if(/iPhone/.test(ua)){
		b.os = 'iphone';
		b.iphone = true;
	}

	if(/Chrome/.test(ua)){
		b.safari = false;
		b.chrome = true;
	}

	if(/Gecko/.test(ua)){
		b.gecko = true;
		b.engine = 'gecko'
	}if(/WebKit/.test(ua)){
		b.gecko = false;
		b.webkit = true;
		b.engine = 'webkit'
	}

	if(/Mobile/i.test(ua)){
		b.mobile = true;
	}
	
	if(b.msie){
		b.name = 'msie';
	}else if(b.opera){
		b.name = 'opera';
	}else if(b.safari){
		b.name = 'safari';
	}else if(b.chrome){
		b.name = 'chrome';
	}else if(b.mozilla){
		b.name = 'mozilla';
	}

	if(b.msie){
		b.ver = /MSIE (\d(.\d+)?)/.exec(ua)[1];
	}else if(b.mozilla){
		b.ver = /Firefox\/(\d(.\d+)?)/.exec(ua)[1];
	}else if(b.opera){
		b.ver = /Opera\/? ?(\d(\.\d+)?)/.exec(ua)[1];
	}else if(b.safari){
		b.ver = /Version\/(\d(\.\d+)+)/.exec(ua)[1];
	}else if(b.chrome){
		b.ver = /Chrome\/(\d(\.\d+)+)/.exec(ua)[1];
	}
})()

jQuery.fn.addEnvClass = function() {
	return this.each(function(){
		var self = jQuery(this);
		var b = jQuery.browser;
		self
			.addClass('js')
			.addClass(b.os)
			.addClass(b.name)
			.addClass(b.engine)
			.addClass('ver'+b.ver);
	
		if(b.msie){
			self.addClass('ie' + parseInt(b.ver));
		}
	})
};

jQuery('html').addEnvClass();



/*** File "jquery.color.js" starts here. ***/

/*
 * jQuery Color Animations
 * Copyright 2007 John Resig
 * Released under the MIT and GPL licenses.
 */

(function(jQuery){

	// We override the animation for all of these color styles
	jQuery.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor', 'color', 'outlineColor'], function(i,attr){
		jQuery.fx.step[attr] = function(fx){
			if ( fx.state == 0 ) {
				fx.start = getColor( fx.elem, attr );
				fx.end = getRGB( fx.end );
			}

			fx.elem.style[attr] = "rgb(" + [
				Math.max(Math.min( parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0]), 255), 0),
				Math.max(Math.min( parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1]), 255), 0),
				Math.max(Math.min( parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2]), 255), 0)
			].join(",") + ")";
		}
	});

	// Color Conversion functions from highlightFade
	// By Blair Mitchelmore
	// http://jquery.offput.ca/highlightFade/

	// Parse strings looking for color tuples [255,255,255]
	function getRGB(color) {
		var result;

		// Check if we're already dealing with an array of colors
		if ( color && color.constructor == Array && color.length == 3 )
			return color;

		// Look for rgb(num,num,num)
		if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color))
			return [parseInt(result[1]), parseInt(result[2]), parseInt(result[3])];

		// Look for rgb(num%,num%,num%)
		if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color))
			return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55];

		// Look for #a0b1c2
		if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color))
			return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)];

		// Look for #fff
		if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color))
			return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)];

		// Otherwise, we're most likely dealing with a named color
		return colors[jQuery.trim(color).toLowerCase()];
	}
	
	function getColor(elem, attr) {
		var color;

		do {
			color = jQuery.curCSS(elem, attr);

			// Keep going until we find an element that has color, or we hit the body
			if ( color != '' && color != 'transparent' || jQuery.nodeName(elem, "body") )
				break; 

			attr = "backgroundColor";
		} while ( elem = elem.parentNode );

		return getRGB(color);
	};
	
	// Some named colors to work with
	// From Interface by Stefan Petre
	// http://interface.eyecon.ro/

	var colors = {
		aqua:[0,255,255],
		azure:[240,255,255],
		beige:[245,245,220],
		black:[0,0,0],
		blue:[0,0,255],
		brown:[165,42,42],
		cyan:[0,255,255],
		darkblue:[0,0,139],
		darkcyan:[0,139,139],
		darkgrey:[169,169,169],
		darkgreen:[0,100,0],
		darkkhaki:[189,183,107],
		darkmagenta:[139,0,139],
		darkolivegreen:[85,107,47],
		darkorange:[255,140,0],
		darkorchid:[153,50,204],
		darkred:[139,0,0],
		darksalmon:[233,150,122],
		darkviolet:[148,0,211],
		fuchsia:[255,0,255],
		gold:[255,215,0],
		green:[0,128,0],
		indigo:[75,0,130],
		khaki:[240,230,140],
		lightblue:[173,216,230],
		lightcyan:[224,255,255],
		lightgreen:[144,238,144],
		lightgrey:[211,211,211],
		lightpink:[255,182,193],
		lightyellow:[255,255,224],
		lime:[0,255,0],
		magenta:[255,0,255],
		maroon:[128,0,0],
		navy:[0,0,128],
		olive:[128,128,0],
		orange:[255,165,0],
		pink:[255,192,203],
		purple:[128,0,128],
		violet:[128,0,128],
		red:[255,0,0],
		silver:[192,192,192],
		white:[255,255,255],
		yellow:[255,255,0]
	};
	
})(jQuery);


/*** File "jquery.initInput.js" starts here. ***/

(function($) {
	jQuery.initInput = {
		defaultValue: '',
		errorMessage: '',
		wdmClassName: 'with-default-message'
	}

	jQuery.fn.initInput = function(arg1,arg2) {

		return this.each(function(){
			var elem = $(this);
			var form = elem.parents('form');
			var wdm = $.initInput.wdmClassName;
			
			if(elem.attr('placeholder')){
				var msg = elem.attr('placeholder');
				var emsg = arg1 || $.initInput.errorMessage;
			}else{
				var msg = arg1 || $.initInput.defaultValue;
				var emsg = arg2 || $.initInput.errorMessage;
			}

			//init
			var init = function(){
				if(elem.val() == '' || elem.val() == msg){
					elem.val(msg).addClass(wdm);
				}
			}

			//set event
			var setEvent = function(){
				elem.focus(function(){
					elem.removeClass(wdm);
					if(elem.val() == msg){
						elem.val('');
					}
				}).blur(init);

				form.submit(function(){
					if(emsg == ''){
						//Allaw empty
						if(elem.val() == msg){
							elem.val('');
						}
					}else{
						//Disallow empty
						if(elem.val() == '' || elem.val() == msg){
							alert(emsg);
							elem.notify('alert');
							return false;
						}
					}
					return true;
				});
			}

			//fire function
			init();
			setEvent();

		});
	};
})(jQuery);

/*** File "jquery.addFileInfo.js" starts here. ***/

(function($) {
	if(typeof ActiveXObject == "function" && typeof XMLHttpRequest == "undefined"){
		XMLHttpRequest = function(){
			try {
				return new ActiveXObject('Msxml2.XMLHTTP');
			} catch (e) {
				return new ActiveXObject('Microsoft.XMLHTTP');
			}
		}
	}
		
	//Setting valiables
	var fileLinkClass = "file";
	var fileTypeClass = "fileType";
	var fileSizeClass = "fileSize";
	var imageLinkClass = "imageLink";
	var originalTextClass = "originalText";
	var notFoundClass = 'notFound';
	var notFoundText = 'Not Found';
	var fileClasses = '(pdf|od[tspdgf]|xlsx?|docx?|pptx?|zip|tar(\.gz)?)';
	var fileExtention = '\\.'+fileClasses+'$';

	//Get path to phpfile
	var helperPHP = $('script[src]:last').attr('src').replace(/\.js/,'.php');

	/**
	 * @sample $('article a').addFileInfo()
	 * @descriptoin If the elements have class or file extention defined as fileClasses and fileExtention, or have fileLinkClass class, it will automatically have fancy file type label before the original text, and the size after. This order is considederd from accessibility perspective.
	 * 
	 * @sample $('a.pdf').addFileInfo()
	 * @desctription 'A' elements which have fileTypeClass will be affected. This class decide displayed file type.
	 * 
	 * @sample $('a.file').addFileInfo()
	 * @desctription 'A' elements which have fileLinkClass will be affected. File type is detected automatically.
	 * 
	 * @returns {jQuery}
	 */
	$.fn.addFileInfo = function(){
		return this.each(function(){

			var elem = $(this);
			var href = elem.get(0).href;
			var fileType = '';
			var fileSize = 0;
			var fileMatch = RegExp(fileExtention).exec(href.replace(/#.+$/,''));
			var classMatch = RegExp(fileClasses).exec(elem.attr('class'));
			if(fileMatch){
				fileType = fileMatch[1];
			}else if(classMatch){
				fileType = classMatch[1];
			}else if(!elem.is('.'+fileLinkClass)){
				return;
			}
			
			var setFileInfo = function(json){
				var contentLength = json['Content-Length'];

				if(!fileType){
					fileType = (/(\/|-)([^-]+)$/.exec(json['Content-Type'])[2]);
				}

				if(String(contentLength-0) != 'NaN'){
					fileSize = Math.round(contentLength / 1024);
					if(fileSize >= 1000){
						fileSize = (Math.round(fileSize / 102.4) / 10) + 'MB';
					}else{
						fileSize = fileSize + 'KB';
					}
				}
					
				elem
					.addClass(fileLinkClass)
					.addClass(fileType)

				if(elem.find('.'+originalTextClass).size() == 0){
					elem.wrapInner('<span class="'+originalTextClass+'" />')
				}

				if(/404/.test(json[0])){
					fileSize = notFoundText;
					elem.find('.'+originalTextClass).addClass(notFoundClass);
				}else{
					elem.prepend('<span class="'+ fileTypeClass +'">'+ fileType.toUpperCase() +'</span> ')
				}


				if(elem.is('*:has(img)')){
					elem.addClass(imageLinkClass)
					$('.'+fileTypeClass,elem).append(' ('+fileSize+')');
				}else{
					elem.append(' <span class="'+fileSizeClass+'">('+fileSize+')</span>');
				}
				
			}
			
			var outset = function(){
				var fte = $('.'+fileTypeClass,elem);
				if(fte.parents('ul').size()){
					var ml = fte.width()
					+ parseInt(fte.css('padding-left').replace(/px/,''))
					+ parseInt(fte.css('padding-right').replace(/px/,''))
					fte.parents('li').css({
						position: 'relative'
					})
					fte.css({
						position: 'absolute',
						marginTop: '.2em',
						marginLeft: -ml -4 + 'px'
					});
				}
			}
			
			var main = function(){
				if(/https?:\/\/(.+?)\//.exec(href)[1] == location.host){
					var req = new XMLHttpRequest();
					req.open('HEAD',href,true);
					req.onreadystatechange = function(){
						if(req.readyState == 4){
							if(req.getResponseHeader("Content-Length")){
								setFileInfo({
									"0": req.getResponseHeader("0"),
									"Content-Type": req.getResponseHeader("Content-Type"),
									"Content-Length": req.getResponseHeader("Content-Length")
								});
							}else{
								$.post(helperPHP,{url:href},setFileInfo,'json')
							}
							req.abort();
						}
					}
					req.send(null);
				}else{
					$.post(helperPHP,{url:href},setFileInfo,'json')
				}
			}

			main();
			outset();

		});
	};
})(jQuery);


/*** File "jquery.incrementalFilter.js" starts here. ***/

(function($) {
	var IncrementalFilter = function(params){
		var setting = this.setting = {
			input: undefined,
			items: undefined,
			searchScope: '*',
			minChars: 2,
			useHighlight: true,
			foundCounter: undefined,
			totalCounter: undefined,
			highlightElem: $('<em class="highlight" />'),
			foundClass: 'found',
			zeroClass: 'zero'
		}
		$.extend(setting,params)
	
		this.input = $(setting.input);
		this.items = $(setting.items);
		this.minChars = setting.minChars;
		if(setting.foundCounter){
			this.totalCounter = setting.totalCounter;
			this.foundCounter = new IncrementalFilter.Counter(setting);
		}
		this.formerQuery = '';
		this.itemData = [];
		this.init();
	}
	
	IncrementalFilter.prototype = {
	
		makeData: function(){
			var that = this;
			this.items.each(function(){
				var obj = [$(this)]
				if($(this).is('dt')){
					obj.push($(this).next())
				}
				that.itemData.push(new IncrementalFilter.SearchedItem(obj,that.setting));
			})
			if(this.foundCounter){
				this.foundCounter.refresh(this.itemData.length);
				if(this.totalCounter){
					$(this.totalCounter).html(this.foundCounter.all)
				}
			}
		},
		
		processQuery: function(query){
			var tempq = this.escapeQuery(query)
			tempq = $.trim(tempq).split(/\s+/);
			var queries = []
		
			for(var i=0,l=tempq.length;i<l;i++){
				for(var j=0,m=tempq.length;j<m;j++){
					if(i!=j && tempq[i] && (tempq[i] == tempq[j]
					   || RegExp(tempq[i]).test(tempq[j])
					   || tempq[i].length < this.minChars)){
						tempq.splice(i,1)
						l = m = tempq.length;
					}
				}
				if(tempq[i]){
					queries.push(tempq[i])
				}
			}
	
			if(queries.join(' ') != this.formerQuery){
				this.search(queries);
				this.formerQuery = queries.join(' ');
			}
		},
		
		escapeQuery: function(query){
			var escapeChars = '.+*^$?()[]{}';
			var res = query;
			for(var i=0,l=escapeChars.length;i<l;i++){
				var ec = escapeChars.charAt(i);
				res = res.replace(RegExp('\\'+ec,'g'),'\\'+ec);
			}
			return res;
		},
	
		search: function(queries){
			var that = this;
			var count = 0;
			$(that.itemData).each(function(){
				var self = this;
				var matchCount = 0;
				$.each(queries,function(){
					if(RegExp(this,'i').test(self.text))
						matchCount++;
				})
				if(matchCount == queries.length){
					this.showItem()
					this.clearHighlight(function(){
						$.each(queries,function(){
							self.highlightWord(this)
						})
					});
					count++;
				}else{
					this.hideItem();
				}
			})
			if(this.foundCounter){
				this.foundCounter.refresh(count)
			}
		},
		
		reset: function(){
			var that = this;
			$(this.itemData).each(function(){
				this.showItem();
				this.clearHighlight();
				if(that.foundCounter){
					that.foundCounter.reset();
				}
			})
		},
	
		setEvent: function(){
			var that = this;
			this.input.bind('keyup',function(){
				var val = $(this).val();
				if(val.length >= that.minChars){
					that.processQuery(val)
				}else{
					that.reset();
				}
			})
		},
	
		init: function(){
			this.makeData();
			this.setEvent();
			if(this.input.val().length >= this.minChars){
				this.processQuery(this.input.val())
			}
		}
	}
	
	/**
	 *@param obj {array}
	 **/
	IncrementalFilter.SearchedItem = function(obj,setting){
		this.useHighlight = (setting.useHighlight && $.fn.highlightText && $.fn.removeOuterTag)
		if(this.useHighlight){
			this.highlightElem = setting.highlightElem || $('<em class="highlight" />');
			this.highlightExpr = /^<(\w+)/.exec($('<div />').append(this.highlightElem).html())[1]
							   + '.'+this.highlightElem.attr('class').split(/\s/).join('.');
		}
		this.text = '';
		this.obj = [];
		for(var i=0,l=obj.length;i<l;i++){
			var temp = obj[i];
			this.obj[i] = {'elem':temp,'orgsrc':temp.html()}
			this.text += obj[i].text();
		}
	}
	
	IncrementalFilter.SearchedItem.prototype = {
		hideItem: function(){
			$(this.obj).each(function(){
				this.elem.hide();
			})
			return this;
		},
	
		showItem: function(){
			$(this.obj).each(function(){
				this.elem.show();
			})
			return this;
		},
	
		clearHighlight: function(callback){
			if(!this.useHighlight) return this;
			var that = this;
			$(this.obj).each(function(){
				$(that.highlightExpr,this.elem).removeOuterTag()
			})
			if(callback) callback();
			return this;
		},
	
		highlightWord: function(word){
			if(!this.useHighlight) return this;
			var that = this;
			var query = new RegExp(word,'gi')
			$(this.obj).each(function(){
				this.elem.highlightText(query,that.highlightElem)
			})
			return this;
		}
	}
	
	IncrementalFilter.Counter = function(setting){
		if(!setting || !setting.foundCounter) return undefined;
		this.obj = $(setting.foundCounter);
		this.foundClass = setting.foundClass || 'found';
		this.zeroClass = setting.zeroClass || 'zero';
		this.all = undefined;
		
		this.refresh = function(count){
			this.obj.html(count);
			if(!this.all){
				this.all = count;
			}
			
			if(count == 0){
				this.zero()
			}else if(count < this.all){
				this.highlight();
			}
		}
	
		this.reset = function(){
			this.refresh(this.all);
			this.obj
				.removeClass(this.foundClass)
				.removeClass(this.zeroClass)
		}
	
		this.highlight = function(){
			this.obj
				.removeClass(this.zeroClass)
				.addClass(this.foundClass)
		}
	
		this.zero = function(){
			this.obj
				.removeClass(this.foundClass)
				.addClass(this.zeroClass)
		}
		
		return this;
	}

	$.fn.incrementalFilter = function(params){
		return this.each(function(){
			if(typeof params == 'string' || params.size){
				new IncrementalFilter({input:$(this),items:params})
			}else if(typeof params == 'object'){
				params.input = $(this);
				new IncrementalFilter(params)
			}
		});
	};
})(jQuery);

/*** File "init.js" starts here. ***/

$(function(){
	$('header nav a').markCurrentLocation();
	$('form.sitesearch :text').initInput('Enter some keyword');
	$('#darth_vader').initInput('It\'s empty!')
	$('.contentBody .date, .contentBody cite').orderedFigure();
	$('article a').addFileInfo();


	if($.browser.mobile){
		iaMobileNavInit();
	}

	if($.browser.msie){
		$('.lu:first-child').addClass('first-child')
	}

})
