// order/orderfunc.js
//
// Order form functions
//

var addWindow;

function SetAllCheckBoxes(FormName, FieldName, CheckValue)
{
	if(!document.forms[FormName])
		return;
	var objCheckBoxes = document.forms[FormName].elements[FieldName];
	if(!objCheckBoxes)
		return;
	var countCheckBoxes = objCheckBoxes.length;
	if(!countCheckBoxes)
		objCheckBoxes.checked = CheckValue;
	else
		// set the check value for all check boxes
		for(var i = 0; i < countCheckBoxes; i++)
			objCheckBoxes[i].checked = CheckValue;
}


// Display/Hide certain form elements depending on category.
//

function selectCategory(str, resetVals)
{
   var id = "category_" + str;

   switch(str)
   {
      case "BOOKS":
        document.getElementById(id).checked = true;
        document.getElementById('set_category_id').value = str;
        hideElement("flatSizeDiv");
        showElement("pagesDiv");
        showElement("coverDiv");
        showElement("colorCoverDiv");
        showElement("colorInsideDiv");
        showElement("bindingDiv");
        showElement("paperStock1stDiv");
        hideElement("foldingDiv");
    	if(resetVals == 'TRUE')
    	{
    		SetAllCheckBoxes("orderForm", "job_folding", false);
    		//SetAllCheckBoxes("orderForm", "job_paper_stock", false);
    		document.getElementById('job_flat_size_height').value = '';
    		document.getElementById('job_flat_size_width').value = '';
    	}
      break;

      case "SHEETS":
        document.getElementById(id).checked = true;
        document.getElementById('set_category_id').value = str;
        showElement("flatSizeDiv");
        hideElement("pagesDiv");
        hideElement("coverDiv");
        hideElement("colorCoverDiv");
        hideElement("colorInsideDiv");
        hideElement("bindingDiv");
        showElement("paperStock1stDiv");
		showElement("foldingDiv");
        if(resetVals == 'TRUE')
        {
        	//SetAllCheckBoxes("orderForm", "job_paper_stock", false);
        	SetAllCheckBoxes("orderForm", "job_color_inside", false);
        	SetAllCheckBoxes("orderForm", "job_binding", false);
        	SetAllCheckBoxes("orderForm", "job_color_cover", false);
        	SetAllCheckBoxes("orderForm", "job_cover_type", false);
        	document.getElementById('job_num_pages').value = '';
        }
      break;

      case "CARDS":
      	document.getElementById(id).checked = true;
        document.getElementById('set_category_id').value = str;
        showElement("flatSizeDiv");
        hideElement("pagesDiv");
        hideElement("coverDiv");
        hideElement("colorCoverDiv");
        hideElement("colorInsideDiv");
        hideElement("bindingDiv");
        hideElement("paperStock1stDiv");

        hideElement("foldingDiv");

    	if(resetVals == 'TRUE')
        {
        	SetAllCheckBoxes("orderForm", "job_folding", false);
        	//SetAllCheckBoxes("orderForm", "job_paper_stock", false);
        	SetAllCheckBoxes("orderForm", "job_binding", false);
        	SetAllCheckBoxes("orderForm", "job_color_inside", false);
        	SetAllCheckBoxes("orderForm", "job_color_cover", false);
        	SetAllCheckBoxes("orderForm", "job_cover_type", false);
        	document.getElementById('job_num_pages').value = '';
        }
      break;
   }
}



// Uncheck all proof checkboxes except "no proof"
//

function selectNoProof(formObj)
{
   checkUncheckAll(this, formObj.job_proof)

   /* Set "No Proof" to checked */
   formObj.job_proof[3].checked = true;
}



// Select a proof type.  Can be multiple proofs except no proof.
//

function selectProof(formObj, index)
{
   /* Love how this works */
   formObj.job_proof[index].checked = formObj.job_proof[index].checked;

   /* Set "No Proof" to unchecked */
   formObj.job_proof[3].checked = false;
}



// Call broker and save order details.
//

function saveOrderDetails(formObj)
{
   if (typeof(st) == "undefined") st = new StyleToggle();

   var vars = new Object();
   vars['job_name'] = formObj.job_name.value;
   vars['job_description'] = formObj.job_description.value;
   vars['job_quantity'] = formObj.job_quantity.value;
   vars['job_required_date'] = formObj.job_required_date.value;
   vars['job_flat_size_height'] = formObj.job_flat_size_height.value;
   vars['job_flat_size_width'] = formObj.job_flat_size_width.value;
   vars['job_finished_size_height'] = formObj.job_finished_size_height.value;
   vars['job_finished_size_width'] = formObj.job_finished_size_width.value;
   vars['job_bleed'] = getRadioSelectedValue(formObj.job_bleed);
   vars['job_paper_stock_other'] = formObj.job_paper_stock_other.value;
   vars['job_paper_stock'] = getRadioSelectedValue(formObj.job_paper_stock);
   vars['job_coating'] = getRadioSelectedValue(formObj.job_coating);
   vars['job_cover_type'] = getRadioSelectedValue(formObj.job_cover_type);
   vars['job_color_special_req'] = formObj.job_color_special_req.value;
   vars['job_color_front'] = getRadioSelectedValue(formObj.job_color_front);
   vars['job_color_back'] = getRadioSelectedValue(formObj.job_color_back);
   vars['job_color_cover'] = getRadioSelectedValue(formObj.job_color_cover);
   vars['job_color_inside'] = getRadioSelectedValue(formObj.job_color_inside);
   vars['job_folding'] = getRadioSelectedValue(formObj.job_folding);
   vars['job_binding'] = getRadioSelectedValue(formObj.job_binding);
   vars['job_perf'] = getRadioSelectedValue(formObj.job_perf);
   vars['job_die'] = getRadioSelectedValue(formObj.job_die);
   vars['job_num_drill_holes'] = formObj.job_num_drill_holes.value;
   vars['job_drill_location'] = formObj.job_drill_location.value;
   vars['job_proof'] = getCheckboxSelectedValue(formObj.job_proof);
   vars['job_file_date'] = formObj.job_file_date.value;
   vars['job_num_pages'] = formObj.job_num_pages.value;
   vars['job_cust_po'] = formObj.job_cust_po.value;

   vars['set_category_id'] = formObj.set_category_id.value;
   vars['category_id'] = getCheckboxSelectedValue(formObj.category_id);

   if (vars['job_proof'] == "NONE")
   {
      alert("Since you opted not to receive a proof, you must sign a proof waiver before your order can be completed.");
   }

   if(formObj.job_quote)
   {
   	vars['job_quote'] = formObj.job_quote.value;
   }

   var result = queryBrokerJSON("order_req.php", "save_order_details", vars);

   if (result.result == "success")
   {
      formObj.submit();
   }
   else
   {
      /* display errors */
      $("errorBox").innerHTML = result.errorHTML;
      showElement("errorBox");

      /* highlight errors on form */

      var styleHash = new Object();
      styleHash['background-color'] = "red";
      styleHash['color'] = "white";
      styleHash['padding-bottom'] = "2px";
      styleHash['padding-left'] = "2px";

      st.revertStyle();
      st.clearElements();

      for (key in result.validateErrors)
      {
         st.addElement(key + "_label", styleHash);
      }

      st.changeStyle();
      //alert("Please fix the errors listed at the top of this page.");
      window.scrollTo(0,0);
   }
}



// Call broker and save proof mailing address.
//

function saveProofAddress(formObj)
{
   if (typeof(st) == "undefined") st = new StyleToggle();

   var vars = new Object();
   vars['job_proof_contact'] = formObj.job_proof_contact.value;
   vars['job_proof_address1'] = formObj.job_proof_address1.value;
   vars['job_proof_address2'] = formObj.job_proof_address2.value;
   vars['job_proof_city'] = formObj.job_proof_city.value;
   vars['job_proof_state'] = formObj.job_proof_state.value;
   vars['job_proof_zipcode'] = formObj.job_proof_zipcode.value;
   var result = queryBrokerJSON("order_req.php", "save_proof_address", vars);

   if (result.result == "success")
   {
      st.revertStyle();
      st.clearElements();
      formObj.submit();
   }
   else
   {
      /* display errors */
      $("errorBox").innerHTML = result.errorHTML;
      showElement("errorBox");

      /* highlight errors on form */
      var styleHash = new Object();
      styleHash['background-color'] = "red";
      styleHash['color'] = "white";
      styleHash['padding-bottom'] = "2px";
      styleHash['padding-left'] = "2px";

      st.revertStyle();
      st.clearElements();

      for (key in result.validateErrors)
      {
         st.addElement(key, styleHash);
      }

      st.changeStyle();
   }
}



// Toggle whether the user wants to add mailing services or not to the order.
//
// Toggle true:  Display mailing services window and save form data upon submit.
// Toggle false: Hide mailing services window and clear order mailing data.
//

function toggleMailingServices(formObj, val)
{
   if (val == true)
   {
      showElement("mailingServicesBox");
      addMailingServices = true;
   }

   /* If user clicks no, just send them along right away to the next step */
   else
   {
      hideElement("mailingServicesBox");
      addMailingServices = false;
      saveMailingDetails(formObj, val);
   }
}



// Display or hide mailing services window.
//

function reviewMailingServices(val)
{
   if (val == true)
   {
      showElement("mailingServicesBox");
      addMailingServices = true;
   }
   else
   {
      hideElement("mailingServicesBox");
      addMailingServices = false;
   }
}



// Call broker and save mailing details for the order.
//

function saveMailingDetails(formObj)
{
   /* clear mailing data in order (if any) */
   if (addMailingServices == false)
   {
      vars = new Object();
      var result = queryBrokerJSON("order_req.php", "clear_mailing_details", vars);
   }

   /* User selected to addmailing data.  Save it. */
   if (addMailingServices == true)
   {
      if (typeof(st) == "undefined") st = new StyleToggle();

      var vars = new Object();
      vars['job_mailing_quantity'] = formObj.job_mailing_quantity.value;
      vars['job_mailing_delivery_date'] = formObj.job_mailing_delivery_date.value;
      //vars['job_mailing_postage_amount'] = formObj.job_mailing_postage_amount.value;
      //vars['job_mailing_list_amount'] = formObj.job_mailing_list_amount.value;
      vars['job_mailing_source'] = getRadioSelectedValue(formObj.job_mailing_source);
      vars['job_mailing_indicia'] = getRadioSelectedValue(formObj.job_mailing_indicia);
      vars['job_mailing_services'] = getCheckboxSelectedValue(formObj.job_mailing_services);
      var result = queryBrokerJSON("order_req.php", "save_mailing_details", vars);

      if (result.result == "success")
      {
         st.revertStyle();
         st.clearElements();
         formObj.submit();
      }
      else
      {
         /* display errors */
         $("errorBox").innerHTML = result.errorHTML;
         showElement("errorBox");

         /* highlight errors on form */
         var styleHash = new Object();
         styleHash['background-color'] = "red";
         styleHash['color'] = "white";
         styleHash['padding-bottom'] = "2px";
         styleHash['padding-left'] = "2px";

         st.revertStyle();
         st.clearElements();

         for (key in result.validateErrors)
         {
            st.addElement(key + "_label", styleHash);
         }

         st.changeStyle();
      }
   }

   /* User selected no mailing services, so just go to next step in order form. */
   else
   {
      formObj.submit();
   }
}



// Toggle whether the user wants to have a sample shipped.
//
// Toggle true:  Display mailing services window and save form data upon submit.
// Toggle false: Hide mailing services window and clear order mailing data.
//

function toggleSampleAddress(formObj, val)
{
   if (val == true)
   {
      showElement("sampleAddressBox");
      requireSampleAddress = true;
   }

   /* If user clicks no, just send them along right away to the next step */
   else
   {
      hideElement("sampleAddressBox");
      requireSampleAddress = false;
      saveSampleAddress(formObj, val);
   }
}



// Display or hide sample address window.
//

function reviewSampleAddress(val)
{
   if (val == true)
   {
      showElement("sampleAddressBox");
      requireSampleAddress = true;
   }
   else
   {
      hideElement("sampleAddressBox");
      requireSampleAddress = false;
   }
}



function saveSampleAddress(formObj)
{
   /* clear sample address in order (if set) */
   if (requireSampleAddress == false)
   {
      var vars = new Object();
      var result = queryBrokerJSON("order_req.php", "clear_sample_address", vars);
   }


   /* User chose to add samples to order. Save sample address. */
   if (requireSampleAddress == true)
   {
      if (typeof(st) == "undefined") st = new StyleToggle();

      var vars = new Object();
      vars['job_sample_quantity'] = formObj.job_sample_quantity.value;
      vars['job_sample_contact'] = formObj.job_sample_contact.value;
      vars['job_sample_address1'] = formObj.job_sample_address1.value;
      vars['job_sample_address2'] = formObj.job_sample_address2.value;
      vars['job_sample_city'] = formObj.job_sample_city.value;
      vars['job_sample_state'] = formObj.job_sample_state.value;
      vars['job_sample_zipcode'] = formObj.job_sample_zipcode.value;
      var result = queryBrokerJSON("order_req.php", "save_sample_address", vars);

      if (result.result == "success")
      {
         st.revertStyle();
         st.clearElements();
         formObj.submit();
      }
      else
      {
         /* display errors */
         $("errorBox").innerHTML = result.errorHTML;
         showElement("errorBox");

         /* highlight errors on form */
         var styleHash = new Object();
         styleHash['background-color'] = "red";
         styleHash['color'] = "white";
         styleHash['padding-bottom'] = "2px";
         styleHash['padding-left'] = "2px";

         st.revertStyle();
         st.clearElements();

         for (key in result.validateErrors)
         {
            st.addElement(key, styleHash);
         }

         st.changeStyle();
      }
   }

   /* User selected no mailing services, so just go to next step in order form. */
   else
   {
      formObj.submit();
   }
}



// Call broker to save the selected shipping addresses to the order.
//

function saveShipping(formObj)
{
   var addresses = new Array();

   for (i = 0; i < document.forms.length; i++)
   {
      if (document.forms[i].use_address && Field.getValue(document.forms[i].use_address))
      {
         var addr = new Object();
         addr['shipping_address_id'] = Field.getValue(document.forms[i].use_address);
         addr['quantity'] = Field.getValue(document.forms[i].quantity);
         addr['packing'] = getRadioSelectedValue(document.forms[i].packing);
         addr['instruction'] = Field.getValue(document.forms[i].instruction);
         addr['banding'] = Field.getValue(document.forms[i].banding);
         addr['banding_quantity'] = Field.getValue(document.forms[i].banding_quantity);
         addresses.push(addr);
      }
   }

   var vars = new Object();
   vars['addresses'] = addresses.toJSON();
   var result = queryBrokerJSON("order_req.php", "save_shipping_details", vars);

   if (result.result == "success")
   {
      formObj.submit();
   }
   else
   {
      /* display errors */
      $("errorBox").innerHTML = result.errorHTML;
      showElement("errorBox");
   }
}

function saveComments(formObj)
{

   var vars = new Object();
   vars['job_comments'] = Field.getValue(formObj.job_comments);
   var result = queryBrokerJSON("order_req.php", "save_comments", vars);

   if (result.result == "success")
   {
      formObj.submit();
   }
   else
   {
      /* display errors */
      $("errorBox").innerHTML = result.errorHTML;
      showElement("errorBox");
   }
}



// Call broker to save order.  Receive new job_id and sent it along with the form to order.php
//

function saveOrder(formObj)
{
   var vars = new Object();
   var result = queryBrokerJSON("order_req.php", "save_order", vars);

   if (result.result == "success")
   {
	   var input =  document.createElement("input");
      input.setAttribute("type", "hidden");
      input.setAttribute("name", "job_id");
      input.setAttribute("value", result.job_id);
      formObj.appendChild(input);

      /* Send browser to fileupload page with new job_id */
      formObj.submit();
   }
   else
   {
      alert("There has been an error when trying to submit your request.");
   }
}



// Call brokder to delete a shipping address from the ACCOUNT (not currently used)
//

function deleteShippingAddress(shipping_address_id)
{
   res = confirm("Are you sure you wish to delete this shipping address?");

   if (res == true)
   {
      var vars = new Array();
      vars['shipping_address_id'] = shipping_address_id;
      var result = queryBrokerJSON("order_shipping.php", "delete", vars);

      if (result.result == "success")
      {
         var idName = "shippingAddress" + shipping_address_id;
         removeElement(idName);
      }
      else
      {
         alert("The shipping address could not be removed at this time.");
      }
   }
}



// Open add shipping address window
//

function openAddWindow(url, name, width, height)
{
   addWindow = window.open(url, name, "width=" + width + ", height=" + height + ", scrollbars=yes");
}



// call broker to add new shipping adress to ACCOUNT.
//

function addShippingAddress()
{
   var vars = new Object();
   var formObj = addWindow.document.addShippingAddress;
   vars['shipping_contact'] = formObj.shipping_contact.value;
   vars['shipping_company'] = formObj.shipping_company.value;
   vars['shipping_address1'] = formObj.shipping_address1.value;
   vars['shipping_address2'] = formObj.shipping_address2.value;
   vars['shipping_city'] = formObj.shipping_city.value;
   // vars['shipping_state'] = formObj.shipping_state.options[formObj.shipping_state.selectedIndex].value;
   vars['shipping_state'] = Field.getValue(formObj.shipping_state);
   vars['shipping_zipcode'] = formObj.shipping_zipcode.value;
   var result = queryBrokerJSON("order_req.php", "shipping_save", vars);

   /* Put result HTML into hidden emptyContainer div, then append the new HTML to the list of addresses */
   if (result.result == "success")
   {
      document.getElementById("emptyContainer").innerHTML = urldecode(result.addressHTML);
      document.getElementById("addressContent").appendChild(document.getElementById("shippingAddress" + result.shipping_address_id));
      alert("The shipping address was successfully added.");
      location.reload(true);  // here on purpose because of a UI bug.
      addWindow.close();
   }
   else
   {
      alert("The shipping address cannot be added at this time due to an error.");
      addWindow.focus();
   }
}



function createCalendar()
{
   cal1 = new YAHOO.widget.Calendar("cal1", "cal1Container");
   cal1.render();
}



// IE hack to display objects without activating them (this has to be in an external file)
// Used on last step of new order process
//

function showThinUpload(obHTML)
{
  document.getElementById('uploadContainer').innerHTML = obHTML;
}



function addNewAccount(formObj)
{
	if (typeof(st) == "undefined") st = new StyleToggle();

   var vars = new Object();
   vars['account_name'] = Field.getValue(formObj.account_name);
   vars['account_user_name'] = Field.getValue(formObj.account_user_name);
   vars['account_user_phone'] = Field.getValue(formObj.account_user_phone);
   vars['account_user_email'] = Field.getValue(formObj.account_user_email);
   vars['account_user_email2'] = Field.getValue(formObj.account_user_email2);
   vars['webtemplate_username'] = Field.getValue(formObj.webtemplate_username);
   vars['webtemplate_password'] = Field.getValue(formObj.webtemplate_password);
   vars['webtemplate_password2'] = Field.getValue(formObj.webtemplate_password2);

   var result = queryBrokerJSON("order_req.php", "new_account", vars);

   if (result.result == "success")
   {
      formObj.submit();
   }
   else
   {
      /* display errors */
      $("errorBox").innerHTML = result.errorHTML;
      showElement("errorBox");

 	  /* highlight errors on form */

      var styleHash = new Object();
      styleHash['background-color'] = "red";
      styleHash['color'] = "white";
      styleHash['padding-bottom'] = "2px";
      styleHash['padding-left'] = "2px";

      st.revertStyle();
      st.clearElements();


      for (key in result.validateErrors)
      {
         st.addElement(key + "_label", styleHash);
      }

      st.changeStyle();


   }

}

function review_hide_rows(formObj)
{
	var check_vars = new Array(
								"job_quote",
								"job_cust_po",
								"job_flat_size_height",
								"job_cover_type",
								"job_color_inside",
								"job_color_cover",
								"job_binding",
								"job_perf",
								"job_die",
								"job_num_drill_holes",
								"job_drill_location"
							  );

   for (var i = 0; i < check_vars.length; i++)
   {
   		//alert(Field.getValue(formObj.job_cust_po));
		//alert(Field.getValue(formObj.check_vars[i]));
		break;
   }

}