/************************************
 *                                  *
 *   John Muir Heatlh               *
 *   Find a Physician Javascript    *
 *   solutionset.com                *
 *                                  *
 ***********************************/
/* Constants */

//Maximum Message Characters in email message
var maxChars = 200;

//Replace the normal jQuery getScript function with one that supports
//debugging and which references the script files as external resources
//rather than inline.
jQuery.extend({
getScript: function(url, callback) {
var head = document.getElementsByTagName("head")[0];
var script = document.createElement("script");
script.src = url;

// Handle Script loading
{
   var done = false;

   // Attach handlers for all browsers
   script.onload = script.onreadystatechange = function(){
      if ( !done && (!this.readyState ||
            this.readyState == "loaded" || this.readyState == "complete") ) {
         done = true;
         if (callback)
            callback();

         // Handle memory leak in IE
         script.onload = script.onreadystatechange = null;
      }
   };
}

head.appendChild(script);

// We handle everything using the script element injection
return undefined;
}
});

/* JMH Find a Physician Filter Class */

(function(scope) {
     //let anyone name this class
     window[scope] = function(options) {
          if(this.__construct) {
               this.__construct(options || {}); //call the construct
          }
     };

     /* Base Class Definition
     -------------------------------------*/
     window[scope].prototype = (function() {
          /* Private Properties
          -------------------------------------*/
          var _this =  window[scope].prototype;      //scope
          
          var _initValues;
          
          var _form
          
          var _formElements = {};
          
          var _sendEndPoint;
          
          var _getEndPoint;
          
          var _ajaxDefaults = {
              'timeout':20000,
              'cache': false
          }
          
          var _completeCB;
          
          var _successCB;
          
          var _failureCB;
	  
	  var _beforeCB;
          
          var _updateTarget;
          
          var _lastRequestObj;
          
          var _debug = false;
          
          var _xhrRequest = false;
          
          /* Public Properties
          -------------------------------------*/
          
          _this.initState = {};
          
          _this.urlVars = {};

          
          
          /* Construct
          -------------------------------------*/
          _this.__construct = function(options) {
				//store the get parameters
				_getUrlVars();
			  
                //set the init form values
                _initValues = options['initValues'];            
                
                //set or override the existing default ajax options
                for(var key in options['ajaxOptions']) {
                    _ajaxDefaults[key] = options['ajaxOptions'][key];
                }
                
                //set the update target
                _updateTarget = options['updateTarget'];
                
                //set the end points
                _getEndPoint = options['getEndPoint'];
                
                //set the debug flag
                _debug = options['debug'];
            };
          
          /* Public Methods
          -------------------------------------*/
          _this.addForm = function(formName) {
                _form = document[formName];
                
                //generate the initial internal state based on selected form values
                _genInitialState();
                $.each(_form.elements, function(index) {
		    var felm = _form.elements[index];
		    //alert(felm.name);
		    //alert(felm.className);
                   _formElements[felm.name] = felm;
                   if($(this).hasClass('live')) {
                       _addLiveFilterElement(this);
                   } else {
                      _addFilterElement(this); 
                   }
                });
                
                //finally, capture all the items that 
                //are in the get parameter that are not 
                //currently in the form and add them as
                //hidden elements
		for(var attr in _this.urlVars) {
			if(!_formElements.hasOwnProperty(attr) && attr != 'page') {
				var theInput = document.createElement('input');
				$(theInput).attr({
				    type: 'hidden',
				    name: attr,
				    //replace plus signs with spaces
				    value: _this.urlVars[attr].replace(/\+/g,' ')
				});
				$(_form).append(theInput);
			}
		}
            };
          
          _this.removeFilterElement = function() {};
          
          _this.resetFilterElement = function() {};
          
          _this.getFilterElement = function() {};
          
          _this.forceSubmit = function() {};
          
          _this.setCallback = function(name, cb) {
              
              switch(name) {
                case 'success':
                    _successCB = cb;  
                break;
                
                case 'complete':
                    _completeCB = function() { /*change the request var back to false*/ _xhrRequest = false; cb()};
                break;
                
                case 'failure':
                    _failureCB = cb;
                break;
		
		case 'before':
                    _beforeCB = cb;
                break;
                
                default:
                    return;
              }
          }
          
          _this.resetDefaults = function() {
              var state = (_initValues != undefined) ? _initValues : _initState;
              for(var attr in state) {
                  $(_form.elements[attr]).val(state[attr]);
              }
          }
          
          _this.clearForm = function() {
              _form.reset();
          }
          
            


          
            /* Private Methods
            -------------------------------------*/
            _getUrlVars = function(){
                //var vars = [], hash;
                var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
                for(var i = 0; i < hashes.length; i++)
                {
                  hash = hashes[i].split('=');
                  //vars.push(hash[0]);
                  //vars[hash[0]] = hash[1];
                  _this.urlVars[unescape(hash[0])] = hash[1];
                  //keys[uscaped.match(/[\w\d]+/)] = '';
                }
            },
            
            
            
            _genInitialState = function() {
                //get checked items
                $(":checked", _form).each(function() {
                   if(_this.initState[this.name] == undefined) {
                        _this.initState[this.name] = [this.value];
                   } else {
                        _this.initState[this.name].push(this.value);
                   }
                });
                
                if(_debug == true) {
                    _alertInternalFormState();
                }
                
                //get selected items
                
            }
            
            
            _addFilterElement = function() {
                //do nothing for now
            }

            _addLiveFilterElement = function(elm) {
                //add an event listener to the item
                var live = function(){ _getData();};
		//var live = function(){alert('live');}
		//_addEvent(elm, 'change', live);
		if(elm.type == 'checkbox') {
		    $(elm).click(live);
		} else {
		    $(elm).change(live);
		}
            };

            _getCheckedElements = function() {};

            _sendData = function() {
                //construct the ajax request
                
            };

            _getData = function() {  
                if(_xhrRequest != false) {
                    _xhrRequest.abort();
                }
                
                var aOpts = _getAjaxOptions();
                                             
                if(_debug == true) {
                    _alertAjaxOptions(aOpts);
                }
                
                //make the request
                _xhrRequest = jQuery.ajax(aOpts);
                
            };
            
            _getAjaxOptions = function() {
                var aOptions = {};
                //construct the ajax request
                aOptions['url'] = _getEndPoint;
                
                //callbacks
                aOptions['complete'] = _completeCB || {};
                aOptions['error'] = _failureCB || {};
                aOptions['beforeSend'] = _beforeCB || {};
                
                //set the default complete action
                var success = function(data) {$('#' + _updateTarget).html(data);}
                aOptions['success'] = _successCB || success;
                
                //prepare the request data
                aOptions['data'] = _serializeFormData();
                
                //add all of the other options
                for(attr in _ajaxDefaults) {
                    aOptions[attr] = _ajaxDefaults[attr];
                }
                
                return aOptions;
                
            }

            _resetData = function() {};

            _getElmValue = function() {};

            /**
             * See: http://ejohn.org/blog/flexible-javascript-events/
             *
             * @param Node
             * @param string event type
             * @param function callback
             * @return void
             */
            _addEvent = function( obj, type, fn ) {
              if ( obj.attachEvent ) {
                obj['e'+type+fn] = fn;
                obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
                obj.attachEvent( 'on'+type, obj[type+fn] );
              } else
                obj.addEventListener( type, fn, false );
            };
            
            _serializeFormData = function() {
                var d = $(_form).serialize();
                return d;
            }

            
            _alertAjaxOptions = function(opts) {
                for(attr in opts) {
                    var dStr;
                    dStr += attr + ': ' + opts[attr] + ' | ';
                }
                //alert('Ajax options: ' + dStr);
            }
            
            _alertInternalFormState = function() {
                for(attr in _this.initState) {
                    var dStr;
                    dStr += attr + ': ' + _this.initState[attr] + ' | ';
                }
                //alert('Internal form state: ' + dStr);
            }
          
            return _this;
     })();
})('jmhFaDFilter');

/*
 * JMH Find a Physician Filter Options Initialization
 * 
 * */

//form content options options
var options = {
    //this could be generated automatically based 
    initValues: {
        'options[]':["hcapAccess"],
        'facility[]':["1","2"],
        'gender':["male"]
    },
    
    //overide the default global request parameters
    ajaxOptions: {
        cache:false,
        dataType:'html',
        type:'get'
    },
    
    updateTarget: 'updateMe',
    
    //sendEndPoint:
    
    getEndPoint: '/ajax/filter/',

    //set debug
    debug: true
}


/*
 * JMH Find a Physician Filter On-Content-Ready Driver Function
 * 
 * */

function liveFormContentReady(formName) {
    var Filter = new jmhFaDFilter(options);
    
    //set the failure callback
    var failure = function(x, t, e){
	//shhh
	//alert('failure:' + 'error: ' +  t + ' error: ' + e)
    };
    Filter.setCallback('failure',failure);
   
    //set the main containers here
    var jmhSearchResultBodyElement = '#drSearchResultBody';
    var loaderContainer = '#jmhSearching';
    
    var before = function(){ 
	    $(jmhSearchResultBodyElement).hide();
	    $(loaderContainer).show();
	 };
    Filter.setCallback('before', before);
    
    //set the success callback
    var success = function(data){
	//insert returned data into the body
	//of the search result
	    $(jmhSearchResultBodyElement).html(data);
	};
    Filter.setCallback('success',success);
    
    //set the complete callback
    var complete = function(){
		var printLink = document.getElementById('jmhSearchPrint');
		var emailLink = document.getElementById('jmhSearchEmail');
		var modifyLink = document.getElementById('searchModify');
        
        //get the new get parameters
        var getParams =  _serializeFormData();
        
        //print link
        var domain = printLink.href.split('?')[0];
        printLink.href = domain + '?' + getParams;
        
        //email link
        var domain = emailLink.href.split('?')[0];
        emailLink.href = domain + '?' + getParams;
	
		//modify your search link
		var domain = modifyLink.href.split('?')[0];
			modifyLink.href = domain + '?' + getParams;
        
        //sort by jam
        var sortBy = $("select", "#sortby");
        $("option", sortBy).each(function() {
            var sortType = this.className.replace(/\s/, '+');
            var sortParams = getParams.replace(/field=\w+/, "field=" + sortType);
            $(this).val('/search/results/?' + sortParams);
        });
        
        //add colorbox links
		$(".video-colorbox").colorbox({
			onComplete : videoColorbox,
			html:"<div id='flowplayer-target' style='width: 400px; height: 280px;' />",
			width: 442,
			height: 350
		});
        
	    $(loaderContainer).hide();
	    $(jmhSearchResultBodyElement).show();
	    
	};
    Filter.setCallback('complete',complete);
    
    //add the form
    Filter.addForm(formName);
    
    //attach the click events to the reset and clear links
    $("#reset").click(function(e){e.preventDefault(); Filter.resetDefaults();});
    $("#clear").click(function(e){e.preventDefault(); Filter.clearForm();});
    
}

/*
 * JMH General Functions
 * 
 * */

//video colorbox function
var videoColorbox = function(){
	flowplayer("flowplayer-target", "http://www.johnmuirhealth.com/etc/jmh/static/flowplayer/flowplayer.commercial-3.2.7.swf",  {
		// product key from your account     
		key: '#$2f78da2359834e9ef3e', 
		clip:{
			url: $(this).attr("href"),
			autoPlay: true,
			autoBuffering: true
		},
		plugins: {
			controls: {
				bufferGradient: 'none',
				durationColor: '#373737',
				progressGradient: 'medium',
				sliderColor: '#000000',
				buttonOverColor: '#54909a',
				bufferColor: '#958d85',
				backgroundGradient: 'none',
				timeColor: '#373737',
				buttonColor: '#548f99',
				sliderGradient: 'none',
				borderRadius: '0',
				backgroundColor: '#e1dedd',
				progressColor: '#548f99',
				fullscreen: true,
				opacity: 1
			}
		}
	});
}

jQuery(document).ready(function($) {
	
	// move fad breadcrumbs to the right spot in the header -- this is kind of crazy, but the formatting just works best here
	$("#fad-bc").appendTo("#breadcrumb");
	
	/*
	 * JMH Find a Physician Auto Complete Functionality
	 * 
	 * */
	//Autocomplete callback, to be called on plugin load
	//var autoComplete = function() {

		//JSON Callback Function
		var drJsonCB = function(data) {
			return $.map(data, function(row) {
				var result = row.name;
				if(row.degree != undefined) {
					result += ', ' + row.degree;
				}
				return {
					data: row,
					value: row.id
				}
			});
		}
        
		var specJsonCB = function(data) {
			return $.map(data, function(row) {
				return {
					data: row,
					value: row.name,
            		result: row.name
				}
			});
		}
		
		//Format Specialty Callback Function
		var formatSpec = function(spec) {
			var nameSpan = '<span class="name">' + spec.name + '</span>';
			var descSpan = '';
			if( spec.description != undefined) {
				descSpan = '<span class="speciality"><em>' + spec.description + '</em></span>';
			}			
			return '<span class="jmhAc-result specialtyAc-result">' + nameSpan + descSpan + '</span>';
		}
		//Format Specialty Callback Function
		var formatSpec2 = function(ul, item) {
			//var re = new RegExp("^" + this.term + "|\s" + this.term, "i");
			var re = new RegExp("\\b" + this.term, "ig");
			//alert(this.term);
			var newname = item.name.replace(re,"<span style='font-weight:bold;'>" + 
			          "$&" + 
			          "</span>");
			var newdesc = item.description.replace(re,"<span style='font-weight:bold;'>" + 
			          "$&" + 
			          "</span>");

			var nameSpan = '<span class="name">' + newname + '</span>';
			var descSpan = '';
			if( item.description != undefined) {
				descSpan = '<span class="speciality"><em>' + newdesc + '</em></span>';
			}			
			//ul.width($('#fad-specialty').width());
			//return '<span class="jmhAc-result specialtyAc-result">' + nameSpan + descSpan + '</span>';
			
			
			return $("<li class=\"ac_results\"></li>")
				.data("item.autocomplete", item)
				.append('<a><span class="jmhAc-result specialtyAc-result">' + nameSpan + descSpan + '</span></a>')
				.appendTo(ul);
		}
		
		//Format Language Callback Function
		var formatLang = function(spec) {
			var nameSpan = '<span class="name">' + spec.name + '</span>';	
			
			return '<span class="jmhAc-result specialtyAc-result">' + nameSpan + '</span>';
		}
		
		//Format Language Callback Function
		var formatLang2 = function(ul, item) {
			var nameSpan = '<span class="name">' + item.name + '</span>';	
			//ul.width($('#fad-languages').width());
			return $("<li class=\"ac_results\"></li>")
			.data("item.autocomplete", item)
			.append('<a><span class="jmhAc-result specialtyAc-result">' + nameSpan + '</span></a>')
			.appendTo(ul);
			//return '<span class="jmhAc-result specialtyAc-result">' + nameSpan + '</span>';
		}
		
		//Format Doctor Callback Function
		var formatDr = function(dr) {
			var nameSpan = '<span class="name">' + dr.name + '</span>, ';
			var degSpan = '<span class="degree">' + dr.degree + '</span> ';
			var specSpan = '<span class="speciality"><em>' + dr.speciality + '</em></span>';
			return '<span class="jmhAc-result drAc-result">' + nameSpan + degSpan + specSpan + '</span>';
		}
		
		var formatDr2 = function(ul, item) {
			var re = new RegExp("\\b" + this.term, "ig");
			//alert(this.term);
			var newname = item.name.replace(re,"<span style='font-weight:bold;'>" + 
			          "$&" + 
			          "</span>");
			
			var nameSpan = '<span class="name">' + newname + '</span>, ';
			var degSpan = '<span class="degree">' + item.degree + '</span> ';
			var specSpan = '<span class="speciality"><em>' + item.speciality + '</em></span>';
			//ul.width($('#fad-name').width());
			return $("<li class=\"ac_results\"></li>")
				.data("item.autocomplete", item)
				.append('<a><span class="jmhAc-result drAc-result">' + nameSpan + degSpan + specSpan + '</span></a>')
				.appendTo(ul);
		}
		
		
		//Name Result Callback Function
		var nameResultCB = function(e, item) {
            $(".ac_input").removeAttr("autocomplete");
            window.location.href = '/physician/' + item.slug + '/?single=1';
		}
		//Name Result Callback Function
		var nameResultCB2 = function(e, ui) {
            $(".ui-autocomplete-input").removeAttr("autocomplete");
            window.location.href = '/physician/' + ui.item.slug + '/?single=1';
            return false;
		}
		
		var formatDrResult = function(dr) {
		    return dr.name;
		}
		
		//Speciality Result Callback Function
		var specResultCB = function(e, item){
			//nothing for now 
		}
		
		//Speciality Result Callback Function
		var specResultCB2 = function(e, ui){
			$("#fad-specialty").val(ui.item.name);
			return false;
			//nothing for now 
		};
		
		//Speciality Result Callback Function
		var specResultCB2 = function(e, ui){
			$("#fad-specialty").val(ui.item.name);
			return false;
			//nothing for now 
		};
		
		// set odd menu items so we can apply a zebra effect
		// also set other attributes of the list
		var setZebra = function(event, ui) {
			$( this ).autocomplete( "widget" )
	   	    .find( "ac_odd" )
	   	      .removeClass( "ac_odd" )
	   	    .end()
	   	    .find( "li.ui-menu-item:odd a" )
	   	      .addClass( "ac_odd" );
	   	    $( this ).autocomplete( "widget" ).width($(this).width());
	   	    // limit list height (used to be 180px)
	   	    $( this ).autocomplete( "widget" ).css("max-height", "220px");
	   	    // add scrollbar
	   	    $( this ).autocomplete( "widget" ).css("overflow-y", "auto");
	   	    // ie7 bug w/ horizontal scrollbar appearing: http://bugs.jqueryui.com/ticket/6250
	   	    $( this ).autocomplete( "widget" ).css("overflow-x", "hidden");
	   	    //$( this ).autocomplete( "widget" ).css("color", "#685C53");
		};
		
		function langSplit( val ) {
			return val.split( /,\s*/ );
		}
		function langExtractLast( term ) {
			return langSplit( term ).pop();
		}

        if ($("#fad-languages").length) {
			$("#fad-languages")
	    	// don't navigate away from the field on tab when selecting an item
			.bind( "keydown", function( event ) {
				if ( event.keyCode === $.ui.keyCode.TAB &&
						$( this ).data( "autocomplete" ).menu.active ) {
					event.preventDefault();
				}
			})
			.autocomplete({
	        	source: function (request, response) {
	        		$.getJSON("/ajax/language/", { term: langExtractLast(request.term) }, response); 
	        	},
	        	minLength: 1,
	        	select: function( event, ui ) {
					var terms = langSplit(this.value);
					// remove the current input
					terms.pop();
					// add the selected item
					terms.push( ui.item.name );
					// add placeholder to get the comma-and-space at the end
					terms.push( "" );
					this.value = terms.join( ", " );
					return false;
				},
				focus: function() {
					// prevent value inserted on focus
					return false;
				},
			   	open: setZebra	
	
	
			}).data("autocomplete")._renderItem = formatLang2;
        }
		
        if ($("#fad-specialty").length) {
			$("#fad-specialty").autocomplete({
	        	source: "/ajax/specialty/",
	        	minLength: 2,
	        	select: specResultCB2,
			   	open: setZebra,
			   	search: function () {
	                $(this).data("autocomplete").menu.element.scrollTop(0);
	            }
	        }).data("autocomplete")._renderItem = formatSpec2;
        }
		
		//$("#fad-specialty").data("autocomplete")._renderItem = formatSpec2;	
        
        if ($("#fad-name").length) {
	        $("#fad-name").autocomplete({
	        	source: "/ajax/basic/",
	        	minLength: 2,
	        	select: nameResultCB2,
	        	open: setZebra,
	        	search: function () {
	                $(this).data("autocomplete").menu.element.scrollTop(0);
	            }

	        }).data("autocomplete")._renderItem = formatDr2;
        }
        	
        
        	
        /* 12/14/11 delete this eventually, keeping here for the moment for easy comparison
		//for dr names 
		$("#fad-name").autocomplete(
			"/ajax/basic/",
			{
			autoFill: false,
			minChars: 1,
			max: 12, 
			width: $("fad-name").width(),
			selectFirst: false,
			multiple: false,
			dataType: 'json',
			delay: 100,
			parse: drJsonCB,
			formatItem: formatDr
			}
		).result(nameResultCB);
		
		//for speciality names
		$("#fad-specialty").autocomplete(
			"/ajax/specialty/",
			{
			minChars: 1,
			max: 12, 
			width: $("fad-specialty").width(),
			selectFirst: false,
			multiple: false,
			dataType: 'json',
			delay: 100,
			parse: specJsonCB,
			formatItem: formatSpec
			}
		).result();
        
		//for speciality names
		$("#fad-languages").autocomplete(
			"/ajax/language/",
			{
			minChars: 1,
			max: 12, 
			width: $("fad-languages").width(),
			selectFirst: false,
			multiple: true,
			multipleSeparator: ", ",
			dataType: 'json',
			parse: specJsonCB,
			delay: 100,
			formatItem: formatLang
			}
		).result();
        */

		
	//}

	$.ajaxSetup({
		//cache : false,
		jsonp: null,
		jsonpCallback: null
	}); // because getScript doesn't cache by default.
	//load autocomplete library 
	// turned cache off -- getting unreliable behavior on firefox with it on - 9/1/11 steve
	//jQuery.getScript('/js/jquery.autocomplete.min.js', autoComplete);
	
	$(".video-colorbox").colorbox({
		onComplete : videoColorbox,
		html:"<div id='flowplayer-target' style='width: 400px; height: 280px;' />",
		width: 442,
		height: 350
	});
	
	//email colorbox 
	$(".colorbox").colorbox({
	    scrolling: false,
	    onComplete: function() {
		    var targetForm = $("#email_form");
		    //verify email
		    var validateEmail = function(inputElm, errorElm) {
				var emailPatt = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i;
				//if(emailPatt.test(inputElm.value)) {
				if(inputElm.value.match(emailPatt)) {
					if($(inputElm).hasClass('error')) {
						$(inputElm).removeClass('error');
						errorElm.empty();
					}
					$(inputElm).addClass('validOk');
				} else {
					if($(inputElm).hasClass('validOk')) {
						$(inputElm).removeClass('validOk');
					}
					$(inputElm).addClass('error');
					errorElm.html("Address does not appear to be valid");
				}
		    }
		    
		    var validateMessageCount = function(textArea, errorElm) {
                
				if(textArea.val().length <= maxChars) {
					if($(textArea).hasClass('error')) {
					    $(textArea).removeClass('error');
					    errorElm.empty();
					}
					$(textArea).addClass('validOk');
				} else {
					if($(textArea).hasClass('validOk')) {
					    $(textArea).removeClass('validOk');
					}
					$(textArea).addClass('error');
					errorElm.html("Maximum message length is 200 characters");
				}
		    }
		    
		    //attach action to submit button
		    var updateStatus = function(data) {
				var rDiv = $("#resultStatus", targetForm);
				if(data["Success"] == true) {
					//rDiv.addClass("statusOk");
					targetForm.html('<div id="resultStatus" class="statusOk">Email sent</div>');
				} else {
					//rDiv.addClass("statusFail");
					targetForm.html('<div id="resultStatus" class="statusFail">There was an error sending email try again later</div>');
				}
				$("#cboxLoadingGraphic").hide();
				$.fn.colorbox.resize();
				targetForm.css({visibility: 'visible'});
				setTimeout(function(){$.fn.colorbox.close();}, 3000)
			}
		    
		    
		    targetForm.submit(function(e) {
				e.preventDefault();
				
				//attach validation to submit event
				var emailPatt = /\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i;
				$(".email", targetForm).each(function(){
				    var errorSpan = $("~span.emailError", this);
				    validateEmail(this, errorSpan);
				});
				
				var txtMessage = $("textarea.textarea", targetForm);
				var mError = $("span.messageError", targetForm)
				validateMessageCount(txtMessage, mError);
				
				
				if($(".validOk",targetForm).length >= 3) {
				    //hide the form, and show the loading graphic
				    targetForm.css({visibility: 'hidden'});
				    $("#cboxLoadingGraphic").show();
				    //set up post callback
				    //initialize ajax object
				    var aOpts = {
						url: targetForm.attr('action'),
						type: 'post',
						beforeSend: function(x) {
							  if(x && x.overrideMimeType) {
							   x.overrideMimeType("application/json;charset=UTF-8");
							  }
							 },
						dataType: 'text json',
						data: targetForm.serialize(),
						success: function(data) {updateStatus(data);},
						complete: function() {}
				    }
				    //get the data
				    $.ajax(aOpts);
				} else {
				    return;
				}
		    });
		    
		}
	});
	
	$('.profile-video').hover(function() {
		$(this).addClass('profile-video-hover');
	}, function() {
		$(this).removeClass('profile-video-hover');
	});
    
    //attach the sortby events for the search results page
    //attach the sortby event
    $("select", "#sortby").change(function() {
       window.location.href = $(this).val();
    });
    
    $('#dr-video').hover(function() {
	    $(this).addClass('video-player-bg-hover');
    }, function() {
	    $(this).removeClass('video-player-bg-hover');
    });
   
	//learnmore colorbox
	$("a.learnMore").each(function(){
		var text = this.rel;
		$(this).colorbox({
			innerHeight: 150,
			innerWidth: 300,
			html: '<div class="search popup"><p class="popUpText">' + text + '</p></div>'
		});
	});

	//learnmore colorbox
	$("a.learnMoreLg").each(function(){
		var text = this.rel;
		$(this).colorbox({
			innerHeight: 280,
			innerWidth: 300,
			html: '<div class="search popup"><p class="popUpText">' + text + '</p></div>'
		});
	});
	
	// setting specialty default value on and off
	$('.fake-default-value').each(function() {
		//this type of field stores true default value in title!
	    var default_value = this.title;
	  	if (default_value == null)
    		default_value = this.value;
	  	// this part just in case we come in from "modify search"
	  	// need to make sure we force a non default to the right state
		if (this.value == default_value)
		{
			$(this).css('color','#8d8d8d');
			$(this).css('font-style','italic');
		}
		else
		{
			$(this).css('color','#393733');
			$(this).css('font-style','normal');
		}
		
	    $(this).focus(function() {
	        if(this.value == default_value) {
	            this.value = '';
	         	// Set the font colour of the field
	            $(this).css('color','#393733');
				
				// Remove italics
	            $(this).css('font-style','normal');
	        }
	    });
	    $(this).blur(function() {
	        if(this.value == '') {
	            this.value = default_value;
	            $(this).css('color','#8d8d8d');
	            $(this).css('font-style','italic');
	        }
	    });
	});
	

		var multiSelects = $("select.fad-multiple");

		// init multi select dropdowns
		multiSelects.dropdownchecklist({width: 240});
		
		//label the selects
		multiSelects.each(function(){
		    //get the sibling where the checkbox list will live
		    var dropdownWrapper = $("~span.ui-dropdownchecklist-wrapper", this);
		    $("span.ui-dropdownchecklist-text", dropdownWrapper).text($(this).attr('title'));
		});

		$('a.clear-form').click(function(e) {
			e.preventDefault();
			// reset typical form elements
			//document.getElementById("fadSearch").reset();
            
            $(":input", "#fadSearch").each(function() {
               switch(this.type) {
                   case 'text':
                        $(this).val('');
                   break;
                   
                   case 'checkbox':
                   case 'select':
                        $(this).removeAttr('checked');
                        $(this).removeAttr('selected');
                   break;
               } 
            });

			//set gender to no preference
            $('input[name="gender"]')[2].checked = true;


			// remove multi select dropdowns and reenable them so options are cleared
			multiSelects
				.dropdownchecklist("destroy")
				.find('option')
				.removeAttr('checked')
				.removeAttr('selected')
				.end()
				.dropdownchecklist({width: 240});
		});
    //Search form specific items
		
	// this creates a case insensitive :Contains selector
	jQuery.expr[':'].Contains = function(a,i,m) {
		return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase()) >= 0;
	};
    
    if($("#fadSearch").length > 0) {
            
		//Validation for search form fields
		var validateSearch = function(inputElm, errorElm) {
			var characterPatt = /^[\w|\s\&\-\.,\'\/]*$/i;
			if(inputElm.value.match(characterPatt)) {
				if($(inputElm).hasClass('error')) {
					$(inputElm).removeClass('error');
					errorElm.empty();
				}
					$(inputElm).addClass('validOk');
			} else {
				if($(inputElm).hasClass('validOk')) {
					$(inputElm).removeClass('validOk');
				}
				$(inputElm).addClass('error');
				errorElm.html("Invalid characters in search terms");
			}
		}
		
		//count validate items
		var vMe = $(".validate");
		$("#fadSearch").submit(function(e){
			//e.preventDefault();
			vMe.each(function() {
			    var errorSpan = $("~span.searchError", this);
			    validateSearch(this, errorSpan);
			});
			
			// validate languages, set hidden field on success
			var languagestr = $("#fad-languages").val();
			var languages = languagestr.split(',');
			
			// clear out the hidden field first
			$("#fad-languages-hidden").val('');
			
			jQuery.each(languages, function(i, val) {
				// verify that each language is valid
				
				// ignore whitespace 
				if (/\S/.test(val)) {
					val = $.trim(val);
					// capitalize the first letter of each word, rest lower case
					val = val.toLowerCase().replace(/\b[a-z]/g, function(letter) {
					    return letter.toUpperCase();
					});
					
					// don't know why the colon is after "option", but that gets it to work
					var option = $('#fad-languages-hidden option:[text="'+val+'"]');
					
					if ($(option).length == 0) {
						// NOT a valid language, set errors
						if ($("#fad-languages").hasClass('validOk')) {
							$("#fad-languages").removeClass('validOk');
						}
						$("#fad-languages").addClass('error');
						if (val.toLowerCase() == "english") {
							$("~span.searchError", "#fad-languages").html("There is no need to specify English in the language search.");
						} else {
							$("~span.searchError", "#fad-languages").html("'" + val + "' is not a valid language name.");
						}
						return false; // this is a break in jQuery.each()
					}
					else // valid, set hidden field
					{
						if($("#fad-languages").hasClass('error')) {
							$("#fad-languages").removeClass('error');
							$("~span.searchError", "#fad-languages").empty();
						}
						$("#fad-languages").addClass('validOk');
						$(option).attr("selected", "selected");
					}
				}
				
			});
			
			
			
			// why on earth count valids rather than just see if there's a single error?
			//if($(".validOk").length >= vMe.length) {
				//$(this).submit();
           //     return true;
			//} else {
            //    return false;
            //}
			
			if ($(".error").length > 0) {
				return false;
			} else {
				//clear the autocomplete attribute onSubmit to allow for back button retention of values
				// this has to come after error checking.
	        	$(".ac_input").removeAttr("autocomplete");
	        	$(".ui-autocomplete-input").removeAttr("autocomplete");
				return true;
			}
		});
	
		
		
		
    }
});

