protected override void OnInit( EventArgs e )
{
base.OnInit( e );
var rockPage = Page as RockPage;
if ( rockPage != null )
{
string script = rockPage.GetSharedItem( "org.RockRMS.PhoneNumberBox.script" ) as string;
if ( script == null )
{
StringBuilder sbScript = new StringBuilder();
sbScript.Append( "\tvar phoneNumberFormats = {\n" );
var definedType = DefinedTypeCache.Read( Rock.SystemGuid.DefinedType.COMMUNICATION_PHONE_COUNTRY_CODE.AsGuid() );
if ( definedType != null )
{
var definedValues = definedType.DefinedValues;
foreach ( var countryCode in definedValues.OrderBy( v => v.Order ).Select( v => v.Value).Distinct() )
{
sbScript.AppendFormat( "\t\t'{0}' : [\n", countryCode );
foreach( var definedValue in definedValues.Where( v => v.Value == countryCode).OrderBy( v => v.Order))
{
string match = definedValue.GetAttributeValue( "MatchRegEx" );
string replace = definedValue.GetAttributeValue( "FormatRegEx" );
if ( !string.IsNullOrWhiteSpace( match ) && !string.IsNullOrWhiteSpace( replace ) )
{
sbScript.AppendFormat( "\t\t\t{{ 'match' : '{0}', 'replace' : '{1}' }},\n", match.Replace( @"\", @"\\" ), replace.Replace( @"\", @"\\" ) );
}
}
sbScript.Append( "\t\t],\n" );
}
}
sbScript.Append( "\t};\n" );
sbScript.Append( @"
function phoneNumberBoxFormatNumber( tb ) {
var countryCode = tb.closest('div.input-group').find('input:hidden').val();
var origValue = tb.val();
var number = tb.val().replace(/\D/g,'');
var formats = phoneNumberFormats[countryCode];
for ( var i = 0; i < formats.length; i++) {
var matchRegex = new RegExp(formats[i].match);
number = number.replace(matchRegex, formats[i].replace);
}
if (number != origValue) {
tb.val(number);
}
}
$('div.phone-number-box input:text').on('change', function(e) {
phoneNumberBoxFormatNumber($(this));
});
$('div.phone-number-box ul.dropdown-menu a').click( function(e) {
e.preventDefault();
$(this).closest('div.input-group').find('input:hidden').val($(this).html());
$(this).closest('div.input-group-btn').find('button').html($(this).html() + ' <span class=""caret""></span>');
phoneNumberBoxFormatNumber($(this).closest('div.input-group').find('input:text').first());
});
" );
script = sbScript.ToString();
rockPage.SaveSharedItem( "org.RockRMS.PhoneNumberBox.script", script );
}
ScriptManager.RegisterStartupScript( this, this.GetType(), "phone-number-box", script, true );
}
}