- Employee Email
Our Mission
Since 2000 all County locations are connected with Fiber Optic Cabling or other broadband solutions. The Whitfield County IT Department manages a virtual server environment, VOIP phone system, managed switch network, and wireless network for all County Departments and other agencies. Agencies supported by the IT department are the Convention and Visitors Bureau and Tunnel Hill Heritage Center. The IT department maintains data and servers for all major departments as well as on-site backup and off-site backup to protect the County’s data.
IT Policies
- Email Retention Policy
- Email and Internet Usage Policy
IT Services to County Government
- Comprehensive Technology Infrastructure
- Land Line and Cellular Phone Service and Support
- Network Security and Data Backup
- Public and Private WiFi in most County Buildings
- SPAM Filtering and Virus Protection
- Self-Hosted Employee Email and Resource Portal
- County Website Design and Hosting iji
Contact InformationInformation Technology
201 S Hamilton ST 4th Floor
Dalton GA 30720
You can reach the Help Desk by phone:
(706) 281-4800 or local 4800
by email:
ithelpdesk@whitfieldcountyga.com
Staff Certifications
Department Name | First Name | Last Name | Profession | Phone | |
---|---|---|---|---|---|
Information Technology | Rick | Lovelady | Director | rlovelady@whitfieldcountyga.com | |
Information Technology | Larry | Taylor | Sr. Systems Engineer | ltaylor@whitfieldcountyga.com | |
Information Technology | Rusty | Gregg | Systems Engineer | rgregg@whitfieldcountyga.com | |
Information Technology | Gina | Weber | Network Analyst | gweber@whitfieldcountyga.com | |
Information Technology | Cindy | Sherrod | Network Analyst | csherrod@whitfieldcountyga.com | |
Information Technology | Larry | McAtee | Network Analyst | lmcatee@whitfieldcountyga.com |
'); if (typeof settings.myClass !== 'undefined') $stacktable.addClass(settings.myClass); var markup = ''; var $caption, $topRow, headMarkup, bodyMarkup, tr_class; $table.addClass('stacktable large-only'); $caption = $table.find("caption").clone(); $topRow = $table.find('tr').eq(0); // using rowIndex and cellIndex in order to reduce ambiguity $table.find('tbody tr').each(function() { // declaring headMarkup and bodyMarkup, to be used for separately head and body of single records headMarkup = ''; bodyMarkup = ''; tr_class = $(this).prop('class'); // for the first row, "headIndex" cell is the head of the table // for the other rows, put the "headIndex" cell as the head for that row // then iterate through the key/values $(this).find('td,th').each(function(cellIndex) { if ($(this).html() !== ''){ bodyMarkup += '
'; } }); markup += '
'; }); $table.find('tfoot tr td').each(function(rowIndex,value) { if ($.trim($(value).text()) !== '') { markup += '
' + $(value).html() + '
'; } }); $stacktable.prepend($caption); $stacktable.append($(markup)); $table.before($stacktable); }); }; $.fn.stacktable = function(options) { var $tables = this, defaults = {headIndex:0}, settings = $.extend({}, defaults, options), headIndex; // checking the "headIndex" option presence... or defaults it to 0 if(options && options.headIndex) headIndex = options.headIndex; else headIndex = 0; return $tables.each(function() { var table_css = $(this).prop('class'); var $stacktable = $('
'); if (typeof settings.myClass !== 'undefined') $stacktable.addClass(settings.myClass); var markup = ''; var $table, $caption, $topRow, headMarkup, bodyMarkup, tr_class; $table = $(this); $table.addClass('stacktable large-only'); $caption = $table.find("caption").clone(); $topRow = $table.find('tr').eq(0); // using rowIndex and cellIndex in order to reduce ambiguity $table.find('tr').each(function(rowIndex) { // declaring headMarkup and bodyMarkup, to be used for separately head and body of single records headMarkup = ''; bodyMarkup = ''; tr_class = $(this).prop('class'); // for the first row, "headIndex" cell is the head of the table if (rowIndex === 0) { // the main heading goes into the markup variable markup += '
'; } else { // for the other rows, put the "headIndex" cell as the head for that row // then iterate through the key/values $(this).find('td,th').each(function(cellIndex) { if (cellIndex === headIndex) { headMarkup = '
'; } else { if ($(this).html() !== ''){ bodyMarkup += '
'; } } }); markup += headMarkup + bodyMarkup; } }); $stacktable.prepend($caption); $stacktable.append($(markup)); $table.before($stacktable); }); }; $.fn.stackcolumns = function(options) { var $tables = this, defaults = {}, settings = $.extend({}, defaults, options); return $tables.each(function() { var $table = $(this); var num_cols = $table.find('tr').eq(0).find('td,th').length; //first table
'); var col_i = 1; //col index starts at 0 -> start copy at second column. while (col_i < num_cols) { $table.find('tr').each(function(index) { var tem = $('
'); // todo opt. copy styles of $this; todo check if parent is thead or tfoot to handle accordingly if(index === 0) tem.addClass("st-head-row st-head-row-main"); var first = $(this).find('td,th').eq(0).clone().addClass("st-key"); var target = col_i; // if colspan apply, recompute target for second cell. if ($(this).find("*[colspan]").length) { var i =0; $(this).find('td,th').each(function() { var cs = $(this).attr("colspan"); if (cs) { cs = parseInt(cs, 10); target -= cs-1; if ((i+cs) > (col_i)) //out of current bounds target += i + cs - col_i -1; i += cs; } else i++; if (i > col_i) return false; //target is set; break. }); } var second = $(this).find('td,th').eq(target).clone().addClass("st-val").removeAttr("colspan"); tem.append(first, second); tb.append(tem); }); ++col_i; } $stackcolumns.append($(tb)); $table.before($stackcolumns); }); };}(jQuery));