function applyLeadtimeRules(){	
	if (ncdr.leadtimeProductRefs){
		for (var i in ncdr.leadtimeProductRefs){
			applyLeadtimeRule(i);
		}
	}
}

function applyLeadtimeRule(productRef){
	var time;
	if(ncdr.leadtimeProductRefs[productRef]){
		var length = ncdr.leadtimeProductRefs[productRef].length;
		var businessdays_ele = document.getElementsByName(productRef+"_businessdays");
		var callsun_ele = document.getElementsByName(productRef+"_callsun");
		var ships_within_ele = document.getElementsByName(productRef+"_ships_within");
		for(var j=0;j<length;j++){
			var leadtime_ele = document.getElementById(ncdr.leadtimeProductRefs[productRef][j]);
			if (leadtime_ele && businessdays_ele[j] && callsun_ele[j]){
				var rs;
				if (typeof retailsetList == 'undefined' || (rs = retailsetList[productRef]) == null) {
					applyRule(leadtime_ele, businessdays_ele[j], callsun_ele[j], ships_within_ele[j]);
				} else {
					applyRetailsetRule(leadtime_ele, rs, businessdays_ele[j], callsun_ele[j], ships_within_ele[j]);
				}
		 	}			
		}
	}
}

function applyRetailsetRule(leadtime_ele, rs, businessdays_ele, callsun_ele, ships_within_ele){
	var leadtime = 0;
	for (var i =0; i<rs.length; i++){
		var part_pref = rs[i]["ProductRef"];
		part_leadtime = Number(document.getElementById(ncdr.leadtimeProductRefs[part_pref][0]).innerHTML);
		if (part_leadtime == -1 || leadtime == -1)
			leadtime = -1;
		else if (part_leadtime > leadtime)
			leadtime = part_leadtime;
	}
	
	leadtime_ele.innerHTML = leadtime;
	applyRule(leadtime_ele, businessdays_ele, callsun_ele);
}

function applyLeadtimeRangeRules(){
	var leadtime_range_ele = document.getElementsByName("leadtimerange");

	if(leadtime_range_ele != null)
		for(var i=0;i<leadtime_range_ele.length;i++){
			var leadtimerange = leadtime_range_ele[i];
			if (leadtimerange){
				applyRangeRule(leadtimerange)
		  	}
	  	}
}

function applyTopLeadtimeRules(){
	var leadtime_ele = document.getElementsByName("topleadtime");
	var businessdays_ele = document.getElementsByName("businessdays");
	var callsun_ele = document.getElementsByName("callsun");
	
	if(leadtime_ele != null)
		for(var i=0;i<leadtime_ele.length;i++){
			var leadtime = leadtime_ele[i];
			var businessdays = businessdays_ele[i];
			var callsun = callsun_ele[i];
			if (leadtime != null && businessdays != null && callsun != null){
				applyRule(leadtime, businessdays, callsun)
		  	}
	  	}
}

function applyTopLeadtimeRule(){
	var leadtime_ele = document.getElementById("topleadtime");
	var businessdays_ele = document.getElementById("businessdays");
	var callsun_ele = document.getElementById("callsun");
	
	if (leadtime_ele != null && businessdays_ele != null && callsun_ele != null){
		applyRule(leadtime_ele, businessdays_ele, callsun_ele)
  	}
}

function applyRule(leadtime_ele, businessdays_ele, callsun_ele, ships_within_ele){
	var time = "";
	// check if a real number is given
	if (!((leadtime_ele.innerHTML == String("")) && (leadtime_ele.innerHTML != '0')))
		time = Number(leadtime_ele.innerHTML);		
		
	// rule 0: display "N/A" if no correct leadtime given
	if (time == null || ((time == "") && (time != '0')) || isNaN(time) || time == Number('-1')){
		callsun_ele.style.display = "inline";
	}	
	// rule 1: "Call Sun" if leadtime+1 >= 16
	else if ( time >= Number('15')){
		callsun_ele.style.display = "inline";
	}
	// rule 2: add 1 day if leadtime !=0 
	else {
		if (time != 0)
		{
			time = time + 1;
			leadtime_ele.innerHTML = time;
			leadtime_ele.style.display = "inline";
			businessdays_ele.style.display = "inline";
		}
		else
		{
			// photto: rule 3: display no leadtime at all if leadtime ==0
			ships_within_ele.style.display = "none";
			callsun_ele.style.display = "none";
			leadtime_ele.style.display = "none";
			businessdays_ele.style.display = "none";
		}
	}
}

function applyRangeRule(leadtime_range_ele){
	var min_max = leadtime_range_ele.getElementsByTagName("span");
	var min_leadtime_ele = null;
	var min_businessdays_ele = null;
	var min_callsun_ele = null;
	var max_leadtime_ele = null;	
	var max_businessdays_ele = null;
	var max_callsun_ele = null;
	var separator_ele = null;
	var length = min_max.length;

	if (min_max != null){
		// get the min and max leadtime
		for(var i=0; i<length; i++){
			var id = min_max[i].id;
			switch(id){
				case "minleadtime": 
					min_leadtime_ele = min_max[i];
					break;
				case "topleadtime":
					max_leadtime_ele = min_max[i];
					break;
				case "min_businessdays":
					min_businessdays_ele = min_max[i];
					break;
				case "max_businessdays":
					max_businessdays_ele = min_max[i];
					break;
				case "min_callsun":
					min_callsun_ele = min_max[i];
					break;
				case "max_callsun":
					max_callsun_ele = min_max[i];
					break;
				case "separator":
					separator_ele = min_max[i];
					break;
			}
		}
		
		// process
		if (min_leadtime_ele!= null && min_businessdays_ele != null && min_callsun_ele != null &&
			max_leadtime_ele!= null && max_businessdays_ele != null && max_callsun_ele != null &&
			separator_ele != null){
				
			var min_time = "";
			var max_time = "";
			
			// check if a real number is given
			if (!((min_leadtime_ele.innerHTML == String("")) && (min_leadtime_ele.innerHTML != '0')))
				min_time = Number(min_leadtime_ele.innerHTML);
				
			// check if a real number is given
			if (!((max_leadtime_ele.innerHTML == String("")) && (max_leadtime_ele.innerHTML != '0')))
				max_time = Number(max_leadtime_ele.innerHTML);
		
			var min_display = "";
			var max_display = "";
			var display = "";
		
			///// MIN TIME
		
			// rule 0: display "N/A" if incorrect leadtimes given
			if (min_time == null || ((min_time == String("")) && (min_time != '0')) || isNaN(min_time) || min_time == Number('-1'))
			{
				min_display = "Call Sun"; 
			}	
			// rule 1: "Call Sun" if a leadtime+1 >= 16
			else if (min_time >= 15){
				min_display = "Call Sun"; 
			}		
			// rule 2: add 1 day if leadtime!=0
			else {
				if (min_time != 0)
					min_time++;
				min_display = min_time; 
			}
			///// MAX TIME
					
			// rule 0: display "N/A" if incorrect leadtimes given
			if (max_time == null || ((max_time == String("")) && (max_time != '0')) || isNaN(max_time) || max_time == Number('-1'))
			{
				max_display = "Call Sun";
			}	
			// rule 1: "Call Sun" if a leadtime+1 >= 16
			else if (max_time >= 15){
				max_display = "Call Sun";
			}		
			// rule 2: add 1 day if leadtime != 0
			else {
				if (max_time != 0)
					max_time++;
				max_display = max_time;
			}
	
			
			if (min_display == max_display){
				display = min_display;
				if (display != "Call Sun"){
					//display = display + " business days";
					max_leadtime_ele.innerHTML = max_display;
					max_leadtime_ele.style.display = "inline";
					max_businessdays_ele.style.display = "inline";
				}
				else {
					if (display = "Call Sun"){
						min_callsun_ele.style.display = "inline";
					}
					//display "Call Sun"
				}
			}
			else{
				if (min_display == "Call Sun"){
					min_callsun_ele.style.display = "inline";
					separator_ele.style.display = "inline";
					max_leadtime_ele.innerHTML = max_display;
					max_leadtime_ele.style.display = "inline";
					max_businessdays_ele.style.display = "inline";
					//display = min_display + " - " + max_display + " business days";
				}
				else if (max_display == "Call Sun"){
					min_leadtime_ele.innerHTML = min_display;
					min_leadtime_ele.style.display = "inline";
					min_businessdays_ele.style.display = "inline";
					separator_ele.style.display = "inline";
					max_callsun_ele.style.display = "inline";
					//display = min_display + " business days - " + max_display;
				}
				else {
					min_leadtime_ele.innerHTML = min_display;
					min_leadtime_ele.style.display = "inline";
					separator_ele.style.display = "inline";
					max_leadtime_ele.innerHTML = max_display;
					max_leadtime_ele.style.display = "inline";
					max_businessdays_ele.style.display = "inline";					
					//display = min_display + " - " + max_display + " business days."
				}
			}
			
			//leadtime_range_ele.innerHTML = display;
			leadtime_range_ele.style.display = "inline";
		}
	}
}