// Widget: Geolocation(function($){var memberPublic = {};var _extensionName = 'mc_geolocation';// Declare options and set default values.var _opt = null, _optCustoms = null, _optDefaults = {	strLocationListId:'',	strLocatedContainerSelector:'.location-current',	strLocatedToken1Selector:'.city',	strLocatedToken2Selector:'.region',	strLocatedChangeSelector:'.btn_change',	strPickerContainerSelector:'.location-finder',	strPickerCancelSelector:'.btn_cancel',	strGetStateCmsItemUrl:'',	strSetStateUrl:'',	strCmsItemIdCookieName:'',	strHideCss:'location-hide',	strShowCss:'location-show'};/* Private Fields//-------------------------------------------------------------------*/var _eleLocatedContainer = null;var _eleLocatedChange = null;var _elePickerContainer = null;var _elePickerCancel = null;var _strCmsItemId = null;/* Private Methods//-------------------------------------------------------------------*//** Get state of CMS item. Perform AJAX. */function _getStateCmsItem(fnResult) {	$.post(_opt.strGetStateCmsItemUrl, null, function(data, status) {		if(status == 'success' && (data == '0' || data == 0)) {			if(fnResult) {fnResult.call(this, null);}		} else if(status == 'success') {			if(fnResult) {fnResult.call(this, data);}		} else {throw status;}	}, 'json');}/** Set state of location. Perform AJAX. */function _setStateLocation(objDataParameters) {	if(typeof objDataParameters === 'undefined') {objDataParameters = null;}	$.post(_opt.strSetStateUrl, objDataParameters, function(data, status) {		if(status == 'success' && (data == '0' || data == 0)) {			memberPublic.showPickerContainer();		} else if(status == 'success') {			memberPublic.showLocatedContainerAndSetProperties(data.cmsItemId, data.cmsParentItemName, data.cmsItemName);		} else {throw status;}	}, 'json');}/* Public Methods//-------------------------------------------------------------------*//** Extend core library. */memberPublic = $[_extensionName] = function(optCustoms) {	// Merge two options, modifying the first.	_opt = $.extend({}, _optDefaults, optCustoms);	// Init.	memberPublic.init();	// Return library's object.	return this;};/** Init widget. */memberPublic.init = function() {	// Get elements from document.	_elePickerContainer = $(_opt.strPickerContainerSelector).get(0);	_eleLocatedContainer = $(_opt.strLocatedContainerSelector).get(0);	// Get HTTP cookie value.	_strCmsItemId = memberPublic.getCookieValue(_opt.strCmsItemIdCookieName);	// Bind events.	_elePickerCancel = $(_opt.strPickerCancelSelector, _elePickerContainer).bind('click', function(evt) {		memberPublic.showLocatedContainer()		// Prevent default action.		return false;	}).get(0);	_eleLocatedChange = $(_opt.strLocatedChangeSelector, _eleLocatedContainer).bind('click', function(evt) {		memberPublic.showPickerContainer();		// Prevent default action.		return false;	}).get(0);	// Validate browser.	if(navigator.userAgent.match(/(iPhone|iPod|Android|Windows Phone OS 7|BlackBerry)/i) && navigator.geolocation) {		if(_strCmsItemId != null) {			memberPublic.runDefault();		} else {			navigator.geolocation.getCurrentPosition(function(objPosition) {				_setStateLocation({					cmsItemId:_opt.strLocationListId,					latitude:objPosition.coords.latitude,					longitude:objPosition.coords.longitude,					override:true				});			}, function(objError) {				memberPublic.runDefault();			});		}	} else if(typeof google !== 'undefined' && google.loader.ClientLocation) {		_setStateLocation({			cmsItemId:_opt.strLocationListId,			latitude:google.loader.ClientLocation.latitude,			longitude:google.loader.ClientLocation.longitude,			override:false		});	} else {		memberPublic.runDefault();	}};/** Get options. */memberPublic.getOptions = function() {	return _opt;};/** Get cookie value. */memberPublic.getCookieValue = function(name) {	if(typeof name === 'undefined' || name == null || name.length <= 0) {return null;}	var start = document.cookie.indexOf(name + '=');	var len = start + name.length + 1;	if((!start) && (name != document.cookie.substring(0, name.length))) {		return null;	}	if(start == -1) {return null;}	var end = document.cookie.indexOf(';', len);	if(end == -1) {end = document.cookie.length;}	return unescape(document.cookie.substring(len, end));};/** Run default. */memberPublic.runDefault = function() {	_getStateCmsItem(function(objResult) {		if(objResult != null) {			memberPublic.showLocatedContainerAndSetProperties(objResult.cmsItemId, objResult.cmsParentItemName, objResult.cmsItemName);		} else {			memberPublic.showPickerContainer();		}	});};/** Show picker container. */memberPublic.showPickerContainer = function() {	$(_elePickerContainer).removeClass(_opt.strHideCss).addClass(_opt.strShowCss);	$(_eleLocatedContainer).removeClass(_opt.strShowCss).addClass(_opt.strHideCss);};/** Show located container. */memberPublic.showLocatedContainer = function() {	$(_elePickerContainer).removeClass(_opt.strShowCss).addClass(_opt.strHideCss);	$(_eleLocatedContainer).removeClass(_opt.strHideCss).addClass(_opt.strShowCss);};/** Show located container and set properties. */memberPublic.showLocatedContainerAndSetProperties = function(strItemId, strToken1, strToken2) {	$(_opt.strLocatedToken1Selector, _eleLocatedContainer).text(strToken1);	$(_opt.strLocatedToken2Selector, _eleLocatedContainer).text(strToken2);	memberPublic.showLocatedContainer();};})(jQuery);
