// JavaScript Document

    var cpMessages =
	{
	     // Step #1
		 cp_orderInfo_nameOfWearer: {
		     required: 'Name of Wearer is required'
		 },
		 cp_orderInfo_emailAddress: {
	         required: 'Please enter your email address',
		     email:'Please enter a valid email address'
		 },
		 cp_orderInfo_numberOfUnits: {
		     required: 'Number of Units is required'
		 },
		 cp_orderInfo_sizeCategory: {
		     required: 'Size Category is required'
		 },
		 cp_orderInfo_exactSize: {
		     required:'Exact Size is required'
		 },
		     // Exact Size: Contour
			 cp_orderInfo_exactSizeLength: {
		         required:'Exact Size: (Length) is required'
		     },
			 cp_orderInfo_exactSizeWidth: {
		         required:'Exact Size: (Width) is required'
		     },
			 cp_orderInfo_exactSizeFrontal: {
		         required:'Exact Size: (Frontal) is required'
		     },

			 // Exact Size: Measurements
			 cp_orderInfo_exactMeasure1: {
		         required:'Exact Size: #1 is required'
		     },
			 cp_orderInfo_exactMeasure2: {
		         required:'Exact Size: #2 is required'
		     },
			 cp_orderInfo_exactMeasure3: {
		         required:'Exact Size: #3 is required'
		     },
			 cp_orderInfo_exactMeasure4: {
		         required:'Exact Size: #4 is required'
		     },
			 cp_orderInfo_exactMeasure5: {
		         required:'Exact Size: #5 is required'
		     },
			 cp_orderInfo_exactMeasure6: {
		         required:'Exact Size: #6 is required'
		     },
			 cp_orderInfo_exactMeasure7: {
		         required:'Exact Size: #7 is required'
		     },

		 cp_orderInfo_keepReturn: {
		     required:'Order Profile is required'
		 },
		 cp_orderInfo_rushProd: {
		     required:'Rush Production is required'
		 },

		 /* STEP #2
		 ########################## */
		 cp_hair_hairLength: {
		     required:'Hair Length is required'
		 },
		 cp_hair_baseDesign: {
		     required:'Base Design is required'
		 },
		     cp_hair_userCombo: {
		         required:'Combination of materials or other description is required'
		     },
	     cp_hair_hairColor: {
		     required:'Hair Color is required'
		 },
		     cp_hair_userColor: {
		         required:'Standard hair color Information is required'
		     },
		 cp_hair_typeOf: {
		     required:'Type of hair is required'
		 },
		 cp_hair_style: {
		     required:'Hairstyle or direction is required'
		 },
		 cp_hair_userStyle: {
		     required:'Hairstyle notes are required'
		 },

		 /* STEP #3
		 ########################## */
		 cp_gray_type: {
		     required:'Type of gray is required'
		 },
		 cp_gray_select_whole_partial: {
		     required:'Gray: (Whole or Partial) is required'
		 },
		     // Whole Zone
			 cp_gray_whole_percentage: {
		         required:'Percentage is required'
		     },

			 // Per Zone
			 cp_gray_partial_front_per: {
		         required:'Front percentage is required'
		     },
		     cp_gray_partial_temples_per: {
		         required:'Temples percentage is required'
		     },
			 cp_gray_partial_top_per: {
		         required:'Top percentage is required'
		     },
			 cp_gray_partial_sides_per: {
		         required:'Sides percentage is required'
		     },
			 cp_gray_partial_crown_per: {
		         required:'Crown percentage is required'
		     },
			 cp_gray_partial_back_per: {
		         required:'Back percentage is required'
		     },

		 /* STEP #4
		 ########################## */
		 cp_highlight: {
		     required:'Highlights is required'
		 },
		 cp_highlight_select_whole_partial: {
		     required:'Whole or Partial is required'
		 },
		     // Whole Zone
			 cp_highlight_whole_percentage: {
		         required:'Percentage is required'
		     },

			 // Per Zone
			 cp_highlight_partial_front_per: {
		         required:'Front percentage is required'
		     },
			 cp_highlight_partial_temple_per: {
		         required:'Temples percentage is required'
		     },
			 cp_highlight_partial_top_per: {
		         required:'Top percentage is required'
		     },
		     cp_highlight_partial_sides_per: {
		         required:'Sides percentage is required'
		     },
			 cp_highlight_partial_crown_per: {
		         required:'Crown percentage is required'
		     },
			 cp_highlight_partial_back_per: {
		         required:'Back percentage is required'
		     },

		 cp_highlight_highlightColor: {
		     required:'Highlight color is required'
		 },
		     cp_highlight_userHighlightColor: {
		         required:'Your standard highlight color is required'
		     },

		 /* STEP 5
		 ######################### */
		 cp_density_select_whole_partial: {
		     required:'Whole or Partial is required'
		 },
		     // Whole Zone
			 cp_density_whole_percentage: {
		         required:'Density is required' // this value is no longer a percentage
		     },

			 // Per Zone # This is no longer used
			 /*cp_density_partial_front_per: {
		         required:'Front percentage is required'
		     },
			 cp_density_partial_temples_per: {
		         required:'Temples percentage is required'
		     },
			 cp_density_partial_top_per: {
		         required:'Top percentage is required'
		     },
			 cp_density_partial_sides_per: {
		         required:'Sides percentage is required'
		     },
			 cp_density_partial_crown_per: {
		         required:'Crown percentage is required'
		     },
			 cp_density_partial_back_per: {
		         required:'Back percentage is required'
		     },*/

		 /* STEP 6
		 ######################### */
		 cp_curl_select_whole_partial: {
		     required:'Whole or Partial is required'
		 },
		     // Whole Zone
			 cp_curl_whole_percentage: {
		         required:'Curl is required'
		     },

			 // Per Zone
			 cp_curl_partial_front_per: {
		         required:'Front curl is required'
		     },
			 cp_curl_partial_temples_per: {
		         required:'Temples curl is required'
		     },
			 cp_curl_partial_top_per: {
		         required:'Top curl is required'
		     },
			 cp_curl_partial_sides_per: {
		         required:'Sides curl is required'
		     },
			 cp_curl_partial_crown_per: {
		         required:'Crown curl is required'
		     },
			 cp_curl_partial_back_per: {
		         required:'Back curl is required'
		     }
	};

	var cpRules =
	{
	     // Step #1
		 cp_orderInfo_nameOfWearer: {
		     required:{depends:function(){return isActiveStep(1);}}
		 },
		 cp_orderInfo_nameOfWearer: {
		     required:{depends:function(){return isActiveStep(1);}}
		 },
		 cp_orderInfo_emailAddress: {
	         required:{depends:function(){return isActiveStep(1);}},
			 email:true
		 },
		 cp_orderInfo_numberOfUnits: {
		     required:{depends:function(){return isActiveStep(1);}}
		 },
		 cp_orderInfo_sizeCategory: {
		     required:{depends:function(){return isActiveStep(1);}}
		 },
		 cp_orderInfo_exactSize: {
		     required:{depends:function(){return isActiveStep(1);}}
		 },
		     // Exact Size: Length , Width , Frontal
			 // Only if "orderInfo_exactSize" is checked and value is for entering contour measurements
			 cp_orderInfo_exactSizeLength: {
		         required:{
					 depends:function(){
				         return exactSizeContourReq();
				     }
				 }
		     },
			 cp_orderInfo_exactSizeWidth: {
		         required:{
					 depends:function(){
				         return exactSizeContourReq();
				     }
				 }
		     },
			 cp_orderInfo_exactSizeFrontal: {
		         required:{
					 depends:function(){
				         return exactSizeContourReq();
				     }
				 }
		     },

			 //Exact Measurements
			 cp_orderInfo_exactMeasure1: {
		         required:{
					 depends:function(){
				         return exactSizeMeasurementsReq();
				     }
				 }
		     },
			 cp_orderInfo_exactMeasure2: {
		         required:{
					 depends:function(){
				         return exactSizeMeasurementsReq();
				     }
				 }
		     },
			 cp_orderInfo_exactMeasure3: {
		         required:{
					 depends:function(){
				         return exactSizeMeasurementsReq();
				     }
				 }
		     },
			 cp_orderInfo_exactMeasure4: {
		         required:{
					 depends:function(){
				         return exactSizeMeasurementsReq();
				     }
				 }
		     },
			 cp_orderInfo_exactMeasure5: {
		         required:{
					 depends:function(){
				         return exactSizeMeasurementsReq();
				     }
				 }
		     },
			 cp_orderInfo_exactMeasure6: {
		         required:{
					 depends:function(){
				         return exactSizeMeasurementsReq();
				     }
				 }
		     },
			 cp_orderInfo_exactMeasure7: {
		         required:{
					 depends:function(){
				         return exactSizeMeasurementsReq();
				     }
				 }
		     },

		 cp_orderInfo_keepReturn: {
		     required:{depends:function(){return isActiveStep(1);}}
		 },
		 cp_orderInfo_rushProd: {
		     required:{depends:function(){return isActiveStep(1);}}
		 },

		 /* STEP #2
		 ############################# */
		 cp_hair_hairLength: {
		     required:{depends:function(){return isActiveStep(2);}}
		 },
		 cp_hair_baseDesign: {
	         required:{depends:function(){return isActiveStep(2);}}
		 },
		     // If hair_baseDesign equals "User Provided, Combination"
			 cp_hair_userCombo: {
		         required:{
					 depends:function(){
				         if((isActiveStep(2)) && ($("#cp_hair_baseDesign:selected"))){
						     var v = $("#cp_hair_baseDesign").val();
						     return (v.indexOf('Combination') > -1) ? true : false;
						 }
						 else{
							 return false;
						 }
				     }
				 }
		     },
		 cp_hair_hairColor: {
		     required:{depends:function(){return isActiveStep(2);}}
		 },
		     cp_hair_userColor: {
		         required:{
					 depends:function(){
				         if((isActiveStep(2)) && ($("#cp_hair_hairColor:selected"))){
						     var v = $("#cp_hair_hairColor").val();
						     return (v.indexOf('User Provided') > -1) ? true : false;
						 }
						 else{
							 return false;
						 }
				     }
				 }
		     },
		 cp_hair_typeOf: {
		     required:{depends:function(){return isActiveStep(2);}}
		 },
		 cp_hair_style: {
		     required:{depends:function(){return isActiveStep(2);}}
		 },
		     cp_hair_userStyle: {
		         required:{
					 depends:function(){
				         if((isActiveStep(2)) && ($("#cp_hair_style:selected"))){
						     var v = $("#cp_hair_style").val();
						     return (v.indexOf('See notes') > -1) ? true : false;
						 }
						 else{
							 return false;
						 }
				     }
				 }
		     },

		 /* STEP #3
		 ########################## */
		 cp_gray_type: {
		     required:{depends:function(){return isActiveStep(3);}}
		 },
		     cp_gray_select_whole_partial: {
		         required:{
					 depends:function(){
				         if((isActiveStep(3)) && ($("#cp_gray_type:selected"))){
						     var v = $("#cp_gray_type").val();
							 return (v != 'No gray') ? true : false;
						 }
						 else{
							 return false;
						 }
				     }
				 }
		     },
			     // Whole
				 cp_gray_whole_percentage: {
		             required:{
					     depends:function(){
				             if((isActiveStep(3)) && ($("#cp_gray_select_whole_partial:selected"))){
						         var v = $("#cp_gray_select_whole_partial").val();
								 return (v == 'Whole') ? true : false;
						     }
						     else{
							     return false;
						     }
				         }
				     }
		         },

				 // Per Zone
				 cp_gray_partial_front_per: {
		             required:{
					     depends:function(){
				             return perZoneReq(3,'cp_gray_select_whole_partial');
				         }
				     }
		         },
				 cp_gray_partial_temples_per: {
		             required:{
					     depends:function(){
				             return perZoneReq(3,'cp_gray_select_whole_partial');
				         }
				     }
		         },
				 cp_gray_partial_top_per: {
		             required:{
					     depends:function(){
				             return perZoneReq(3,'cp_gray_select_whole_partial');
				         }
				     }
		         },
				 cp_gray_partial_sides_per: {
		             required:{
					     depends:function(){
				             return perZoneReq(3,'cp_gray_select_whole_partial');
				         }
				     }
		         },
				 cp_gray_partial_crown_per: {
		             required:{
					     depends:function(){
				             return perZoneReq(3,'cp_gray_select_whole_partial');
				         }
				     }
		         },
				 cp_gray_partial_back_per: {
		             required:{
					     depends:function(){
				             return perZoneReq(3,'cp_gray_select_whole_partial');
				         }
				     }
		         },

		 /* STEP #4
		 ########################## */
		 cp_highlight: {
		     required:{depends:function(){return isActiveStep(4);}}
		 },
		     cp_highlight_select_whole_partial: {
		         required:{
					 depends:function(){
				         if((isActiveStep(4)) && ($("#cp_highlight:selected"))){
						     var v = $("#cp_highlight").val();
							 return (v != 'No highlights') ? true : false;
						 }
						 else{
							 return false;
						 }
				     }
				 }
		     },
			     // Whole
				 cp_highlight_whole_percentage: {
		             required:{
					     depends:function(){
				             if((isActiveStep(4)) && ($("#cp_highlight_select_whole_partial:selected"))){
						         var v = $("#cp_highlight_select_whole_partial").val();
								 return (v == 'Whole') ? true : false;
						     }
						     else{
							     return false;
						     }
				         }
				     }
		         },

				 // Per Zone
				 cp_highlight_partial_front_per: {
		             required:{
					     depends:function(){
				             return perZoneReq(4,'cp_highlight_select_whole_partial');
				         }
				     }
		         },
				 cp_highlight_partial_temple_per: {
		             required:{
					     depends:function(){
				             return perZoneReq(4,'cp_highlight_select_whole_partial');
				         }
				     }
		         },
				 cp_highlight_partial_top_per: {
		             required:{
					     depends:function(){
				             return perZoneReq(4,'cp_highlight_select_whole_partial');
				         }
				     }
		         },
				 cp_highlight_partial_sides_per: {
		             required:{
					     depends:function(){
				             return perZoneReq(4,'cp_highlight_select_whole_partial');
				         }
				     }
		         },
				 cp_highlight_partial_crown_per: {
		             required:{
					     depends:function(){
				             return perZoneReq(4,'cp_highlight_select_whole_partial');
				         }
				     }
		         },
				 cp_highlight_partial_back_per: {
		             required:{
					     depends:function(){
				             return perZoneReq(4,'cp_highlight_select_whole_partial');
				         }
				     }
		         },
		 cp_highlight_highlightColor: {
		     required:{depends:function(){
				     if((isActiveStep(4)) && ($("#cp_highlight:selected"))){
						     var v = $("#cp_highlight").val();
							 return (v == 'No highlights') ? false : true;
					 }
					 else{
						return false;
					 }
				 }
			 }
		 },
		     // Whole Zone
			 cp_highlight_userHighlightColor: {
		         required:{
					 depends:function(){
				         if((isActiveStep(4)) && ($("#cp_highlight_highlightColor:selected"))){
						     var v = $("#cp_highlight_highlightColor").val();
							 return (v == 'User Provided') ? true : false;
						 }
						 else{
							 return false;
						 }
				     }
				 }
		     },

			 // Per Zone
				 cp_highlight_partial_front_per: {
		             required:{
					     depends:function(){
				             return perZoneReq(4,'cp_highlight_select_whole_partial');
				         }
				     }
		         },
				 cp_highlight_partial_temple_per: {
		             required:{
					     depends:function(){
				             return perZoneReq(4,'cp_highlight_select_whole_partial');
				         }
				     }
		         },
				 cp_highlight_partial_top_per: {
		             required:{
					     depends:function(){
				             return perZoneReq(4,'cp_highlight_select_whole_partial');
				         }
				     }
		         },
				 cp_highlight_partial_sides_per: {
		             required:{
					     depends:function(){
				             return perZoneReq(4,'cp_highlight_select_whole_partial');
				         }
				     }
		         },
				 cp_highlight_partial_crown_per: {
		             required:{
					     depends:function(){
				             return perZoneReq(4,'cp_highlight_select_whole_partial');
				         }
				     }
		         },
				 cp_highlight_partial_back_per: {
		             required:{
					     depends:function(){
				             return perZoneReq(4,'cp_highlight_select_whole_partial');
				         }
				     }
		         },

		 /* STEP #5
		 ########################## */
		 cp_density_select_whole_partial: {
		     required:{depends:function(){return isActiveStep(5);}}
		 },
		     // Whole Zone
			 cp_density_whole_percentage: {
		         required:{
					 depends:function(){
				         if((isActiveStep(5)) && ($("#cp_density_select_whole_partial:selected"))){
						     var v = $("#cp_density_select_whole_partial").val();
						     return (v == 'Whole') ? true : false;
						 }
						 else{
							 return false;
						 }
				     }
				 }
		     },

			 // Per Zone
			 cp_density_partial_front_per: {
		         required:{
					 depends:function(){
				         return perZoneReq(5,'cp_density_select_whole_partial');
				     }
				 }
		     },
			 cp_density_partial_temples_per: {
		         required:{
					 depends:function(){
				         return perZoneReq(5,'cp_density_select_whole_partial');
				     }
				 }
		     },
			 cp_density_partial_top_per: {
		         required:{
					 depends:function(){
				         return perZoneReq(5,'cp_density_select_whole_partial');
				     }
				 }
		     },
			 cp_density_partial_sides_per: {
		         required:{
					 depends:function(){
				         return perZoneReq(5,'cp_density_select_whole_partial');
				     }
				 }
		     },
			 cp_density_partial_crown_per: {
		         required:{
					 depends:function(){
				         return perZoneReq(5,'cp_density_select_whole_partial');
				     }
				 }
		     },
			 cp_density_partial_back_per: {
		         required:{
					 depends:function(){
				         return perZoneReq(5,'cp_density_select_whole_partial');
				     }
				 }
		     },

		 /* STEP #6
		 ############################# */
		 cp_curl_select_whole_partial: {
		     required:{depends:function(){return isActiveStep(6);}}
		 },
		     // Whole Zone
			 cp_curl_whole_percentage: {
		         required:{
					 depends:function(){
				         if((isActiveStep(6)) && ($("#cp_curl_select_whole_partial:selected"))){
						     var v = $("#cp_curl_select_whole_partial").val();
						     return (v == 'Whole') ? true : false;
						 }
						 else{
							 return false;
						 }
				     }
				 }
		     },

			 // Per Zone
			 cp_curl_partial_front_per: {
		         required:{
					 depends:function(){
				         return perZoneReq(6,'cp_curl_select_whole_partial');
				     }
				 }
		     },
			 cp_curl_partial_temples_per: {
		         required:{
					 depends:function(){
				         return perZoneReq(6,'cp_curl_select_whole_partial');
				     }
				 }
		     },
			 cp_curl_partial_top_per: {
		         required:{
					 depends:function(){
				         return perZoneReq(6,'cp_curl_select_whole_partial');
				     }
				 }
		     },
			 cp_curl_partial_sides_per: {
		         required:{
					 depends:function(){
				         return perZoneReq(6,'cp_curl_select_whole_partial');
				     }
				 }
		     },
			 cp_curl_partial_crown_per: {
		         required:{
					 depends:function(){
				         return perZoneReq(6,'cp_curl_select_whole_partial');
				     }
				 }
		     },
			 curl_partial_back_per: {
		         required:{
					 depends:function(){
				         return perZoneReq(6,'cp_curl_select_whole_partial');
				     }
				 }
		     }

	};

	function isActiveStep(step){
		$.CP.sendToConsole('Current: ' + current + ', Requested: ' + (step - 1));
		return (current == (step - 1)) ? true : false;
	}

	// Step #1: Used in checking if we need to require Length, Width & Frontal Contours
	function exactSizeContourReq(){
	    if((isActiveStep(1)) && ($("#cp_orderInfo_exactSize:selected"))){
		    var v = $("#cp_orderInfo_exactSize").val();
			if(v.indexOf('Length/Width/Frontal') > -1){
				return true;
			}
			else{
				return false;
			}
		}
		else{
				return false;
		}
	}

	// Step #1: Used in checking if we need to require 7 Measurements
	function exactSizeMeasurementsReq(){
	    if((isActiveStep(1)) && ($("#cp_orderInfo_exactSize:selected"))){
		    var v = $("#cp_orderInfo_exactSize").val();
			if(v.indexOf('Measurements') > -1){
				return true;
			}
			else{
				return false;
			}
		}
		else{
				return false;
		}
	}

	// Used for checking if we need to Per Zone Percentages on all needed steps
	function perZoneReq(step,id){
	    if((isActiveStep(step)) && ($('#'+id+':selected'))){
		    var v = $('#'+id).val();
			return (v == 'Per Zone') ? true : false;
		}
		else{
				return false;
		}
	}