var jsonData;
var resizeText = function(textContainer,maxWidth) {
  el = document.getElementById(textContainer);
  elFontSize = $("#"+textContainer+"").css("font-size");
  elFontSize= elFontSize.replace(/px/,"");
  elWidth = el.offsetWidth;
  while (elWidth > maxWidth) {
    elFontSize = elFontSize-1;
    $("#"+textContainer+"").css("font-size",elFontSize+"px");
    elWidth = el.offsetWidth;
    }
};
$(function(){
    try {
    resizeText("preText","265");
    }
    catch(er) {}
	$('input.form2of2').click(function(){
		var emailConfirmation1 = $("input[name='emailAddress']").val();
		$("input[name='emailAddressConfirmation']").val(emailConfirmation1);
	});

    $('input.searchZipcode').keyup(function(){
        if (campusLocation.checkDependency()){
            campusLocation.getCampuses();
        }
    });
    
    $('select.programOfInterest').change(function(){
        dynamicQuestions.reset();
        var programId = $(this).val();
        //show relevant questions
        if (programId != ""){
            dynamicQuestions.reveal(programId);
            showProgramDescriptionAndTitles.belowSchoolPicture(programId);
        } else {
        showProgramDescriptionAndTitles.sidebarReset();
   		}  
    });

    $('select.campusLocation').change(function() {
        filterDesiredAreaOfStudy.inTheDropDown($(this).val());
    });

	$('input[name="answersMap[14]"]').click(function(){
		if( $('input[name="answersMap[14]"]:checked').val() == '0,14') {
			$('.dynamicText\\[15\\]').show();
		}
		else {
			$('.dynamicText\\[15\\]').hide();
		}
	});

    var filterDesiredAreaOfStudy = {
        inTheDropDown : function(campusId) {
            var currentvalue = $('select.programCategoryGroups')[0].value;
            if(jsonData.categoryGroupIdsByCampusId != null) {
                if(jsonData.categoryGroupIdsByCampusId[campusId] != null) {
                    $('select.programCategoryGroups').empty();
                    $('select.programCategoryGroups').append('<option value="">---Select---</option>');
                    $(jsonData.categoryGroupIdsByCampusId[campusId]).each(function() {
                        if(this.value != null & this.label != null) {
                            $('select.programCategoryGroups').append('<option value="'+this.value+'">'+this.label+'</option>');
                        }
                    });

                    $('select.programCategoryGroups')[0].value = currentvalue;
                                        
                    return false;
                }

                $('select.programCategoryGroups')[0].value = currentvalue;
            }
        }
    }

    var campusLocation = {
        element: $('select.campusLocation'),
        reset: function(){
            campusLocation.element.empty();
            campusLocation.element.append('<option value="">---Select---</option>');
        },
        checkDependency: function(){
            //only process 5 digit zipcodes
            if (campusLocation.getZipCode().length != 5){
                campusLocation.reset();
                return false;
            }
            
            return true;
        },
        getCampuses: function(){
            $.ajax({type: 'POST', url: '/dynamic/school-form/campusesByZip', data: 'searchZipCode='+campusLocation.getZipCode()+'&clientId='+clientId,
                success: function(jsonObject){
                    jsonData = eval('(' + jsonObject + ')');
                    
                    if (jsonData.message){//message returned on zipcode lookup errors only
                        campusLocation.renderError(jsonData.message);
                    } else {
                        campusLocation.update(jsonData.campuses);
                        selectedCampus = campusLocation.getCampusLocation();
                        //alert(selectedCampus);
                        filterDesiredAreaOfStudy.inTheDropDown(selectedCampus);
                    }
                }
            });
        },
        getZipCode: function(){
            return $('input.searchZipcode').val();
        },
        getCampusLocation: function(){
            return $('select.campusLocation').val();
        },
        update: function(campuses){
            campusLocation.reset();
            if(campuses.length == 0) {
        	    alert('We\'re sorry, there are no Campus Locations in your area. Please try a different Zip Code.');           	
            }  
            $(campuses).each(function(){
                var selected = '';
                if (campusLocationId == this.value || campusLocationIdFromBrowse == this.value) {
                    selected = 'selected="selected"';
                }
                campusLocation.element.append('<option value="'+this.value+'" '+selected+'>'+this.label+'</option>');
            });
        },
        renderError: function(message){
            //reuse existing validation decorator with constructed error object
            var error = {
                first: true,
                errorField: $('.zipcode').get(0),
                errorFocusField: $('.zipcode').get(0),
                errorMessage: message
            };
           
            lmbValidationErrorDisplayer.showFirstError.render(error);
        }
    };

    try {
        if($('select.campusLocation').length > 0
                && $('input.searchZipcode')[0].value != "") {
            $.ajax({type: 'POST', url: '/dynamic/school-form/campusesByZip', data: 'searchZipCode='+campusLocation.getZipCode()+'&clientId='+clientId,
                success: function(jsonObject){
                    jsonData = eval('(' + jsonObject + ')');

                    if (jsonData.message){//message returned on zipcode lookup errors only
                        campusLocation.renderError(jsonData.message);
                    } else {
                        campusLocation.update(jsonData.campuses);
                        selectedCampus = campusLocation.getCampusLocation();
                      //alert('onload: '+selectedCampus);
                        filterDesiredAreaOfStudy.inTheDropDown(selectedCampus);
                    }

                    $('select.campusLocation')[0].value = campusLocationIdFromBrowse;
                }
            });
        }
    } catch(ex) {
    }
    
    var dynamicQuestions = {
        reset: function(){
            $('.questions').hide();
            $('input#directoryQuestions').val('directoryQuestions');            
        },
        reveal: function(programId){
            $(requiredQuestions[programId]).each(function(){
                $('.dynamicQuestion\\['+this+'\\]').parents('.questions').show();
                $('.dynamicRadio\\['+this+'\\]').show();
            	$('.dynamicText\\['+this+'\\]').show();
            });

            //populate hidden field for validation
            var questionIds = new Array();

            //determine the question number by parsing class name
            $('[class*="dynamicQuestion"]').parents(':visible.questions').each(function(){
                $(this).children('p[class!="label"]').children('select');
                var selectorClass = $(this).children('p[class!="label"]').children('select').attr('class');
                var regEx = new RegExp("dynamicQuestion\\[(\\d\*)\\]");
                var matchArray = regEx.exec(selectorClass);
                selectorClass = matchArray[1];
                questionIds.push(selectorClass);
            });

            $(':visible[class*="dynamicRadio"][class^="radioQuestions"]').each(function(){
                var selectorClass = $(this).attr('class');
                var regEx = new RegExp("dynamicRadio\\[(\\d\*)\\]");
                var matchArray = regEx.exec(selectorClass);
                selectorClass = matchArray[1];
                questionIds.push(selectorClass);
            });

        	$(':visible[class*="dynamicText"][class^="questions"]').each(function(){
            	var selectorClass = $(this).attr('class');
            	var regEx = new RegExp("dynamicText\\[(\\d\*)\\]");
            	var matchArray = regEx.exec(selectorClass);
            	selectorClass = matchArray[1];
            	questionIds.push(selectorClass);
        	});

            var questionOrder = '';
            $(questionIds).each(function(index){
                questionOrder += this;
                if (index != ($(questionIds).length - 1)){
                    questionOrder += ',';
                }
            });

            $('input#directoryQuestions').val(questionOrder);
			if( $('input[name="answersMap[14]"]:checked').val() == '0,14') {
				$('.dynamicText\\[15\\]').show();
			}
			else {
				$('.dynamicText\\[15\\]').hide();
			}				
        }
    };

    var showProgramDescriptionAndTitles = {
        belowSchoolPicture : function(programId) {
            if(programDescriptionsAndTitles[programId] != null) {
            	$('div.campusCopy').hide();
                $('.programDescription').remove();
                $('.programTitle').remove();
                $('.picture').after('<div class="programDescription">' + programDescriptionsAndTitles[programId].description + '</p>');
                $('.picture').after('<div class="programTitle">' + programDescriptionsAndTitles[programId].title + '</p>');
            }
        },
        sidebarReset : function() {
			dynamicQuestions.reset();
			$('.programDescription').remove();
			$('.programTitle').remove();
			$('div.campusCopy').show();
        }
    }    


    try {
        if(preSelectedProgramId != "") {
            $('select.programOfInterest')[0].value = preSelectedProgramId;
            dynamicQuestions.reset();
            
            //show relevant questions
            dynamicQuestions.reveal(preSelectedProgramId);
            showProgramDescriptionAndTitles.belowSchoolPicture(preSelectedProgramId);
        } else {
        	showProgramDescriptionAndTitles.sidebarReset();
   		}
   	        
    } catch(ex) {
        //a non critical error happened while pre-selecting fields
    }
});
