var APP = {};

/* -----------------------------------*/
/* ---------->>> GLOBAL <<<-----------*/
/* -----------------------------------*/

APP.Global = {       
   firstSub:               false,
   firstProgram:           false,
   careerClickMode:        false,
   constantsOpen:          false,
   expanding:              false,
   pcFilter:               'search keywords',
   programload:            '',
   scheduleOverlayActive:  false,
   calEvents:              [],
   programTabs:            '',
   currHash:               '',
   pendingReq:             null,
   sr1:                    null,
   courseFinderUrl:        '/programs-z',
   partofTermUrl:          '/sites/all/modules/sanjac_controller/controller/',
   courseDetailsUrl:       '/api/courses/classes',
	courseDetailsUrlCPD:    '/api/courses/classes',
   //courseDetailsUrl:       '/sites/default/themeglobal/includes/course-detail.php',
   descriptionUrl:         '/api/courses/description',
   coreRequirementUrl:     '/api/core-requirements',
   searchUrl:              '/context-search',
   directoryUrl:           '/api/directory', 
   //directoryUrl:           '/directory/search/adv', 
   calendarUrl:            '/event-calendar/api',
   helpdeskUrl:            '/api/faq/query',
   helpdeskPostBackUrl:    '/api/process/help-desk-ticket',
   alertUrl:               '/api/alert',
   topTenNewsUrl:          '/api/top-ten-news',
   northMapUrl:            '/map-api/?campus=n',
   centralMapUrl:          '/map-api/?campus=c',
   southMapUrl:            '/map-api/?campus=s'
	
         
};


/* -----------------------------------*/
/* -------->>> UTILITIES <<<----------*/
/* -----------------------------------*/

APP.Utils = {
   truncate:function(str, limit){
   	var bits, i;
   	bits = str.split('');
   	if (bits.length > limit) {
   		for (i = bits.length - 1; i > -1; --i) {
   			if (i > limit) {
   				bits.length = i;
   			}
   			else if (' ' === bits[i]) {
   				bits.length = i;
   				break;
   			}
   		}
   		bits.push('...');
   	}
   	return bits.join('');
   },
   
   isValidEmailAddress: function(emailAddress) {
      var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
      return pattern.test(emailAddress);
   },
   
   fitStringToWidth: function(str,width,className) {
      // str    A string where html-entities are allowed but no tags.
      // width  The maximum allowed width in pixels
      // className  A CSS class name with the desired font-name and font-size. (optional)
      // ----
      // _escTag is a helper to escape 'less than' and 'greater than'
      function _escTag(s){ return s.replace("<","&lt;").replace(">","&gt;");}

      //Create a span element that will be used to get the width
      var span = document.createElement("span");
      //Allow a classname to be set to get the right font-size.
      if (className) span.className=className;
      span.style.display='inline';
      span.style.visibility = 'hidden';
      span.style.padding = '0px';
      document.body.appendChild(span);

      var result = _escTag(str); // default to the whole string
      span.innerHTML = result;
      // Check if the string will fit in the allowed width. NOTE: if the width
      // can't be determinated (offsetWidth==0) the whole string will be returned.
      if (span.offsetWidth > width) {
         var posStart = 0, posMid, posEnd = str.length, posLength;
         // Calculate (posEnd - posStart) integer division by 2 and
         // assign it to posLength. Repeat until posLength is zero.
         while (posLength = (posEnd - posStart) >> 1) {
            posMid = posStart + posLength;
            //Get the string from the begining up to posMid;
            span.innerHTML = _escTag(str.substring(0,posMid)) + '&hellip;';

            // Check if the current width is too wide (set new end)
            // or too narrow (set new start)
            if ( span.offsetWidth > width ) posEnd = posMid; else posStart=posMid;
         }

         result = '<abbr title="' +
         str.replace("\"","&quot;") + '">' +
         _escTag(str.substring(0,posStart)) +
         '&hellip;<\/abbr>';
      }
      document.body.removeChild(span);
      return result;
   },
   
   getParameterByName: function(name){
     name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
     var regexS = "[\\?&]"+name+"=([^&#]*)";
     var regex = new RegExp( regexS );
     var results = regex.exec( window.location.href );
     if( results == null )
       return "";
     else
       return results[1];
   }
   
   
};


/* -----------------------------------*/
/* ---------->>> EVENTS <<<-----------*/
/* -----------------------------------*/

APP.Events = {
   careerNavRollOver: function(o){
      if(!APP.Global.careerClickMode){
         APP.Dom.careerNavChange(this);
      }
   },
   
   careerSubRollOver: function(o){
      if(!APP.Global.careerClickMode){
         APP.Dom.careerSubChange(this);
      }
   },
   
   careerNavClick: function(o){
      if(($(this).hasClass('active')) && (APP.Global.careerClickMode)){
         APP.Global.careerClickMode = false;
      }else{
         APP.Global.careerClickMode = true;
         APP.Dom.careerNavChange(this);
      }
   },
   
   careerSubClick: function(o){
      if(($(this).hasClass('active')) && (APP.Global.careerClickMode)){
         APP.Global.careerClickMode = false;
      }else{
         APP.Global.careerClickMode = true;
         APP.Dom.careerSubChange(this);
      }
   },
   
	printClick: function(o){
		window.print();
    },
    
   printLink: function(o){
      o.preventDefault();
      var url = $(this).attr('href');
     // console.info("url=" + url);

      $("#printCanavs").attr("src", url);
     // $("#printCanavs").attr("name", "printCanavs");
      $("#printCanavs").css("height", "1px");
      $("#printCanavs").css("width", "1px");
      $("#printCanavs").css("overflow", "hidden");
      
      setTimeout(APP.Events.printIframe,1000);
     
    },
    printIframe: function(){
        window.frames['printCanavs'].focus();
        window.frames['printCanavs'].print();
    },
	emailLinkClick: function(o){
		mail_str = "mailto:?subject=Check this out: " + document.title;
		mail_str += "&body=I thought you might be interested in this page from the San Jacinto College website, " + document.title;
		mail_str += ". You can view it at, " + location.href;
		location.href = mail_str;		
	},
	
   constantsClick: function(o){
      o.preventDefault();
      if(!APP.Global.constantsOpen){
         APP.Dom.toggleConstants(true);
         APP.Global.constantsOpen = true;
      }else if(($(this).hasClass('active')) && (APP.Global.constantsOpen)){
         APP.Dom.toggleConstants(false);
         APP.Global.constantsOpen = false;
         $(this).removeClass('active');
         return false;
      }
      $('.top-nav li a.active').removeClass('active');
      $(this).addClass('active');
      var url = $(this).attr('rel');
      APP.Events.constantsLoad(url);
   },
   
   constantsLoad: function(url){
      $('#constantsHolder').load(url, {
         beforeSend: function(){
            $('#constantsSpinner').show();
            $('#constantsHolder').html('');
         }
      }, function(){
         $('#constantsSpinner').hide();
         APP.Inits.constantsEvents();
      });
   },
   
   mycampusClick: function(o){
      o.preventDefault();
      if($(this).hasClass('active')){return false;}
      $('.myCampus').filter('.active').removeClass('active').html('set as my campus');
      $(this).addClass('active').html('my campus');
      var cs = $(this).attr('id').replace('campus_', '');
      //save campus to cookie
      $.cookie('sjcc_mycampus', cs, { expires: 365, path: '/'});
      //send campus via ajax to be set as a session var
      $.post("setcampus.php", { name: cs});
   },
   
   expanderClick: function(o){
      var expandable = $($(this).next(':first'));
      var h;
      if($(this).hasClass('active')){
         $(this).removeClass('active');
         h = 0;
      }else{
         $(this).addClass('active');
         h = expandable.children('.expandHolder').height();
      }
      //stop() kills any running effects on the element... brilliant!
      expandable.stop().animate({height: h}, function(){
         APP.Global.expanding = false;
      });
   },
   
   termFilter: function(o){
        o.preventDefault();
        var s1 = $('#crb').val();
        var s2 = $('#termSelectApi').val();
        var params = {'courseid':s1, 'terms':s2, 'AJC':true };
        $('#classSpinner').show();
        $('#searchSpinner').show();
        APP.Events.loadIndCourses(APP.Global.courseDetailsUrl, params);
     },
     
    partTermFilter: function(o){
         o.preventDefault();
         $('#partOfTermSelect').html('<option value="" selected="selected" >Loading...</option>');
         $('#partOfTermSelect').load(APP.Global.partofTermUrl, {'func': 'part_of_term', 'term': $('#termSelect').val(), 'print': true}, function(){
          });
    },
    
    programFilter: function(o){
      o.preventDefault();
      var q = $.trim($('#programsCoursesSearch').val());
      var s1 = $('#campusesSelect').val();
      var s2 = $('#termSelect').val();
      var s3 = $('#partOfTermSelect').val();
      s1 = (s1 == "any") ? '' : s1;
      s2 = (s2 == "any") ? '' : s2;
      s3 = (s3 == "any") ? '' : s3;
      q = ((q == APP.Global.pcFilter) || (q == 'search keywords')) ? '' : q;
      $('#spinner').show();
      $('#searchSpinner').show();
      $('#courseSearchBtn').hide();
      
      //ADDED THIS TO ALLOW BACK BUTTON TO KEEP RESULTS
      var params = { 'q':q , 'campuses':s1, 'terms':s2, 'partofterm':s3 };
      var newquery;
      var newqueryOpp = '';
      var newParams;
      var querystring = location.search;
      var currquery = querystring.substring(1); 
      
      if(currquery != '?'){
         newqueryOpp = '?';
      }else{
         newqueryOpp = '&';
      }
      
      if(!APP.Events.testQueryString('qs')){
        newParams = 'qs=' + q;
      }
      
      
     if(!APP.Events.testQueryString('campus')){
       //newParams = '&campus=' + s1;
     }
      
     if(!APP.Events.testQueryString('trm_code')){
        //newParams = '&trm_code=' + s2;
     }
     
     //newquery = (newqueryOpp + newParams);
     //location.href += newquery;
     APP.Events.loadCourses(APP.Global.courseFinderUrl, params, true);
   },
   
   testQueryString: function(param){
      var newParam = '';
      var querystring = location.search;
      if(querystring.indexOf(param + '=') != -1){
         return true;
      }else{
         return false;
      }
   },
   
   loadIndCourses: function(url, params){
      $('#classes').hide();
      $("#classes").load(url, params, function(){
         $('#classSpinner').hide();
         REGASST.Inits.regAsstSetup();
         APP.Inits.courseFinderSetup();
         $('#classes').show();
      });
   },
   
   loadCourses: function(url, params, isSearch){

      //SET TO TAB 1
      $('#tabs').tabs( "select" , 0);
      if(isSearch){
         $('#searchSpinner').show();
      }
      $('#spinner').show();
      $('#programsCoursesFilter a.searchClose').hide();

      $("#courses").load(url, params,function(){
         if(isSearch){
            $('#programsCoursesFilter a.searchClose').show();
            $('#programsCoursesFilter a.searchClose').unbind('click', APP.Events.resetCourseFilters);
            $('#programsCoursesFilter a.searchClose').bind('click', APP.Events.resetCourseFilters);
            $('#searchSpinner').hide();
            $('#courseSearchBtn').show();
         }
			$(".iframe").colorbox({width:"905px", height:"439px", iframe:true, title:"Course Syllabus"});
         APP.Inits.initExpanders();

         	REGASST.Inits.regAsstSetup();


         $('#spinner').hide();        
         $('li.pager-item a').each(function(i, el){
            $(el).bind('click', APP.Events.coursesAjaxPaging);
         });
         APP.Inits.courseFinderSetup();
      });
   },
   
   resetCourseFilters: function(o){
      o.preventDefault();
      //SET TO TAB 1
      $('#tabs').tabs( "select" , 0);
      $('#programsCoursesSearch').val(APP.Global.pcFilter);
      $('#programsCoursesSearch').trigger('blur');
      $('#programsCoursesFilter a.searchClose').hide();
      $('#spinner').show();
      $('#searchSpinner').show();
      $('#courseSearchBtn').hide();
      $("#courses").load(APP.Global.courseFinderUrl + "?noCache="+ Number(new Date()), function(){//Server was returning 304 not modified
         $('#spinner').hide();
         $('#searchSpinner').hide();
         $('#courseSearchBtn').show();
         $('li.pager-item a').each(function(i, el){
            $(el).bind('click', APP.Events.coursesAjaxPaging);
         });
         APP.Inits.initExpanders();
         REGASST.Inits.regAsstSetup();
         APP.Inits.courseFinderSetup();
      });
   },
   
   coursesAjaxPaging: function(o){
      o.preventDefault();
      var _href = $(this).attr('href');
      $('#spinner').show();
      var newHash = _href.split('?')[1].replace('=', '');
      location.hash = newHash;
      APP.Events.loadCourses(_href, null, false);
   },
   
   mapModalSetup: function(){
      $('.dropdown').each(function(i, el){
         $(el).children('span').click(function(o){
            o.preventDefault();
         }).mouseover(function(){
            $($(this).children('ul')).show();
         }).mouseout(function(){
            $($(this).children('ul')).hide();
         });
      });
      
      $('.dropdown li').each(function(i, el){
         $(el).click(function(){
            $(this).parents('span').children(':first').html($(this).html());
            $(this).parents('ul').hide();
            $('#googleMapFrame').attr('src', APP.Global[$(this).attr('rel')]);
         });
      });
   },
   
   changeCalendar: function(o){
      o.preventDefault();
      var dir = $(this).attr('class');
      if(dir === 'next'){
         
      }
      if(dir === 'prev'){
         
      }
   },
   
   navLock: function(o){
	   o.preventDefault();  
 	   if($(this).hasClass('locked')){
         APP.Events.clearNavLock();
         return false;
      }
      APP.Events.clearNavLock();
      var div = $(this).parent().children('div:first');     
	   div.append('<a href="#" class="closeBtn" onclick="APP.Events.clearNavLock(); return false;" title="Click to close"></a>');
	   $(this).parent().css('position', 'relative');
	   div.show();
	   $(this).addClass('locked');
   },
   
   clearNavLock: function(o){
      if(o){
         o.preventDefault();
      }
      $('a.locked:first').parent().children('div:first').attr({'style' : ''});
      $('a.locked:first').parent().children('div:first').children('a.closeBtn:first').remove();
      $('a.locked:first').parent().attr({'style' : ''});
      $('a.locked:first').removeClass('locked');
   },
   
   bbToggle: function(o){
      o.preventDefault();
      var height;
      var holder = $(this).parents('.contentBody:first');
      var _h = holder.children('.contentHeight:first');
      var ch;
      if($(this).hasClass('active')){
         //close
         $(this).removeClass('active');
         holder.stop().animate({'height': '42px'}, function(){
           _h.hide();
           holder.removeAttr('style');
         });
      }else{
         //open
         $(this).addClass('active');
         _h.show();
         ch = holder.height();
         holder.css('height', 'auto');
         height = holder.height();
         holder.css('height', ch);
         holder.stop().animate({'height': height}, 300, function(){
            holder.css('height', 'auto');
         });
      }
   },
   
   bindCbox: function(){
      $('div.class-list a').each(function(i, el){
         $(el).bind('click', APP.Events.loadCoreSchedule);
      });
      $('#courseScroll').bind('scroll', APP.Events.cboxScroll);
   },
	
   
   loadCourseDescription: function(o){
      o.preventDefault();
      var btn = $(this);
      btn.text('Loading...');
      var loader = $($(this).parents('.class-list-holder:first').children('.descLoader:first'));
      var container = $($(this).parents('.class-list-holder:first'));
      var accordian = $($(this).parents('.ui-accordion-content:first'));
      
      var _rel = $(this).attr('rel');
      loader.load(APP.Global.descriptionUrl, {'courseid': _rel}, function(){
         $('#classLoaderLoader').hide();
         container.stop().animate({
            left: 0
         });
         accordian.stop().animate({
            height: (loader.height() + 25)
         });
         btn.text('View Description');
         $('a.classesBtn:first', loader).bind('click', APP.Events.loadCoreSchedule);
         $('.detailsBtnBack', loader).bind('click', APP.Events.closeCourseDescription);
      });
   },
   
   loadElectives: function(o){
      o.preventDefault();
      var btn = $(this);
      var loader = $($(this).parents('.class-list-holder:first').children('.descLoader:first'));
      var container = $($(this).parents('.class-list-holder:first'));
      var accordian = $($(this).parents('.ui-accordion-content:first'));
      var list = $(this).parent().find('.rule-list:first').clone();
      list.css({
         display: 'block'
      });
      loader.empty().append(list);
      
      $('#classLoaderLoader').hide();
      container.stop().animate({
         left: 0
      });
      accordian.stop().animate({
         height: (loader.height() + 25)
      });

      $('a.descBtn', loader).bind('click', APP.Events.loadCourseDescription);
      $('.detailsBtnBack', loader).bind('click', APP.Events.closeCourseDescription);
      //$('a.classesBtn:first', loader).bind('click', APP.Events.loadCoreSchedule);

   },
   
   electivesBack: function(o){
     o.preventDefault();
     var el = $(this);
     var holder = el.parents('.scrollLink:first');
     holder.stop().animate({
        left: 0
     }, function(){
        holder.height(holder.data('height'));
        holder.find('.rule-list:first').hide();
     });
      
   },
   
   loadCoreSchedule: function(o){
      o.preventDefault();
      var btn = $(this);
      btn.text('Loading...');
      var loader = $($(this).parents('.class-list-holder:first').children('.classLoader:first'));
      var container = $($(this).parents('.class-list-holder:first'));
      var accordian = $($(this).parents('.ui-accordion-content:first'));
      var holder = $(this).parents('.ui-accordion-content:first');
      var width = parseInt($(holder).width()) + parseInt($(holder).css('paddingLeft')) + parseInt($(holder).css('paddingRight'));
      
      var _rel = $(this).attr('rel');
      loader.empty().load(APP.Global.courseDetailsUrl, {'courseid': _rel}, function(){
         $('#classLoaderLoader').hide();
         REGASST.Inits.regAsstSetup();
         APP.Inits.termSelectFilters();
         container.stop().animate({
            left: -(width)
         });
         accordian.stop().animate({
            height: (loader.height() + 25)
         });
         btn.text('View Classes');
         $('a.detailsBtnBack:first', loader).bind('click', APP.Events.closeCoreSchedule);
         $('.modalLink').colorbox();
         APP.Inits.courseFinderSetup();
      });
   },
	
   loadCoreScheduleCPD: function(o){
      o.preventDefault();
      var btn = $(this);
      btn.text('Loading...');
      var loader = $($(this).parents('.cpd-class-list-holder:first').children('.classLoader:first'));
      var container = $($(this).parents('.cpd-class-list-holder:first'));
      var accordian = $($(this).parents('.ui-accordion-content:first'));
      var holder = $(this).parents('.ui-accordion-content:first');

		var width = parseInt($(holder).width()) + parseInt($(holder).css('paddingLeft')) + parseInt($(holder).css('paddingRight'));
      
      var _rel = $(this).attr('rel');

	var s1 = $('#campusSelectPage').val();
        var s2 = $('#termSelectApiPage').val();

	var tmpstr = _rel.split('_');
	var s3 = 'undefined';
        var s4 = 'undefined';

	if ( tmpstr[0] == 'START' )
	{
		s3 = tmpstr[1];
		s4 = tmpstr[2];
	}

	 if (s3 != 'undefined') {
         	$('#cpdpagespinner').show();
	 }

      //loader.empty().load(APP.Global.courseDetailsUrlCPD, {'courseid': _rel, 'campuses': s1, 'terms': s2, 'courseInfo': s3, 'pagenum': s4}, function(){
      loader.load(APP.Global.courseDetailsUrlCPD, {'courseid': _rel, 'campuses': s1, 'terms': s2, 'courseInfo': s3, 'pagenum': s4}, function(){
         $('#classLoaderLoader').hide();
         $('#cpdpagespinner').hide();
         container.animate({
            left: -(width)
         });
         accordian.stop().animate({
            height: (loader.height() + 25)
         });
         btn.text('View Classes');
         $('a.detailsBtnBack:first', loader).bind('click', APP.Events.closeCoreScheduleCPD);
         $('.modalLink').colorbox();
	 APP.Inits.initExpanders();
	 REGASST.Inits.regAsstSetup();
         APP.Inits.courseFinderSetup();
      });
   },

   closeCourseDescription: function(o){
      o.preventDefault();
      
      var loader = $($(this).parents('.class-list-holder:first').children('.descLoader:first'));
      var container = $($(this).parents('.class-list-holder:first'));
      var accordian = $($(this).parents('.ui-accordion-content:first'));
      var holder = $(this).parents('.ui-accordion-content:first');
      var width = parseInt($(holder).width()) + parseInt($(holder).css('paddingLeft')) + parseInt($(holder).css('paddingRight'));
      
      container.stop().animate({
         left: width
      }, function(){
         loader.empty();
      });
      
      accordian.stop().animate({
         height: (container.height() + 25)
      });
   },
   
   closeCoreScheduleCPD: function(o){
      o.preventDefault();
      
      var loader = $($(this).parents('.cpd-class-list-holder:first').children('.classLoader:first'));
      var container = $($(this).parents('.cpd-class-list-holder:first'));
      var accordian = $($(this).parents('.ui-accordion-content:first'));
      var holder = $(this).parents('.ui-accordion-content:first');
      
      container.stop().animate({
         left: 0
      }, function(){
         loader.empty();
      });
      
      accordian.stop().animate({
         height: (container.height() + 25)
      });
   },
	
   closeCoreSchedule: function(o){
      o.preventDefault();
      
      var loader = $($(this).parents('.class-list-holder:first').children('.classLoader:first'));
      var container = $($(this).parents('.class-list-holder:first'));
      var accordian = $($(this).parents('.ui-accordion-content:first'));
      var holder = $(this).parents('.ui-accordion-content:first');
      
      container.stop().animate({
         left: 0
      }, function(){
         loader.empty();
      });
      
      accordian.stop().animate({
         height: (container.height() + 25)
      });
   },
   
   cboxScroll: function(){
      $('#courseLoaderMask').css('top', $(this).scrollTop());
   },
   
   getDirectorySliderAlpha: function(o){
      o.preventDefault();
      var avar = $(this).text();
      var url = APP.Global.directoryUrl + '?avar='+avar;
      APP.Events.constantsLoad(url);
   },
   
   slideCourses: function(o){
      o.preventDefault();
      var id = $(this).attr('rel');
      var courses = $('#'+id);
      var courseScroll = $(this).parents('.crseHolder:first');
      var holder = $(this).parents('.ui-accordion-content:first');
      var width = parseInt($(holder).width()) + parseInt($(holder).css('paddingLeft')) + parseInt($(holder).css('paddingRight'));
      $(courseScroll).stop().animate({
         left: -(width*2)
      });
      courses.stop().animate({
         left: width
      });
      var container = $(this).parents('.ui-accordion-content:first');
      $(container).stop().animate({
         height: (courses.height() + 25)
      });
   },
   
   slideCoursesBack: function(o){
      o.preventDefault();
      var id = $(this).attr('rel');
      var courses = $('#'+id);
      var courseScroll = $(this).parents('.crseHolder:first');
      var holder = $(this).parents('.ui-accordion-content:first');
      var width = parseInt($(holder).width()) + parseInt($(holder).css('paddingLeft')) + parseInt($(holder).css('paddingRight'));
      $(courseScroll).stop().animate({
         left: -(width)
      });
      courses.stop().animate({
         left: (width*2)
      });
      var container = $(this).parents('.ui-accordion-content:first');
      var courseGrp = $(this).parents('.crseHolder:first').children('.crseGroup:first');
      $(container).stop().animate({
         height: ($(courseGrp).height() + 25)
      });
   },
   
   slideRequirements: function(o){
      o.preventDefault();
      var courseScroll = $(this).parents('.crseHolder:first');
      var courseGrp = $(courseScroll).children('.crseGroup:first');
      var holder = $(this).parents('.ui-accordion-content:first');
      var width = parseInt($(holder).width()) + parseInt($(holder).css('paddingLeft')) + parseInt($(holder).css('paddingRight'));
      
      $(courseScroll).stop().animate({
         left: -(width)
      });
      var container = $(this).parents('.ui-accordion-content:first');
      $(container).stop().animate({
         height: ($(courseGrp).height() + 25)
      });
   },
   
   slideBasics: function(o){
      o.preventDefault();
      var courseScroll = $(this).parents('.crseHolder:first');
      var courseGrp = $(courseScroll).children('.crseGroup:first');
      var holder = $(this).parents('.ui-accordion-content:first');
      var width = parseInt($(holder).width()) + parseInt($(holder).css('paddingLeft')) + parseInt($(holder).css('paddingRight'));
      
      $(courseScroll).stop().animate({
         left: -(width)
      });
      var container = $(this).parents('.ui-accordion-content:first');
      $(container).stop().animate({
         height: ($(courseGrp).height() + 25)
      });
   },
   
   slideRequirementsBack: function(o){
      o.preventDefault();
      o.preventDefault();
      var courseScroll = $(this).parents('.crseHolder:first');
      $(courseScroll).stop().animate({
         left: 0
      });
      var container = $(this).parents('.ui-accordion-content:first');
      $(container).stop().css('height', 'auto');
   },
   
   athleticsSlide: function(o){
      o.preventDefault();
      $('div.activeEntry').removeClass('activeEntry');
      $(this).parents('div:first').addClass('activeEntry');
      var index = parseInt($(this).attr('rel').replace('img_', ''));
      var hPos = -(717 * index);
      $('#mainImageHolder').stop().animate({
         left: hPos
      });
   },
   supportStep1: function(o){
      o.preventDefault();
      if($(this).val() == ""){return false;}
      $('#step1').addClass('srBorder');
      $('#step2').slideDown('fast', function(){
         $('#srDescription').focus();
          var val = $('#srDescription');
           if(val.length >= 3){
           }else{ 
                if(APP.Global.sr1){
                   APP.Global.sr1.abort();
                }
                $('#srLoader').show();
                var t = $('#srProblem').val();
                APP.Global.sr1 = $.get(APP.Global.helpdeskUrl, {type: t}, function(data) {
                   $('#srResultsBody').empty().html(data);
                   $('#srResults').slideDown('fast');
                   $('#srLoader').hide();
                });
             } 
      });
   },
   supportStep2: function(o){
      o.preventDefault();
      var val = $(this).val();
      if(val.length >= 3){
         if(APP.Global.sr1){
            APP.Global.sr1.abort();
         }
         $('#srLoader').show();
         var q = $('#srDescription').val();
         var t = $('#srProblem').val();
         APP.Global.sr1 = $.get(APP.Global.helpdeskUrl, { tag: q, type: t}, function(data) {
            $('#srResultsBody').empty().html(data);
            $('#srResults').slideDown('fast');
            $('#srLoader').hide();
         });
      }
   },
   supportStep3: function(o){
      o.preventDefault();
      $('#step2').addClass('srBorder');
      $('#srResults').slideUp('fast');
      $('#step3').slideDown('fast');
   },

   submitSupportRequest: function(o){
      o.preventDefault();
      var errors = $('label > em');
      errors.hide();
      var btn = $(this);
      var loader = $('#srSubmitLoader');
      btn.hide();
      loader.show();
      var valid = true;

      var strNameFull = jQuery.trim($('#srNameFull').val());
      var strEmail = jQuery.trim($('#srEmail').val());
      var strDetails = jQuery.trim($('#srDetails').val());
      var strProblem = jQuery.trim($('#srProblem').val());
      var strDescription = jQuery.trim($('#srDescription').val());

      if(strNameFull.length < 3){
         valid = false;
         $('#srNameFull').prev().children('em:first').show();
      }

      if(!APP.Utils.isValidEmailAddress(strEmail)){
         valid = false;
         $('#srEmail').prev().children('em:first').show();
      }

      if(strDetails.length < 3){
         valid = false;
         $('#srDetails').prev().children('em:first').show();
      }

      if(!valid){
         btn.show();
         loader.hide();
         return false;
      }

      $.post(APP.Global.helpdeskPostBackUrl + ' #respContent', {
         'submitted[your_full_name]': strNameFull,
         'submitted[your_email_address]': strEmail,
         'submitted[your_comment]':  strDetails,
         'submitted[category]':  strProblem,
         'submitted[your_question]':  strDescription,
         'submitted[campus]':'central',
         'details[email_from_name]':'default',
         'details[email_subject]':'default',
         //'details[email_from_address]':'default',
         'details[email_from_address]':'info@sjcd.edu',
         //form_build_id:'form-0cded2f0cacb29134f61136b55582a1b',
         //form_token:'0852b64383223be46cc95558948abf57',
         form_build_id:'form-f425520846bfb083b606a3d22485b6b6',
         form_token:'e68c415db63867ca2c6b92a93bcb81dd',
         form_id:'webform_client_form_3122',
         op:'Submit'
      }, function(data){

            $('#step1').slideUp('fast');
            $('#step2').slideUp('fast');
            $('#step3').slideUp('fast');
            $('#step4').slideDown('fast');
          
      });
     
   },   

//   submitSupportRequest: function(o){
//      o.preventDefault();
//      var errors = $('label > em');
//      errors.hide();
//      var btn = $(this);
//      var loader = $('#srSubmitLoader');
//      btn.hide();
//      loader.show();
//      var valid = true;
//      if($('#srNameFull').val().trim().length < 3){
//         valid = false;
//         $('#srNameFull').prev().children('em:first').show();
//      }
//      
//      if(!APP.Utils.isValidEmailAddress($('#srEmail').val().trim())){
//         valid = false;
//         $('#srEmail').prev().children('em:first').show();
//      }
//      
//      if($('#srDetails').val().trim().length < 3){
//         valid = false;
//         $('#srDetails').prev().children('em:first').show();
//      }
//      
//      if(!valid){
//         btn.show();
//         loader.hide();
//         return false;
//      }
//
//      $.post(APP.Global.helpdeskPostBackUrl + ' #respContent', { 
//         'submitted[your_full_name]': $('#srNameFull').val().trim(), 
//         'submitted[your_email_address]': $('#srEmail').val().trim(),
//         'submitted[your_comment]':  $('#srDetails').val().trim(),
//         'submitted[category]':  $('#srProblem').val().trim(),
//         'submitted[your_question]':  $('#srDescription').val().trim(),
//         'details[email_from_name]':'default',
//         'details[email_subject]':'default',
//         'details[email_from_address]':'default',
//         form_build_id:'form-0cded2f0cacb29134f61136b55582a1b',
//         form_token:'0852b64383223be46cc95558948abf57',
//         form_id:'webform_client_form_3122',
//         op:'Submit'    
//      
//      }, function(data){
//            
//            //$('#step4').html(data);
//            $('#step1').slideUp('fast');
//            $('#step2').slideUp('fast');
//            $('#step3').slideUp('fast');
//            $('#step4').slideDown('fast');
//            
//      });
//      
//   },
   
   AOSAccordiansChange: function(event, ui){
      if(ui.newContent.length > 0){
         if($(ui.newContent).hasClass('loaded')){return false;}
         var pcode = $(ui.newContent).attr('rel');
         var parent = $(ui.newContent);
         $(ui.newContent).load(APP.Global.coreRequirementUrl + '?program='+pcode, function(e){
            $(ui.newContent).addClass('loaded');
            $('a.campIcon[href][title]').qtip({
                 content: {
                    text: false 
                 },
                 style: {
                    border: {
                        width: 2,
                        radius: 5
                     },
                    padding: 5, 
                    textAlign: 'left',
                    tip: true,
                    name: 'cream' 
                                }

              });
            APP.Inits.initAOSCourseSliders(parent);
            APP.Inits.initPrintLink();
         });
      }
   },
   
   sportsNavSelection: function(e){
      e.preventDefault();
      var el = $(this);
      var rel = el.attr('rel');
      var txt = el.text();
      el.parents('.sports-selector:first').find('a:first').text(txt);
      $('ul.athletics-nav:first').children('li:gt(0)').remove();
      //console.info(APP.Cache.athleticsNav.children('li:eq('+rel+')'));
      $('ul.athletics-nav:first').append(APP.Cache.athleticsNav.children('li:eq('+rel+')').find('> ul > li').clone());
   }
};

/* -----------------------------------*/
/* ----->>> DOM MANIPULATION <<<------*/
/* -----------------------------------*/

APP.Dom = {
   
   toggleConstants: function(open){
      if(open){
         $('#constants').animate({'height': '195px'}, 300, function(){
            $('#constants').css('overflow', 'visible');
         });
      }else{
         $('#constants').css('overflow', 'hidden');
         $('#constants').animate({'height': '0'}, 300, function(){
            $('#constantsHolder').html('');
         });
      }
   },
   
   toggleConstantsAlert: function(open){
      if(open){
         var height = $('#alertBox').height() + 80;
         $('#constantsAlertHolder').animate({'height': height}, 300, function(){
            $('#constantsAlertHolder').css('overflow', 'visible');
         });
      }else{
         $('#constantsAlertHolder').css('overflow', 'hidden');
         $('#constantsAlertHolder').animate({'height': '0'});
      }
   },
   
   careerNavChange: function(el){
      if(!APP.Global.firstSub){
         $('.column-2 .select').hide();
         APP.Global.firstSub = true;
      }
      var oldActive = $('div.column-1 ul > li.active');
      if(oldActive.length > 0){
         oldActive.removeClass('active');
         var oldid = oldActive.attr('id').replace('nav_', '');
         $("#sub_" + oldid).hide();
         $("#sub_" + oldid +' > li.active').removeClass('active');
      }
      
      $(el).addClass('active');
      var id = $(el).attr('id').replace('nav_','');
      
      //fade new sub in
      var sub = $("#sub_" + id);
      // ((id-1) * 37) - (sub.height() / 2)
      var newTop = Math.ceil(Math.max(0, ((id * 36) - 18) - ((sub.height()) / 2)));
      newTop = newTop - 1;//top border
      var parentHeight = $('#careerNav').height();
      var newTop = ((newTop + sub.height()) > parentHeight) ? (parentHeight - sub.height()) : newTop ;
      var transTop = newTop - 35;
      sub.css({
         'display': 'block',
         'top': newTop
      });
      $('#programHolder').hide();
      $('.column-3 .select').show();
      APP.Global.firstProgram = false;
   },
   
   careerSubChange: function(el){
      if(!APP.Global.firstProgram){
         $('.column-3 .select').hide();
         APP.Global.firstProgram = true;
      }
      var node = el.id.replace('prg_', '');
      var aoi = el.title;
      var url = "/node/" + node + '/?aoi=' + aoi;

      $('div.column-2 ul > li.active').removeClass('active');
      $(el).addClass('active');
      $('#programHolder').show();
      //Get the html
      $("#programHolderLoad").html('');
      // if(APP.Cache[url]){
      //    $("#programHolderLoad").html(APP.Cache[url]);
      //    APP.Dom.setProgramHash(el);
      //    $('#programTabs').tabs();
      //    $('#programSpinner').hide();
      // }else{
         $("#programHolderLoad").html('');
         $('#programSpinner').show();
         // $("#programHolderLoad").load(url, function(data){
         //    $('#programSpinner').hide();
         //    APP.Cache[url] = data;
         // });
         APP.Dom.getProgramContents(node, url, el);
      // }

   },
   
   setupProgramTabs: function(){
      $('#programHolderLoad').tabs('destroy');
      APP.Global.programTabs = $('#programHolderLoad').tabs({
         select: function(event, ui){
            $('#programHolderLoad').data('disabled.tabs', [0, 1, 2, 3]);
            $(APP.Global.currentTab).css('display', 'none');//NOTE: changing this to .hide(); broke the application
            $('#programSpinner').show();
         },
         show: function(event, ui){
            $('#programHolderLoad').data('disabled.tabs', []);
            $('#programSpinner').hide();
            $(APP.Global.currentTab).css('display', 'block');//NOTE: changing this to .show() broke the application
            APP.Global.currentTab = ui.panel;
            
         },
         cache: true,
         spinner: 'LOADING...'
      });
      $('ul.programNav li a').bind('click', function(o){ 
         o.preventDefault();
         return;
      });
   },
   
   getProgramContents: function(node, url, el){
      if(APP.Global.pendingReq){
         APP.Global.pendingReq.abort();
      }
      APP.Global.pendingReq = $.get(url, function(data){
         // if(($(el).data('over')) || (APP.Global.careerClickMode)){//FIXED this with the abort() method above
            $("#programHolderLoad").html(data);
            APP.Dom.setProgramHash(el);
            APP.Dom.setupProgramTabs();
            $('#programTabs').tabs();
            $('#programSpinner').hide();
         // }
         APP.Cache[url] = data;
      });
   },
   
   setProgramHash: function(el){
      location.hash = $(el).attr('rel');
   },
   
   programHashChange: function(){
      if(location.hash != ''){
         var el = $('li[rel='+location.hash.replace('#','')+']');
         var parentEl = el.parent('ul');
         if(parentEl.attr('id')){
            var parentLi = $('#nav_'+parentEl.attr('id').replace('sub_', ''));
            APP.Global.careerClickMode = true;
            APP.Dom.careerNavChange(parentLi);
            APP.Dom.careerSubChange(el.get(0));
         }
      }
   },
   
   calendarEventEntryMarkup: function(calObj){
      //CREATE MARKUP
      // <div class="hentry">
      //    <div class="updated published">MAY<strong>19</strong></div>
      //    <div class="text">
      //       <p class="entry-content">SanJac Introduces new student alerts. Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
      //    </div>
      // </div>
      var div1 = document.createElement('div');
      $(div1).addClass('hentry');
      
      var div2 = document.createElement('div');
      $(div2).addClass('updated').addClass('published');
      $(div2).text(Date.CultureInfo.abbreviatedMonthNames[calObj.StartDateTime.getMonth()].toUpperCase());//from jmonth script
      
      var strong = document.createElement('strong');
      var day = calObj.StartDateTime.getDate();
      day = (day < 10) ? '0'+day : day ;
      $(strong).text(day);
      
      $(div2).append(strong);
      $(div1).append(div2);
      
      var div3 = document.createElement('div');
      $(div3).addClass('text');
      
      var p = document.createElement('p');
      $(p).addClass('entry-content');
      
      var a = document.createElement('a');
      var strTemp = calObj.Title.replace(/\&amp;/g, '&');
      strTemp = strTemp.replace(/\&#039;/g, '\'');

      $(a).attr('href', calObj.URL).text(APP.Utils.truncate(strTemp, 90));
      
      $(p).append(a);
      $(div3).append(p);
      $(div1).append(div3);
      $('#ncEventsHolder div.slides:first').append(div1);
   },
   
   getCalendarEventsForMonth: function(month){
      $('#ncEventsHolder div.slides:first').empty();
      var total = 0;
      $(APP.Global.calEvents).each(function(i, calObj){
         if(!(calObj.StartDateTime.getMonth()+1)){return false;}
         if(calObj.StartDateTime.getMonth() == month.getMonth()){
            total += 1;
            APP.Dom.calendarEventEntryMarkup(calObj);
         }
      });
      if(total > 3){
         $('#ncEventsHolder div.scrollbar:first').show();
         $('#ncEventsHolder div.slides:first').removeAttr('style');
         $('#ncEventsHolder').slider({
            container: '.container',
      		slides: '.slides',
      		containerClick: false, 
      		isVertical: true,
      		useMouseWheel: false
         });
      }else{
         $('#ncEventsHolder div.scrollbar:first').hide();
      }
      
   },
   
   getCalendarEvents: function(calOptions, campus, type, callBack){
      APP.Global.calEvents = [];
      var url = APP.Global.calendarUrl;
      $('#searchSpinner').show();
      //Extra parameters
      var calCache = ($.cookie('sjcc_cal_cache')) ? JSON.parse($.cookie('sjcc_cal_cache')) : {};
      var campus =  campus || calCache.campus || APP.Utils.getParameterByName('campus');
      var type =  type || calCache.type || APP.Utils.getParameterByName('type');
      
      var month = calCache.month || APP.Utils.getParameterByName('month');
      var year = calCache.year || APP.Utils.getParameterByName('year');
      
      var calCache = {};
      if(campus){calCache.campus = campus;}
      if(type){calCache.type = type;}
      if(month){calCache.month = month;}
      if(year){calCache.year = year;}
      
      //Save Cookie
      $.cookie('sjcc_cal_cache', JSON.stringify(calCache), { expires: 1, path: '/'});
      
      campus = (campus.toLowerCase() == 'all') ? null : campus;
      type = (type.toLowerCase() == 'all') ? null : type;
      
      var dataObj = {};
      if(campus){dataObj.campus = campus;}
      if(type){dataObj.type = type;}
      if(month){dataObj.month = month;}
      if(year){dataObj.year = year;}

      if(calOptions && year && month){
         calOptions.calendarStartDate = new Date(year, (month-1), 1);
      }
      
      var _campus = dataObj.campus || 'all';
      var _type = dataObj.type || 'all';
      //SET DROPDOWN
      $('#calendarCampus').children('option').each(function(){
         if($(this).val().toLowerCase().replace(' campus', '') == _campus){
            $(this).attr('selected', 'true');
         }
      });
      
      $('#calendarType').children('option').each(function(){
         if($(this).val().toLowerCase() == _type){
            $(this).attr('selected', 'true');
         }
      });

      $.getJSON(url, dataObj, function(data){
         $(data).each(function(i, obj){
            if(!(obj)){return;}
            evtObj = {};
            //title, field_event_datetime_value, link , nid
            evtObj.EventID = i;
            //11/03/2009 - 09:57
            var dateTime = String(obj.field_event_datetime_value);//ie7
            var tmpStr = dateTime.substr(0, dateTime.indexOf(' -')) || dateTime.substr(0, dateTime.indexOf(' (')) || dateTime;
            tmpStr = tmpStr.split('/');
            //date(yyyy, mm(0 index), dd)
            
            try{
               evtObj.StartDateTime = new Date(tmpStr[2], tmpStr[0]-1, tmpStr[1]);
            }catch(err){
               evtObj.StartDateTime = new Date(2000, 0, 1);
            }
            
            
            var dateTime2 = String(obj.field_event_datetime_value2) || dateTime;//ie7
            var tmpStr2 = dateTime2.substr(0, dateTime2.indexOf(' -')) || dateTime2.substr(0, dateTime2.indexOf(' (')) || dateTime2;
            tmpStr2 = tmpStr2.split('/');
            
            try{
               evtObj.EndDateTime = new Date(tmpStr2[2], tmpStr2[0]-1, tmpStr2[1]);
            }catch(err){
               evtObj.EndDateTime = new Date(2000, 0, 1);
            }
            var _classes = ['sports', 'academics', 'arts', 'other'];
            var _class;
            switch(obj.type.toLowerCase()){
               case 'sports':
                  _class = _classes[0];
                  break;
               case 'academic':
                  _class = _classes[1];
                  break;
               case 'arts':
                  _class = _classes[2];
                  break;
               default:
                  _class = _classes[3];
            }
            evtObj.CssClass = _class;
            var otitle = obj.title;
            otitle = otitle.replace('NORTH--', '');
            otitle = otitle.replace('NORTH-', '');
            otitle = otitle.replace('Central: ', '');
            evtObj.Title = otitle;
            evtObj.URL = '/node/'+String(obj.nid)+'/';
            APP.Global.calEvents.push(evtObj);
         });
         //TEST DATA
         // var events = [    
         //    { "EventID": 1, "StartDateTime": new Date(2010, 2, 3), "EndDateTime": new Date(2010, 2, 5), "Title": "10:00 pm - EventTitle1", "URL": "#", "Description": "This is a sample event description" },
         //    { "EventID": 5, "StartDateTime": "2010-03-03", "EndDateTime": "2010-03-12", "Title": "This is a much longer title than the one before", "URL": "#", "Description": "This is a sample event description", "CssClass": "Meeting" }
         // ];
         // APP.Global.calEvents = events;
			//END TEST DATA
         if(calOptions){
            $.jMonthCalendar.Initialize(calOptions, APP.Global.calEvents);
         }else{
            $.jMonthCalendar.ReplaceEventCollection(APP.Global.calEvents);
         }
         if(callBack){
            callBack();
         }
         $('#searchSpinner').hide();
      });
   },
   
   bindShowMoreLinks: function(){
      $('.MoreEvents > a').bind('click', function(o){
         o.preventDefault();
         //$(this).parent().click();
      });
   },
   
   buildAllDayEventsMarkup: function(evtArry){
      var _div = $('<div/>');
      var _a = $('<a/>');
      var _innerDiv = $('<div/>');
      var _ul = $('<ul/>');
      var _h3 = $('<h3/>');
      
      _div.addClass('fullDayEvents');
      _a.bind('click', APP.Dom.closeAllCalEventsForDay);
      _a.addClass('fullDayClose').attr('href','#').text('close').appendTo(_div);
      var _date = evtArry[evtArry.length - 1].StartDateTime;
      _h3.text((_date.getMonth() + 1) + "/" + _date.getDate() + "/" + _date.getFullYear());
      _h3.appendTo(_innerDiv);
      $(evtArry).each(function(i, obj){
         var _li = $('<li/>');
         var _a = $('<a/>');
         _a.attr('href', obj.URL);
         _a.html('&raquo; ' + APP.Utils.truncate(obj.Title, 50));
         _a.attr('title', obj.Title);
         _a.appendTo(_li);
         _li.appendTo(_ul);
      });
      
      _ul.appendTo(_innerDiv);
      
      _innerDiv.addClass('fullDayEventsInner').appendTo(_div);
      return _div;
   },
   
   showAllCalEventsForDay: function(eventArray, e) { 
      var btn = $(e.target);
      var dataObj = {};
      //OPEN
      if(btn.data('reset')){
         dataObj = btn.data('reset');
      }else{
         dataObj._x = btn.css('left');
         dataObj._y = btn.css('top');
         dataObj._height = btn.height();
         dataObj._width = btn.width();
         dataObj.txt = btn.children('a:first').html();
         dataObj.btn = btn;
      }
      
      //MAKE sure its within the calendar bounds
      var _x = parseInt(dataObj._x);
      _xChange = ((_x - 100) < 10) ? 10 : (_x - 100);
      _xChange = ((_x - 100) > 638) ? 638 : _xChange;
      _xChange = _xChange + "px";
      
      //CREATE DIV
      var _div =  APP.Dom.buildAllDayEventsMarkup(eventArray).appendTo(btn.parent());
      _div.data('reset', dataObj);
      _div.css({
         width: dataObj._width,
         height: dataObj._height,
         left: dataObj._x,
         top: dataObj._y
      });
      btn.data('reset', dataObj);
      btn.addClass('active');
      //ANIMATE NEW DIV UP
      _height = (eventArray.length * 15) + 40;
      btn.hide();
      _div.stop().animate({
         width: '300px',
         height: _height,
         left: _xChange,
         top: '-='+_height*.75
      }, function(){
         
      });
   },
   
   closeAllCalEventsForDay: function(o){
      o.preventDefault();
      var obj = $($(this).parent());
      dataObj = obj.data('reset');
      obj.stop().animate({
         width: dataObj._width,
         height: dataObj._height,
         left: dataObj._x,
         top: dataObj._y
      }, function(){
         dataObj.btn.show();
         obj.remove();
      });
   },
   
   switchSlidertoFlash: function(){
      if(!($(this).hasClass('clickToSwf'))){return false;}
      //stop nivo
      $('#mainImageFlash').data('nivo:vars').stop = true;
      //remove click class form container
      $(this).removeClass('clickToSwf').removeClass('nivoSlider').attr('style', '');
      var so = new SWFObject("/sites/all/themes/sanjacintocollege/media/swf/intro-new2.swf", "pimages", "617px", "303px","9");
      so.addParam("quality", "high");
      so.addParam("wmode", "transparent");
      so.addParam("menu", "false");
      so.addParam("align", "middle");
      so.write('mainImageFlash');
   }
   
};

/* -----------------------------------*/
/* ----------->>> CACHE <<<-----------*/
/* -----------------------------------*/


APP.Cache = {
   
};

/* -----------------------------------*/
/* ----------->>> UNDO <<<------------*/
/* -----------------------------------*/
APP.Undo = {
   
};

/* -----------------------------------*/
/* ------>>> INITIALIZATION <<<-------*/
/* -----------------------------------*/

APP.Inits = {
   init: function(){
      $('.column-1 li').each(function(i, li){
         $(li).bind('mouseover', APP.Events.careerNavRollOver);
         $(li).bind('click', APP.Events.careerNavClick);
      });
      
      $('.column-2 li').each(function(i, li){
         $(li).bind('mouseover', APP.Events.careerSubRollOver);
         
         $(li).hover(
            function () {
               $(this).data('over', true);
            }, 
            function () {
               $(this).data('over', false);
            }
         );

         $(li).bind('click', APP.Events.careerSubClick);
      });
      
      $('ul.top-nav li.slide a').each(function(i, a){
         $(a).bind('click', APP.Events.constantsClick);
      });
      
      //Add accordian to blackboard home
      $('.contentBody').each(function(i, el){
         $(this).contents().find('a:first').bind('click', APP.Events.bbToggle);
      });
      
     $(".iframe").colorbox({width:"905px", height:"439px", iframe:true, title:"SanJac TV v1.0"});
	  $('.btn-print').bind('click', APP.Events.printClick);
	  $('.btn-email').bind('click', APP.Events.emailLinkClick);
     
      APP.Inits.initSliders();
      APP.Inits.initNav();
      APP.Inits.initSearch();
      APP.Inits.initTabs();
      APP.Inits.initExpanders();
      APP.Inits.initAccordions();
      APP.Inits.setCampusDropDown();
      APP.Inits.liveProgramFilter();
      APP.Inits.termSelectFilters();
      APP.Inits.partTermSelectFilters();
      APP.Inits.initImageGallery();
      APP.Inits.getProgramHash();
      APP.Inits.showAosHelper();
      APP.Inits.navLock();
      APP.Inits.bigCalendar();
      $('.accordion').accordion();
      $('.modalLink').colorbox();
      $().bind('cbox_complete', function(){
         APP.Events.bindCbox();
      });
      APP.Inits.initAthleticsScroller();
      APP.Inits.checkForAlert();
      APP.Inits.initSupportSection();
      APP.Inits.addTieredNavChildClasses();
      APP.Inits.alignBannerScrollerBtnVert();
      APP.Inits.setTableBorderAttr();
      APP.Inits.setSideNavHasChildClass();      
      APP.Inits.courseFinderSetup();
      APP.Inits.newHomeColumnSize();
      APP.Inits.nivoSlider();
		APP.Inits.initCPDSlider();
		APP.Inits.initCampusSelectPage();
		APP.Inits.inittermSelectApiPage();
	//	APP.Inits.initCPDPageSlider(theobj);
      //APP.Inits.athleticsNav();
   },
	
	initCampusSelectPage: function(){
		$('#campusSelectPage').change(function(){
				$('#accHolder').html('<center><p style="height:50px;">&nbsp;</p><img src="/sites/all/themes/cpd/images/layout/loader48.gif" alt="Loading, please Wait..." /></center>');
				$('#campusSelectForm').submit();
			}
		)
	},
   
	inittermSelectApiPage: function(){
		$('#termSelectApiPage').change(function(){
				$('#accHolder').html('<center><p style="height:50px;">&nbsp;</p><img src="/sites/all/themes/cpd/images/layout/loader48.gif" alt="Loading, please Wait..." /></center>');
				$('#campusSelectForm').submit();
			}
		)
	},
   
   initSliders: function(){

      $('#cpdSlider').slider({
         container: '.container',
   		slides: '.slides',
   		containerClick: false
      });
      
      $('#whatsNewSlider').slider({
         container: '.container',
   		slides: '.slides',
   		containerClick: false
      });
      
      $('#newsSlider').slider({
         container: '.container',
   		slides: '.slides',
   		containerClick: false, 
   		isVertical: true
      });
      
      $('#bannerScroller').slider({
         container: '#bannerScrollerMask',
   		slides: '#bannerScrollerInner',
   		containerClick: false, 
   		isVertical: true
      });
      

   },
   
   initNav: function(){
   	if (typeof document.body.style.maxHeight == 'undefined'){
   		var nav = document.getElementById("main-nav");
   		if(nav){
   			var lis = nav.getElementsByTagName("li");
   			for (var i=0; i<lis.length; i++){
   				lis[i].onmouseover = function(){
   					this.className += " hover";
   				};
   				lis[i].onmouseout = function(){
   					this.className = this.className.replace(" hover", "");
   				};
   			}
   		}
   	}
   },
   
   initPrintLink: function(){
       $('.printMe').each(function(i,el){
            $(el).click(APP.Events.printLink);
         });
   },
   
 initSearch: function(){
	  $('#edit-search-theme-form-1').val('search keyword');
      $('#edit-search-theme-form-1').attr('autocomplete', 'off');
      $('#edit-search-theme-form-1').bind('focus', function(el){
         if(this.value == 'search keyword'){
            this.value = '';
         }
         $('fieldset.form-search').css('background-position', 'bottom left');
      }).bind('blur', function(){
         if(this.value == ''){
            this.value = 'search keyword';
         }
         $('fieldset.form-search').css('background-position', 'top left');
      });
      
      $('#programsCoursesSearch').bind('focus', function(el){
         if(this.value == APP.Global.pcFilter || this.value == 'enter additional keywords'){
            this.value = '';
         }
      }).bind('blur', function(){
         if(this.value == ''){
            this.value = APP.Global.pcFilter;
         }
      });

      var _sersugurl = APP.Global.searchUrl;   
   	$("#edit-search-theme-form-1").autocomplete(_sersugurl,{
         delay:10,
         minChars:3,
         matchSubset:1,
         autoFill:false,
         width:250,
         maxItemsToShow:10,
         lineSeparator: ',',
         selectFirst: false,
         resultsClass: 'search-suggest-results',
         onItemSelect: function(){
            $('#edit-search-theme-form-1').focus();
         }
   	});
   },
      
   constantsEvents: function(){
      //CAMPUS EVENTS
      $('.myCampus').each(function(i,el){
         $(el).click(APP.Events.mycampusClick);
      });
      //get default campus cookie
      var cs = $.cookie('sjcc_mycampus');
      if(cs){
         $('#campus_'+cs).addClass('active').html('my campus');
         $.post("setcampus.php", { name: cs});
      }
      
      //DIRECTORIES EVENTS
      var newsHolder = $('#ncNews > .directoryScroller')[0];
      if(!newsHolder){
         $('.directoryScroller').scrollPane();
      }
      
      //NEWS EVENTS 
      
      //get top ten news
      //var newsHolder = $('#ncNews > .directoryScroller')[0];
      if(newsHolder){
         $(newsHolder).children('ul:first').remove();
         $.get(APP.Global.topTenNewsUrl, function(data){
            $(newsHolder).prepend(data);
            $('.directoryScroller').scrollPane();
         });

      }
      
      
      //SETUP MINI CALENDAR
      $('.dropdown').each(function(i, el){
         $(el).children('span').click(function(o){
            o.preventDefault();
         }).mouseover(function(){
            $($(this).children('ul')).show();
         }).mouseout(function(){
            $($(this).children('ul')).hide();
         });
      });
      
      $('.dropdown li').each(function(i, el){
         $(el).click(function(){
            $(this).parents('span').children(':first').html($(this).html()).attr('class', $(this).attr('class'));
            $(this).parents('ul').hide();
            var type = $('#calendarTypeDropdown span:first a:first').attr('class').replace('type','');
            var campus = $('#calendarCampusDropdown span:first a:first').attr('class').replace('campus','');
            type = (type == "All") ? null : type;
            campus = (campus == "All") ? null : campus;
            APP.Inits.setupMiniCalendar(campus, type);
         });
      });
      
      
      if($("#calendarHolder").length > 0){
         APP.Inits.setupMiniCalendar();
      }
      
      //Modal boxx
      $('.modalLink').colorbox();
      
      //Alpha Ajax List
      $('#alphaList li a').each(function(i, el){
         $(el).bind('click', APP.Events.getDirectorySliderAlpha);
      });
   },
   
   setupMiniCalendar: function(campus, type){
      
      if($('#fullCalendar').length > 0){
         //DO NOT SHOW MINI CALENDAR BECAUSE FULL CALENDAR IS PRESENT
         $('#calendarHolder').html('<h2>Please use large calendar below.</h2><h3>The mini calendar is inactive while viewing the full calendar.</h3>');
         return false;
      }
      //JQUERY CALENDAR
      
      //SETUP JQUERY CALENDAR
      // var calEvents = [
      //    { "EventID": 1, "StartDateTime": new Date(2009, 9, 20), "Title": "10:00 pm - EventTitle1", "URL": "#", "Description": "", "CssClass": "Birthday" },
      //    { "EventID": 2, "StartDateTime": new Date(2009, 9, 22), "Title": "9:30 pm - this is a much longer title", "URL": "#", "Description": "", "CssClass": "Meeting" }
      // ];
      
      var calOptions = {
         containerId: "#calendarHolder",
         weekDayWordType: 'firstLetterDayNames', //dayNames abbreviatedDayNames shortestDayNames firstLetterDayNames
         headerHeight: 25,
         trHeight: 16,
         // firstDayOfWeek: 0,
         // calendarStartDate:new Date(),
         // dragableEvents: true,
         // activeDroppableClass: false,
         // hoverDroppableClass: false,
         navLinks: {
            enableToday: false,
            enableNextYear: false,
            enablePrevYear: false,
            p:'&lsaquo; Prev', 
            n:'Next &rsaquo;', 
            t:'Today',
            showMore: ' '
         },
         // onMonthChanging: function(dateIn) { return true; },
         // onMonthChanged: function(dateIn) { return true; },
         // onEventLinkClick: function(event) { return true; },
         // onEventBlockClick: function(event) { return true; },
         // onEventBlockOver: function(event) { return true; },
         // onEventBlockOut: function(event) { return true; },
         onDayLinkClick: function(obj) { 
            var total = 0;
            if($(this).parent().hasClass('hasEvent')){
               $('#ncEventsHolder div.slides:first').empty();
               $(APP.Global.calEvents).each(function(i, calObj){
                  if(calObj.StartDateTime.toString() == obj.data.Date.toString()){
                     total += 1;
                     APP.Dom.calendarEventEntryMarkup(calObj);
                  }
               });
               if(total > 3){
                  $('#ncEventsHolder div.scrollbar:first').show();
                  $('#ncEventsHolder div.slides:first').removeAttr('style');
                  $('#ncEventsHolder').slider({
                     container: '.container',
               		slides: '.slides',
               		containerClick: false, 
               		isVertical: true,
               		useMouseWheel: false
                  });
               }else{
                  $('#ncEventsHolder div.scrollbar:first').hide();
               }
            }
         },
         // onDayCellClick: function(date) { return true; },
         // onDayCellDblClick: function(dateIn) { return true; },
         // onEventDropped: function(event, newDate) { return true; },
         // onShowMoreClick: function(eventArray) { return true; },
         onMonthChanging: function(dateIn) {
            APP.Dom.getCalendarEventsForMonth(dateIn);
         }
      };
      
      $('#calendarHolder').html('<img width="48" height="48" alt="Loader48" src="/sites/all/themes/sanjacintocollege/images/layout/loader48.gif" id="calendarSpinner" />');
      APP.Dom.getCalendarEvents(calOptions, campus, type, function(){var thisMonth = new Date();APP.Dom.getCalendarEventsForMonth(thisMonth);});
   },
   
   
   initTabs: function(){
      $("#tabs").tabs({
         select: setFilter,
         spinner: 'LOADING...',
         show: function(event, ui) {
            $('#tabs').removeClass('ui-tabs-hide');
            $('#tabsLoader').remove();
         }
      });
      
      function setFilter(events, ui){
         // var val = $(ui.tab).children(':first').html();
         // if($('#programsCoursesSearch').val() == ('Search ' + APP.Global.pcFilter)){
         //    $('#programsCoursesSearch').val('Search ' + val);
         // }
         // APP.Global.pcFilter = val;
      }
      //APP.Global.pcFilter = $('.ui-tabs-selected').children(':first').children(':first').html();
      //$('#programsCoursesSearch').val('Search ' + APP.Global.pcFilter);
   },
   
   initExpanders: function(){
      $('.expander').each(function(i,el){
         $(el).click(APP.Events.expanderClick);
      });
   },

  initAccordions: function(){
      $('div.accordion').accordion({collapsible:true, autoHeight: false, active:false});
      $('.modalLink').colorbox();
   },
	
	initCPDPageSlider: function(theobj){
	   var theid = "#" + theobj;
		$(theid).click(APP.Events.loadCoreScheduleCPD);
	},  

	initCPDSlider: function(){
		$('a.classesBtnCPD').click(APP.Events.loadCoreScheduleCPD);
	},  
	 
   setCampusDropDown: function(){
      var cs = $.cookie('sjcc_mycampus');
      var dd = $('#campusesSelect');
      if(cs && dd){
         dd.children('[value='+cs+']').attr('selected', 'selected');
      }
   },
   
   partTermSelectFilters: function(){
      _ptermSelect = $('#termSelect');
      _ptermSelect.bind('change', APP.Events.partTermFilter);
      
   },
   
   termSelectFilters: function(){
        var _termSelect = $('#termSelectApi');
        _termSelect.bind('change', APP.Events.termFilter);
   },
   
   liveProgramFilter: function(){
      var _form = $('#programsCoursesFilter');
      var _campusesSelect = $('#campusesSelect');
      var _termSelect = $('#termSelect');
      var _btn = $('#courseSearchBtn');
      if(_form.length > 0){
         
         _form.bind('submit', APP.Events.programFilter);
         _btn.bind('click', APP.Events.programFilter);
         // _campusesSelect.bind('change', APP.Events.programFilter);
         // _termSelect.bind('change', APP.Events.programFilter);
         
         //ajax paging
         $('li.pager-item a').each(function(i, el){
            $(el).bind('click', APP.Events.coursesAjaxPaging);
         });
         
         //check for hash
         var hash = location.hash;
         var qs;
         
         if(hash){
            if(hash.indexOf('page') > 0){
               _href = hash.replace('#page', '?page=');
               APP.Events.loadCourses(APP.Global.courseFinderUrl+_href, null, false);
            }
         }
      }
      
   },
   
   initImageGallery: function(){
      $('ul.slideshow li a').each(function(i, el){
         $(el).attr('rel','slideshow gallery');
         $(el).addClass('gallerySlideshow');
      });
      $('.gallerySlideshow').colorbox({slideshow:true});
   },
   
   getProgramHash: function(){
      if($('#careerNav').length > 0){
         APP.Dom.programHashChange();
         $(window).hashchange(APP.Dom.programHashChange);
      }
   },
   
   showAosHelper: function(){
      var cs = $.cookie('sjcc_aos_help_shown');
      if($('#careerNav').length > 0){
         if(!cs){
            $.cookie('sjcc_aos_help_shown', 'true', { expires: 365, path: '/'});
            REGASST.Dom.showAlert('Click an Area of Study in the left column, then choose a career from the middle column.');
         }
      }
   },
   
   navLock: function(){
      $('#main-nav > li.submenu > a').each(function(i, el){
         $(el).bind('click', APP.Events.navLock);
      });
      $('#main-nav > li').each(function(i, el){
         $(el).hover(
            function () {
               if($('a.locked').length == 0){
                  $(this).children('div:first').show();
               }
            }, 
            function () {
               if($('a.locked').length == 0){
                  $(this).children('div:first').hide();
               }
            }
         );
      });
   },
   
   bigCalendar: function(){
      if($("#fullCalendar").length > 0){
         var calOptions = {
            containerId: "#fullCalendar",
            weekDayWordType: 'dayNames', //dayNames abbreviatedDayNames shortestDayNames firstLetterDayNames
            headerHeight: 50,
            dragableEvents: false,
            trHeight: 153,
            navLinks: {
               enableToday: false,
               enableNextYear: false,
               enablePrevYear: false,
               p:'&lsaquo; Prev', 
               n:'Next &rsaquo;', 
               t:'Today',
               showMore: 'view all &raquo;'
            },
            onShowMoreClick: APP.Dom.showAllCalEventsForDay,
            onMonthChanged: function(newDate){
               calCache = JSON.parse($.cookie('sjcc_cal_cache'));
               calCache.month = newDate.getMonth() + 1;
               calCache.year = newDate.getFullYear();
               $.cookie('sjcc_cal_cache', JSON.stringify(calCache), { expires: 1, path: '/'});
            }
         };
         
         APP.Dom.getCalendarEvents(calOptions,null,null,APP.Dom.bindShowMoreLinks);         
                 
         $('#calendarCampus').bind('change', function(o){
            var campus = $(this).val();
            var type = $('#calendarType').val();
            //function(calOptions, campus, type, callBack)
            APP.Dom.getCalendarEvents(null, campus, type);  
         });
         
         $('#calendarType').bind('change', function(o){
            var type = $(this).val();
            var campus = $('#calendarCampus').val();
            //function(calOptions, campus, type, callBack)
            APP.Dom.getCalendarEvents(null, campus, type);
         });
         
      }
   },
   
   initAOSCourseSliders: function(parent){
      $('.coursesBtn', parent).each(function(i, obj){
         $(obj).bind('click', APP.Events.slideCourses);
      });
      $('.requirementBtn', parent).each(function(i, obj){
         $(obj).bind('click', APP.Events.slideRequirements);
      });
      $('.requirementsBtnBack', parent).each(function(i, obj){
         $(obj).bind('click', APP.Events.slideRequirementsBack);
      });
      $('.coursesBtnBack', parent).each(function(i, obj){
         $(obj).bind('click', APP.Events.slideCoursesBack);
      });
      $('div.class-list a.descBtn', parent).each(function(i, el){
         $(el).bind('click', APP.Events.loadCourseDescription);
      });
      $('div.class-list a.elecBtn', parent).each(function(i, el){
         $(el).bind('click', APP.Events.loadElectives);
      });
      $('div.class-list a.rulesBackBtn', parent).each(function(i, el){
         $(el).bind('click', APP.Events.electivesBack);
      });
      $('div.class-list a.classesBtn', parent).each(function(i, el){
         $(el).bind('click', APP.Events.loadCoreSchedule);
      });
   },
   
   checkForAlert: function(){
      $.get(APP.Global.alertUrl, function(data) {
      if(data.length < 5){return false;}
         data = data.replace("/n", "");
         data = JSON.parse(data);
			if((data.mode == 'Testing Mode' && data.active == 'True') || data.mode == 'Live Mode'){	
         $('#alertBox').addClass('alert-'+data.type);
         $('#alertBox').children('h1:first').empty().html(data.title);
         $('#alertBox').children('p:first').empty().html(data.description + '<br /><a href="/node/'+data.id+'" title="view more">More Information</a>');
         $('#alertBox').children('a.alert-close:first').attr('rel', data.id);
         $('#alertBox').children('a.alert-remind:first').attr('rel', data.id);
         if(data.type == "message"){
            //is cookied message
            var ck = $.cookie('alert_'+data.id);//have they closed this message before?
            if(!ck){
               $('#alertBox').children('a.alert-close:first').bind('click', function(o){
                  o.preventDefault();
                  $.cookie('alert_'+$(this).attr('rel'), 'hide', { expires: 365, path: '/'});
                  APP.Dom.toggleConstantsAlert(false);
               });
               $('#alertBox').children('a.alert-remind:first').bind('click', function(o){
                  o.preventDefault();
                  $.cookie('alert_'+$(this).attr('rel'), 'hide', { expires: 1, path: '/'});
                  APP.Dom.toggleConstantsAlert(false);
               });
               APP.Dom.toggleConstantsAlert(true);
            }
         }else{
            //is non cookied alert
            var ck = $.cookie('alert_'+data.id);//have they closed this message before?
            if(!ck){
               $('#alertBox').children('a.alert-remind:first').hide();
               $('#alertBox').children('a.alert-close:first').bind('click', function(o){
                  o.preventDefault();
                  $.cookie('alert_'+$(this).attr('rel'), 'hide', { expires: 1, path: '/'});
                  APP.Dom.toggleConstantsAlert(false);
               });
               APP.Dom.toggleConstantsAlert(true);
            }
         }
			}else{
				return false;
			}
      });
   },
   
   initAthleticsScroller: function(){
      $('#bannerScrollerInner > .entry').each(function(i, el){
         var link = $(el).children('a:first');
         if($(link).attr('rel') != 'newsroom'){
            $(link).bind('click', APP.Events.athleticsSlide);
         }
      });
   },
   
   initSupportSection: function(){
      $('#srProblem').bind('change', APP.Events.supportStep1);
      $('#srDescription').bind('keyup', APP.Events.supportStep2);
      $('#srBtnStep2').bind('click', APP.Events.supportStep3);
      $('#srBtnStep3').bind('click', APP.Events.submitSupportRequest);
      
      if($('#srProblem').val() != ""){
         $('#step1').addClass('srBorder');
         $('#step2').slideDown('fast', function(){
            $('#srDescription').focus();
         });
      }
   },
   
   addTieredNavChildClasses: function(){

      $('ul.tier-nav:first li').each(function(i, el){
         var el = $(el);
         
         el.hover(function() {
            $(this).addClass('hover');
            $(this).children('a:first').addClass('hover');
            $(this).children('ul:first').addClass('hover');
         }, function() {
            $(this).removeClass('hover');
            $(this).children('a:first').removeClass('hover');
            $(this).children('ul:first').removeClass('hover');
         });
         
         if((el.parent('ul:first').attr('id') != 'main-nav') && (el.children('ul').length > 0)){
            el.addClass('hasChild');
         }
      });
   },
   
   alignBannerScrollerBtnVert: function(){
      $('#bannerScrollerInner span').each(function(i, el){
         $(el).css({
            display: 'block',
            position: 'absolute',
            top: '50%',
            marginTop: -(Math.floor($(el).height() / 2)) + 'px'
         });
      });
   },
   
   setTableBorderAttr: function(){
      $('table').each(function(i, el){
         if(!$(el).hasClass('MonthlyCalendar')){
            $(el).attr('border', '1');
         }
         
      });
   },
   
   setSideNavHasChildClass: function(){
      $('.side-nav ul li').each(function(i, el){
         if($(el).children('ul').length > 0){
            $(el).addClass('hasChild');
         }
      });
   },
   
   courseFinderSetup: function(){
      //odd row coloring for programs and courses page
      $('#courses div.classRow:odd').addClass('odd');
      $('div.expandHolder').children('div.class-holder:last-child').addClass('last');
      $('div.expandHolder').children('div.class-holder:only-child').addClass('last');

      $('#classScrollList').children('div.class-holder:last-child').addClass('last');
      $('#classScrollList').children('div.class-holder:only-child').addClass('last');
      // $('div.class-holder').children('table thead tr').addClass('odd');
      $('table tbody tr:odd').addClass('odd');
   },
   
   athleticsNav: function(){
      if(!($('ul.athletics-nav').length)){
         return false;
      }
      APP.Cache.athleticsNav = $('ul.athletics-nav:first').clone();
      var firstLvl = "";
      $('ul.athletics-nav > li').each(function(i, el){
         //get the first level LI's clone them, remove the ul, add to array
         firstLvl += "<li><a rel="+ i +" href='#'>" + $.trim($(this).clone().children('ul:first').remove().end().text()) + "</a></li>";
      });
      firstLvl = $(firstLvl);
      firstLvl.find('a').click(APP.Events.sportsNavSelection);
      //Rebuild Nav
      var sportsList = APP.Cache.athleticsNav.find('li:first').clone().children('a:first').text('Select').end().find('ul:first').empty().append(firstLvl).end().addClass('sports-selector');
      $('ul.athletics-nav:first').empty().append(sportsList);
   },
   
   newHomeColumnSize: function(){
      if($('#spotlight').length){
         $('#spotlight').css('height', $('#newsEventsContainer').height());
      }
   },
   
   nivoSlider: function(){
      var total = $('#mainImageFlash img').length;
      var rand = Math.floor(Math.random()*total);
      $('#mainImageFlash').nivoSlider({
           startSlide: rand,
           pauseTime: 6000,
           effect: 'fade',
           controlNav: false,
           directionNav:false
      });
      $('.clickToSwf').click(APP.Dom.switchSlidertoFlash);
   }
};
/* -----------------------------------*/
/* ----->>> ONLOAD FUNCTIONS <<<------*/
/* -----------------------------------*/

$(document).ready(function(){
    APP.Inits.init();
});


