var commonIds = new Array('quickItem','completeItem');
var winLoaded = false;
var clientId = Math.round(1000*Math.random());
var errorCount = 0;
var asyncCallCount = 0;
var selectedItems;
var selectedItemKeys;
var serverCallDone = true;

//method for initializing page
function init() {
	DWRUtil.useLoadingMessageQQ();

	//select complete package if not selected
	if(!$("quickItemPackageType").checked && !$("completeItemPackageType").checked) {
		$("completeItemPackageType").checked = true;
	}

	getItems();
}

//method for showing/hiding "loading" message
DWRUtil.useLoadingMessageQQ = function() {
	DWREngine.setPreHook(function() {
		serverCallDone = false;
		$("disabledZone").style.visibility = 'visible';
	});
	DWREngine.setPostHook(function() {
		serverCallDone = true;
		$("disabledZone").style.visibility = 'hidden';
	});
}

//do DWR when page loads
if (window.addEventListener) {
	window.addEventListener("load", init, false);
} else if (window.attachEvent) {
	window.attachEvent("onload", init);
} else {
	window.onload = init;
}

function enableContinue(enable) 
{
   var continueButton = document.getElementById("continue");
   if (continueButton != null)
   {
      if (enable == true)
         continueButton.disabled = false;
	   else
		 continueButton.disabled = "disabled";
	}
}

//make call to get view object with package data in guts
function getItems() {

      enableContinue(false);
	//get these from the incform only
	var entityType = $('mainIncForm').elements["entityType"].value;
	var pseudoEntityType = $('mainIncForm').elements["pseudoEntityType"].value;
	var state = $('mainIncForm').elements["entityState"].value;

	if(pseudoEntityType != "") {
		asyncCallCount++;
		packageView.createView(entityType,state,{callback:populateView, async:asyncCall, errorHandler:function(message) {errorCount++;packageView.logError( "ClientId-" + clientId + " :ErrorCount-" + errorCount + " :AsynCall-" + asyncCallCount + " msg:"+ message + ",entityType:" + entityType + ",state:" + state); alert("Please press F5 or refresh your browser to view the most current information."); }});
	} else {
		//reset the display

		//Selected state statement based on value in drop-down
		$("stateName").innerHTML = "State";
		
		//Selected entity type statements based on value in drop-downs
		$("entityLabel").innerHTML = $("entityLabelState").innerHTML = " ";
		$("displayStateFee").innerHTML = currencyFormat(0);

		//reset the package price if state is selected
		if(state != "") {
			if(state == "DE" || state == "NV") {
				$("quickItemPackageType").setAttribute("price",25);
				$("completeItemPackageType").setAttribute("price",130);
			} else {
				$("quickItemPackageType").setAttribute("price",99);
				$("completeItemPackageType").setAttribute("price",228);
			}
		} else {
				$("stateFee").value = 0;
				$("quickItemPackageType").setAttribute("price",99);
				$("completeItemPackageType").setAttribute("price",228);
		}
		
		//switch package and retotal
		switchPackage(($("quickItemPackageType").checked) ? ($("quickItemPackageType")) : ($("completeItemPackageType")));
	}
}

//once you have the view, change the look and feel, state fees, totals
function populateView(view) {	
	//get the data for changing the look & feel
	var packages = view.packages;
	var quickPackage = packages[0][0];
	var completePackage = packages[0][1];
	var stateFee = new Number(view.stateFee);

	//save the price of the packages in the radio buttons as an attribute for use when retotaling
	$("quickItemPackageType").setAttribute("price",quickPackage.cost);
	$("quickItemPackageType").setAttribute("itemId",quickPackage.itemId);
	
	//save the package item ID
	$("completeItemPackageType").setAttribute("price",completePackage.cost);
	$("completeItemPackageType").setAttribute("itemId",completePackage.itemId);

	//change the look & feel

	//Quick package description
	$("quickPackage").innerHTML = quickPackage.detailDescription;
	
	//Complete package description
	$("completePackage").innerHTML = completePackage.detailDescription;

	//Selected state statement based on value in drop-down
	$("stateName").innerHTML = (($('mainIncForm').elements["entityState"].selectedIndex == 0) ? ("State") : ($('mainIncForm').elements["entityState"].options[$('mainIncForm').elements["entityState"].selectedIndex].text));

	//Selected entity type statements based on value in drop-downs
	$("entityLabel").innerHTML = $("entityLabelState").innerHTML = (($("selectedEntityType").selectedIndex == 0) ? ("") : ( $("selectedEntityType").options[$("selectedEntityType").selectedIndex].text)) + " ";


     //update the state fees	
	 var totalStateFee = 0.0;
	 if (view.stateFeeDetails != null)
	 {
	    for (var j = 0; j < view.stateFeeDetails[0].length; j++)
	    {
	       totalStateFee += view.stateFeeDetails[0][j].price;
	    }
	    stateFee = totalStateFee;
	 }

	//state fee
	$("stateFee").value = stateFee;
	$("displayStateFee").value = stateFee;
	$("displayStateFee").innerHTML = currencyFormat(stateFee);
	
	// set currently selected package from order.
	if (view.selectedProductType == $("quickItemPackageType").value)
		$("quickItemPackageType").checked = true;
	else if (view.selectedProductType == $("completeItemPackageType").value) 
		$("completeItemPackageType").checked = true;
	
	var itemPackageType = ($("quickItemPackageType").checked) ? ($("quickItemPackageType")) : ($("completeItemPackageType"));
	
	//package description and price
	switchPackage(itemPackageType);

	winLoaded = true;
      enableContinue(true);
}

function switchPackage(element) {
	//package description and price
	$("packageName").innerHTML = ((element.value == "completeItem") ? ("All-Inclusive") : ("Quick Start")) + " Package";
	var packagePrice = new Number(element.getAttribute("price"));
	$("packageCost").value = currencyFormat(packagePrice);
	$("displayPackagePrice").innerHTML = currencyFormat(packagePrice);

	//selected package (for back-end)
	$("package").value = element.getAttribute("itemId");

	//retotal price = package price + state fee
	$("totalCost").innerHTML = currencyFormat(packagePrice + new Number($("stateFee").value));
}
	

function ViewDoc()
{
	var newWin = window.open('','EIN_Detail','status=no,scrollbars=yes,resizable=yes');
	newWin.document.write('<TEXTAREA rows=50 cols=50>');
	newWin.document.write(window.document.body.innerHTML);
	newWin.document.write('</TEXTAREA>');
}


function validateForm() {
	if(!serverCallDone)
		return false;
	var state = $("mainIncForm").elements["entityState"].value;
	var pseudoEntity = $("mainIncForm").elements["pseudoEntityType"].value;
	
	var errorMessageStart = "Before continuing, please address the following:\n";
	var errorMessage = "";

	if(state == "") {
		errorMessage += "\nPlease select a state.";
	}

	if(pseudoEntity == "") {
		errorMessage += "\nPlease select a business structure.";
	}

	if(errorMessage != "") {
		alert(errorMessageStart + errorMessage);
		return false;
	}
	return true;
}

function addDiscount()
{
	var discountCode = $('discCode').value;
	packageView.addDiscount(discountCode,{callback:displayDiscountMessage});
}
function displayDiscountMessage(msg)
{
	var discountMsgEl = $('discMsg');
	discountMsgEl.innerHTML = msg;
}

function checkCALlc() {
  if ($('entityState').value == "CA" &&
      $('entityType').value == "LLC") {
       popMSG();
  }
  
  return true;
}

function popMSG() {
  var winparm = "";
  var corptype = "";
  window.name = "parent";

  var url = "includes/californiaMsg.jsp";

  winparm = "width=600,height=380,resizable=yes,scrollbars=yes";
  var hWnd = window.open(url,"MSG",winparm);
  if (hWnd != null) {
    if (hWnd.opener == null) {
      hWnd.opener = self; window.name = "home"; hWnd.location.href=url;
    }
  }
}

function currencyFormat(amount) {
    var val = parseFloat(amount);
    if (isNaN(val)) {
        return "0";
    }
    if (val <= 0) {
        return "0";
    }
    val += "";
    if (val.indexOf('.') == -1) {
        return val;
    } else {
        val = val.substring(0,val.indexOf('.')+3);
    }
    val = (val == Math.floor(val)) ? val + '.00' : ((val*10 == Math.floor(val*10)) ? val + '0' : val);
    return val;
}