var APP = {};

/* -----------------------------------*/
/* -------->>> 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('');
   }
};

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

APP.Global = {       
   
};
/* -----------------------------------*/
/* ---------->>> EVENTS <<<-----------*/
/* -----------------------------------*/

APP.Events = {
   togglePlan: function(o){
      o.preventDefault();
      if(this.animating){return false;}
      var parentDiv = $(this);
      var btn = parentDiv.children('a.bullet:first');
      var parentLi = $(this).parents('li:first');
      var add02 = $(parentLi).children('.add02:first');
      var height = add02.data('height') || APP.Dom.getAndSaveHeight(add02);
      this.animating = true;
      var that = this;
      if(parentLi.hasClass('closed')){
         //OPEN
         //add01
         parentDiv.stop().animate({
            height: 24,
            paddingTop: 10
         });

         //button
         $(btn).stop().animate({
            height:20,
            marginTop:-7,
            paddingTop: 10
         });

         //link01
         $(parentDiv.children('.link01:first')).animate({
            opacity: 0
         });

         //image01
         $(parentDiv.children('.image01:first')).animate({
            height: 0,
            opacity: 0
         });

         //add02
         add02.stop().animate({
            height: height
         }, function(){
            parentLi.removeClass('closed').addClass('opened');
            that.animating = false;
         });
      }else{
         //CLOSE
         //add01
         parentDiv.stop().animate({
            height: 59,
            paddingTop: 45
         });

         //button
         $(btn).stop().animate({
            height:56,
            marginTop:-45,
            paddingTop: 45
         });

         //link01
         $(parentDiv.children('.link01:first')).animate({
            opacity: 1
         });

         //image01
         $(parentDiv.children('.image01:first')).animate({
            height: 75,
            opacity: 1
         });

         //add02
         add02.stop().animate({
            height: 0
         }, function(){
            parentLi.removeClass('opened').addClass('closed');
            that.animating = false;
         });
      }

   },

   
   submitPlanFilters: function(o){
      if(o){
         o.preventDefault();
      }
      var sqft = $("#slider-sqft").slider("values", 0) + ' - ' + $("#slider-sqft").slider("values", 1);
      var pricerng = ($("#slider-price").slider("values", 0) * 1000) + ' - ' + ($("#slider-price").slider("values", 1) * 1000);
      var url;
		var loc = $('#s-plan').val();
	 	if(loc == 'mir'){
			url = '/api/inventory';
		}else{
			url = '/api/plans';
		}
	  	$('#planHolder').empty();
      $('#filterLoader').show();
      $('#refreshBtn').hide();
      $('#planHolder').css('background', '#eee url(/sites/all/themes/newmark/images/planloader.gif) no-repeat 50% 50%');
      $('#planHolder').load(url,{
         'sqft': sqft,
			's-comm': $('#s-comm').val(),
			's-amc': $('#s-amc').val(),
			's-commnum': $('#s-commnum').val(),
         's-story': $('#s-story').val(),
         's-maxbeds': $('#s-maxbeds').val(),
         's-maxbaths': $('#s-maxbaths').val(),
         'pricerng': pricerng
      }, function(){
         $('#refreshBtn').show();
         $('#filterLoader').hide();
         $('#planHolder').css('background', '#eee');
         APP.Inits.setupPlanAccordion();
         APP.Inits.setupQuickEmail();
			APP.Inits.setupQuickSMS();
        
			APP.Inits.setupPager();
			APP.Inits.setupModal();
			APP.Inits.setupPlanGallery();
			
      });
   },
	
	nextPage: function(o){
      if(o){
         o.preventDefault();
      }
      var sqft = $("#slider-sqft").slider("values", 0) + ' - ' + $("#slider-sqft").slider("values", 1);
      var pricerng = ($("#slider-price").slider("values", 0) * 1000) + ' - ' + ($("#slider-price").slider("values", 1) * 1000);
      var url;
		url = $(this).attr("href");
	  	$('#planHolder').empty();
      $('#filterLoader').show();
      $('#refreshBtn').hide();
      $('#planHolder').css('background', '#eee url(/sites/all/themes/newmark/images/planloader.gif) no-repeat 50% 50%');
      $('#planHolder').load(url,{
         'sqft': sqft,
			's-comm': $('#s-comm').val(),
			's-commnum': $('#s-commnum').val(),
			's-amc': $('#s-amc').val(),
         's-story': $('#s-story').val(),
         's-maxbeds': $('#s-maxbeds').val(),
         's-maxbaths': $('#s-maxbaths').val(),
         'pricerng': pricerng
      }, function(){
         $('#refreshBtn').show();
         $('#filterLoader').hide();
         $('#planHolder').css('background', '#eee');
         APP.Inits.setupPlanAccordion();
         APP.Inits.setupQuickEmail();
			
         APP.Inits.setupPlanGallery();
			APP.Inits.setupPager();
			APP.Inits.setupModal();
			APP.Inits.setupQuickSMS();
      });
   },
   
	 goToCommunity: function(o){
      o.preventDefault();
		var commUrl = $('#c-community').val();
		window.location = '/new-homes-houston/communities/'+commUrl;
   },
	
    goToCommunityStn: function(o){
      o.preventDefault();
		var commUrl = $(this).attr('href');
		commUrl = commUrl.toLowerCase();
		var strTarget = ' ';
		var intIndexOfMatch = commUrl.indexOf( strTarget );

		while (intIndexOfMatch != -1){
			commUrl = commUrl.replace( strTarget, '-' );
			intIndexOfMatch = commUrl.indexOf( strTarget );
		}

		window.location = '/new-homes-houston/communities/'+commUrl;
   },
	
	goToCommFinder: function(o){
      o.preventDefault();
		var commUrl = $('#c-district').val();
		window.location = '/new-homes-houston/houston-school-districts?title='+commUrl;
   },
	
   goToPlanFinder: function(o){
      o.preventDefault();
		var commUrl = $('#c-community').val();
		window.location = '/new-homes-houston/new-home/floorplan';
   },
	
   floorPlansFirstLoad: function(o){
      o.preventDefault();
      
      if($(this).attr('id') == 'fpTab2'){
         $("#s-plan option").each(function() { 
            this.selected = (this.value == 'mir'); 
         });
      }
      
      if($(this).attr('id') == 'fpTab'){
         $("#s-plan option").each(function() { 
            this.selected = (this.value == 'tbb');
         });
      }
      
      APP.Events.submitPlanFilters();

   },
   
   toggleQuickEmail: function(o){
      if(o){
         o.preventDefault();
      }
      var emailLink = $(this).data('emailLink') || $(this).parents('.add02:first').children('.emailLink:first');
      var el = $(this).parents('.add02:first').find('.quickEmailToggle:first');//in case this comes from the close button
      $(this).data('emailLink', emailLink);
      if($(el).hasClass('open')){
         $(el).removeClass('open');
         $(emailLink).stop().animate({
            top: 69,
            opacity: 0
         }, function(){
            $(emailLink).css('right', 9000);
            $(emailLink).children('form:first').children('a:first').removeClass('submitted');
         });
      }else{
         $(this).addClass('open');
         $(emailLink).css('right', 20);
         $(emailLink).stop().animate({
            top: 59,
            opacity: 1
         });
      }
   },
	
	toggleQuickSMS: function(o){
      if(o){
         o.preventDefault();
      }
      var smsLink = $(this).data('smsLink') || $(this).parents('.add02:first').children('.smsLink:first');
      var el = $(this).parents('.add02:first').find('.quickSMSToggle:first');//in case this comes from the close button
      $(this).data('smsLink', smsLink);
      if($(el).hasClass('open')){
         $(el).removeClass('open');
         $(smsLink).stop().animate({
            top: 69,
            opacity: 0
         }, function(){
            $(smsLink).css('right', 9000);
            $(smsLink).children('form:first').children('a:first').removeClass('submitted');
         });
      }else{
         $(this).addClass('open');
         $(smsLink).css('right', 150);
         $(smsLink).stop().animate({
            top: 59,
            opacity: 1
         });
      }
   },
   
   submitQuickEmail: function(o){
      o.preventDefault();
      var input1 = o.data.input1;
      var input2 = o.data.input2;
      var img = o.data.img;
      var url = o.data.url;
      var btn = this;
      if(($(input1).val().length > 0) && ($(input2).val().length > 0)){
         $(btn).hide();
         $(img).show();
         $.post(" /sites/default/process/", {
            'from' : $(input1).val(),
            'emailTo': $(input2).val(),
            'url' : $(url).val()
         }, function(){
            $(btn).show().addClass('submitted');
            $(img).hide();
            var toggleBtn = $(btn).parents('add02:first').children('.list-text:first').children('.link:first').children('li a.quickEmailToggle:first');
            var emailLink = $(btn).parents('.emailLink:first');
            setTimeout(function(){
               $(toggleBtn).removeClass('open');
               $(emailLink).stop().animate({
                  top: 69,
                  opacity: 0
               }, function(){
                  $(emailLink).css('right', 9000);
                  $(btn).removeClass('submitted');
               });
            }, 2000);
         });
      }else{
         return;
      }
	},
	
	 submitQuickSMS: function(o){
      o.preventDefault();
      var input1 = o.data.input1;
      var input2 = o.data.input2;
      var img = o.data.img;
      var url = o.data.url;
      var btn = this;
      if(($(input1).val().length > 0) && ($(input2).val().length > 0)){
         $(btn).hide();
         $(img).show();
         $.post(" /sites/default/process/sms/", {
            'emailTo' : $(input1).val(),
            'from': $(input2).val(),
            'url' : $(url).val()
         }, function(){
            $(btn).show().addClass('submitted');
            $(img).hide();
            var toggleBtn = $(btn).parents('add02:first').children('.list-text:first').children('.link:first').children('li a.quickEmailToggle:first');
            var emailLink = $(btn).parents('.emailLink:first');
            setTimeout(function(){
               $(toggleBtn).removeClass('open');
               $(emailLink).stop().animate({
                  top: 69,
                  opacity: 0
               }, function(){
                  $(emailLink).css('right', 9000);
                  $(btn).removeClass('submitted');
               });
            }, 2000);
         });
      }else{
         return;
      }
	},
	
	submitQuickForm: function(o){
      o.preventDefault();
      var btn = this;
      if($('#cname').val().length > 0){
         $.post("/sites/default/process/", {
				'Subject': $('#subject').val(),	 
				'Name': $('#cname').val(),	 
            'Email' : $('#cemail').val(),
				'url' : $('#url').val(),
				'Comments': $('#ccomment').val(),
				'type': $('#type').val()
         }, function(){
				//alert('thank you');
          	$('#QFResponse').html('<h3>Thank You, Someone will contact your shortly.</h3>');
         });
      }else{
         return;
      }
   }
	
};

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

APP.Dom = {
   getAndSaveHeight: function(el){
      el.css('height', 'auto'); 
      var _height = el.height(); 
      el.css('height', 0); 
      el.data('height', _height); 
      return _height; 
   }
};

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


APP.Cache = {
   
};

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

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

APP.Inits = {
   init: function(){
		//TODO: GARY FIX THIS ADD PRAMS
     
      $('.accordion').accordion({autoheight: false });
      $('#refreshBtn').bind('click', APP.Events.submitPlanFilters);
      $('#s-plan').bind('change', APP.Events.submitPlanFilters); 
		$('a.comm-box').bind('click', APP.Events.goToCommunityStn);
		$('#communitySubmit').bind('click', APP.Events.goToCommunity);
		$('#detailedSubmit').bind('click', APP.Events.goToCommFinder);
      $("#tabs").tabs();
      APP.Inits.setActiveTab();
      $('#fpTab').bind('click', APP.Events.floorPlansFirstLoad);
      $('#fpTab2').bind('click', APP.Events.floorPlansFirstLoad);
      $("#commentForm").validate();
      APP.Inits.setupModal();
      APP.Inits.setupPlanAccordion();
      APP.Inits.setupSliders();
		APP.Inits.setupPager();
		APP.Inits.setupQFSubmit();
		APP.Inits.nivoSetup();
   },
   
   nivoSetup: function(){
      if(!('#slider').length){return false;}
      $('#slider').nivoSlider({
           effect:'sliceDown', // Specify sets like: 'fold,fade,sliceDown'
           slices:15, // For slice animations
           boxCols: 8, // For box animations
           boxRows: 4, // For box animations
           animSpeed:500, // Slide transition speed
           pauseTime:3000, // How long each slide will show
           startSlide:0, // Set starting Slide (0 index)
           directionNav:false, // Next & Prev navigation
           directionNavHide:true, // Only show on hover
           controlNav:false, // 1,2,3... navigation
           controlNavThumbs:false, // Use thumbnails for Control Nav
           controlNavThumbsFromRel:false, // Use image rel for thumbs
           controlNavThumbsSearch: '.jpg', // Replace this with...
           controlNavThumbsReplace: '_thumb.jpg', // ...this in thumb Image src
           keyboardNav:true, // Use left & right arrows
           pauseOnHover:true, // Stop animation while hovering
           manualAdvance:false, // Force manual transitions
           captionOpacity:1, // Universal caption opacity
           prevText: 'Prev', // Prev directionNav text
           nextText: 'Next', // Next directionNav text
           beforeChange: function(){}, // Triggers before a slide transition
           afterChange: function(){}, // Triggers after a slide transition
           slideshowEnd: function(){}, // Triggers after all slides have been shown
           lastSlide: function(){}, // Triggers when last slide is shown
           afterLoad: function(){} // Triggers when slider has loaded
       });
   },
   
   setupPlanAccordion: function(){
      $('div.add01').each(function(i, el){
         $(el).bind('click', APP.Events.togglePlan);
      });
   },
	
	setupModal: function(){
   	$('.modalLink').colorbox();
      $(".iframe").colorbox({width:"905px", height:"639px", iframe:true, title:"Interactive Plan"});
		$(".cframe").colorbox({width:"905px", height:"639px", iframe:true, title:"Mortgage Calculator"});
		$(".vframe").colorbox({width:"600px", height:"420px", iframe:true, title:"Newmark Media Player"});
		$(".v360").colorbox({width:"785px", height:"640px", iframe:true, title:"Newmark Virtual Tour"});
		$(".tframe").colorbox({width:"725px", height:"525px", iframe:true, title:"Newmark Media Player"});
		$(".comframe").colorbox({width:"725px", height:"525px", iframe:true, title:"Newmark Communities"});
		$(".cpix").colorbox({width:"785px", height:"640px", iframe:true, title:"Newmark Virtual Tour"});
      // $("li.item-2-4 a").colorbox({width:"725px", height:"525px", iframe:true, title:"LIVE Chat"});
   },
	
	setupPager: function(){
      $('ul.pager li a.active').each(function(i, el){
         $(el).bind('click', APP.Events.nextPage);
      });
   },
   
	setupQFSubmit: function(){
      $('#qfsubmit').each(function(i, el){
         $(el).bind('click', APP.Events.submitQuickForm);
      });
   },
   
   setupSliders: function(){
      $("#slider-sqft").slider({
      	range: true,
      	min: 1000,
      	max: 10000,
      	step: 100,
      	values: [2000, 6000],
      	slide: function(event, ui) {
      	   var plusval = (ui.values[1] == 10000) ? ' +'  : '' ;
      		$("#slider-sqft-label").text(ui.values[0] + ' - ' + ui.values[1] + plusval);
      	}
      });
      if($("#slider-sqft-label").length){
         $("#slider-sqft-label").text($("#slider-sqft").slider("values", 0) + ' - ' + $("#slider-sqft").slider("values", 1));
      }
      $("#slider-price").slider({
      	range: true,
      	min: 100,
      	max: 900,
      	step: 50,
      	values: [200, 600],
      	slide: function(event, ui) {
      	   var plusval = (ui.values[1] == 900) ? ' +'  : '' ;
      		$("#slider-price-label").text('$' + ui.values[0] + '\'s - $' + ui.values[1] + '\'s' + plusval);
      	}
      });
      if($("#slider-price-label").length){
         $("#slider-price-label").text('$' + $("#slider-price").slider("values", 0) + '\'s - $' + $("#slider-price").slider("values", 1) + '\'s');
      }
   },
   
   setupPlanGallery: function(){
      $(".svw").slideView();  
		$(".iframe").colorbox({width:"905px", height:"639px", iframe:true, title:"Interactive Plan"});
   },
   
   setupQuickEmail: function(){
      
      $('a.quickEmailToggle').each(function(i, obj){
         $(obj).bind('click', APP.Events.toggleQuickEmail);
      });
      
      $('.emailLink .popup-close').click(APP.Events.toggleQuickEmail);
      
      $('div.emailLink').each(function(i, obj){
         $(obj).css('opacity', 0).css('display', 'block').css('right', 9000);
         var form = $(obj).children('form:first');
         var btn = $(form).children('a:first');
         var div1 = $(form).children('div')[0];
         var div2 = $(form).children('div')[1];
         var input1 = $(div1).children('input.hasLabel:first');
         var input2 = $(div2).children('input.hasLabel:first');
         var img = $(form).children('img:first');
         var url = $(form).children('input:first');
         
         
         
         $('div.labelHider').each(function(i, obj){
            var label = $(obj).children('label:first');
            var input = $(obj).children('input:first');
            $(input).bind('focus', function(){
               $(label).hide();
            }).bind('blur', function(){
               if($(input).val().length > 0){
                  $(label).hide();
               }else{
                  $(label).show();
               }
            });

            $(label).bind('click', function(){
               $(label).hide();
            });
         });
         
         
         
         $(btn).bind('click', {'input1': input1, 'input2': input2, 'img': img, 'url': url},  APP.Events.submitQuickEmail);
         
      });
   },
	
	 setupQuickSMS: function(){
      
      $('a.quickSMSToggle').each(function(i, obj){
         $(obj).bind('click', APP.Events.toggleQuickSMS);
      });
      
      $('.smsLink .popup-close').click(APP.Events.toggleQuickSMS);
      
      $('div.smsLink').each(function(i, obj){
         $(obj).css('opacity', 0).css('display', 'block').css('right', 9000);
         var form = $(obj).children('form:first');
         var btn = $(form).children('a:first');
         var div1 = $(form).children('div')[0];
         var div2 = $(form).children('div')[1];
         var input1 = $(div1).children('input.hasLabel:first');
			var input2 = $(div2).children('input.hasLabel:first');
         var img = $(form).children('img:first');
         var url = $(form).children('input:first');
                 
         
         $('div.labelHider').each(function(i, obj){
            var label = $(obj).children('label:first');
            var input = $(obj).children('input:first');
            $(input).bind('focus', function(){
               $(label).hide();
            }).bind('blur', function(){
               if($(input).val().length > 0){
                  $(label).hide();
               }else{
                  $(label).show();
               }
            });

            $(label).bind('click', function(){
               $(label).hide();
            });
         });
         
         $(btn).bind('click', {'input1': input1, 'input2': input2, 'img': img, 'url': url},  APP.Events.submitQuickSMS);
         
      });
   },
   
   setActiveTab: function(){
      var hash = window.location.hash;
      if(hash){
         var ddChange = false;
         if(hash.indexOf('-tbb') > 0){
            ddChange = 'tbb';
         }
         if(hash.indexOf('-mir') > 0){
            ddChange = 'mir';
         }
         
         hash = hash.replace('-tab-tbb', '');
         hash = hash.replace('-tab-mir', '');
         hash = hash.replace('-tab', '');
         var currentActive = $('div.tabset ul.tabs li a.active:first');
         if(currentActive.length){
            currentActive.removeClass('active');
            currentActive.parent().removeClass('active');
         }
         var tab = $('ul.tabs li a[href='+hash+']')[0];
         $(tab).trigger('click');
         $(tab).addClass('active');
         var c = $($(tab).attr('href'));
         c.css('display', 'block');
         
         if($(tab).attr('id') == 'fpTab'){
            $(tab).addClass('ui-fp-loaded');
            if(ddChange){
               $("#s-plan option").each(function() { 
                  this.selected = (this.value == ddChange); 
               });
            }
            APP.Events.submitPlanFilters();
         }
         
         if($(tab).attr('id') == 'fpTab2'){
            $(tab).addClass('ui-fp-loaded');
            $("#s-plan option").each(function() { 
               this.selected = (this.value == 'mir');
            });
            APP.Events.submitPlanFilters();
         }
         
         if($(tab).attr('id') == 'vuTab'){
				//alert(lat + lon + zoom);
				initializeMap();
			}
			
			
			//set the dropdown to change the hash on change
         $('#s-plan').change(function(){
            window.location.hash = "tab2-tab-" + $(this).val();
         });
      }
   }
	
};

/* -----------------------------------*/
/* ----->>> ONLOAD FUNCTIONS <<<------*/
/* -----------------------------------*/

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