function init() {
	var xmlhttp=false;
	/*@cc_on @*/
	/*@if (@_jscript_version >= 5) {
	// JScript gives us Conditional compilation, we can cope with old IE versions.
	// and security blocked creation of the objects.
		try {
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (E) {
				xmlhttp = false;
			}
		}
	}
	@end @*/
	if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
		xmlhttp = new XMLHttpRequest();
	}

	return xmlhttp;
}

function toggleSearch(type, forward) {
	type = (type ? type : "simple");
	var searchbox = document.getElementById('search-bar');
	var link = document.getElementById('search-advanced');
	var select = document.getElementById('search-select');
	var searchlink = document.getElementById('search-link');         
	forward = (forward ? forward : false);

	if (forward)
		document.getElementById('search-forward').value = forward;
	
	if (searchbox.style.display == 'none' || forward) {
		// set session var to keep search box open until closed
		request("a-main.php?searchBox=open", false, false);

		animatedcollapse.show('search-bar');
		select.style.display='none';
		link.style.display='';
		searchlink.className='search-minus';
	}
	else if (type == "simple") {
		// set session var to keep search box closed until opened
		request("a-main.php?searchBox=closed", false, false);
		
		animatedcollapse.hide('search-bar');
		searchlink.className='search';
	}
	
	
	if (type != "simple") {
		// Set the advanced search settings
		toggleAdvancedSearch(true, type);
	}

	return false;
}

function toggleAdvancedSearch(defaultFocus, type) {
	defaultFocus = (defaultFocus ? true : false);
	type = (type ? type : "smart");
	var select = document.getElementById('search-select');
	var link = document.getElementById('search-advanced');
	
	if (select.style.display == 'none') {
		select.style.display='';
		link.style.display='none';
		
		if (!defaultFocus)
		document.getElementById('global_search').focus();
		
		// Select the desired advanced search option
		for (var i=0; i<select.options.length; i++) {
			if (select.options[i].value == type) {
				select.options[i].selected;
				select.options[i].defaultSelected = true;
				select.selectedIndex = i;
				break;
			}
		}
	}
	else {
		document.getElementById('global_search').focus();
		//select.style.display='none';
	}
	return false;
}

function toggleQuickLink(uri, id) {
	var xmlhttp=init();
	xmlhttp.open('POST', "a-main.php?toggleBookmark=true", true);
	xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	
	xmlhttp.onreadystatechange = function() {
		if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
			var bookmarked = document.getElementById(id);
			if (bookmarked.className == "bookmark off")
			bookmarked.className = "bookmark on";
			else
			bookmarked.className = "bookmark off";
		}
	};
	
	xmlhttp.send("uri=" + escape(uri) + "&name=" + escape(document.title));
}

function editQuickLink(uri, name, id) {
	var element = document.getElementById(id);
	var ql_name = document.getElementById(name);
	element.innerHTML = "<input type=\"text\" id=\"editquicklink\" name=\"quicklink[" + uri + "]\" value=\"" + ql_name.value + "\" onblur=\"uneditQuickLink('" + uri + "', '" +  name + "', '" +  id + "');\" />";
	document.getElementById('editquicklink').focus();
}

function uneditQuickLink(uri, name, id) {
	var element = document.getElementById(id);
	var ql_name = document.getElementById(name);
	ql_name.value = document.getElementById('editquicklink').value;
	
	var xmlhttp=init();
	xmlhttp.open('POST', "a-main.php?renameBookmark=true", true);
	xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	
	xmlhttp.onreadystatechange = function() {
		if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
			ql_name.value = xmlhttp.responseText;
			element.innerHTML = "<a href=\"" + uri + "\">" + ql_name.value + "</a>";
		}
	};
	
	xmlhttp.send("uri=" + escape(uri) + "&name=" + escape(ql_name.value)); 
}

function sendField(uri, field, response, error, hide_on_success) {
	var xmlhttp=init();
	field = document.getElementById(field);
	response = document.getElementById(response);
	error = document.getElementById(error);
	error.style.display = "none";
	
	xmlhttp.open('POST', uri, true);
	xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

	xmlhttp.onreadystatechange = function() {
		if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
			field.value = "";
			if (xmlhttp.responseText == "403")
				error.style.display = "inline";
			else {
				response.value = xmlhttp.responseText;
				document.getElementById(hide_on_success).style.display = "none";
			}
		}
	};
	
	xmlhttp.send(encodeURIComponent(field.name) + "=" + encodeURIComponent(field.value));	
}

function request(uri, callback, param) {
	var xmlhttp=init();
	callback = (callback ? callback : false);
	
	xmlhttp.open('GET', uri, true);
	xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

	xmlhttp.onreadystatechange = function() {
		if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
			if (callback)
				callback(param, xmlhttp.responseText);
		}
	};
	
	xmlhttp.send(null);
}

// Remove the a row dynamically after processing an ajax request
function removeOnRequest(uri, id) {
	request(uri, 
		function(id, response) {
			document.getElementById(id).style.display = 'none';
		}, id
	);
}

function changeUserStatus(uri, bar_id, text_id, value_id) {
	request(uri, 
		function(params, response) {
		bar_id = params[0];
		text_id = params[1];
		value_id = params[2]
		
		nextval = parseInt(document.getElementById(value_id).value)+1;
		nextval = (nextval%3);                      
		document.getElementById(value_id).value = nextval;
		
		switch (nextval) {
			case 0:
				document.getElementById(bar_id).className = "inactive";
				break;
			case 1:
				document.getElementById(bar_id).className = "active";
				break;
			case 2:
				document.getElementById(bar_id).className = "fraud";
				break;
		}
		
		document.getElementById(text_id).innerHTML = response;
		}, new Array(bar_id, text_id, value_id)
	);
}

function changeUserField(uri, text_id, outter_id, outter_value, outter_class) {
	request(uri,
		function (params, response) {
			text_id = params[0];
			outter_id = params[1];
			outter_value = params[2]
			outter_class = params[3].split(",");
		
			document.getElementById(text_id).innerHTML = response;
		
			if (outter_id.length > 0) {
				var nextval = (parseInt(document.getElementById(outter_value).value)+1)%outter_class.length;
				 document.getElementById(outter_value).value = nextval;
				 
				document.getElementById(outter_id).className = outter_class[nextval];
			}
		
		}, new Array(text_id, outter_id, outter_value, outter_class)
	);
}


// Implement the page nav for a given template
function nav(uri, type, page, status, orderby, order) {
	var xmlhttp=init();
	var ord = (orderby ? "&orderby=" + orderby + "&order=" + order : false);
	
	var element = document.getElementById(type);
	
	xmlhttp.open('GET', uri + '&ajax=' + type + '&p=' + page + (status ? '&type=' + status : '') + (ord ? ord : ""), true);
	xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	
	xmlhttp.onreadystatechange = function() {
		if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
			element.innerHTML = xmlhttp.responseText;
		}
	};
	
	xmlhttp.send(null);
}

function modifyLineItem(path, line, type) {
	var xmlhttp=init();
	
	var element = document.getElementById("swapspace");
	
	xmlhttp.open('POST', path + '&ajax=true&' + (type == 'remove' ? 'removeline' : 'newline') + '=' + line, true);
	xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	
	xmlhttp.onreadystatechange = function() {
		if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
			element.innerHTML = xmlhttp.responseText;
			
			$('#dateb').datePicker({startDate:'1996-01-01'});
			$('#dated').datePicker({startDate:'1996-01-01'});
		}
	
	};
	
	line = document.getElementsByName('line[]');
	var lines = "";
	for (var i=0; i<line.length; i++)
		lines += "line[" + i + "]=" + escape(line[i].value) + "&";
	
	var amount = document.getElementsByName('amount[]');
	var amounts = "";
	for (var i=0; i<amount.length; i++)
		amounts += "amount[" + i + "]=" + escape(amount[i].value) + "&";
	
	var service = document.getElementsByName('sid[]');
	var services = "";
	for (var i=0; i<service.length; i++)
		services += "sid[" + i + "]=" + service[i].value + "&";
	
	var taxable = document.getElementsByName('taxable[]');
	var taxables = "";
	for (var i=0; i<taxable.length; i++)
		taxables += "taxable[" + i + "]=" + (taxable[i].checked ? taxable[i].value : "false") + "&";
	
	var currency = "";
	if (document.getElementById('currency'))
		currency = "currency=" + document.getElementById('currency').value + "&";

	xmlhttp.send(lines + amounts + services + taxables + currency +
	"deliver=" + (document.getElementById('deliver').checked ? "true" : "false") + "&" +
	"dateb=" + document.getElementById('dateb').value + "&" +
	"dated=" + document.getElementById('dated').value + "&" +
	"notes=" + escape(document.getElementById('private_notes').value) + "&" +
	"public_notes=" + escape(document.getElementById('public_notes').value)
	);
}

function expandRow(file, param, value, outer) {
	var xmlhttp=init();
	
	var element = document.getElementById(param + value);
	
	// Collapse the row
	if (element.innerHTML.length > 0) {
		element.innerHTML = "";
		// Set the row style back to collapsed
		document.getElementById(outer + value).style.display='none';
		document.getElementById(outer + value).className='expandedable';
		return;
	}
	
	
	// Expand the row
	xmlhttp.open('GET', file + '&ajax=' + param + '&rid=' + value, true);
	
	xmlhttp.onreadystatechange = function() {
		if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
			element.innerHTML = xmlhttp.responseText;
			// Set the row style back to collapsed
			document.getElementById(outer + value).style.display='';
			document.getElementById(outer + value).className='expanded';
		}
	};
	
	xmlhttp.send(null);
}

function sendemail(path, i) {
	if (i==0) {
		var who = document.getElementsByName('who');
		
		for (var j=0; j<who.length; j++)
			who[j].disabled = true;
		document.getElementById('acctype').disabled = true;
		document.getElementById('testmode').disabled = true;
		document.getElementById('from').disabled = true;
		document.getElementById('subject').disabled = true;
		document.getElementById('message').disabled = true;
		document.getElementById('send').disabled = true;
		document.getElementById('packages').disabled = true;
		document.getElementsByName('packs').disabled = true;
	}
	
	var xmlhttp=init();
	
	xmlhttp.open('POST', path + '?&ajax=email&', true);
	xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	
	xmlhttp.onreadystatechange = function() {
		if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
			document.getElementById("output").innerHTML = xmlhttp.responseText + document.getElementById("output").innerHTML;
			
			// Recurssively send mail
			if (xmlhttp.responseText != "Done.<br />" && xmlhttp.responseText.substr(0, 3) != "<a ")
			   sendemail(path, ++i);
			else {
				var who = document.getElementsByName('who');
				for (var j=0; j<who.length; j++)
					who[j].disabled = false;
				document.getElementById('acctype').disabled = false;
				document.getElementById('testmode').disabled = false;
				document.getElementById('from').disabled = false;
				document.getElementById('subject').disabled = false;
				document.getElementById('message').disabled = false;
				document.getElementById('packages').disabled = false;
				document.getElementsByName('packs').disabled = false;
				
				if (xmlhttp.responseText == "Done.<br />")
					document.getElementById('send').disabled = false;
				
				document.getElementById('batch').value += i;
			}
		}
	};
	
	var packs = document.getElementsByName('packs');
	pack = "";
	for (var k=0; k<packs.length; k++) {
		if (packs[k].checked) {
			pack = packs[k].value;
			break;
		}
	}
	
	var packages = "";
	if (pack == "only") {
		var pkg = document.getElementById('packages');
		for (var k=0, j=0; k<pkg.length; k++) {
			if (pkg.options[k].selected)
				packages += "packages[" + (j++) + "]=" + pkg.options[k].value + "&";
		}
	}
	
	xmlhttp.send("i=" + i + "&" + "who=" + getradiovalue(document.getElementsByName('who')) + "&" +
	"acctype=" + document.getElementById('acctype').value + "&" +
	"testmode=" + (document.getElementById('testmode').checked ? "true" : "false") + "&" +
	"from=" + document.getElementById('from').value + "&" +
	"subject=" + escape(document.getElementById('subject').value) + "&" +
	"message=" + escape(document.getElementById('message').value) + "&" +
	"packs=" + pack + "&" + packages);

}


function getradiovalue(element) {
	for (var i=0; i<element.length; i++)
		if (element[i].checked)
			return element[i].value;
}
