var ATP_BASE = "/atp/";

var MSG_IN_STOCK = "In-stock";
var MSG_BACKORDERED = "This item is expected to ship on";
var MSG_DISCONTINUED = "no longer available";
var MSG_LOW_QTY = "In-stock. Just a few left";

var atpProdArray = new Array();
var atpProdNumArray = new Array();
var $atpDDArray = new Array();
var atpDDNumArray = new Array();
var showLow = true;

/**
* ATP on document ready
* @constructor
* @author gcornhill
*/
$(document).ready(function(){
	
	if(window.top.location.toString().indexOf("vsdcm01.limited.com")!=-1){
		
		return;

		}
	else{
			switch(getExperience("T3")){
			case "A":
			return;

			}
	}
	//Check number of dropdowns
	var numQtyDD = $('.sel-quantity').length;
	//set dropdown object array
	setDropDownObjs(numQtyDD);
});

/**
* Creates the Dropdown Set Object
*/
function DropDownSet(){
    this.color = false;
    this.size = false;
	this.dlength = false;
	this.style = false;
	this.fit = false;
	this.scent = false;
	this.product = null;
	this.number = null;
}

/**
 * Creates Drop Down Objects;Adds to an Array;Initiates Series of JSON Calls
 *
 * @param numProds The number of quantity dropdowns on the page
 */
function setDropDownObjs(numProds){

	var nmbr;

	//Loop through number of qty dropdowns on page
	for(var i=0;i<numProds;i++){

		var dSetObj = new DropDownSet();
		dSetObj.number = i;
		dSetObj.product = $('#item_'+i).val();

		if(($('#style_'+i).length > 0)){
			dSetObj.style = true;
		}
		if(($('#color_'+i).length > 0)){
			dSetObj.color = true;
		}
		if(($('#size_'+i).length > 0)){
			dSetObj.size = true;
		}
		if(($('#length_'+i).length > 0)){
			dSetObj.dlength = true;
		}
		if(($('#fit_'+i).length > 0)){
			dSetObj.fit = true;
		}
		if(($('#scent_'+i).length > 0)){
			dSetObj.scent = true;
		}

		dSetObj.product = $('#item_'+i).val();

		$atpDDArray[i] = dSetObj;
	} 

	makeJSONCalls($atpDDArray);
}

/**
 * Makes JSON Calls for Product Data
 *
 * @param dropDowns The array of dropdown set objects
 */
function makeJSONCalls(dropDowns){

	$($atpDDArray).each(function(index){

		var urlString = ATP_BASE +catCode + "-"+ this.product+".json";
		var d = this;

		if(d.style){
			$('#style_'+d.number+' option').each(function(index){
				
				if($(this).val().length < 1) return;
				
				nmbr = $(this).val();
				
				if(atpProdNumArray[nmbr] == undefined || ($('#style_'+d.number)[0].selectedIndex != 0 && atpDDNumArray[d.number] == undefined) ){
					atpProdNumArray[nmbr] = nmbr;
					urlString = ATP_BASE +catCode + "-"+ nmbr+".json";
					jsonCallHelper(d, urlString);
					setDropDownEvents(d);	
					atpDDNumArray[d.number] = d.number;
					
					
				} else {
					//setDropDownEvents
					setDropDownEvents(d);	
				}

			});
		} else {
			jsonCallHelper(d, urlString);
		}
	});
}

/**
 * Helper function to make getjson call
 *
 * @param d			The dropdown set object
 * @param urlString	The url for the request
 */
function jsonCallHelper(d, urlString){

	$.getJSON(urlString, (function(d) {
		
		return function(json) {
			var item = json.SKUS[0].PARENT_ITEM_NBR
			atpProdArray[item] = json;
			
			//single sku product
			if((json.SKUS.length == 1) && (d.size == false && d.color == false && d.scent == false  && d.style == false)){
				getATPMessage(d, "single");
			} else if ((d.size == false && ((d.color == true && $('#color_'+d.number)[0].selectedIndex == 0)|| d.scent == true)) || (d.color == false && d.size == true)){
			//If no size dropdown but color or scent OR size but no color call getATPData ahead of time
				var size = json.SKUS[0].SIZE_NAME;
				if((d.scent && $('#scent_'+d.number)[0].selectedIndex != 0)){
					var scent = $('#scent_'+d.number)[0].selectedIndex;
					getATPData(d, size, scent);
				} else {
					getATPData(d, size);
				}
				setDropDownEvents(d);
			}else if( (d.color && $('#color_'+d.number)[0].selectedIndex != 0) ||(d.size && $('#size_'+d.number)[0].selectedIndex != 0) 
				|| (d.dlength && $('#length_'+d.number)[0].selectedIndex != 0) || (d.style && $('#style_'+d.number)[0].selectedIndex != 0) 
				|| (d.fit && $('#fit_'+d.number)[0].selectedIndex != 0) || (d.scent && $('#scent_'+d.number)[0].selectedIndex != 0)){
				var size = json.SKUS[0].SIZE_NAME;
				if(d.size){
					size = $('#size_'+d.number).val();
				}
				var color = 0;
				if(d.color){
					color = $('#color_'+d.number)[0].selectedIndex;
				}
				getATPData(d, size, color);
				setDropDownEvents(d);
				
			} else {
			//Normal
				setDropDownEvents(d);
			}
		}

	})(d));

}

/**
 * Creates onchange events for dropdowns.
 *
 * @param ddsObj	The dropdown set object
 */
function setDropDownEvents(ddsObj){
	
	if(atpDDNumArray[ddsObj.number] == undefined){
		if(ddsObj.color == false){
			$('#size_'+ddsObj.number).change(function(){
				getATPMessage(ddsObj, $('#size_'+ddsObj.number).val());
			});
		} else {
			$('#size_'+ddsObj.number).change(function(){
				getATPData(ddsObj, $('#size_'+ddsObj.number).val());
			});
		}
		
		$('#color_'+ddsObj.number).change(function(){
			getATPMessage(ddsObj, $('#color_'+ddsObj.number).val());
		});
		$('#length_'+ddsObj.number).change(function(){
			resetColorDropDown(ddsObj);
		});
		$('#fit_'+ddsObj.number).change(function(){
			resetColorDropDown(ddsObj);
		});
		$('#style_'+ddsObj.number).change(function(){
			$('#atp-msg-'+ddsObj.number).hide();

			//if(ddsObj.size == false && ddsObj.scent == true && ddsObj.style == true ){
			if(ddsObj.size == false ){
				var styleVal = jQuery.trim($('#style_'+ddsObj.number).val());
				var prodObj = atpProdArray[styleVal];
				var size = prodObj.SKUS[0].SIZE_NAME;
				getATPData(ddsObj, size);
			}
			
			if(ddsObj.size == false && ddsObj.color == false && ddsObj.scent == false  && ddsObj.style == true){
				getATPMessage(ddsObj, $('#style_'+ddsObj.number).val());
			}	
			
		});
		$('#scent_'+ddsObj.number).change(function(){
			getATPMessage(ddsObj, $('#scent_'+ddsObj.number).val());
		});

		atpDDNumArray[ddsObj.number] = ddsObj.number;
	}

}

/**
 * If length changes and size still selected rerun getATPData 
 * to populate color availability
 *
 * @param ddsObj	The dropdown set object
 */
function resetColorDropDown(ddsObj){
	//check if size is selected, if so, update color dropdown selections
	var sizeVal = $('#size_'+ddsObj.number).val();
	
	if(sizeVal.length > 0){
		getATPData(ddsObj, sizeVal);
	}

}

function html_entity_decode(str) {
	var ta=document.createElement("textarea");
	ta.innerHTML=str.replace(/</g,"&lt;").replace(/>/g,"&gt;");
	var newStr = ta.value;
	return newStr;
}

/**
 * This method updates the color/scent dropdown with ATP information 
 * such as backordering
 *
 * @param ddsObj	The dropdown set object
 * @param val		The value of the option that is selected
 * @param moreVal	If the page is loaded from a "more items" event, this is the color select index
 */
function getATPData(ddsObj, val, moreVal){
	$('#atp-msg-'+ddsObj.number).hide();
	var prodNum;
	if(ddsObj.style){
		prodNum = jQuery.trim($('#style_'+ddsObj.number).val());
	} else {
		prodNum = ddsObj.product;
	}
	var prodObj = atpProdArray[prodNum];

	if(ddsObj.dlength || ddsObj.fit){
		var styleVal = "";
		if(ddsObj.dlength){
			styleVal = jQuery.trim($('#length_'+ddsObj.number).val());
		}
		if(ddsObj.fit){
			styleVal = jQuery.trim($('#fit_'+ddsObj.number).val());
		}
		if(styleVal.length < 1 ){	//no length or fit has been selected so return
			return;
		}
	}

	var sizeVal = $('#size_'+ddsObj.number).val();
	if(ddsObj.size && !(sizeVal.length > 0)){ //Check if the user selected "size" don't change color options
		return;
	}


	if(prodObj){

		if(ddsObj.scent){
			var drp = document.getElementById("scent_"+ddsObj.number);
			drp.options.length=0;
			drp.options[0] = new Option("scent","");
		} else if(ddsObj.size == true && ddsObj.color == false){
			var drp = document.getElementById("size_"+ddsObj.number);
			drp.options.length=0;
			drp.options[0] = new Option("size","");
		} else {
			var drp = document.getElementById("color_"+ddsObj.number);
			drp.options.length=0;
			drp.options[0] = new Option("color","");
		}

		var selectCount = 1;

		for (var i = 0; i < prodObj.SKUS.length; i++) { 
			
			var currVal = jQuery.trim(prodObj.SKUS[i].SIZE_NAME);
			val = jQuery.trim(val);

			if(((currVal == val) || (ddsObj.size == true && (ddsObj.color == false && ddsObj.scent == false && ddsObj.style == false))) && (prodObj.SKUS[i].AVAILABILITY != "D")){
				
				if(ddsObj.dlength || ddsObj.fit){
					var $currStyleVal = prodObj.SKUS[i].MISC;
					$currStyleVal = jQuery.trim($currStyleVal.replace('\\',''));
					
					if($currStyleVal != styleVal){
						continue;
					}
				}
				
				var textValue = jQuery.trim(prodObj.SKUS[i].COLOR_NAME);
				var optionValue = prodObj.SKUS[i].COLOR_NAME;
				var pos = textValue.indexOf("-");
				if (!(pos > 1)){
					pos = 0;
				}
				if(ddsObj.size == true && (ddsObj.color == false && ddsObj.scent == false && ddsObj.style == false)){
					textValue = jQuery.trim(prodObj.SKUS[i].SIZE_NAME);
					optionValue = prodObj.SKUS[i].SIZE_NAME;
					pos = 0;
				}
				
				textValue = textValue.substring(pos+1,textValue.length);
				
				if((prodObj.SKUS[i].AVAILABILITY).substring(0,1) == "B"){
					textValue = textValue + " *" + jQuery.trim((prodObj.SKUS[i].AVAILABILITY).substring(2,(prodObj.SKUS[i].AVAILABILITY).length));
				}
				textValue = html_entity_decode(textValue);
				optionValue = optionValue;
				drp.options[selectCount] = new Option(textValue, optionValue);

				selectCount++;
			}
			
		}
		if (selectCount == 1){
			drp.options[selectCount] = new Option("no longer available");
		}
	}
	if(moreVal != undefined && moreVal != 0){
		if(ddsObj.scent) {
			$('#scent_'+ddsObj.number)[0].selectedIndex = moreVal;
			getATPMessage(ddsObj, $('#scent_'+ddsObj.number).val());
		} else {
			$('#color_'+ddsObj.number)[0].selectedIndex = moreVal;
			getATPMessage(ddsObj, $('#color_'+ddsObj.number).val());
		}
	}
}

/**
 *  This method displays the ATP Message below the quantity dropdown
 *
 * @param ddsObj	The dropdown set object
 * @param val		The value of the option that is selected
 */
function getATPMessage(ddsObj, val){
	$('#atp-msg-'+ddsObj.number).hide();

	var atpMsg = "";
	var sizeVal = jQuery.trim($('#size_'+ddsObj.number).val());
	var colorVal = jQuery.trim($('#color_'+ddsObj.number).val());
	var scentVal = jQuery.trim($('#scent_'+ddsObj.number).val());
	if(ddsObj.dlength || ddsObj.fit){
		var styleVal = "";
		if(ddsObj.dlength){
			styleVal = jQuery.trim($('#length_'+ddsObj.number).val());
		}
		if(ddsObj.fit){
			styleVal = jQuery.trim($('#fit_'+ddsObj.number).val());
		}
		if(styleVal.length < 1 ){	//no length or fit has been selected so return
			return;
		}
	}

	if((ddsObj.color == true) && !(colorVal.length > 0)){ //Check if the user selected "size" don't change color options
		return;
	}

	var prodNum;

	if(ddsObj.style){
		prodNum = jQuery.trim($('#style_'+ddsObj.number).val());
	} else {
		prodNum = ddsObj.product;
	}

	var prodObj = atpProdArray[prodNum];
	if(prodObj){
		for (var i = 0; i < prodObj.SKUS.length; i++) { 
			var currSizeVal = jQuery.trim(prodObj.SKUS[i].SIZE_NAME);
			var currColorVal = jQuery.trim(prodObj.SKUS[i].COLOR_NAME);
			
			if(ddsObj.dlength || ddsObj.fit){
				var $currStyleVal = prodObj.SKUS[i].MISC;
				$currStyleVal = jQuery.trim($currStyleVal.replace('\\',''));
				
				if($currStyleVal != styleVal){
					continue;
				}
			}

			if(((currSizeVal == sizeVal) && (currColorVal == colorVal || (ddsObj.size == true && (ddsObj.color == false && ddsObj.scent == false && ddsObj.style == false)))) || val == "single" || currSizeVal == "OS" || ((ddsObj.size == false) && (currColorVal == colorVal)) || ((ddsObj.size == false) && (ddsObj.scent == true) && (currColorVal == scentVal)) ){
		
				switch((prodObj.SKUS[i].AVAILABILITY).substring(0,1))
				{
				
					case "A":
						atpMsg = MSG_IN_STOCK;
						break;
					case "B":
						atpMsg = MSG_BACKORDERED + " " + (prodObj.SKUS[i].AVAILABILITY).substring(2,(prodObj.SKUS[i].AVAILABILITY).length);
						break;
					case "D":
						atpMsg = MSG_DISCONTINUED;
						break;
					case "L":
						if(showLow){
							atpMsg = MSG_LOW_QTY;
						} else {
							atpMsg = MSG_IN_STOCK;
						}
						break;
				}
				
				$("#atp-msg-" + ddsObj.number).css({display:"block"});
				$("#atp-msg-" + ddsObj.number + " .atp-msg-cntnr").css({top:"",color:""});
				$("#atp-msg-" + ddsObj.number + " .atp-msg-cntnr").html(atpMsg).animate({top:"0px"}, 750, "easeOutQuad", function(){ 
						setTimeout(function(){ $("#atp-msg-" + ddsObj.number + " .atp-msg-cntnr").animate({color: "#1a1a1a"}, 1500,"easeOutQuad");}, 1000);
					});
			}

		}
	}
}

