/*********************************************
/* Author: dev.pgmr [devendra chand]         
/* Email: deven.pgmr@gmail.com
/********************************************/
	
function nextSibling(nodeName, refNode) {
	var sibling = refNode.nextSibling;
	while(sibling) {
		if(sibling.nodeName.toLowerCase() == nodeName.toLowerCase())
			return sibling;
		sibling = sibling.nextSibling;
	}
	return null;
}

function previousSibling(nodeName, refNode) {
	var sibling = refNode.previousSibling;
	while(sibling) {
		if(sibling.nodeName.toLowerCase() == nodeName.toLowerCase())
			return sibling;
		sibling = sibling.previousSibling;
	}
	return null;
}

function parentNode(nodeName, refNode) {
	var parent = refNode.parentNode;
	while(parent) {
		if(parent.nodeName.toLowerCase() == nodeName.toLowerCase())
			return parent;
		parent = parent.parentNode;
	}
}

function ddlValue(ddl) {
	var opt = ddl.options[ddl.selectedIndex];
	return opt.value ? opt.value : opt.firstChild.nodeValue;
}

function ddlText(ddl) {
	var opt = ddl.options[ddl.selectedIndex];
	return opt.firstChild.nodeValue;
}

function popup(width, height, url)
{
    var dialog = new Dialog('', width, height, url);
	dialog.setCentered(true);
	dialog.show();
}

function addRow(btn) {
	if(btn.nodeName == 'A') {
		var div = parentNode('div', btn);
		var a = btn;
	} else if(btn.nodeName == 'INPUT') {
		var divs = nextSibling('div', btn.parentNode.parentNode).getElementsByTagName('DIV');
		var div = divs[divs.length-1];
		var a = div.getElementsByTagName('a')[0];
	}
	
	var top = div.parentNode;
	var clone = div.cloneNode(true);
	top.appendChild(clone);
	
	a.innerHTML = 'Remove';
	a.onclick = function() {
		removeRow(this);
		return false;
	}
	
	var inputs = clone.getElementsByTagName('input');
	for(var i=0,j=0; i<inputs.length; i++) {
		var input = inputs[i];
		if(input.type == 'checkbox') {
			/*var id = input.id;
			var matched = /(^[^\d]*)(\d*)$/.exec(id);
			id = matched[1] + (++matched[2]);
			input.id = id;
			
			var label = nextSibling('label', input);
			label.setAttribute('for', id);*/
			input.checked = false;
		} else if(input.type == 'text') {
			input.value = '';
			if(i == 1)
				input.focus();
		}
	}
	
	enableButtons(document.forms[0], 'remove', 'connect');
}

function removeRow(btn) {
	if(btn.nodeName == 'A') {
		var div = parentNode('div', btn);
		div.parentNode.removeChild(div);
				
		enableButtons(document.forms[0], 'remove', 'connect');
		return;
	}
	
	var divs = nextSibling('div', btn.parentNode.parentNode).getElementsByTagName('DIV');
	var div = divs[divs.length-1];
	var top = div.parentNode;
	var inputs = top.getElementsByTagName('input');
	var removeList = [];
	
	for(var i=0, j=0; i<divs.length; i++) {
		var div = divs[i];
		var input = div.getElementsByTagName('input')[0];
		if(input.type == 'checkbox') {
			if(div.getElementsByTagName('a')[0].innerHTML == 'Remove')
				input.checked ? removeList[j++] = div : null;
		}
	}
	
	disableButton(btn);
	
	for(var i=0; i<removeList.length; i++){
		var elm = removeList[i];
		elm.parentNode.removeChild(elm);
	}
	
	if(divs.length == 1) {
		divs[0].getElementsByTagName('input')[0].checked = false;
	}
}

function disableButton(btn) {
	var className = btn.className;
	if(className.indexOf('disabled') == -1)
		btn.className = className+'-disabled';
	btn.disabled=true;
}

function enableButton(btn) {
	if(btn.disabled) {
		var className = btn.className;
		var splits = className.split('-');
		splits.pop();
		btn.className = splits.join('-');
		btn.disabled=false;
	}
}

function enableButtons() {
	var form = arguments[0];
	//if(srcChk.parentNode.getElementsByTagName('a')[0].innerHTML !== 'Add') {
		var checked = isChecked(form, function(chk){return chk.parentNode.getElementsByTagName('a')[0].innerHTML !== 'Add'});
		var checkedAll = isChecked(form);
		
		if(checked)
			for(var i=1; i < arguments.length; i++)
				enableButton(form.elements[arguments[i]]);
		
		else
			for(var i=1; i < arguments.length; i++)
				disableButton(form.elements[arguments[i]]);
				
		if(checkedAll)
			enableButton(form.connect);
	//} /*else
		//srcChk.checked = false*/
}

function isChecked(form, callback){
	var isChecked = false;
	var inputs = form.getElementsByTagName('input');
	for(var i = 0; i < inputs.length; i++){
		var elem = inputs[i];
		if(elem.type == 'checkbox') {
			if(callback) {
				if(!callback(elem)) continue;
			}
			
			if(elem.checked)
				return elem;
		}
	}
	
	return isChecked;
	//masterCheckbox.checked = isCheckedAll;
}

function connectProxy(btn) {
	var chk = isChecked(btn.form);
	if(opener && chk) {
		var proxy = nextSibling('span', chk).getElementsByTagName('INPUT')[0].value || 'none';
		if(proxy != 'none') 
			proxy = proxy+':'+(nextSibling('input', chk).value||80);
		
		var action = getUrlParameter(opener.location.href, 'action');
		action = action && action.indexOf('action=') === 0 ? action.substring(action.indexOf('=')+1) : null;
		var url = removeUrlParameter(opener.location.href, 'connectDirectly');
		if(action == 'detail') { // reaload the page
			opener.location.href = changeUrlParameter(url, 'proxy', proxy);
		} else {
			var form = opener.document.forms[0];
			var form1 = opener.document.forms[1] ? opener.document.forms[1] : null;
			/*if(form1) {
				if(form1.proxy)
					form1.proxy.value = proxy;
				form1.submit();
			} else {*/
				var ddl = form.proxy;
				if(ddl) {
					ddl.options[0].selected = true;
					for(var i=0; i<ddl.options.length; i++) {
						var optVal = ddl.options[i].value ? ddl.options[i].value : ddl.options[i].firstChild.nodeValue;
						if(optVal == proxy)
							ddl.options[i].selected = true;
					}
					form.submit();
				}
			//}
		}
	}
	self.close();
}

function loopAllCheckboxes(form, callback){
	var isCheckedAll = true;
	var inputs = form.getElementsByTagName('input');
	for(var i = 0; i < inputs.length; i++){
		var elem = inputs[i];
		if(elem.type == 'checkbox') {
			if(callback) {
				if(!callback(elem)) continue;
			}
			if(!elem.checked) isCheckedAll = false;
		}
	}
	
	return isCheckedAll;
	//masterCheckbox.checked = isCheckedAll;
}

function ddlProxyOnchange(ddl, proxyFieldName, submitForm) {
	var selectedOpt = ddl.options[ddl.selectedIndex];
	var val = selectedOpt.val ? selectedOpt.val : selectedOpt.firstChild.nodeValue;
	
	if(submitForm) {
		if(document.forms[1]) {
			if(document.forms[1].elements[proxyFieldName]) 
				document.forms[1].elements[proxyFieldName].value = val;
			document.forms[1].submit();
		} else
			ddl.form.submit();
	} else {
		var url = removeUrlParameter(location.href, 'connectDirectly');
		location.href = changeUrlParameter(url, ddl.name, val);
	}
}

function updateProxyDDL(optionList, ddlId, win) {
	win = win || window;
	var ddl = win.document.getElementById(ddlId);
	if(ddl) {
		var selectedOption = ddl.options[ddl.selectedIndex];
		var selectedOptVal = selectedOption.value ? selectedOption.value : selectedOption.firstChild.nodeValue;
		var opt = ddl.options.length > 1 ? ddl.options[0] : null;
		while(opt && ddl.lastChild != opt)
			ddl.removeChild(ddl.lastChild);
				
		for(var i=0; i<optionList.length; i++) {
			var proxy = optionList[i];
			var option = ddl.appendChild(win.document.createElement('option'));
			option.appendChild(win.document.createTextNode(proxy));
			if(proxy == selectedOptVal)
				option.selected = true;
		}
	}
}

function changeUrlParameter(url, param, val)
{
	var start=url.indexOf('?'+param);
	if (start==-1) start=url.indexOf('&'+param);
	if (start==-1)
	{
		if (url.indexOf('?')==-1)
			url+='?';
		else
			url+='&';
		return url+param+'='+escape(val);
	}
	var end=url.indexOf('&',start+1);
	if (end==-1) end=url.length;
	return url.substring(0,start+1)+param+'='+escape(val)+url.substring(end,url.length);
}

function getUrlParameter(url, param)
{
	var start=url.indexOf('?'+param);
	if (start==-1) start=url.indexOf('&'+param);
	if (start==-1) return null;
	var end=url.indexOf('&',start+1);
	if (end==-1) end=url.length;
	return url.substring(start+1,end);
}

function removeUrlParameter(url, param)
{
	var start=url.indexOf('?'+param);
	if (start==-1) start=url.indexOf('&'+param);
	if (start==-1) return url;
	var end=url.indexOf('&',start+1);
	if (end==-1) end=url.length;
	return url.substring(0,start+1)+url.substring(end,url.length);
}

function createAndSubmitForm(action, method, elms){
	var form = document.body.appendChild(document.createElement('form'));
	form.action = action;
	form.method = method;
	for(var i=0; i<elms.length; i++) {
		var elm = elms[i];
		var input = document.createElement('input');
		input.type = 'hidden';
		input.name = elm.name;
		input.value = elm.value;
		form.appendChild(input);
	}
	form.submit();
}

function applyCallbackToElmGrp(name, val, callback){
	var grp = document.getElementsByName(name);
	if(grp && grp.length > 0) {
		for(var i=0; i<grp.length; i++)
			!callback || callback(grp[i], val);
	}
}

function disableAllElmsInGrpExcpt() {
	for(var j=0; j<arguments.length; j++){
		var elm = arguments[j];
		var grp = document.getElementsByName(elm.name);
		if(grp && grp.length > 0) {
			for(var i=0; i<grp.length; i++)
				if(grp[i] != elm)
					grp[i].removeAttribute('name');
		}
	}
}

function clGoPage(dir, form, elmStackName, elmName, elmVal) {
	var stack = document.getElementsByName(elmStackName);
		
	if(dir == '+') {
		var elm = document.createElement('input');
		elm.name = elmStackName;
		elm.value = elmVal;
		elm.type = 'hidden';
		form.appendChild(elm);
		
	} else if(dir == '-') {
		if(stack.length > 1) {
			var lastItem = stack[stack.length-1];
			elmVal = stack[stack.length-2].value;
		} else {
			var lastItem = stack.length > 0 ? stack[stack.length-1] : null;
			elmVal = null;
		}
		
		if(lastItem)
			lastItem.parentNode.removeChild(lastItem);
	}
	
	form.elements[elmName].value = elmVal;
	return true;
}

function makeDefaultText(txt, text, defaultClass, normalClass) {
	if(txt && txt.nodeName) {
		
		txt.userText = txt.value;
			
		txt.onfocus = function() {
			if(typeof this.userText == 'undefined' || this.userText == '') {
				this.value = '';
				
				if(defaultClass)
					unsetClass(txt, defaultClass);
				
				if(normalClass)
					setClass(txt, normalClass);
			}
		};
			
		txt.onblur = function() {
			if(typeof this.userText == 'undefined' || this.userText == '') {
				this.value = text;
				
				if(normalClass)
					unsetClass(txt, normalClass);
					
				if(defaultClass)
					setClass(txt, defaultClass);
			}
		};
		
		txt.onkeyup = function() {
			this.userText = this.value;
		}
		
		if(txt.form) {
			txt.form.onsubmit = function() {
				txt.onfocus();
			}
		}
		
		if(txt.value == '') txt.onblur();
		
	}
}

function setClass(obj, cssClass) {
	if(!obj) return;
	var classes = obj.className.split(' ');
	classes.push(cssClass);
	obj.className = classes.join(' ');
}

function unsetClass(obj, cssClass) {
	if(!obj) return;
	var classes = obj.className.split(' ');
	var newClass = '';
	for(var i=0; i<classes.length; i++) {
		if(classes[i] == cssClass) continue;
		newClass += (newClass ? ' ' : '') + classes[i];
	}
	
	obj.className = newClass ? newClass : null;
}
