var SHOW_SHARE  = false;
var AT_SEL      = '#at15s';
$(function() {

    var FORM_WRAP_SEL = '#call_to_action_forms';
    var TOOLBAR_SEL   = '#toolbar_wrapper';

    
    var $bar       = $(TOOLBAR_SEL);
    var $container = $(FORM_WRAP_SEL);
    var $children  = $container.children();
    var $buttons   = $children.filter('span');
    var $forms     = $children.filter('form');
    var $links     = $forms.find('.close_button');
    var $inputs    = $forms.find('input[type=text],textarea');

    
    /* Show/hide forms from buttons */
    $buttons.click(function() {
        var idx = $buttons.index(this);
        
        if (idx < 0) {
            return false;
        }
        
        $button = $buttons.eq(idx);
        $form   = $forms.eq(idx);
        
        if ($button.hasClass('active')) {
            $button.removeClass('active');
            $form.removeClass('active');
        }
        else {
            $buttons.removeClass('active');
            $forms.removeClass('active');
            close_addthis();
            
            $button.addClass('active');
            $form.addClass('active');
        }
        
        return false;
    });
    
    /* Hide forms from "close" links */
    $links.click(function() {
        var idx = $links.index(this);
        
        if (idx < 0) {
            return false;
        }
        
        $forms.eq(idx).removeClass('active');
        $buttons.eq(idx).removeClass('active');
        
        return false;
    });
    
    /* Toggle labels */
    $('#ask_question_form').find('input,textarea').
        focus(function() {
            var $el = $(this);
            var val = $el.val();
            var rel = $el.attr('rel');
            
            if (val == rel) {
                $el.val('');
            }
            
            return true;
        }).
        blur(function() {
            var $el = $(this);
            var val = $el.val();
            var rel = $el.attr('rel');
            
            if (val == '') {
                $el.val(rel);
            }
            
            return true;
        });
    
    /* Font sizer */
	$('.fontSizer span').hover(function() {
	    $(this).addClass('hover');
    },function() {
        $(this).removeClass('hover');
    }).click(function() {
        var newSize = $(this).attr('rel').replace(/fontSizer-/,'');
        $('body').removeClass('fontSize-small , fontSize-normal , fontSize-large').addClass('fontSize-'+newSize);
        return false;
    });
    
    /* Email a friend */
    $('a.email').click(function() {
        collapse_all();
        
        return false;
    });
    
    /* Collapse everything when clicked */
    $('a.bookmark').click(function() {
        collapse_all();
    });
    
    /* addthis.com widget */
    var atinitialized = false;
    
    
    $('#share').unbind('click').unbind('mouseover').unbind('mouseout').
    unbind('mouseenter').unbind('mouseleave').
    bind('mouseenter', function() {
        SHOW_SHARE = true;         
        var $at = $(AT_SEL);
        
        if(atinitialized == 1)
        {          
       //     console.log('initialized');  
            $(AT_SEL).bind('mouseenter', function(){
                
    	        $("#share").addClass('share-active');
                SHOW_SHARE = true;
            }).bind('mouseleave', function(){
    //            console.log("mouseleave addthis");                
                SHOW_SHARE = false;
                setTimeout('close_addthis()', 150);
            });
            $("#at20mc").appendTo("#toolbar_wrapper");   
           
            atinitialized = 2;            
        }

        if (atinitialized == false) {
            
            addthis_open(this, '', 'http://www.uscurology.com', 'USC Urology');
            atinitialized = 1;
                        
        } else if ($at.length == 1 && $at.css('display') == 'none') {			        
  //          console.log("mouseenter SHARE");                   
            open_addthis(this);
	        $(this).addClass('share-active');			
        }
        

        
    }).bind('mouseleave', function() {
        
        var $at = $(AT_SEL);
//        console.log("share mouseleave"); 
        SHOW_SHARE = false;                       
        setTimeout('close_addthis()', 150);

    }).trigger("mouseenter");//.mouseover().mouseout();
    
    $('#share').click(function(){
       return false; 
    });  

    /* Close small addthis.com widget when window is scrolled */
    $(window).scroll(function() {
        close_addthis();
    });
    
    /* 
     * Relay clicks to the body: we need this to close the big
     * addthis.com widget when clicking on the bar.
     */
    $bar.click(function() {
        $(document.body).click();
        
        return true;
    });
    
    /* Custom form validation methods */
    $.validator.methods.not_label = function(value, element, param) {
        var $el = $(element);
        var rel = $el.attr('rel');
        
		return rel && value != rel;
	};
    $.validator.methods.zip_code = function(value, element, param) {
		return (value.match(/^\s?\d{5}(\-\d{4})?\s?$/) || []).length > 0;
	};
    $.validator.methods.state_code = function(value, element, param) {
		return (value.match(/^\s?[a-zA-Z]{2}\s?$/) || []).length > 0;
	};
    $.validator.methods.phone_num = function(value, element, param) {
		return (value.match(/^\s?([0-9]{3}\.[0-9]{3}\.[0-9]{4}|[0-9]{3}\-[0-9]{3}\-[0-9]{4})\s?$/) || []).length > 0;
	};


    function daysInFebruary (year){
        // February has 29 days in any year evenly divisible by four,
        // EXCEPT for centurial years which are not also divisible by 400.
        return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
    }

    $.validator.methods.appt_date = function(value, element, param) {
        if (day!='' && month!='' && year!='') {
            var day = parseInt($('#DOB_Day').val());
            var month = parseInt($('#DOB_Month').val());
            var year = parseInt($('#DOB_Year').val());

            var myDate = new Date();
            myDate.setFullYear(year, month-1, day);
            var today = new Date();
            if (myDate>today || (month==2 && day>daysInFebruary(year))) {
                return false;
            }
        }
        return true;
	};


    $.validator.methods.patient_date = function(value, element, param) {
        if (day!='' && month!='' && year!='') {
            var day = parseInt($('#Patient_DOB_Day').val());
            var month = parseInt($('#Patient_DOB_Month').val());
            var year = parseInt($('#Patient_DOB_Year').val());

            var myDate = new Date();
            myDate.setFullYear(year, month-1, day);
            var today = new Date();
            if (myDate>today || (month==2 && day>daysInFebruary(year))) {
                return false;
            }
        }
        return true;
	};
    
	
    /* Form submission/validation */
    var appointment_validator = $forms.filter('#appointment_form').validate({
    	submitHandler: function(form) {
			var data = {
				body : 
					$('#appointment_address', form).val() + "\n" +
					$('#appointment_city', form).val() + "\n" +
					$('#appointment_state', form).val() + "\n" +
					$('#appointment_zip', form).val() + "\n" +
					$('#appointment_day_phone', form).val() + "\n",
					
				authorName : $('#appointment_first_name', form).val()+' '+$('#appointment_last_name', form).val(),
				authorEmail : $('#appointment_email', form).val()
			};
			//$('[name=""]', form).value()
			
			uscMollomSubmitHandler(form, data);
	 	},
	    onsubmit: true,
	    onclick: false,
	    onkeyup: false,
	    onfocusout: false,
	    showErrors: show_errors,

		rules: {
			First_Name: {
				required:true 
			},
			Last_Name: {
				required:true
			},
			City: {
				required:true
			},
			State: {
				required:true,
				state_code:true
			},
			ZIP: {
				required:true,
				zip_code:true
			},
			Daytime_Phone: {
				required:true,
				phone_num:true
			},
			Email: {
				required:true,
				email:true
			},
			Gender: {
				required:true
            },
			DOB_Day: {
				required:true,
                appt_date:true
            },
			DOB_Month: {
				required:true
            },
			DOB_Year: {
				required:true
            },
			Time: {
				required:true
            }
	    },
	    messages: {
			First_Name: {
			    required: 'Please enter a first name.'
			},
			Last_Name: {
			    required: 'Please enter a last name.'
			},
			City: {
			    required: 'Please enter a city.'
			},
			State: {
			    required: 'Please enter a state code (e.g. MA).',
			    state_code: 'Please enter a valid state code (e.g. MA)'
			},
			ZIP: {
			    required: 'Please enter a ZIP code (e.g. 02134).',
			    zip_code: 'Please enter a valid ZIP code (e.g. 02134).'
			},
			Daytime_Phone: {
			    required: 'Please enter a phone number (e.g. 617-555-5555).',
			    phone_num: 'Please enter a valid phone number (e.g. 617-555-5555).'
			},
			Email: {
			    required: 'Please enter an email address.'
			},
			Gender: {
			    required: 'Please select a gender.'
			},
			DOB_Day: {
			    required: 'Please select a birth day.',
                appt_date: 'Please enter a valid date.'
			},
			DOB_Month: {
			    required: 'Please select a birth month.'
			},
			DOB_Year: {
			    required: 'Please select a birth year.'
			},
			Time: {
			    required: 'Please select time of day.'
			}
	    }
	});
    var referral_validator = $forms.filter('#refer_patient_form').validate({
    	submitHandler: function(form) {
			var data = {
				body : 
					$('#referral_facility_name', form).val() + "\n" +
					$('#referral_facility_address', form).val() + "\n" +
					$('#referral_city', form).val() + "\n" +
					$('#referral_state', form).val() + "\n" +
					$('#referral_zip', form).val() + "\n" +

					$('#referral_phone', form).val() + "\n" +
					$('#referral_patient_first_name', form).val() + "\n" +
					$('#referral_patient_last_name', form).val() + "\n",
					
				authorName : $('#referral_physician_first_name', form).val()+' '+$('#referral_physician_last_name', form).val(),
				authorEmail : $('#referral_email', form).val()
			};
			//$('[name=""]', form).value()
			
			uscMollomSubmitHandler(form, data);
	 	},
	    onsubmit: true,
	    onclick: false,
	    onkeyup: false,
	    onfocusout: false,
	    showErrors: show_errors,
		rules: {
			Facility_Name: {
				required:true 
			},
			City: {
				required:true
			},
			State: {
				required:true,
				state_code:true
			},
			ZIP: {
				required:true,
				zip_code:true
			},
			Physician_First_Name: {
				required:true
			},
			Physician_Last_Name: {
				required:true
			},
			Physician_EMail: {
				required:true,
				email:true
			},
			Physician_Phone: {
				required:true,
				phone_num:true
			},
			Patient_First_Name: {
				required:true
            },
			Patient_Last_Name: {
				required:true
            },
			Patient_Gender: {
				required:true
            },
			Patient_DOB_Day: {
				required:true,
                patient_date: true
            },
			Patient_DOB_Month: {
				required:true
            },
			Patient_DOB_Year: {
				required:true
            }
	    },
	    messages: {
			Facility_Name: {
			    required: 'Please enter a facility name.'
			},
			City: {
			    required: 'Please enter a city.'
			},
			State: {
			    required: 'Please enter a state code (e.g. MA).',
			    state_code: 'Please enter a valid state code (e.g. MA)'
			},
			ZIP: {
			    required: 'Please enter a ZIP code (e.g. 02134).',
			    zip_code: 'Please enter a valid ZIP code (e.g. 02134).'
			},
			Physician_First_Name: {
			    required: 'Please enter physician\'s first name.'
			},
			Physician_Last_Name: {
			    required: 'Please enter physician\'s last name.'
			},
			Physician_EMail: {
			    required: 'Please enter an email address.'
			},
			Physician_Phone: {
			    required: 'Please enter a phone number (e.g. 617-555-5555).',
			    phone_num: 'Please enter a valid phone number (e.g. 617-555-5555).'
			},
			Patient_First_Name: {
			    required: 'Please enter patient\'s first name.'
			},
			Patient_Last_Name: {
			    required: 'Please enter patient\'s last name.'
			},
			Patient_Gender: {
			    required: 'Please select patient\'s gender.'
			},
			Patient_DOB_Day: {
			    required: 'Please select patient\'s birth day.',
                patient_date: 'Please enter a valid date.'
			},
			Patient_DOB_Month: {
			    required: 'Please select patient\'s birth month.'
			},
			Patient_DOB_Year: {
			    required: 'Please select patient\'s birth year.'
			}
	    }
	});
	
    var uscMollomSubmitHandler = function(form, data){
    	if ($(form).hasClass('spamChecked')) {
			form.submit();
			return;
		}
	
    	$(form).addClass('loading');
		
		var url = '/form/mollom/appointment';
		

		$.ajax({
		    type: 'POST',
		    url: url,
		    data: data,
		    success: function(data){
				$(form)
					.removeClass('loading')
					.addClass('spamChecked');
				
				if (data.status == 'ham' || data.status == 'unsure') {
					$(form).append('<input type="hidden" name="uscMollomPreSpamCheck" value="pass" />');
					form.submit();
				} else {
					$('.toolbarCaptcha', form).show();
					$('.toolbarCaptcha input.text', form).focus();
				}
			},
		    dataType: "json"
		});   
    };
    
    var question_validator = $('#ask_question_form').validate({
    	submitHandler: function(form) {
			var data = {
				body : $('#Question', form).val(),
				authorName : $('#Name', form).val(),
				authorEmail : $('#Email', form).val()
			};
			//$('[name=""]', form).value()
			
			uscMollomSubmitHandler(form, data);
	 	},
	    onsubmit: true,
	    onclick: false,
	    onkeyup: false,
	    onfocusout: false,
	    showErrors: show_errors,
		rules: {
			Name: {
				required:true				
			},
			Email: {
				required:true,				
				email: true
			},
			Question: {
				required:true
			}
	    },
	    messages: {
			Name: {
			    required: 'Please enter a name.'
			},
			Email: {
			    required: 'Please enter an email address.'
			},
			Question: {
			    required: 'Please enter a question.'
			}
	    }
	});
    


	/* Show/hide forms from buttons */
	$('#make_appointment-large').click(function() {
		$button = $('#make_appointment');
		$buttons = $('#call_to_action_forms').children().filter('span');
		
		$form = $('#appointment_form');
		$forms = $('#call_to_action_forms').children().filter('form');
		
		if ($button.hasClass('active')) {
            $button.removeClass('active');
            $form.removeClass('active');
        }
        else {
            $buttons.removeClass('active');
            $forms.removeClass('active');
            close_addthis();
            
            $button.addClass('active');
            $form.addClass('active');
        }
		return false;
	});
	/* Show/hide forms from buttons */
	$('#refer_patient-large').click(function() {
		$button = $('#refer_patient');
		$buttons = $('#call_to_action_forms').children().filter('span');
		
		$form = $('#refer_patient_form');
		$forms = $('#call_to_action_forms').children().filter('form');
		
		if ($button.hasClass('active')) {
            $button.removeClass('active');
            $form.removeClass('active');
        }
        else {
            $buttons.removeClass('active');
            $forms.removeClass('active');
            close_addthis();
            
            $button.addClass('active');
            $form.addClass('active');
        }
		return false;
	});

//    $("body").css("height", $(document).height());
    //$(window).resize(function(){        
       // $("body").height($(document).height());
    //    $(".footer").css("height", "100%");
    //});
    
    function open_addthis(link) {

//        $(AT_SEL).appendTo("#toolbar_wrapper");        
        var $at = $(AT_SEL);
        addthis_open(link, '', 'http://www.uscurology.com', 'USC Urology');
        $at.show();
        
        var $share = $(this);
        
        if ($at.length != 1 || $bar.length != 1) {
            return false;
        }
    
        var win_scroll = getScrollY();
        var bar_offset = $bar[0].offsetTop;
        var at_height  = $at[0].clientHeight;
        //var bar_height = $bar.height();
        
//        $at.css('top', win_scroll + bar_offset - at_height + 7 + 'px');            
//        $at.css('top', $(document).height() - at_height - 60 + 'px');                    

//        $("#at20mc").css("bottom", "43px");                     
        $(AT_SEL).css("top", "auto");            
        $(AT_SEL).css("bottom", "43px");          
        
        $buttons.removeClass('active');
        $forms.removeClass('active');
    
        $at[0].onmouseout = null;
               
    }

    // Forces share to hide faster if you hover over email
    $("#email").mouseover(function(){
        addthis_close(); 
    });
    
    function collapse_all() {
        close_addthis();
        $buttons.removeClass('active');
        $forms.removeClass('active');
    }
});


/* Open/Close addthis.com widget */
function close_addthis() {
//    console.log(SHOW_SHARE);
    if (SHOW_SHARE == false)
    {            
        addthis_close(); 
        setTimeout('$("#share").removeClass("share-active")', 500);            
    }
}

function show_errors(map, list) {
    var msg = '';
    
    for (i in list) {
        msg += list[i].message + "\n";
    }
    
    if (msg != '') {
        alert(msg);
    }
}

function getScrollY() {
    var scrollY = 0;
    if( document.documentElement && document.documentElement.scrollTop ) {
        scrollY = document.documentElement.scrollTop;
    }
    else if( document.body && document.body.scrollTop ) {
        scrollY = document.body.scrollTop;
    }
    else if( window.pageYOffset ) {
        scrollY = window.pageYOffset;
    }
    else if( window.scrollY ) {
        scrollY = window.scrollY;
    } else {
//        alert(document.documentElement.scrollTop + ":" + document.body.scrollTop + ":" + window.pageYOffset + ":" + window.scrollY);
        scrollY = 14; 
    }
    return scrollY;
};

function AnWord(word) {
    if (word.length == 0) {
        return false;
    }

    var c0 = word[0];
    var c1 = word.length > 1 ? word[1] : 0;

    if (c0 == 'U') {
        if (c1 > 'Z') {
            return true;
        }
    }
    else if (c0 == 'A' || c0 == 'E' || c0 == 'I' || c0 == 'O') {
        return true;
    }
    else if ((c1 == 0 || (c1 >= 'A' && c1 <= 'Z')) &&
            (c0 == 'F' || c0 == 'H' || c0 == 'M' || c0 == 'N' || c0 == 'R' || c0 == 'S' || c0 == 'X')) {
        return true;
    }

    return false;
}






