var versionindex = navigator.userAgent.indexOf("Netscape") + 8;
if (navigator.userAgent.indexOf("Opera") != -1 && document.getElementById) {
	document
			.write('<link href="http://siteresources.worldbank.org/styles/op_wbi_div.css" rel="stylesheet" type="text/css">') // Opera
} else if (document.layers) {
	document
			.write('<link href="http://siteresources.worldbank.org/styles/op_wbi_div.css"  rel="stylesheet" type="text/css">') // Netscape
																																// Communicator
																																// 4
} else if (navigator.userAgent.indexOf("Netscape") != -1
		&& parseInt(navigator.userAgent.charAt(versionindex)) <= 8) {
	document
			.write('<link href="http://siteresources.worldbank.org/styles/ns_wbi_div.css"  rel="stylesheet" type="text/css">') // Below
																																// Netscape
																																// 6
} else if (!document.all && document.getElementById) {
	document
			.write('<link href="http://siteresources.worldbank.org/styles/mo_wbi_div.css"  rel="stylesheet" type="text/css">') // Mozilla
}

function clearDefault(obj, defaultText) {
	if (obj.value == defaultText) {
		obj.value = '';
		obj.className = 'txt';
	} else if (obj.value == '' || obj.value == ' ') {
		obj.value = defaultText;
		obj.className = obj.className + ' gry-txt';
	}
}

function selectAll(id, chk) {
	var tbl = document.getElementById(id);
	var chks = tbl.getElementsByTagName('INPUT');
	for ( var i = 0; i < chks.length; i++) {
		if (chks[i].type == 'checkbox') {
			chks[i].checked = chk.checked;
		}
	}
	checkMaster();
}
function checkMaster() {
	var tbl = document.getElementById('news_section');
	var chks = tbl.getElementsByTagName('INPUT');
	var masterOfMaster = document.getElementById('news_master');
	masterOfMaster.checked = true;
	for ( var i = 0; i < chks.length; i++) {
		if (chks[i].type == 'checkbox' && chks[i].id.indexOf('_sec_m')) {
			if (!chks[i].checked) {
				masterOfMaster.checked = false;
				return;
			}
		}
	}
}
function selectOrDeselectAll(id, chk) {
	var tbl;
	var chks;
	if(id.constructor == Array){
		chks = new Array();
		for(i = 0 ; i < id.length;i++){
			tbl = document.getElementById(id[i]);
			chks1 = tbl.getElementsByTagName('INPUT');
			for(k=0,j=chks.length;k<chks1.length;k++,j++){
				chks[j] = chks1[k];					
			}				
		}
	} else {
		tbl = document.getElementById(id);
		chks = tbl.getElementsByTagName('INPUT');
	}
	var itsMasterId = chk.id.substring(0, 5);
	var masterOfMaster = document.getElementById('news_master');
	var itsMaster = document.getElementById(itsMasterId + "_sec_m");
	for ( var i = 0; i < chks.length; i++) {
		if (chks[i].type == 'checkbox' && chks[i] != itsMaster) {
			if (!chks[i].checked) {
				masterOfMaster.checked = false;
				itsMaster.checked = false;
				return;
			}
		}
	}
	itsMaster.checked = true;
	checkMaster();
}

var sortableTable = function(tbl, cols) { // cols an array containing col numbers to sort on. eg: [0,1,4, ...]
	this.table = document.getElementById(tbl);
	this.Scols = cols;
	this.sortOrder = 0;// sort order -- 0-ascending , 1- descending
	this.currentIndex = null;
	this.tempArr = [];
	this.curColArr = [];
	this.init = function() {
		var headerRow = this.table.rows[0];
		var headerCols = headerRow.cells;
		for ( var i = 0; i < headerCols.length; i++) {
			for ( var j = 0; j < this.Scols.length; j++) {
				if (this.Scols[j] == i) {
					this.makeSortHeads(headerCols[i], i);
				}
			}
		}
	}
	this.makeSortHeads = function(headCell, index) {
		var oThis = this;
		var sortImg = document.createElement('IMG');
		sortImg.src = 'images/up-arrow.gif';
		sortImg.order = 'asc';
		sortImg.style.paddingLeft = 2 + 'px';
		sortImg.style.paddingBottom = 3 + 'px';
		sortImg.style.cursor = 'pointer';
		sortImg.onclick = function() {
			oThis.prepareForSort(this, index)
		}
		headCell.appendChild(sortImg);
	}
	this.getSortType = function() {
		var dataType = 'string';
		var prevDataType = null;
		for ( var i = 0; i < this.tempArr.length; i++) {
			var isDate = new Date(this.tempArr[i]);
			if (isDate == "Invalid Date" || isDate == "NaN") {
				if (isNaN(this.tempArr[i])) {
					dataType = 'string';
				} else {
					this.tempArr[i] = parseInt(this.tempArr[i]);
					dataType = 'number';
				}
			} else {
				this.tempArr[i] = Date.parse(isDate);
				dataType = 'date';
			}
			if (prevDataType == null) {
				prevDataType = dataType;
			}
			if (prevDataType != dataType) {
				dataType = 'string';
				return dataType;
			}
		}
		return dataType;
	}

	this.copyColData = function(colIndex) {
		for ( var i = 2; i < this.table.rows.length; i++) {
			this.curColArr[i - 2] = this.tempArr[i - 2] = this
					.getData(this.table.rows[i].cells[colIndex].innerHTML);
		}
	}

	this.prepareForSort = function(imgObj, colIndex) { //TODO:// optimization
		// if(this.currentIndex != colIndex){
		this.copyColData(colIndex);
		this.currentIndex = colIndex;
		this.sortData();
		// }else{
		// this.tempArr.reverse();
		if (imgObj.order == 'asc') {
			imgObj.src = "images/down-arrow.gif";
			imgObj.order = 'dsc';
		} else {
			imgObj.src = "images/up-arrow.gif";
			imgObj.order = 'asc';
			this.tempArr.reverse();
		}
		//}
		this.reArrangeTable();
	}
	this.moveRow = function(newIndex, oldIndex) {
		var tempData = this.table.rows[oldIndex];
		var cls = (newIndex % 2 == 0) ? '' : 'BgGrey';
		var newRow = this.table.insertRow(newIndex);
		newRow.className = cls;
		for ( var i = 0; i < tempData.cells.length; i++) {
			var td = newRow.insertCell(-1);
			td.width = tempData.cells[i].width;
			td.className = tempData.cells[i].className;
			td.innerHTML = tempData.cells[i].innerHTML;
		}
		this.table.deleteRow(oldIndex + 1);
	}
	this.reArrangeTable = function() {
		for ( var i = 0; i < this.tempArr.length; i++) {
			for ( var j = 0; j < this.curColArr.length; j++) {
				if (this.sortType == 'date') {
					var valueToSort = Date.parse(new Date(this.curColArr[j]));
				} else if (this.sortType == 'number') {
					var valueToSort = parseInt(this.curColArr[j]);
				} else {
					var valueToSort = this.curColArr[j];
				}
				if (this.tempArr[i] == valueToSort) {
					this.moveRow(i + 2, i + j + 2);
					this.curColArr.splice(j, 1)
					break;
				}
			}
		}
	}
	this.sortData = function() {
		this.sortType = this.getSortType();
		if (this.sortType == 'date' || this.sortType == 'number') {
			this.sortOnNumber();
		} else if (this.sortType == 'string') {
			this.sortOnString();
		}
	}
	this.sortOnNumber = function() {
		this.tempArr.sort( function(a, b) {
			return a - b;
		})
	}
	this.sortOnString = function() {
		this.tempArr.sort();
	}
	this.getData = function(rawData) {
		var re = /<(.|\n)*?>/;
		return rawData.replace(re, '');
	}
	this.init();
}

function moveoutid(oudId, InId, dir) {
	if (dir == 'right') {
		var sda = document.getElementById(oudId);
		var sda1 = document.getElementById(InId);
	} else if (dir == 'left') {
		var sda1 = document.getElementById(oudId);
		var sda = document.getElementById(InId);
	}
	var len = sda.length;
	if (sda.selectedIndex == -1) {
		alert("Select an Item to Add");
		return;
	}

	for ( var j = 0; j < len; j++) {
		if (sda.selectedIndex == j) {
			if (sda.options[j].text == 'All') { // move all items
				for ( var k = 0; k < len; k++) {
					var tmp = sda.options[0].text;
					var tmp1 = sda.options[0].value;
					sda.remove(0);
					var y = document.createElement('option');
					y.text = tmp;
					y.value = tmp;
					try {
						sda1.add(y, null);
					} catch (ex) {
						sda1.add(y);
					}
				}
				return;
			}
			var tmp = sda.options[j].text;
			var tmp1 = sda.options[j].value;
			sda.remove(j);
			j--;
			var y = document.createElement('option');
			y.text = tmp;
			y.value = tmp;
			try {
				sda1.add(y, null);
			} catch (ex) {
				sda1.add(y);
			}
		}
	}
}

function validateEmail(email) {

	if (email.length <= 0) {
		return true;
	}
	
	var splitted = email.match("^(.+)@(.+)$");
	if (splitted == null)
		return false;
	
	if (splitted[1] != null) {
		var regexp_user = /^\"?[\w-_\.]*\"?$/;
		if (splitted[1].match(regexp_user) == null)
			return false;
	}
	
	if (splitted[2] != null) {
		var regexp_domain = /^[\w-\.]*\.[A-Za-z]{2,4}$/;
		if (splitted[2].match(regexp_domain) == null) {
			var regexp_ip = /^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
			if (splitted[2].match(regexp_ip) == null)
				return false;
		}
		return true;
	}
	
	return false;
}

function validateQsubscribe() {	
	var objUserEmailid = document.qsubscribe.emailid;
	
	strError = "Enter a valid Email address ";
	
	if ( objUserEmailid.value == "") {
		alert("Please enter an Email address");
		objUserEmailid.focus();
		return false;

	} else if (!validateEmail(objUserEmailid.value)) {
		alert(strError);

		objUserEmailid.focus();
		objUserEmailid.select();
		return false;
	}

	str = new String(objUserEmailid.value);
	atPos = str.indexOf("@");
	dotPos = str.indexOf(".");
	
	if (str.substring(atPos + 1, dotPos + 1) == ".") {		
		alert(strError);
		return false;
	}
	
	//document.qsubscribe.REQ_TYPE.value = "QUICK_USER";
	//document.qsubscribe.action = document.qsubscribe.QUICK_USER.value;
	// document.Quick.submit();
}

/**
 * Check if atleast one newsletter list checkbox is selected.
 * tab - represents tabnames in UI. 
 * @return true, if atleast one list is selected else false.
 */
function validateSubscription(tab)	{
	var tbl = document.getElementById('news_section');
	var chks = tbl.getElementsByTagName('INPUT');

	var atleastOneChecked = false;
	for ( var i = 0; i < chks.length; i++) {
		if (chks[i].type == 'checkbox' && chks[i].id.indexOf('_sec_m')) {
			if (chks[i].checked) {
				atleastOneChecked = true;
				break;
			}
		}
	}
	
	// Display message if all the subscription needs to be unsubscribed.
	if(atleastOneChecked == false)	{
		if(tab == 'bkalerts'){
			atleastOneChecked =  confirm("Do you want to unsubscribe from 'Book alerts' newsletters?");
		}else{
			atleastOneChecked =  confirm("Do you want to unsubscribe all the newsletters?");
		}
	}
	
	return atleastOneChecked;
}


// Draws a popup as a layer on the HTML document. 
// parameter : id - Id of the element to be made visible. 
  
function showDiv (id){
	var objModal= document.getElementById(id);
	objModal.style.display='block';
	if (self.innerHeight){
		x = self.innerWidth;
		y = self.innerHeight;
	}else if (document.documentElement && document.documentElement.clientHeight){
		x = document.documentElement.clientWidth;
		y = document.documentElement.clientHeight;
	}else if (document.body){
		x = document.body.clientWidth;
		y = document.body.clientHeight;
	}
	pleft = parseInt(x/2 - objModal.offsetWidth/2 + document.body.scrollLeft);
	ptop = parseInt(y/2 - objModal.offsetHeight/2 + document.body.scrollTop);
	objModal.style.left = pleft;
	objModal.style.top = ptop;
}

function hideDiv (id){
	document.getElementById(id).style.display='none';
}
