var callback;

function doalert(msg) {
	document.getElementById('da_msg').innerHTML = msg.replace(/\n/g, '<br />');
	tb_show('', '#TB_inline?height=300&width=400&modal=true&inlineId=jq_alert', null);
}

function doconfirm(msg, fnc) {
	callback = fnc;
	document.getElementById('dc_msg').innerHTML = msg.replace(/\n/g, '<br />');
	tb_show('', '#TB_inline?height=300&width=400&modal=true&inlineId=jq_confirm', null);
}

function handle_ok() {
	tb_remove();
	eval(callback);
}

function clearEndCommas(str) {
	for (var i=str.length-1; ((str.charAt(i)<=",") && (str.charAt(i)!="")); i--);
	return str.substring(0,i+1);
}

// clear things out for another run
function initSubmission(btn) {
	bCheckout = (btn.name == 'Checkout');
	document.getElementById('OrderResults').innerHTML = '';
	document.getElementById('OrderStatus').style.display = '';
}

// post form using dojo
function processForm(domainList) {
	document.frmBulkSubmit.DomainList.value = domainList;

	var params = new Object();
	params.load = processFormComplete;		// This function will be called back on completion
	params.error = processFormError;		// This function will be called on HTTP errors
	params.mimeType = "text/plain";			// MIME type of what you will get back.
	params.backButton = processBackButton;
	params.forwardButton = processForwardButton;

	// This is the form to be posted. Dojo will look at the attributes of the form
	// and use the action as the URL to send the request to and do it via the
	// method attribute.
	params.formNode = document.frmBulkSubmit;

	dojo.io.bind(params);
}

function processBackButton() {
	document.getElementById("idDivInput").style.display = "";
	document.getElementById("idDivOutput").style.display = "none";
}

function processForwardButton() {
	document.getElementById("idDivInput").style.display = "none";
	document.getElementById("idDivOutput").style.display = "";
}

function processFormError(type, error, http) {
	var sHTML = '<b class="textErr">' + error.message + '</b><br />';
	document.getElementById('OrderResults').innerHTML += sHTML;

	sHTML = 'Orders Processed: ' + (++nBatchesReturned) + ' of ' + nTotalBatches + '.';
	document.getElementById('OrderStatusMsg').innerHTML = sHTML;
}

function isblank(s) {
	for (var i=0; i<s.length; i++)
	{
		var c = s.charAt(i);
		if ((c != ' ') && (c != '\n') && (c != '\t') && (c != '\n')) return false;
	}
	return true;
}

function fixDomainList(hasDups) {
	var f = document.frmBulkInput;
	var validList = new Array();

	var domainList = f.DomainList.value;
	var domains = new Array();
	var domainCt;

	if (domainList.indexOf('\r\n') > -1) { domainList = domainList.replace(/\r\n/g, ','); }
	if (domainList.indexOf('\n') > -1) { domainList = domainList.replace(/\n/g, ','); }
	if (domainList.indexOf(' ') > -1) { domainList = domainList.replace(/ /g, ','); }
	domainList = clearEndCommas(domainList);
	domains = domainList.split(',');
	domainCt = domains.length;

	for (var i=0; i<domainCt; i++)
	{
		var sld = getSld(domains[i]);
		var tld = getTld(domains[i]);

		if (isSupportedTLD(tld) && isValidDomain(sld))
			validList.push(domains[i]);
	}

	if (hasDups)
		validList = removeDups(validList);

	f.DomainList.value = validList.join(',');
	if (verify(f)) f.submit();
}

function removeDups(domains) {
	var newList = new Array();
	var domainCt = domains.length;

	for (var i=0; i<domainCt; i++) {
		var found = false;
		for (var j=0; j<newList.length; j++) {
			if (domains[i] == domains[j]) {
				found = true;
				break;
			}
		}
		if (!found) newList.push(domains[i]);
	}

	return newList;
}

function doPurchase() {
	initSubmission(document.getElementById('btnCheckout'));
	document.frmBulkInput.submit();
}

function isValidDomain(sld) {
	// Invalid characters
	var isNot = '`~!@#$%^&*() _=+{}[]|\\;:\'"/?>,<.';

	// Check for blank SLD
	if (sld.length < 1)
		return false;

	// Look for invalid characters
	for (var i=0; i<sld.length; i++)
		if (isNot.indexOf(sld.charAt(i)) > -1)
			return false;

	// Make sure its not too long
	if (sld.length > 255)
		return false;

	// Check for leading or ending dash
	if (sld.charAt(0) == "-" || sld.charAt(sld.length-1) == "-")
	 	return false;

	return true;
}

function getTld(domain) {
	var dotPos = domain.indexOf(".");
	return (dotPos < 0) ? '' : domain.substr(dotPos+1);
}

function getSld(domain) {
	var dotPos = domain.indexOf(".");
	return (dotPos < 0) ? domain : domain.substr(0, dotPos);
}

function getParam(param, data) {
	paramregexp = new RegExp('(\\s|^)' + param + '=([^\\s].*?)((\\s[^\\s]+=)|$)');
	var results = paramregexp.exec(data);
	return (results != null && results.length > 1) ? results[2] : "";
}

function formatCurrency(num) {
	num = Math.floor(num*100+0.50000000001);
	var cents = num%100;
	num = Math.floor(num/100).toString();
	if (cents<10)
		cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
		num = num.substring(0,num.length-(4*i+3))+','+num.substring(num.length-(4*i+3));
	return ('$' + num + '.' + cents);
}

function strTrim(str) {
	while (str.substring(0,1) == ' ')
		str = str.substring(1, str.length);
	while (str.substring(str.length-1, str.length) == ' ')
		str = str.substring(0,str.length-1);
	return str;
}