/*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

    le.schoolUniform.js - Handles entry of school uniform data
    
    This is instantiated from a buy grid.
    
    num - Buy grid index number.

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/

function schoolUniform(num,theBuyGrid) {
    var theBuyGrid = theBuyGrid;
    var thisSU = this;
    this.sbgNum = num;
    var codeContainer           = document.getElementById("schoolUniformPage_0_prd_" + num); // the school finder tool 
    var codeInput               = document.getElementById("schoolUniformChooserPage_0_prd_" + num).getElementsByTagName("input")[0]; // school number input box
    var codeButton              = document.getElementById("schoolUniformConfirmPage_0_prd_" + num).getElementsByTagName("input")[0]; // confirm number button
    var forgotSchoolCodeButton  = document.getElementById("forgotSchoolCode_0_prd_" + num).getElementsByTagName("a")[0]; // find school link
    var learnMoreButtons0       = document.getElementById("schoolUniformLearnMorePage_0_prd_" + num).getElementsByTagName("a"); // learn more about schools pop link in school finder div container
    var learnMoreButtons1       = document.getElementById("schoolUniformLearnMorePage_1_prd_" + num).getElementsByTagName("a"); // learn more about schools pop link in logo div container
    var logoGuidlinesContainer   = document.getElementById("schoolUniformLogoGuideLines_prd_" + num); // logo guide lines div container
    var logoContainer           = document.getElementById("schoolUniformPage_1_prd_" + num); // master apply logo / school container
    var logoSelector            = document.getElementById("schoolUniformLogoChooser_prd_" + num).getElementsByTagName("select")[0]; // logo drop down box 
    var logoSelectorContainer   = document.getElementById("schoolUniformLogo_prd_" + num); // parent apply logo container schoolUniformLogo
    var logoPreviewContainer    = document.getElementById("schoolUniformLogoPreviewArea_prd_" + num); // parent logo preview div 
    var missingLogoMessage      = document.getElementById("schoolUniformMissingLogoMessage_prd_" + num); // logo preview message div
    var logoImageContainer      = document.getElementById("schoolUniformLogoImage_prd_" + num); // logo preview image div container
    var logoNumberText     		= document.getElementById("schoolUniformLogoNumberText_prd_" + num); // logo preview image description text div
    var logoOptionsArr;
    var changeSchoolButton      = document.getElementById("schoolUniformChange_prd_" + num).getElementsByTagName("a")[0]; // change school link
    var schoolCodeRecap         = document.getElementById("schoolUniformFeedbackChoice_prd_" + num).getElementsByTagName("span")[1]; // school code span ref
    var schoolNameRecap         = document.getElementById("schoolUniformSchoolName_prd_" + num).getElementsByTagName("span")[0]; // school name span ref
    var schoolDressCode         = document.getElementById("schoolUniformDressCode_prd_" + num); // school dress code div container 
    var monogramContainer       = document.getElementById("monogramSelector_prd_" + num); // reference to monogram selector div
    var schoolUniformError     = document.getElementById("schoolUniformErrorPage_1_prd_" + num); // error in logo section div 
    var logoPreferenceLabel    = document.getElementById("schoolUniformLogoChoice_prd_" + num).getElementsByTagName("span")[0]; // logo prefrence span reference ? not sure how this is used
    
    
    // error container and flags
    var errorContainer          = document.getElementById("schoolUniformErrorPage_0_prd_" + num); // error in school finder section
    var monogramErrorContainer  = document.getElementById("monogramError_prd_" + num); // monogram error condition
    var invalid                 = false;
    var applied                 = false;
    
    var selection = {
             code : "",
       schoolName : "",
             logo : "",
            price : 0
    };
    
    // public variables
    this.selection = selection;
    this.invalid = invalid;
    this.applied = applied;
    this.schoolUniformError=schoolUniformError;
    
    this.registerEvents = function() {
        // flexibility in case they add the link text back in
        var i;
        for (i = 0; i < learnMoreButtons0.length; i++) {
            learnMoreButtons0[i].onclick = thisSU.suPopup;
        }
        
        for (i = 0; i < learnMoreButtons1.length; i++) {
            learnMoreButtons1[i].onclick = thisSU.suPopup;
        }
        
        forgotSchoolCodeButton.onclick = this.suSearchPopup;
        codeButton.onclick = this.codeEntry;
        changeSchoolButton.onclick = this.changeSchool;
    };
    
    this.suSearchPopup = function() {
        //var win = window.open ("/pp/SchoolSearch.html", "SchoolSearch","resizable=yes,status=yes,scrollbars=no,toolbar=no,height=550,width=550");
        //win.focus();
    	com.landsend.school.SchoolLookupService.launchSchoolSearchDialog();
        return false;
    };
    
    this.suPopup = function() {
        LE_popup(this.href);
        return false;
    };

    /*===========================================
        Collect school code and execute Ajax call
        to get school logo options and prices.
    ===========================================*/
    this.codeEntry = function() {
    	codeInput.value = trim(codeInput.value);
        if (codeInput.value !== "" && codeInput.value.match("^[0-9]*$")) {
            selection.code = codeInput.value;
            var schoolID = codeInput.value.substring(0,codeInput.value.length-1);
            var checkDigit = codeInput.value.substring(codeInput.value.length-1);
            doDebug("[codeEntry] schoolID=" + schoolID + " checkDigit=" + checkDigit);
			DWREngine.setAsync(false);
        	doDebug("[codeEntry] before findSchoolBySchoolNumber");
        	//JSchoolFacade.findSchoolBySchoolNumber(schoolID, checkDigit, thisSU.buildLogoList);
        	
        	JSchoolFacade.findSchoolBySchoolNumber(schoolID, checkDigit,{
        		callback:thisSU.buildLogoList,
        		timeout:10000,
        		errorHandler: function(msg){doDebug("crap:"+msg)}
        	});	         	
        	
       		doDebug("[codeEntry] after findSchoolBySchoolNumber");
        	DWREngine.setAsync(true);
        	schoolDressCode.innerHTML = "<span class=\"attributeText\"><a href=\"#\" target=\"_blank\">view dress code guidelines</a> (.pdf)</span>";
        	schoolDressCode.getElementsByTagName("a")[0].href=hostname+"/pdfs/school/"+schoolID+checkDigit+".pdf";
	        if (URLExists(schoolDressCode.getElementsByTagName("a")[0].href)) {
	        	schoolDressCode.style.visibility="visible";
	        } else {
	        	schoolDressCode.innerHTML = "For Dress Code details, <br> please call 1-800-469-2222.";
	        	schoolDressCode.style.visibility="visible";
	        }
		} else {
            showErrorPopup(messages.error[19].getMessageText(true));
            errorContainer.innerHTML = messages.error[19].getMessageText();
            document.getElementById("schoolUniformChoicePage_0_prd_" + num).getElementsByTagName("span")[0].className += " errorHiLight";
            show(errorContainer);
            invalid = true;
            thisSU.invalid = true;
            eraseCookie("schoolNumber");
        }
    };
    
	// this is just an error handler for dwr exceptions
	function codeEntryErrorHandler() {
    	errorContainer.innerHTML = messages.error[33].getMessageText(true);
        document.getElementById("schoolUniformChoicePage_0_prd_" + num).getElementsByTagName("span")[0].className += " errorHiLight";
        show(errorContainer);
	    doDebug("[codeEntry] There is an Ajax problem..." + err);
	}    
    
    /*======================================
        Erase the code entry and start again
    ======================================*/
    this.changeSchool = function() {
    	show(monogramContainer);
    	hide(logoGuidlinesContainer);
        hide(logoContainer);
        hide(logoPreviewContainer);
        hide(schoolUniformError);
        schoolDressCode.style.visibility="hidden";
        logoPreferenceLabel.className = logoPreferenceLabel.className.replace(" errorHiLight","");
        show(codeContainer);
        codeInput.value = "";
        selection.code = "";
        invalid = false;
        eraseCookie("schoolNumber");
        return false;
    };
    
    /*===================================================================
        Callback from the Ajax call to build the list of logos and prices
    ===================================================================*/
    this.buildLogoList = function(request) {
        var content = {};
        if (request !== null && typeof request == "object") {
            doDebug("[buildLogoList] name=" + request.name + " code=" + request.code + " length=" + request.logoList.length);
        } else {
            showErrorPopup(messages.error[19].getMessageText(true));
            errorContainer.innerHTML = messages.error[19].getMessageText();
            document.getElementById("schoolUniformChoicePage_0_prd_" + num).getElementsByTagName("span")[0].className += " errorHiLight";
            show(errorContainer);
            invalid = true;
            thisSU.invalid = true;
            return;
        }
        //if custom school then jump to school landing page
        if(request.productionSchoolStore != null && typeof (request.productionSchoolStore) == "object") {
        	eraseCookie("schoolNumber");
        	createCookie("customSchoolNumber",selection.code);
        	window.location = "/ix/school-uniforms/index.html?tab=13&seq=1&page=1&pageSize=12&store=le&schoolStoreNum="+selection.code;
        } else {//if searching a non custom school in custom product page redirect to non custom product page 
        	var savedCode = readCookie("customSchoolNumber");
        	if(savedCode != null && savedCode != "") {
        		eraseCookie("customSchoolNumber");
        		createCookie("schoolNumber", selection.code);
        		var fullUrl = window.location.href;
        		var param = "schoolStoreNum";
        		var regex=eval("/&?"+param+"=[^&]+/")
        		fullUrl = fullUrl.replace(regex, "");
        		window.location = fullUrl;
        	}
	        hide(errorContainer);
	        invalid = false;
	        thisSU.invalid = false;
	        createCookie("schoolNumber", selection.code);
	        document.getElementById("schoolUniformChoicePage_0_prd_" + num).getElementsByTagName("span")[0].className = document.getElementById("schoolUniformChoicePage_0_prd_" + num).getElementsByTagName("span")[0].className.replace(" errorHiLight", "");
	       
	        // build the array of logo selector options 
	        logoOptionsArr = new Array();
	        if (request.logoList.length > 0) {
		        var arr = new Array();
		        arr[0] = "Select";
		        arr[1] = "0";
		        arr[2] = "-1";
		        logoOptionsArr.push(arr); 
		        var arr = new Array();
		        arr[0] = "----------------";
		        arr[1] = "0";
		        arr[2] = "-1";
		        logoOptionsArr.push(arr);
		    }
	        var arr = new Array();
	        arr[0] = "Do not add a logo to this item";
	        arr[1] = "0";
	        arr[2] = "";
	        logoOptionsArr.push(arr);
	        var i;
	        for (i = 0; i < request.logoList.length; i++) {
	            arr = new Array();
	            arr[0] = request.logoList[i].name;
	            arr[1] = request.logoList[i].price;
	            arr[2] = request.logoList[i].code;
	            logoOptionsArr.push(arr);
	        }
	                
	        doDebug("[buildLogoList] monogramContainer = " + monogramContainer);
	        selection.monogrammed = false;
	
	        hide(codeContainer);
	        show(logoContainer);
	        // we don't want to display the logoselection selector if there are no logos.
	        if (request.logoList.length > 0) {
	        	show(logoSelectorContainer);
		    } else {
	        	hide(logoSelectorContainer);
		    }   
		    doDebug("[buildLogoList] after");
	        content.schoolName = request.name;
	        schoolCodeRecap.innerHTML = selection.code;
	        schoolNameRecap.innerHTML = selection.schoolName = content.schoolName;
	
	        logoSelector.innerHTML = "";
			// loop through the returned logo list populating <option> tags in the DOM for school logo selection.
	        for (i = 0; i < logoOptionsArr.length; i++) {
	            var el = document.createElement("option");
	            if (logoOptionsArr[i][2] == "-1") {
	            	var dispText = logoOptionsArr[i][0];
	            } else {
	            	var dispText = logoOptionsArr[i][0] + " / " + toUSCurrency(logoOptionsArr[i][1]);
	            }
	            var code = logoOptionsArr[i][2];
	            doDebug("[buildLogoList] code=" + code + " dispText=" + dispText);
	            logoSelector.appendChild(el);
	            el.value = code;
	            el.text = dispText;
	        }
	         
	        var action = getQueryVariable("action")
	       	doDebug("[buildLogoList] action = " + action);
			doDebug("[buildLogoList] selection = " + selection);
	
	        if (action != null && action == "modify") {
	        	doDebug("[buildLogoList] selection.logo = " + selection.logo);
	        	thisSU.selectLogo(selection.logo);
	        } else {
	            selection.logo = logoOptionsArr[0][2];
	        	selection.price = logoOptionsArr[0][1];
			}
			doDebug("thisSU.sbgNum="+thisSU.sbgNum);
			try {
		    	theBuyGrid.buildRecap(); 
			} catch (e) {
				doDebug(e);
			}
	        logoSelector.onchange = thisSU.logoSelect;
	
			doDebug("[buildLogoList] logoOptionsArr = " +  logoOptionsArr);
			doDebug("[buildLogoList] logoOptionsArr.length = " +  logoOptionsArr.length);
	        doDebug("[buildLogoList] Logo selection: " + selection.logo);
        }  
    };
    
    /*===========================
        Call back for error cases
    ===========================*/
    this.ajaxError = function(request) {
        doDebug("[ajaxError] There was an Ajax error.");
    };
    
    /*=========================
        Logo list onclick event
    =========================*/
    this.logoSelect = function() {
    	doDebug("[logoSelect] logoOptionsArr[" + parseInt(logoSelector.selectedIndex) + "][2] = " + logoOptionsArr[parseInt(logoSelector.selectedIndex)][2]);
    	doDebug("[logoSelect] logoOptionsArr[" + parseInt(logoSelector.selectedIndex) + "][1] = " + logoOptionsArr[parseInt(logoSelector.selectedIndex)][1]);
        selection.logo = logoOptionsArr[parseInt(logoSelector.selectedIndex)][2];
        selection.price = logoOptionsArr[parseInt(logoSelector.selectedIndex)][1];
        theBuyGrid.buildRecap();
        monoLabel = document.getElementById("monogramSelector_prd_" + num).getElementsByTagName("span")[0];
        logoLabel = document.getElementById("schoolUniformLogoChoice_prd_" + num).getElementsByTagName("span")[0];
        if (selection.logo != "" && selection.logo != "-1") {
            if (theBuyGrid.selection.monogrammed) {
             	schoolUniformError.innerHTML = messages.error[21].getMessageText();
             	monoLabel.className += " errorHiLight";
             	logoLabel.className += " errorHiLight";
             	show(schoolUniformError);
            } else {
            	logoLabel.className.replace(" errorHiLight", "");
            	hide(schoolUniformError);
            	hide(monogramContainer);
            }
            var imgSrc = "/images/school/"+selection.logo+".jpg";
            if (URLExists(imgSrc)) {
            	logoNumberText.innerHTML = "Preview: Logo Number " + selection.logo;
            	logoImageContainer.innerHTML ="<img src=\""+imgSrc+"\">";
            	hide(missingLogoMessage);
            } else {
            	logoNumberText.innerHTML = "Preview: Logo Number " + selection.logo;
            	logoImageContainer.innerHTML ="";
            	show(missingLogoMessage);
            }
            show(logoPreviewContainer);   
        } else {
        	hide(schoolUniformError);
        	//First check if we are in custom school or not
        	if (!customSchool) {
        		show(monogramContainer);
        	}
        	else {
	        	if(schoolColors[theBuyGrid.selection.colorCode].monoRequired || schoolColors[theBuyGrid.selection.colorCode].monoAllowed) {
	        		show(monogramContainer);
	        	}	
        	}
            hide(logoPreviewContainer);
        }
        
        doDebug("[logoSelect] Logo selection: " + selection.logo);
        doDebug("[logoSelect] Logo price: " + selection.price);
    };
    
    /*/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
    
        Dynamic Selectors similar to those in the standard buy grid.
    
    /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\*/
    
    /*======================================================================
        Automatically enters the school code and clicks the "Confirm" button
        called from  make grid selections and once called by school finder tool, but now it calls selectFindSchool
        schoolCode - school code (this method totally goes away and is replaced by call to selectFindSchool, we never need to build custom logo list from this method
    ======================================================================*/
    this.selectSchoolCode = function(schoolCode) {
    	var savedCode = readCookie("customSchoolNumber");
    	if(savedCode != null && savedCode != "" && customSchool) {
    			codeInput.value = savedCode;
    			thisSU.buildCustomLogoList();
    	} else {
    		savedCode = readCookie("schoolNumber");
    		if (savedCode != null && savedCode != "") {
    	        codeInput.value = savedCode;
    	        thisSU.codeEntry();    	
        	}
    	}
    };
    
    /*======================================================================
        Automatically enters the saved school code and clicks the "Confirm" button
        
        schoolCode - school code - this is only ever called when a non custom school page loads or when a color is changed for a custom school
    ======================================================================*/
    this.selectSavedSchoolCode = function() {
    	var savedCode = readCookie("customSchoolNumber");
    	var queryCode = getQueryVariable("schoolCode_0");
    	if(savedCode != null && savedCode != "" && customSchool) { // when a color is changed for a custom school
    		if ((queryCode == "" || queryCode == null)) {
    			codeInput.value = savedCode;
    			thisSU.buildCustomLogoList();
    		}
    	} else { // this is only ever called when a non custom school page loads via the init method
    		savedCode = readCookie("schoolNumber");
    		if ((queryCode == "" || queryCode == null) && savedCode != null && savedCode != "") {
    	        codeInput.value = savedCode;
    	        thisSU.codeEntry();    	
        	}
    	}
    };    
    
     this.buildCustomLogoList = function() {
    	codeInput.value = trim(codeInput.value);
        if (codeInput.value !== "" && codeInput.value.match("^[0-9]*$")) {
            selection.code = codeInput.value;
            hide(logoPreviewContainer)
            hide(schoolUniformError);
            hide(errorContainer);
            hide(monogramErrorContainer);
            invalid = false;
            thisSU.invalid = false;
            document.getElementById("schoolUniformLogoChoice_prd_" + num).getElementsByTagName("span")[0].className = document.getElementById("schoolUniformLogoChoice_prd_" + num).getElementsByTagName("span")[0].className.replace(" errorHiLight", "");
            document.getElementById("schoolUniformChoicePage_0_prd_" + num).getElementsByTagName("span")[0].className = document.getElementById("schoolUniformChoicePage_0_prd_" + num).getElementsByTagName("span")[0].className.replace(" errorHiLight", "");
            if (document.getElementById("monogramChooser_prd_" + num) != null) {
            	document.getElementById("monogramChooser_prd_" + num).getElementsByTagName("span")[0].className = document.getElementById("monogramChooser_prd_" + num).getElementsByTagName("span")[0].className.replace(" errorHiLight", "");
            } 
            // build the array of logo selector options 
            logoOptionsArr = new Array();
            if (schoolColors[theBuyGrid.selection.colorCode].logos.length > 0 && (schoolColors[theBuyGrid.selection.colorCode].logos.length != 1 || schoolColors[theBuyGrid.selection.colorCode].logoAllowed )) {
    	        var arr = new Array();
    	        arr[0] = "Select";
    	        arr[1] = "0";
    	        arr[2] = "-1";
    	        logoOptionsArr.push(arr); 
    	        var arr = new Array();
    	        arr[0] = "----------------";
    	        arr[1] = "0";
    	        arr[2] = "-1";
    	        logoOptionsArr.push(arr);
    	    }
            var arr;
            if(!schoolColors[theBuyGrid.selection.colorCode].logoRequired) {
            	arr = new Array();
            	arr[0] = "Do not add a logo to this item";
            	arr[1] = "0";
            	arr[2] = "";
            	logoOptionsArr.push(arr);
            }	
            var i;
            for (i = 0; i < schoolColors[theBuyGrid.selection.colorCode].logos.length; i++) {
                arr = new Array();
                arr[0] = schoolColors[theBuyGrid.selection.colorCode].logos[i].name;
                arr[1] = schoolColors[theBuyGrid.selection.colorCode].logos[i].price;
                arr[2] = schoolColors[theBuyGrid.selection.colorCode].logos[i].code;
                logoOptionsArr.push(arr);
            }
                    
            doDebug("[buildCustomLogoList] monogramContainer = " + monogramContainer);
            selection.monogrammed = false;
            
            if(schoolColors[theBuyGrid.selection.colorCode].logoRequired || (!schoolColors[theBuyGrid.selection.colorCode].monoRequired && !schoolColors[theBuyGrid.selection.colorCode].monoAllowed)) {
            	hide(monogramContainer);
            } else {
            	show(monogramContainer);
            }
            
            hide(codeContainer);
            show(logoContainer);
            // we don't want to display the logoselection selector if there are no logos.
            if (schoolColors[theBuyGrid.selection.colorCode].logos.length > 0) {
            	show(logoGuidlinesContainer);
            	show(logoSelectorContainer);
    	    } else {
    	    	hide(logoGuidlinesContainer);
            	hide(logoSelectorContainer);
    	    }   
    	    doDebug("[buildCustomLogoList] after");
            schoolCodeRecap.innerHTML = selection.code;
            schoolNameRecap.innerHTML = selection.schoolName = customSchoolName;

            logoSelector.innerHTML = "";
    		// loop through the returned logo list populating <option> tags in the DOM for school logo selection.
            for (i = 0; i < logoOptionsArr.length; i++) {
                var el = document.createElement("option");
                if (logoOptionsArr[i][2] == "-1") {
                	var dispText = logoOptionsArr[i][0];
                } else {
                	var dispText = logoOptionsArr[i][0] + " / " + toUSCurrency(logoOptionsArr[i][1]);
                }
                var code = logoOptionsArr[i][2];
                doDebug("[buildCustomLogoList] code=" + code + " dispText=" + dispText);
                logoSelector.appendChild(el);
                el.value = code;
                el.text = dispText;
            }
             
            var action = getQueryVariable("action")
           	doDebug("[buildCustomLogoList] action = " + action);
    		doDebug("[buildCustomLogoList] selection = " + selection);

            if (action != null && action == "modify") {
            	doDebug("[buildCustomLogoList] selection.logo = " + selection.logo);
            	thisSU.selectLogo(selection.logo);
            } else {
                selection.logo = logoOptionsArr[0][2];
            	selection.price = logoOptionsArr[0][1];
    		}
    		doDebug("thisSU.sbgNum="+thisSU.sbgNum);
    		try {
    	    	theBuyGrid.buildRecap(); 
    		} catch (e) {
    			doDebug(e);
    		}
    		
            logoSelector.onchange = thisSU.logoSelect;
            if(schoolColors[theBuyGrid.selection.colorCode].logoRequired && schoolColors[theBuyGrid.selection.colorCode].logos.length == 1) {
            	logoSelector.selectedIndex = 0;
            	thisSU.logoSelect();
    		}

    		doDebug("[buildCustomLogoList] logoOptionsArr = " +  logoOptionsArr);
    		doDebug("[buildCustomLogoList] logoOptionsArr.length = " +  logoOptionsArr.length);
            doDebug("[buildCustomLogoList] Logo selection: " + selection.logo);

            schoolDressCode.style.visibility="hidden";
		} 
    };
     
    /*==============================
        Selects a logo from the list
        
        logo - logo code
    ==============================*/
    this.selectLogo = function(logo) {
        for (var i=0; i < logoOptionsArr.length; i++) {
            if (logoOptionsArr[i][2] == logo) {
                logoSelector.options[i].selected = "selected";
                selection.logo = logoOptionsArr[i][2];
                selection.price = logoOptionsArr[i][1];
                theBuyGrid.buildRecap();
                doDebug("[selectLogo] Logo selected: " + selection.logo);
            }
        }
    };
    
    this.registerEvents();
    if(!customSchool) {
    	this.selectSavedSchoolCode();
    } else {
    	var schoolNum = getQueryVariable("schoolStoreNum");
    	if(schoolNum != null && schoolNum != "" ) {
    		eraseCookie("schoolNumber");
    		createCookie("customSchoolNumber",schoolNum);
    	}
    }
}

function showSchoolCheckList(schoolNumber) {
	com.landsend.school.SchoolLookupService.launchSchoolDressCodeDialog(schoolNumber);
//	subWindow = window.open('/pp/SchoolChecklist.html?schoolStoreNum='+schoolNumber,'uniform_checklist','resizable=yes,status=yes,scrollbars=yes,toolbar=no,height=550,width=550');
//	subWindow.focus();
	return false;
}
