
/* StatCounter QuirksBlog code. Overwrites generic QuirksMode code. */

var sc_project=6281700; 
var sc_invisible=1; 
var sc_security="f2a65980";

/* SPECIAL BLOG SCRIPTS */

var floaterPointer;


function initBlogs() {
	var x = document.getElementsByTagName('div');
	var counter = -1;
	for (var i=0;i<x.length;i++) {
		if (!floaterPointer && x[i].className == 'floater' && x[i].id != 'right') {
			floaterPointer = x[i];
		}
		if (x[i].className == 'entry' || x[i].className == 'comment') counter++;
		else continue;
		if (counter % 2 == 1)
			x[i].className += ' odd';
	}
	if (floaterPointer) {
		var header = document.getElementById('header');
		header.parentNode.insertBefore(floaterPointer,header);	
	}
	
	if (self.setIntro)
		setIntro();
	if (self.initFormValidation)
		initFormValidation();
	if (self.initPolitics)
		initPolitics();
		
	checkRememberCookie();
//	setMaxLength();
	var tb = document.getElementsByTagName('table');
	for (var i=0;i<tb.length;i+=1) {
		if (tb[i].className.indexOf('browserStats') === 0) {
			sortableTable(tb[i]);
		}
	}
	var lb = document.getElementsByTagName('ul');
	for (var i=0;i<lb.length;i+=1) {
		if (lb[i].className.indexOf('linkbait') === 0) {
			setPermalinks(lb[i]);
		}
	}
}

function exitBlogs() {
	setRememberCookie();
}

var fields = ['author','email','url'];

function checkRememberCookie() {
	var x = document.getElementById('remember');
	if (!x) return;
	var y = Cookies.bugReport;
	if (!y) return;
	var values = y.split(',,');
	for (var i=0;i<fields.length;i++) {
		if (values[i] && values[i] != 'none')
			x.form.elements[fields[i]].value = values[i];
	}
	x.checked = true;
}

function setRememberCookie() {
	var x = document.getElementById('remember');
	if (!x) return;
	if (!x.checked) {
		Cookies.erase('bugReport');
		return;
	}
	var form = x.form;
	var cookieString = '';
	for (var i=0;i<fields.length;i++) {
		var val = form.elements[fields[i]].value;
		if (val)
			cookieString += val+',,';
		else
			cookieString += 'none,,';
	}
	Cookies.create('bugReport',cookieString,60);
}

function setMaxLength() {
	var x = document.getElementsByTagName('textarea');
	var counter = document.createElement('div');
	counter.className = 'counter';
	for (var i=0;i<x.length;i++) 	{
		if (x[i].getAttribute('maxlength')) {
			var counterClone = counter.cloneNode(true);
			counterClone.innerHTML = '<span>0</span>/'+x[i].getAttribute('maxlength');
			x[i].parentNode.insertBefore(counterClone,x[i].nextSibling);
			x[i].relatedElement = counterClone.getElementsByTagName('span')[0];

			x[i].onkeyup = x[i].onchange = checkMaxLength;
			x[i].onkeyup();
		}
	}
}

function checkMaxLength() {
	var maxLength = this.getAttribute('maxlength');
	var currentLength = this.value.length;
	if (currentLength > maxLength)
		this.relatedElement.className = 'toomuch';
	else
		this.relatedElement.className = '';	
	this.relatedElement.firstChild.nodeValue = currentLength;
	// not innerHTML
}

function setPermalinks(list) {
	if (list.querySelectorAll) {
		var items = list.querySelectorAll('ul.linkbait > li');
		var link = document.createElement('a'),
		  name,
		  clone;
		link.className = 'permaLinkbait';
		link.title = 'Permalink';
		link.innerHTML = ' &para;';
		for (var i=0;i<items.length-1;i+=1) {
			name = 'item'+(i+1);
			items[i].id = name;
			clone = link.cloneNode(true);
			clone.href="#"+name;
			items[i].appendChild(clone);
		}
	}
}

function sortableTable(table) {
	var initialised = false,
		sortArrays = [],
		noClick = [],
		instructions = [],
		headers = table.getElementsByTagName('th'),
		caption = table.caption,
		tbody = table.tBodies[0],
		foldedIn = false;

	caption.onclick = function () {
		if (!foldedIn) {
			table.className += ' folded';
		} else {
			table.className = table.className.replace(/ folded/,''); 
		}
		foldedIn = !foldedIn;
	}

	for (var i=0;i<headers.length;i+=1) {
		instructions[i] = {};
		if (headers[i].getAttribute('data-instructions')) {
			var instr = headers[i].getAttribute('data-instructions').split(' ');
			for (var j=0;j<instr.length;j+=1) {
				instructions[i][instr[j]] =true;
			}
		}
		if (headers[i].className === 'remarks') { // backward compatibility
			instructions[i].none = true;
		}
		headers[i].number = i;
		if (!instructions[i].none) {
			headers[i].onclick = sort;
			headers[i].className += ' clickable';
		}
	}

	function initTable() {
		var rows = table.getElementsByTagName('tr');
		for (var i=0,row;row=rows[i];i+=1) {
			if (row.className === 'separator') {
				break;
			}
			var cells = row.getElementsByTagName('td');
			for (var j=0,cell;cell=cells[j];j+=1) {
				var content = cell.textContent || cell.innerText;
				if (!content) {
					noClick[j] = true;
				} else {
					content = content.replace('+','');
					content = content.replace('%','');
					content = content.replace(',','');
					var asNumber = parseFloat(content);
					if (content === '-') {
						content = -Infinity;
					} else if (!isNaN(asNumber)) {
						content = asNumber*1;					
					} else if (cell.className === 'infinity') {
						content = Infinity;
					} else if (content.length < 2) {
						content = 0;
					} else {
						content = content.toLowerCase();
					}
					var obj = {};
					obj.content = content;
					obj.row = row;
					obj.cell = cell;
					if (!sortArrays[j]) {
						sortArrays[j] = [];
					}
					sortArrays[j].push(obj);
				}
			}
		}
		for (var i=0;i<sortArrays.length;i+=1) {
			if (sortArrays[i]) {
				sortArrays[i].sort(function (a,b) {
					return (a.content < b.content)*2 - 1;
				});
				if (typeof sortArrays[i][0].content === 'number') {
					sortArrays[i].reverse();
				}
			}
		}
	}

	var cleanUp = {
		add: function (fn) {
			this.list[this.list.length] = fn;
		},
		list: [],
		clean: function () {
			for (var i=0;i<this.list.length;i+=1) {
				this.list[i]();
			}
			this.list.length = 0;
		}
	}
	
	function sort() {
		if (!initialised) {
			initTable();
			initialised = true;
		}
		cleanUp.clean();
		var number = this.number;
		var correctArray = sortArrays[number],
			insertPoint = this.parentNode;
		for (var i=0;i<correctArray.length;i+=1) {
			insertPoint.parentNode.insertBefore(correctArray[i].row,insertPoint.nextSibling);	
		}
		var instr = instructions[number];
		for (var i in instr) {
			var action=actions[i];
			if (action) {
				action(number);
			}
		}
		var that = this;
		var oldClass = this.className;
		this.className += ' clicked';
		cleanUp.add(function () {
				that.className = oldClass;
		});
	}
	
	var actions = {
		'merge': function (number) {
			var rows = table.getElementsByTagName('tr'),
				tgtCell,
				compareContent = '',
				numberOfRows=0;
			for (var i=0;i<sortArrays[number].length;i+=1) {
				var cell = sortArrays[number][i].cell;
				cell.style.display = 'none';
				var content = cell.textContent || cell.innerHTML;
				if (i > 0 && content !== compareContent) {
					makeMergedCell(tgtCell);
					numberOfRows = 0;
					compareContent = content;
				}
				tgtCell = cell;
				numberOfRows += 1;
			}
			makeMergedCell(tgtCell);
			cleanUp.add(function () {
				for (var i=0;i<sortArrays[number].length;i+=1) {
					var cell = sortArrays[number][i].cell;
					cell.style.display = '';
					cell.rowSpan = 1;
					cell.className = '';
				}
			});
			
			function makeMergedCell(cell) {
					cell.style.display = '';
					cell.rowSpan = numberOfRows;
					cell.className += ' merged';
			}
		}
	}
}

var browserData = {
	"Opera": {
		"type": "various",
		"engine": "Presto",
		"vendor": "Opera",
	},
	"Firefox": {
		"type": "full",
		"engine": "Gecko",
		"vendor": "Mozilla",
	},
	"IE": {
		"type": "full",
		"engine": "Trident",
		"vendor": "Microsoft",
	},
	"Chrome": {
		"type": "full",
		"engine": "WebKit",
		"vendor": "Google",
	},
	"Opera desktop": {
		"type": "full",
		"engine": "Presto",
		"vendor": "Opera",
	},
	"Nokia": {
		"type": "full",
		"engine": "WebKit",
		"vendor": "Nokia",
	},
	"Safari desktop": {
		"type": "full",
		"engine": "WebKit",
		"vendor": "Apple",
	},
	"Safari": {
		"type": "full",
		"engine": "WebKit",
		"vendor": "Apple",
	},
	"Bolt": {
		"type": "proxy",
		"engine": "WebKit",
		"vendor": "Bitstream",
	},
	"Others": {
		"type": "various",
		"engine": "various",
		"vendor": "various",
	},
	"Android": {
		"type": "full",
		"engine": "WebKit",
		"vendor": "Google",
	},
	"BlackBerry": {
		"type": "full",
		"engine": "Mango",
		"vendor": "RIM",
	},
	"NetFront": {
		"type": "full",
		"engine": "NetFront",
		"vendor": "Access",
	},
	"Obigo": {
		"type": "full",
		"engine": "Obigo",
		"vendor": "Obigo",
	},
	"Jasmine": {
		"type": "full",
		"engine": "NetFront",
		"vendor": "Samsung",
	},
	"Dolfin": {
		"type": "full",
		"engine": "WebKit",
		"vendor": "Samsung",
	},
	"UC": {
		"type": "proxy",
		"engine": "UC",
		"vendor": "UC",
	},
}


