/*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

    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);
    var codeInput               = document.getElementById("schoolUniformChooserPage_0_prd_" + num).getElementsByTagName("input")[0];
    var codeButton              = document.getElementById("schoolUniformConfirmPage_0_prd_" + num).getElementsByTagName("input")[0];
    var forgotSchoolCodeButton  = document.getElementById("forgotSchoolCode_0_prd_" + num).getElementsByTagName("a")[0];
    var learnMoreButtons0       = document.getElementById("schoolUniformLearnMorePage_0_prd_" + num).getElementsByTagName("a");
    var learnMoreButtons1       = document.getElementById("schoolUniformLearnMorePage_1_prd_" + num).getElementsByTagName("a");
    var logoContainer           = document.getElementById("schoolUniformPage_1_prd_" + num);
    var logoSelector            = document.getElementById("schoolUniformLogoChooser_prd_" + num).getElementsByTagName("select")[0];
    var logoSelectorContainer   = document.getElementById("schoolUniformLogo_prd_" + num);
    var logoPreviewContainer    = document.getElementById("schoolUniformLogoPreviewArea_prd_" + num);
    var missingLogoMessage      = document.getElementById("schoolUniformMissingLogoMessage_prd_" + num);
    var logoImageContainer      = document.getElementById("schoolUniformLogoImage_prd_" + num);
    var logoOptionsArr;
    var changeSchoolButton      = document.getElementById("schoolUniformChange_prd_" + num).getElementsByTagName("a")[0];
    var schoolCodeRecap         = document.getElementById("schoolUniformFeedbackChoice_prd_" + num).getElementsByTagName("span")[1];
    var schoolNameRecap         = document.getElementById("schoolUniformSchoolName_prd_" + num).getElementsByTagName("span")[0];
    var schoolDressCode         = document.getElementById("schoolUniformDressCode_prd_" + num);
    var monogramContainer       = document.getElementById("monogramSelector_prd_" + num);
    var schoolUniformError     = document.getElementById("schoolUniformErrorPage_1_prd_" + num);
    var logoPreferenceLabel    = document.getElementById("schoolUniformLogoChoice_prd_" + num).getElementsByTagName("span")[0];
    
    
    // error container and flags
    var errorContainer          = document.getElementById("schoolUniformErrorPage_0_prd_" + num);
    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();
        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 findSchoolProgramBySchoolNumber");
        	JProductDataAccessImpl.findSchoolProgramBySchoolNumber(schoolID, checkDigit, thisSU.buildLogoList);
       		doDebug("[codeEntry] after findSchoolProgramBySchoolNumber");
        	DWREngine.setAsync(true);
        	schoolDressCode.getElementsByTagName("a")[0].href=hostname+"/pdfs/school/"+schoolID+checkDigit+".pdf";
	        if (URLExists(schoolDressCode.getElementsByTagName("a")[0].href)) {
	        	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(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;
        }
        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();
        if (selection.logo != "" && selection.logo != "-1") {
            if (theBuyGrid.selection.monogrammed) {
             	schoolUniformError.innerHTML = messages.error[21].getMessageText();
             	show(schoolUniformError);
            } else {
            	hide(schoolUniformError);
            	hide(monogramContainer);
            }
            var imgSrc = "/images/school/"+selection.logo+".jpg";
            if (URLExists(imgSrc)) {
            	logoImageContainer.innerHTML ="<img src=\""+imgSrc+"\">";
            	hide(missingLogoMessage);
            } else {
            	logoImageContainer.innerHTML ="";
            	show(missingLogoMessage);
            }
            show(logoPreviewContainer);   
        } else {
        	hide(schoolUniformError);
            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
        
        schoolCode - school code
    ======================================================================*/
    this.selectSchoolCode = function(schoolCode) {
        codeInput.value = schoolCode;
        thisSU.codeEntry();
    };
    
    /*======================================================================
        Automatically enters the saved school code and clicks the "Confirm" button
        
        schoolCode - school code
    ======================================================================*/
    this.selectSavedSchoolCode = function() {
    	var savedCode = readCookie("schoolNumber");
    	var queryCode = getQueryVariable("schoolCode_0");
    	
    	// don't overwrite what's on the query string if it's there
    	if ((queryCode == "" || queryCode == null) && savedCode != null && savedCode != "") {
	        codeInput.value = savedCode;
	        thisSU.codeEntry();    	
    	}
    };    
    
    /*==============================
        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();  
    this.selectSavedSchoolCode();  
}
