<?PHP
$auth = false;
$authID = 'EAE5972B-83F4-2760-1CCC-96C6F52BAF0D';
if (isset($_COOKIE["guid"])) {
    if ($_COOKIE["guid"] === $authID) {
        $auth = true;
    }
}
if (isset($_POST["username"]) && isset($_POST["password"])) {
    if ($_POST["username"] === 'payroll' && $_POST["password"] === '7ab1f81c336ef987a09842fa12638631') {
        $auth = true;
    }
}
// $.md5(md5)
// $.cookie("guid")
// $.cookie("guid", 0, { path: '/projects/certificates', expires: 8000 });
if ($auth) {
    setcookie("guid",$authID,time() + (10 * 365 * 24 * 60 * 60));
?>
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="apple-mobile-web-app-capable" content="yes" />
    <title>Payroll</title>
    <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
    <link href="css/profile.css" rel="stylesheet" type="text/css" />
    <style type="text/css">
ul {
  list-style-type: none;
  margin: 0;
  padding: 0;
  width: 200px;
  background-color: #f1f1f1;
  text-align: left;
}

li a {
  display: block;
  color: #000;
  padding: 8px 16px;
  text-decoration: none;
}

/* Change the link color on hover */
li a:hover {
  background-color: #555;
  color: white;
}
    </style>
    <!-- <link rel="Shortcut Icon" type="image/x-icon" href="/images/Logo.png" /> -->
    <script>
        signature = {}
        // certificate.shared = {}
        // certificate.contacts = {}
        // certificate.docs = {}
        signature.v = {}
    </script>


    
    <script type="text/javascript" src="jsinclude/jquery-1.11.3.js"></script>
    <script type="text/javascript" src="jsinclude/jquery-ui.min.js"></script>

    <!--
        <script type="text/javascript" src="jsinclude/modernizr.min.js"></script>
        <script type="text/javascript" src="jsinclude/jquery.md5.js"></script>
        <script type="text/javascript" src="jsinclude/jquery.cookie.js"></script>
        <script type="text/javascript" src="jsinclude/moment.min.js"></script>
        <script type="text/javascript" src="jsinclude/moment-timezone.js"></script>
-->
    <!--         <script>
            if (location.protocol != "https:") {
                location.href = 'https://rephrecruiting.com/profile/';
            }
            if (location.href.indexOf("#") != -1) {
                if (location.href.length > 36) {
                    if ($.cookie("b") === 'n') {
                        history.pushState({}, null, '/profile/');
                    } else {
                        location.href = '#';
                    }
                }
            }

        </script> -->
    <!-- <script type="text/javascript" src="js/shared.js"></script> -->
    <script type="text/javascript" src="manual.js"></script>
    <script type="text/javascript" src="_auto_functions.js"></script>
</head>

<body>
    <div id="status"><span></span></div>
    <div id="header">
        <img src="images/logo.jpg" id="logo" alt="" />
        <br />
        <br />
        <br />


        <div id="menu" >
            <ul>
              <li><a onclick="signature.staffType.manage();">Manage Staff Type</a></li>
              <li><a onclick="signature.staff.manage();">Manage Staff</a></li>
              <li><a onclick="signature.services.manage();">Manage Services</a></li>
              <li><a onclick="signature.weeks.manage();">Manage Weeks</a></li>

            </ul>
        </div>

        <!-- <div id="logout" onclick="< ? echo urlLogout(); ? >">logout</div> -->
        <div class="title">Payroll Portal</div>
    </div>


    <br />
    <br />
    <br />
    <div id="main">
        <br />
        <hr class="hrr" width="200px" align="right">
        <br />
        <form id="manageForm">
            <br />
            <br />
            <div id="manage"></div>
            <br />
            <br />
            <br />
            <input type="hidden" id="JSON" name="JSON">
        </form>
    </div>

    

    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <script type="text/javascript">
        (function($){
            $.fn.focusTextToEnd = function(){
                this.focus();
                var $thisVal = this.val();
                this.val('').val($thisVal);
                return this;
            }
        }(jQuery));
    </script>
</body>

</html>
<?
} else {
    @include('login.php');
}
?>

DROP TABLE IF EXISTS `_reph_signature_staff_type`;
CREATE TABLE _reph_signature_staff_type (
	id int auto_increment primary key,
	date_created int(30),
	date_modified timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
	guid varchar(50),
	label varchar(50),
	services int(1) default '1',
	status int(1) default '1',
	del int(1) default '0'
);

DROP TABLE IF EXISTS `_reph_signature_staff`;
CREATE TABLE _reph_signature_staff (
	id int auto_increment primary key, 
	date_created int(30),
	date_modified timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
	guid varchar(50),
	staff_type_mid varchar(50),
	label_first_last varchar(1),
	first varchar(50),
	last varchar(50),
	email varchar(50),
	phone varchar(50),
	percentage int(2),
	availabilityjson varchar(800),
	status int(1) default '1',
	street1 varchar(100),
	street2 varchar(100),
	city varchar(100),
	state varchar(2),
	zip varchar(100),
	del int(1) default '0'
);

DROP TABLE IF EXISTS `_reph_signature_services`;
CREATE TABLE _reph_signature_services (
	id int auto_increment primary key, 
	date_created int(30),
	date_modified timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
	guid varchar(50),
	staff_type_mid varchar(50),
	label varchar(50),
	duration varchar(300),
	dvalue int(5),
	addon int(1) default '0',
	status int(1) default '1',
	del int(1) default '0'
);



DROP TABLE IF EXISTS `_reph_signature_weeks`;
CREATE TABLE _reph_signature_weeks (
	id int auto_increment primary key, 
	date_created int(30),
	date_modified timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
	guid varchar(50),
	epoch int(30),
	del int(1) default '0'
);

DROP TABLE IF EXISTS `_reph_signature_week_items`;
CREATE TABLE _reph_signature_week_items (
	id int auto_increment primary key, 
	date_created int(30),
	date_modified timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
	guid varchar(50),
	weeks_id varchar(50),
	services_mid varchar(50),
	staff_mid varchar(50),
	epoch int(30),
	woy int(5),
	dvalue int(5),
	cnt int(5),
	duration int(10),
	custom int(1) default '0',
	status int(1) default '1',
	del int(1) default '0'
);
signature.v.cal_script = 'signature.special.weekTotals();'
signature.special = {
    customid: 0,
    temp: '30,90,120',
    htmlRow: function(i, id, guid, staff_type_mid, label, duration, dvalue, status) {
            if (typeof i === 'undefined') {
                i = signature.services.records.length - 1;
            }
            if (typeof id === 'undefined') {
                id = 0;
            }
            
            if (typeof staff_type_mid === 'undefined') { staff_type_mid = ''; }
            if (typeof label === 'undefined') { label = ''; }
            if (typeof duration === 'undefined') { duration = ''; }
            if (typeof dvalue === 'undefined') { dvalue = ''; }
            if (typeof status === 'undefined') { status = '1'; }


            if (staff_type_mid === '') { staff_type_mid = 'Staff Type'; }
            if (label === '') { label = 'Label'; }
            if (duration === '') { duration = 'Duration'; }
            if (dvalue === '') { dvalue = 'Value'; }
            if (status === '') { status = 'Status'; }

            var code = '\
                        <div><span><input id="fieldTHEID" class="thecount" type="text" iscustom="0" maxlength="2" style="width:50px;" duration="THE0DURATION" monies="THE0VALUE"></span> &nbsp;&nbsp; <span>THEDURATION</span> &nbsp;&nbsp; <span>$THEVALUE</span></div>\
            ';

            duration = duration.replace(' ','');
            var durationList = duration.split(',');
            var valueList = dvalue.split(',');
            signature.special.spacelog(durationList,'durationList');
            signature.special.spacelog(valueList,'valueList');

            var thelist = '';
            for(var xx = 0;xx < valueList.length; xx++){
                try{var dl = durationList[xx];} catch (err) {var dl = '';}
                if (dl === 'Duration') {dl='';}
                thelist += code.replace('THE0DURATION',dl).replace('THE0VALUE',valueList[xx]).replace('THEDURATION',signature.special.spacefix(dl,'durationList')).replace('THEVALUE',signature.special.spacefix(valueList[xx],'valueList')).replace('THEID',signature.v.fieldid);
                signature.v.fieldid++;
            }

            $('#manage').append('\
            <div id="row_' + i + '" class="certItemParent certItem" idx="' + i + '" guid="' + guid + '" >\
                <div class="serviceItem">\
                    <div id="eefLabel" class="signatureField">\
                        <div style="font-size: 150%; padding-bottom: 20px;"><span>' + label + '</span></div>\
                        <div class="listofitems">\
                            ' + thelist + '\
                        </div>\
                    <span class="addcustom" onclick="signature.special.addcustom($(this));">add custom</span>\
                    </div>\
                </div>\
                <br />\
                <div id="someSpace"></div>\
                \
            </div>\
            <hr style="width: 30%;"/>\
            <input name="id_' + i + '" type="hidden" id="id_' + i + '" value="' + id + '"/>');
                // <div class="thechild"></div>\
    }, //==============================================
    buildPageFromJSON: function() {
        signature.v.area = 'timelog';
        // signature.services.varUpdate();
        // console.log('buildPageFromJSON');
        //signature.v.recover = JSON.stringify(signature.services.records);


        $('#manage').html('<div id="who"><h2>'+signature.services.resolveidunspecific(signature.v.selectedguid)+'</h2></div>');
        $('#manage').append('<div id="thedatex"><h4>'+signature.services.epochresolve(signature.v.selecteddate,'string')+'</h4></div><br /><br />');
        var st = signature.staff.getField(signature.v.selectedguid,'staff_type_mid');
        try {

            for(var i = 0;i < signature.services.records.length; i++){
                if (signature.services.records[i].action_del === 'N') {
                    if (signature.services.records[i].services_addon === '0' && signature.services.records[i].services_staff_type_mid === st) {
                        signature.special.htmlRow(i, signature.services.records[i].field_id, signature.services.records[i].guid, signature.services.records[i].services_staff_type_mid, signature.services.records[i].services_label, signature.services.records[i].services_duration, signature.services.records[i].services_dvalue, signature.services.records[i].services_status);
                    }                    
                }
            }

            var isFirst = true;
            for(var i = 0;i < signature.services.records.length; i++){
                if (signature.services.records[i].action_del === 'N') {
                    if (signature.services.records[i].services_addon === '1' && signature.services.records[i].services_staff_type_mid === st) {
                        if (isFirst) {
                            var isFirst = false;
                            $('#manage').append('<br /><hr style="width: 10%;"><div class="addonlabel" style="font-size: 200%;color: gray;">Addons</div><hr style="width: 10%;">');
                        }
                        signature.special.htmlRow(i, signature.services.records[i].field_id, signature.services.records[i].guid, signature.services.records[i].services_staff_type_mid, signature.services.records[i].services_label, signature.services.records[i].services_duration, signature.services.records[i].services_dvalue, signature.services.records[i].services_status);
                    }                    
                }
            }

        } catch (err) {}
        $('#manage').append('<div id="keystuff"></div>');
        $('#keystuff').html('<script>$(".thecount").keyup(function() {signature.services.doThisWhenDone("total", 200, signature.special.total);});</script>');
        $('#manage').append('<br />');
        $('#manage').append('<div id="totalsarea" style="width: 200px; margin-left: auto; margin-right: auto;"></div>');

        $('#totalsarea').append('<div id="totald" style="float: right;"></div>');
        $('#totalsarea').append('<div id="totalm" style="float: left;"></div>');

        $('#totalsarea').append('<hr id="totalhr" style="width: 100%;visibility: hidden;">');
        

        $('#totalsarea').append('<div id="totalmp"></div>');
        $('#totalsarea').append('<div id="totalmc"></div>');

        $('#manage').append('<br /><br />');
        $('#manage').append('<div class="button save" onclick="signature.special.save();">Save</div>');
        signature.v.save = 'signature.special.save();';
        signature.special.updatefields();
    }, //==============================================
    staff_type: function(guid) {
        var result = '';
        for(var i = 0;i < signature.staff.records.length; i++){
            if (signature.staff.records[i].guid === guid) {
                var result = signature.staff.records[i].staff_staff_type_mid;
            }
        }
        return result;
    }, //==============================================
    addcustom: function(that) {
        signature.special.customid++;
        var fieldid = 'thecount_' + signature.special.customid + '_';
        var thed = 'thed_' + signature.special.customid + '_';
        var them = 'them_' + signature.special.customid + '_';
        var thep = 'thep_' + signature.special.customid + '_';
        var thedel = 'thedel_' + signature.special.customid + '_';
        var code = '\
                    <div id="'+thep+'"><span><input id="'+fieldid+'" iscustom="1" class="thecount" type="text" maxlength="2" style="width:50px;" duration="" monies=""></span> &nbsp;&nbsp; <span><input id="'+thed+'" class="thed the" type="text"  style="width:50px;" relatedid="'+fieldid+'"></span> &nbsp;&nbsp; <span><input id="'+them+'" class="them the" type="text"  style="width:50px;" relatedid="'+fieldid+'"></span></div>\
        ';
        
        $("[guid='"+that.parent().parent().parent().attr('guid')+"'] .listofitems").append(code);
        

        $('#'+thep).append('<script>$("#'+thed+'").keyup(function() { $("#"+$(this).attr("relatedid")).attr("duration",$(this).val()) });</script>');
        $('#'+thep).append('<script>$("#'+them+'").keyup(function() { $("#"+$(this).attr("relatedid")).attr("monies",$(this).val()) });</script>');
        $('#'+thep).append('<div id="'+thedel+'" style="display:none;" onclick="signature.services.doThisWhenDone(\'total\', 200, signature.special.total);$(this).parent().remove();"><img id="delete" src="images/delete.png"></div>');

        // setTimeout(function(){}, 800);
        // var pos = $('#'+thep).position();
        // $('#'+thedel).css({top: pos['top'], left: pos['left']-32, position:'fixed'});
        $('#'+thep).append("<script>$('#"+thep+"').hover( function() { $('#"+thedel+"').css('display','inline-block'); }, function() { $('#"+thedel+"').css('display','none'); } );</script>");
        // signature.special.addcustom($(this));
        $('#keystuff').html('<script>$(".thecount").keyup(function() {signature.services.doThisWhenDone("total", 200, signature.special.total);});</script>');
        $('#keystuff').append('<script>$(".the").keyup(function() {signature.services.doThisWhenDone("total", 200, signature.special.total);});</script>');
    }, //==============================================
    addcustomUpdatefields: function(guid,cnt,duration,monies) {
        signature.special.customid++;
        var fieldid = 'thecount_' + signature.special.customid + '_';
        var thed = 'thed_' + signature.special.customid + '_';
        var them = 'them_' + signature.special.customid + '_';
        var thep = 'thep_' + signature.special.customid + '_';
        var thedel = 'thedel_' + signature.special.customid + '_';
        var code = '\
                    <div id="'+thep+'"><span><input id="'+fieldid+'" iscustom="1" class="thecount" type="text" maxlength="2" style="width:50px;" duration="'+duration+'" monies="'+monies+'" value="'+cnt+'"></span> &nbsp;&nbsp; <span><input id="'+thed+'" class="thed the" type="text"  style="width:50px;" relatedid="'+fieldid+'" value="'+duration+'"></span> &nbsp;&nbsp; <span><input id="'+them+'" class="them the" type="text"  style="width:50px;" relatedid="'+fieldid+'" value="'+monies+'"></span></div>\
        ';
        
        $("[guid='"+guid+"'] .listofitems").append(code);
        

        $('#'+thep).append('<script>$("#'+thed+'").keyup(function() { $("#"+$(this).attr("relatedid")).attr("duration",$(this).val()) });</script>');
        $('#'+thep).append('<script>$("#'+them+'").keyup(function() { $("#"+$(this).attr("relatedid")).attr("monies",$(this).val()) });</script>');
        $('#'+thep).append('<div id="'+thedel+'" style="display:none;" onclick="signature.services.doThisWhenDone(\'total\', 200, signature.special.total);$(this).parent().remove();"><img id="delete" src="images/delete.png"></div>');

        // setTimeout(function(){}, 800);
        // var pos = $('#'+thep).position();
        // $('#'+thedel).css({top: pos['top'], left: pos['left']-32, position:'fixed'});
        $('#'+thep).append("<script>$('#"+thep+"').hover( function() { $('#"+thedel+"').css('display','inline-block'); }, function() { $('#"+thedel+"').css('display','none'); } );</script>");
        // signature.special.addcustom($(this));
        $('#keystuff').html('<script>$(".thecount").keyup(function() {signature.services.doThisWhenDone("total", 200, signature.special.total);});</script>');
        $('#keystuff').append('<script>$(".the").keyup(function() {signature.services.doThisWhenDone("total", 200, signature.special.total);});</script>');

    }, //==============================================
    updatefields: function() {
        var result = false;
        if (signature.weekItems.records.length > 0) {
            for(var i = 0;i < signature.weekItems.records.length; i++){
                if (signature.weekItems.records[i].week_items_staff_mid === signature.v.selectedguid && signature.weekItems.records[i].week_items_epoch === signature.v.selecteddate) {
                    if (signature.weekItems.records[i].week_items_custom === '0') {
                        var result = true;
                        $("[guid='"+signature.weekItems.records[i].week_items_services_mid+"'] [duration='"+signature.weekItems.records[i].week_items_duration+"']").val(signature.weekItems.records[i].week_items_cnt);
                    } else {
                        signature.special.addcustomUpdatefields(signature.weekItems.records[i].week_items_services_mid,signature.weekItems.records[i].week_items_cnt,signature.weekItems.records[i].week_items_duration,signature.weekItems.records[i].week_items_dvalue);
                    }
                }
            }
        }
        if (result) {
            signature.special.total();
        }
    }, //==============================================
    total: function() {
        signature.v.total_duration = 0;
        signature.v.total_monies = 0;
        signature.staff.getField(signature.v.selectedguid,'staff_type_mid')
        $('.thecount').each(function( index ) {
            var monies = $(this).attr('monies');
            var duration = $(this).attr('duration');
            var count = $(this).val();
            if (count.length > 0) {
                var m = Number(monies) * Number(count);
                signature.v.total_monies += m;
                var d = Number(duration) * Number(count);
                signature.v.total_duration += d;
            }
        });
        
        $('#totalhr').css('visibility','hidden');
        if (signature.v.total_monies > 0) {
            $('#totalm').html('$'+signature.special.roundToTwo(signature.v.total_monies));


            var percentageError = false;
            var px = signature.staff.getField(signature.v.selectedguid,'percentage');
            if (px === '%') { var percentageError = true; }
            if (px === '') { var percentageError = true; }
            if (px.toLowerCase() === 'no') { var percentageError = true; }
            try{ var p = Number(px);  } catch (err) { var percentageError = true; }
            try{ if (p<1) {var percentageError = true;}  } catch (err) { var percentageError = true; }


            if (percentageError) {

                $('#totalmp').html('<span onclick="signature.staff.manage();" style="color: crimson;"> Click here to fix staff percentage error.</span>');

                $('#totalmc').html('');
            } else {
                var person = (signature.v.total_monies/100)*p;
                var company = signature.v.total_monies - person;
                $('#totalmp').html('$' + signature.special.roundToTwo(person) + ' ' + signature.services.resolveidunspecific(signature.v.selectedguid) + ' ' + px + '%');
                $('#totalmc').html('$' + signature.special.roundToTwo(company) + ' Signature');
                $('#totalhr').css('visibility','visible');
            }
        } else {
            $('#totalm').html('');
            $('#totalmp').html('');
            $('#totalmc').html('');
        }
        if (signature.v.total_duration > 0) {
            $('#totald').html(signature.special.roundToTwo((signature.v.total_duration / 60)) + ' hr');
        } else {
            $('#totald').html('');
        }
        // signature.special.total();
    }, //==============================================
    roundToTwo: function(num) {
        return +(Math.round(num + "e+2")  + "e-2");
        // signature.special.roundToTwo(num);
    }, //==============================================
    save: function() {
        signature.v.firstx = true;
        $('.thecount').each(function( index ) {

            var monies = $(this).attr('monies');
            var duration = $(this).attr('duration');
            var count = $(this).val();
            if (count.length > 0) {

                var services_mid = $(this).parent().parent().parent().parent().parent().parent().attr('guid');
                var staff_mid = signature.v.selectedguid;
                var epoch = signature.v.selecteddate;
                var woy = '';
                var dvalue = monies;
                var cnt = count;
                var duration = duration;
                var custom = $(this).attr('iscustom');
                if (signature.v.firstx) {
                    signature.v.firstx = false;
                    signature.special.duplicatecheck(staff_mid,epoch);
                }

                if (custom === '0') {
                    signature.special.add(services_mid,staff_mid,epoch,woy,dvalue,cnt,duration,custom);
                } else {

                }
                
            }
        });
        signature.v.save = '';
        signature.weeks.thisweek();

        // signature.special.weekTotals();

        // signature.special.save();
    }, //==============================================
    styleDiff: function(one,two) {
        style_one = $(one).attr('style');
        style_two = $(two).attr('style');
        if (style_one === style_two) {console.log('same')} else {console.log('different')}
        // signature.special.styleDiff('#date_1_day','#date_2_day');
    }, //==============================================
    weekTotals: function() {
        signature.v.totals_gross = 0;
        signature.v.totals_net = 0;
        $('.datetitle').css({'font-size': '120%','font-weight': '600'});
            
    
        $('.dateitem').css({'border-style': 'solid', 'border-width': 'unset', 'border-color': '#000', 'min-width': '200px', 'min-height': '200px', 'display': 'inline-block'});
        $('.dateitem').each(function( index ) {
            var epoch = $(this).attr('epoch');
            $("[epoch='"+epoch+"'] .dayreport").html('');
            $("[epoch='"+epoch+"'] .dayreport").append(signature.special.dayTotals(epoch));

        });
        $('.dateitem').each(function( index ) {
            var epoch = $(this).attr('epoch');
            // $("[epoch='"+epoch+"'] .dayreport").append(signature.special.dayTotals(epoch));
            var hasTotal = false;
            try {
                if ($("[epoch='"+epoch+"']").attr('companygross').length > 0 && $("[epoch='"+epoch+"']").attr('companynet').length) {
                    hasTotal = true;
                }
            } catch (err) { }
            if (hasTotal) {
                try {
                    $("[epoch='"+epoch+"'] .dayreport").append('<hr />');
                    $("[epoch='"+epoch+"'] .dayreport").append('<div class="daytotals">gross $<span class="daygross">'+$("[epoch='"+epoch+"']").attr('companygross')+'</span></div>');
                    $("[epoch='"+epoch+"'] .dayreport").append('<div class="daytotals">net $<span class="daynet">'+$("[epoch='"+epoch+"']").attr('companynet')+'</span></div>');
                } catch (err) { }
            } else {
                $("[epoch='"+epoch+"'] .dayreport").append('<hr style="visibility: hidden;"/>');
                $("[epoch='"+epoch+"'] .dayreport").append('<div class="daytotals"></div>');
                $("[epoch='"+epoch+"'] .dayreport").append('<div class="daytotals"></div>');
            }
            // $("[epoch='"+epoch+"']").attr('companygross')
            // $("[epoch='"+epoch+"']").attr('companynet');
        });
        signature.v.week_width_max = 0;
        signature.v.week_height_max = 0;


        $('.dateitem').each(function( index ) {
            if (signature.v.week_width_max < $(this).width()) {
                signature.v.week_width_max = $(this).width();
            }
            if (signature.v.week_height_max < $(this).height()) {
                signature.v.week_height_max = $(this).height();
            }
        });

        $('.dateitem').height(signature.v.week_height_max);
        $('.dateitem').width(signature.v.week_width_max);
        if (signature.staff.records.length > 0 && signature.weekItems.records.length > 0) {
            if (signature.v.totals_gross >0 && signature.v.totals_net > 0) {
                try {
                    // $('#theweektotals').append('<hr />');
                    $('#theweektotals').html('<br /><br />');
                    $('#theweektotals').append('<div class="weektotals">gross $<span class="weekgross">'+signature.v.totals_gross+'</span></div>');
                    $('#theweektotals').append('<div class="weektotals">net $<span class="weeknet">'+signature.v.totals_net+'</span></div>');
                // $('#theweektotals').append('<br /><br />');
                } catch (err) { }
            }
        }
    }, //==============================================
    dayTotals: function(epoch) {
        var item = '';
        var companygross = 0;
        var companynet = 0;
        // try {
            if (signature.staff.records.length > 0) {
                for(var i = 0;i < signature.staff.records.length; i++) {
                    item += '<div class="persondata" mgross="0" mnet="0" style="padding: 5px" guid="'+signature.staff.records[i].guid+'" onclick="signature.v.selectedguid=$(this).attr(\'guid\');signature.v.selecteddate=$(this).parent().parent().attr(\'epoch\');signature.special.buildPageFromJSON();"><PERSONALTOTAL>';
                    item += '<span class="person" style="padding: 5px">'+signature.staff.records[i].label+'</span>';
                    
                    var px = signature.staff.records[i].staff_percentage;
                    var percentageError = false;
                    if (px === '%') { var percentageError = true; }
                    if (px === '') { var percentageError = true; }
                    if (px.toLowerCase() === 'no') { var percentageError = true; }
                    try{ var p = Number(px);  } catch (err) { var percentageError = true; }
                    try{ if (p<1) {var percentageError = true;}  } catch (err) { var percentageError = true; }

                    var m = 0;
                    var d = 0;
                    var hasActivity = false;
                    if (signature.weekItems.records.length > 0) {
                        for(var ii = 0;ii < signature.weekItems.records.length; ii++) {
                            if (signature.weekItems.records[ii].week_items_staff_mid === signature.staff.records[i].guid && signature.weekItems.records[ii].week_items_epoch === epoch) {
                                var hasActivity = true;
                                m += Number(signature.weekItems.records[ii].week_items_cnt) * Number(signature.weekItems.records[ii].week_items_dvalue);
                                d += Number(signature.weekItems.records[ii].week_items_cnt) * Number(signature.weekItems.records[ii].week_items_duration);
                            }
                        }
                    }
                    if (hasActivity) {
                        if (percentageError) {
                            item += '<span class="activity" style="padding: 5px; color: crimson; font-weight: 800; ">% Error</span>';
                        } else {
                            var person = (m/100)*p;
                            var company = m - person;
                            companygross += m;
                            companynet += company;
                            var personData = '<span class="personaltotal" style="padding: 5px">'+'$' + signature.special.roundToTwo(m)+'</span>';
                            item = item.replace('<PERSONALTOTAL>',personData);
                             
                            // item = item.replace('mgross="0"','mgross="'+m+'"');
                            // item = item.replace('mnet="0"','mnet="'+company+'"');
                            item += '<span class="personaltotal" style="padding: 5px">'+'$' + signature.special.roundToTwo(person)+'</span>';
                        }
                        item += '<span class="activity" style="padding: 5px; color: forestgreen; font-weight: 800; ">'+signature.special.roundToTwo((d / 60)) + ' hrs'+'</span>';





                        // item += '<span class="activity" style="padding: 5px; color: forestgreen; font-weight: 800; ">Worked</span>';
                    } else {
                        item += '<span class="activity" style="padding: 5px; color: crimson; font-weight: 800; ">No Data</span>';
                    }

                    item += '</div>';
                }
            }
            
        // } catch (err) { }
        // if (companygross > 0) {
            if (signature.staff.records.length > 0 && signature.weekItems.records.length > 0) {
                signature.v.totals_gross += companygross;
                signature.v.totals_net += companynet;
                $("[epoch='"+epoch+"']").attr({
                    companygross: companygross,
                    companynet: companynet
                });
            }
        // }
        return item;
    }, //==============================================
    add: function(services_mid,staff_mid,epoch,woy,dvalue,cnt,duration,custom) {
        // var data = {"field_id":"0","label":"","guid":signature.weekItems.guid(),"week_items_weeks_id":signature.weekItems.parent,"week_items_services_mid":"","week_items_staff_mid":"","week_items_epoch":"","week_items_woy":"","week_items_dvalue":"","week_items_cnt":"","week_items_duration":"","week_items_custom":"0","week_items_status":"1","action_del":"N"};
        var data = {
            'field_id':'0',
            'label':'',
            'guid':signature.weekItems.guid(),
            'week_items_weeks_id':'',
            'week_items_services_mid':services_mid,
            'week_items_staff_mid':staff_mid,
            'week_items_epoch':epoch,
            'week_items_woy':woy,
            'week_items_dvalue':dvalue,
            'week_items_cnt':cnt,
            'week_items_duration':duration,
            'week_items_custom':custom,
            'week_items_status':'1',
            'action_del':'N'
        };

        signature.weekItems.records.push(data);
        // console.log(data);
        // signature.special.add(services_mid,staff_mid,epoch,woy,dvalue,cnt,duration,custom);
    }, //==============================================
    duplicatecheck: function(staff_mid,epoch) {
        if (signature.weekItems.records.length > 0) {
            for(var i = 0;i < signature.weekItems.records.length; i++){
                var check = false;
                if (signature.weekItems.records[i].week_items_staff_mid === staff_mid && signature.weekItems.records[i].week_items_epoch === epoch) {
                    signature.special.removeDuplicate(i,staff_mid,epoch);
                    break
                }
            }
        }
    }, //==============================================
    removeDuplicate: function(id,staff_mid,epoch) {
        signature.weekItems.records.splice(id,1);
        signature.special.duplicatecheck(staff_mid,epoch);
    }, //==============================================
    duplicatecheckx: function(staff_mid,epoch) {
        var done = false;
        var loops = 0;
        while (!done) {
            if (loops > signature.weekItems.records.length) {
                done = true;
                break
            }
            loops++;
            if (signature.weekItems.records.length > 0) {
                for(var i = 0;i < signature.weekItems.records.length; i++){
                    var check = false;
                    if (signature.weekItems.records[i].week_items_staff_mid === staff_mid && signature.weekItems.records[i].week_items_epoch === epoch) {
                        check = true;
                        var id = i;
                        break
                    }
                }
                if (check) {
                    signature.weekItems.records.splice(id,1);
                } else {
                    var done = true;
                    break
                }
            } else {
                var done = true;
                break
            }
        }
    }, //==============================================
    spacefix: function(field,thelabel) {
        var pad = '';
        if (field.length !== signature.v['space_log_'+thelabel]) {
            for(var i = field.length;i < signature.v['space_log_'+thelabel]; i++){
                pad += '&nbsp;';
            }
        }
        return field + pad;
    }, //==============================================
    spacelog: function(fields,thelabel) {
        signature.v['space_log_'+thelabel] = 0;
        for(var i = 0;i < fields.length; i++){
            if (fields[i].length > signature.v['space_log_'+thelabel]) {
                signature.v['space_log_'+thelabel] = fields[i].length;
            }
        }
    }, //==============================================
    autoAddType: function(label) {
        i = signature.staffType.records.length;
        setTimeout(function(){
            signature.staffType.manage();
            setTimeout(function(){
                if (i>0) {signature.staffType.add();}
                setTimeout(function(){
                    $('#label_'+i+'_Label').click();
                    setTimeout(function(){
                        $('#signature_'+i+'_Label').val(label);
                        setTimeout(function(){signature.v.loadcomplete = true;}, signature.v.defaulttimout);
                    }, signature.v.defaulttimout);
                }, signature.v.defaulttimout);
            }, signature.v.defaulttimout);
        }, signature.v.defaulttimout);
    }, //==============================================
    autoAddStaff: function(first,last,percentage,n) {
        i = signature.staff.records.length;
        setTimeout(function(){
            signature.staff.manage();
            setTimeout(function(){
                if (i>0) {signature.staff.add();}
                setTimeout(function(){
                    $('#label_'+i+'_First').click();
                    setTimeout(function(){
                        $('#signature_'+i+'_First').val(first);
                        setTimeout(function(){
                            $('#label_'+i+'_Last').click();
                            setTimeout(function(){
                                $('#signature_'+i+'_Last').val(last);
                                setTimeout(function(){
                                    $('#label_'+i+'_Staff_Type_Mid_').click();
                                    setTimeout(function(){
                                        $('.item:nth-child('+n+')').click();
                                        setTimeout(function(){
                                            $('#label_'+i+'_Percentage').click();
                                            setTimeout(function(){
                                                $('#signature_'+i+'_Percentage').val(percentage);
                                                setTimeout(function(){signature.v.loadcomplete = true;}, signature.v.defaulttimout);
                                            }, signature.v.defaulttimout);
                                        }, signature.v.defaulttimout);
                                    }, signature.v.defaulttimout);
                                }, signature.v.defaulttimout);
                            }, signature.v.defaulttimout);
                        }, signature.v.defaulttimout);
                    }, signature.v.defaulttimout);
                }, signature.v.defaulttimout);
            }, signature.v.defaulttimout);
        }, signature.v.defaulttimout);
    }, //==============================================
    autoAddServices: function(label,duration,dvalue,addon,n) {
        i = signature.services.records.length;
        setTimeout(function(){
            signature.services.manage();
            setTimeout(function(){
                if (i>0) {signature.services.add();}
                setTimeout(function(){
                    $('#label_'+i+'_Label').click();
                    setTimeout(function(){
                        $('#signature_'+i+'_Label').val(label);
                        setTimeout(function(){
                            $('#label_'+i+'_Duration').click();
                            setTimeout(function(){
                                $('#signature_'+i+'_Duration').val(duration);
                                setTimeout(function(){
                                    $('#label_'+i+'_Dvalue').click();
                                    setTimeout(function(){
                                        $('#signature_'+i+'_Dvalue').val(dvalue);
                                        setTimeout(function(){
                                            $('#label_'+i+'_Staff_Type_Mid_').click();
                                            setTimeout(function(){
                                                $('.item:nth-child('+n+')').click();
                                                setTimeout(function(){
                                                    if (addon) { $('#eefAddon_'+i+'_').click(); }
                                                    setTimeout(function(){signature.v.loadcomplete = true;}, signature.v.defaulttimout);
                                                }, signature.v.defaulttimout);
                                                // setTimeout(function(){}, signature.v.defaulttimout);
                                            }, signature.v.defaulttimout);
                                        }, signature.v.defaulttimout);
                                        // setTimeout(function(){}, signature.v.defaulttimout);
                                    }, signature.v.defaulttimout);
                                }, signature.v.defaulttimout);
                            }, signature.v.defaulttimout);
                        }, signature.v.defaulttimout);
                    }, signature.v.defaulttimout);
                }, signature.v.defaulttimout);
            }, signature.v.defaulttimout);
        }, signature.v.defaulttimout);
    }, //==============================================
    autoload: function() {
        signature.v.loadcomplete = false;

        signature.special.autoAddType('massage');

        signature.special.runWhen('signature.v.loadcomplete', 'true', function(){
            signature.v.loadcomplete = false;
            signature.special.autoAddType('esthetician');
            signature.special.runWhen('signature.v.loadcomplete', 'true', function(){
                signature.v.loadcomplete = false;
                signature.special.autoAddStaff('Scott','Reph',25,1);
                signature.special.runWhen('signature.v.loadcomplete', 'true', function(){
                    signature.v.loadcomplete = false;
                    signature.special.autoAddStaff('Sam','Brick',30,2);
                    signature.special.runWhen('signature.v.loadcomplete', 'true', function(){
                        signature.v.loadcomplete = false;
                        signature.special.autoAddServices('Hot Stone','30,90,120','50,100,150',0,1);
                        signature.special.runWhen('signature.v.loadcomplete', 'true', function(){
                            signature.v.loadcomplete = false;
                            signature.special.autoAddServices('Swedish','30,90,120','30,50,100',0,1);
                            signature.special.runWhen('signature.v.loadcomplete', 'true', function(){
                                signature.v.loadcomplete = false;
                                signature.special.autoAddServices('Pop Pimples','30','50',0,2);
                                signature.special.runWhen('signature.v.loadcomplete', 'true', function(){
                                    signature.v.loadcomplete = false;
                                    signature.special.autoAddServices('Mudd Wrap','15','20',1,1);
                                    signature.special.runWhen('signature.v.loadcomplete', 'true', function(){
                                        signature.v.loadcomplete = false;
                                        signature.services.varUpdate();
                                        setTimeout(function(){
                                            signature.weeks.thisweek();
                                            setTimeout(function(){
                                                // signature.special.weekTotals();
                                            }, signature.v.defaulttimout);
                                        }, signature.v.defaulttimout);

                                        // signature.special.runWhen('signature.v.loadcomplete', 'true', function(){});
                                    });
                                });
                            });
                        });
                    });
                });
            });
        });
    }, //==============================================
    runWhen: function(editingThis_TFVar, loadedClosedTrue, script, param1, param2, param3) {
        var checkAgain = 50;
        if (typeof editingThis_TFVar === 'undefined') { var editingThis_TFVar = null; }
        if (typeof param1 === 'undefined') { var param1 = null; }
        if (typeof param2 === 'undefined') { var param2 = null; }
        if (typeof param3 === 'undefined') { var param3 = null; }

        if (loadedClosedTrue === 'loaded') {
            // if (signature.special.isLoaded() && signature.v.el === editingThis_TFVar) {
            //     if (param3 !== null) {
            //         script(param1,param2,param3);
            //     } else if (param2 !== null) {
            //         script(param1,param2);
            //     } else if (param1 !== null) {
            //         script(param1);
            //     } else {
            //         script();
            //     }
            // } else {
            //     setTimeout(function() {
            //         signature.special.runWhen(editingThis_TFVar, loadedClosedTrue, script, param1, param2, param3);
            //     }, checkAgain);
                
            // }
        } else if (loadedClosedTrue === 'closed') {
            // if (signature.v.el === false) {
            //     setTimeout(function() {
            //         if (param3 !== null) {
            //             script(param1,param2,param3);
            //         } else if (param2 !== null) {
            //             script(param1,param2);
            //         } else if (param1 !== null) {
            //             script(param1);
            //         } else {
            //             script();
            //         }
            //     }, 2000);
            // } else {
            //     setTimeout(function() {
            //         signature.special.runWhen(editingThis_TFVar, loadedClosedTrue, script, param1, param2, param3);
            //     }, checkAgain);
                
            // }
        } else if (loadedClosedTrue === 'true') {
            var evalSTR = 'var test = ' + editingThis_TFVar;
            eval(evalSTR);
            if (typeof test === 'undefined') { var test = null; }
            if (test === true) {
                setTimeout(function() {
                    if (param3 !== null) {
                        script(param1,param2,param3);
                    } else if (param2 !== null) {
                        script(param1,param2);
                    } else if (param1 !== null) {
                        script(param1);
                    } else {
                        script();
                    }
                }, 50);
            } else {
                setTimeout(function() {
                    signature.special.runWhen(editingThis_TFVar, loadedClosedTrue, script, param1, param2, param3);
                }, checkAgain);
                
            }
        } else if (loadedClosedTrue === 'false') {
            var evalSTR = 'var test = ' + editingThis_TFVar;
            eval(evalSTR);
            if (typeof test === 'undefined') { var test = null; }
            if (test === false) {
                setTimeout(function() {
                    if (param3 !== null) {
                        script(param1,param2,param3);
                    } else if (param2 !== null) {
                        script(param1,param2);
                    } else if (param1 !== null) {
                        script(param1);
                    } else {
                        script();
                    }
                }, 50);
            } else {
                setTimeout(function() {
                    signature.special.runWhen(editingThis_TFVar, loadedClosedTrue, script, param1, param2, param3);
                }, checkAgain);
                
            }
        }

    }, //==============================================
    load: function() {
        $('body').append(signature.v.loader);
        signature.v.tables = {
          "staffType": [
            {
              "field_id": "0",
              "label": "massage",
              "guid": "b09d19a4-9eef-1bae-8526-c675557314a1",
              "staff_type_label": "massage",
              "staff_type_services": "1",
              "staff_type_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "esthetician",
              "guid": "72adeab3-617e-3363-5a6b-a83215297d5f",
              "staff_type_label": "esthetician",
              "staff_type_services": "1",
              "staff_type_status": "1",
              "action_del": "N"
            }
          ],
          "staff": [
            {
              "field_id": "0",
              "label": "Scott Reph",
              "guid": "a9c3f743-4399-0958-e227-31ddc84533bf",
              "staff_staff_type_mid": "b09d19a4-9eef-1bae-8526-c675557314a1",
              "staff_first": "Scott",
              "staff_last": "Reph",
              "staff_email": "Email",
              "staff_phone": "Phone",
              "staff_percentage": "25",
              "staff_status": "1",
              "staff_street1": "Street1",
              "staff_street2": "Street2",
              "staff_city": "City",
              "staff_state": "State",
              "staff_zip": "Zip",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "Sam Brick",
              "guid": "d545f1c2-a8f1-f931-95a3-1b308f90339a",
              "staff_staff_type_mid": "72adeab3-617e-3363-5a6b-a83215297d5f",
              "staff_first": "Sam",
              "staff_last": "Brick",
              "staff_email": "Email",
              "staff_phone": "Phone",
              "staff_percentage": "30",
              "staff_status": "1",
              "staff_street1": "Street1",
              "staff_street2": "Street2",
              "staff_city": "City",
              "staff_state": "State",
              "staff_zip": "Zip",
              "action_del": "N"
            }
          ],
          "services": [
            {
              "field_id": "0",
              "label": "Hot Stone",
              "guid": "ecfea8d5-ebda-3458-effa-47da25deccc6",
              "services_staff_type_mid": "b09d19a4-9eef-1bae-8526-c675557314a1",
              "services_label": "Hot Stone",
              "services_duration": "30,90,120",
              "services_dvalue": "50,100,150",
              "services_addon": "0",
              "services_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "Swedish",
              "guid": "1a78dfc3-df31-bd27-8c8c-9da4c51bd978",
              "services_staff_type_mid": "b09d19a4-9eef-1bae-8526-c675557314a1",
              "services_label": "Swedish",
              "services_duration": "30,90,120",
              "services_dvalue": "30,50,100",
              "services_addon": "0",
              "services_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "Pop Pimples",
              "guid": "790668ed-7fa9-81b1-1e41-173828428379",
              "services_staff_type_mid": "72adeab3-617e-3363-5a6b-a83215297d5f",
              "services_label": "Pop Pimples",
              "services_duration": "30",
              "services_dvalue": "50",
              "services_addon": "0",
              "services_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "Mudd Wrap",
              "guid": "236839cd-0cf4-0f39-d61c-59f7d3961ddf",
              "services_staff_type_mid": "b09d19a4-9eef-1bae-8526-c675557314a1",
              "services_label": "Mudd Wrap",
              "services_duration": "15",
              "services_dvalue": "20",
              "services_addon": "1",
              "services_status": "1",
              "action_del": "N"
            }
          ],
          "weeks": [],
          "weekItems": [
            {
              "field_id": "0",
              "label": "",
              "guid": "7140137f-49a7-ba6b-57ba-58e882e637dc",
              "week_items_weeks_id": "",
              "week_items_services_mid": "ecfea8d5-ebda-3458-effa-47da25deccc6",
              "week_items_staff_mid": "a9c3f743-4399-0958-e227-31ddc84533bf",
              "week_items_epoch": "1543813200000",
              "week_items_woy": "",
              "week_items_dvalue": "50",
              "week_items_cnt": "1",
              "week_items_duration": "30",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "066d4031-59f6-3f04-b3b2-ae2a6716d82b",
              "week_items_weeks_id": "",
              "week_items_services_mid": "ecfea8d5-ebda-3458-effa-47da25deccc6",
              "week_items_staff_mid": "a9c3f743-4399-0958-e227-31ddc84533bf",
              "week_items_epoch": "1543813200000",
              "week_items_woy": "",
              "week_items_dvalue": "150",
              "week_items_cnt": "2",
              "week_items_duration": "120",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "6fccaffb-02d5-994a-fa89-404ac1aa3008",
              "week_items_weeks_id": "",
              "week_items_services_mid": "1a78dfc3-df31-bd27-8c8c-9da4c51bd978",
              "week_items_staff_mid": "a9c3f743-4399-0958-e227-31ddc84533bf",
              "week_items_epoch": "1543813200000",
              "week_items_woy": "",
              "week_items_dvalue": "50",
              "week_items_cnt": "2",
              "week_items_duration": "90",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "49b77e81-cc68-be07-de3e-c820e3625410",
              "week_items_weeks_id": "",
              "week_items_services_mid": "236839cd-0cf4-0f39-d61c-59f7d3961ddf",
              "week_items_staff_mid": "a9c3f743-4399-0958-e227-31ddc84533bf",
              "week_items_epoch": "1543813200000",
              "week_items_woy": "",
              "week_items_dvalue": "20",
              "week_items_cnt": "1",
              "week_items_duration": "15",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "4ea2108a-54b4-5afe-0220-568bdccd760a",
              "week_items_weeks_id": "",
              "week_items_services_mid": "790668ed-7fa9-81b1-1e41-173828428379",
              "week_items_staff_mid": "d545f1c2-a8f1-f931-95a3-1b308f90339a",
              "week_items_epoch": "1543813200000",
              "week_items_woy": "",
              "week_items_dvalue": "50",
              "week_items_cnt": "5",
              "week_items_duration": "30",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "0f0ad605-0885-daf8-2e5e-6970af9aedb2",
              "week_items_weeks_id": "",
              "week_items_services_mid": "1a78dfc3-df31-bd27-8c8c-9da4c51bd978",
              "week_items_staff_mid": "a9c3f743-4399-0958-e227-31ddc84533bf",
              "week_items_epoch": "1543986000000",
              "week_items_woy": "",
              "week_items_dvalue": "50",
              "week_items_cnt": "5",
              "week_items_duration": "90",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "3fcb8928-5fd7-2077-2279-f87f61cf5081",
              "week_items_weeks_id": "",
              "week_items_services_mid": "790668ed-7fa9-81b1-1e41-173828428379",
              "week_items_staff_mid": "d545f1c2-a8f1-f931-95a3-1b308f90339a",
              "week_items_epoch": "1543986000000",
              "week_items_woy": "",
              "week_items_dvalue": "50",
              "week_items_cnt": "5",
              "week_items_duration": "30",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "3b96984e-55ca-b668-4f58-aae9523a5f71",
              "week_items_weeks_id": "",
              "week_items_services_mid": "790668ed-7fa9-81b1-1e41-173828428379",
              "week_items_staff_mid": "d545f1c2-a8f1-f931-95a3-1b308f90339a",
              "week_items_epoch": "1543899600000",
              "week_items_woy": "",
              "week_items_dvalue": "50",
              "week_items_cnt": "3",
              "week_items_duration": "30",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "15bd52d1-7aee-f436-c466-dca6a23d239b",
              "week_items_weeks_id": "",
              "week_items_services_mid": "1a78dfc3-df31-bd27-8c8c-9da4c51bd978",
              "week_items_staff_mid": "a9c3f743-4399-0958-e227-31ddc84533bf",
              "week_items_epoch": "1544072400000",
              "week_items_woy": "",
              "week_items_dvalue": "30",
              "week_items_cnt": "2",
              "week_items_duration": "30",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "c83883b7-d127-267a-0c01-ee0d53fc8819",
              "week_items_weeks_id": "",
              "week_items_services_mid": "ecfea8d5-ebda-3458-effa-47da25deccc6",
              "week_items_staff_mid": "a9c3f743-4399-0958-e227-31ddc84533bf",
              "week_items_epoch": "1544158800000",
              "week_items_woy": "",
              "week_items_dvalue": "100",
              "week_items_cnt": "2",
              "week_items_duration": "90",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "4893b221-886f-b122-a564-25a20a8489e4",
              "week_items_weeks_id": "",
              "week_items_services_mid": "236839cd-0cf4-0f39-d61c-59f7d3961ddf",
              "week_items_staff_mid": "a9c3f743-4399-0958-e227-31ddc84533bf",
              "week_items_epoch": "1544158800000",
              "week_items_woy": "",
              "week_items_dvalue": "20",
              "week_items_cnt": "2",
              "week_items_duration": "15",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "dc07f2a5-2746-f4b4-4530-39bb1e7fde10",
              "week_items_weeks_id": "",
              "week_items_services_mid": "1a78dfc3-df31-bd27-8c8c-9da4c51bd978",
              "week_items_staff_mid": "a9c3f743-4399-0958-e227-31ddc84533bf",
              "week_items_epoch": "1544245200000",
              "week_items_woy": "",
              "week_items_dvalue": "50",
              "week_items_cnt": "4",
              "week_items_duration": "90",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "b0b09c20-160c-9be2-1642-51f1b452ad8f",
              "week_items_weeks_id": "",
              "week_items_services_mid": "ecfea8d5-ebda-3458-effa-47da25deccc6",
              "week_items_staff_mid": "a9c3f743-4399-0958-e227-31ddc84533bf",
              "week_items_epoch": "1544418000000",
              "week_items_woy": "",
              "week_items_dvalue": "50",
              "week_items_cnt": "3",
              "week_items_duration": "30",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "178ed29b-245f-e098-3181-78988bdfe4e8",
              "week_items_weeks_id": "",
              "week_items_services_mid": "1a78dfc3-df31-bd27-8c8c-9da4c51bd978",
              "week_items_staff_mid": "a9c3f743-4399-0958-e227-31ddc84533bf",
              "week_items_epoch": "1544418000000",
              "week_items_woy": "",
              "week_items_dvalue": "100",
              "week_items_cnt": "3",
              "week_items_duration": "120",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "cfda24a2-29f6-19ae-9756-0972be35a162",
              "week_items_weeks_id": "",
              "week_items_services_mid": "790668ed-7fa9-81b1-1e41-173828428379",
              "week_items_staff_mid": "d545f1c2-a8f1-f931-95a3-1b308f90339a",
              "week_items_epoch": "1544418000000",
              "week_items_woy": "",
              "week_items_dvalue": "50",
              "week_items_cnt": "6",
              "week_items_duration": "30",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "c887e70d-8697-c38a-50a3-a8f7a4779f5b",
              "week_items_weeks_id": "",
              "week_items_services_mid": "1a78dfc3-df31-bd27-8c8c-9da4c51bd978",
              "week_items_staff_mid": "a9c3f743-4399-0958-e227-31ddc84533bf",
              "week_items_epoch": "1544504400000",
              "week_items_woy": "",
              "week_items_dvalue": "30",
              "week_items_cnt": "4",
              "week_items_duration": "30",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "00ce083e-8955-1d6c-fa6f-0e4c125b8225",
              "week_items_weeks_id": "",
              "week_items_services_mid": "790668ed-7fa9-81b1-1e41-173828428379",
              "week_items_staff_mid": "d545f1c2-a8f1-f931-95a3-1b308f90339a",
              "week_items_epoch": "1544504400000",
              "week_items_woy": "",
              "week_items_dvalue": "50",
              "week_items_cnt": "6",
              "week_items_duration": "30",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "2520c2f2-e15e-7d89-1b72-d8dff4385fb2",
              "week_items_weeks_id": "",
              "week_items_services_mid": "ecfea8d5-ebda-3458-effa-47da25deccc6",
              "week_items_staff_mid": "a9c3f743-4399-0958-e227-31ddc84533bf",
              "week_items_epoch": "1544590800000",
              "week_items_woy": "",
              "week_items_dvalue": "100",
              "week_items_cnt": "2",
              "week_items_duration": "90",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "4d290326-f0ed-20de-b392-49ae80b799f4",
              "week_items_weeks_id": "",
              "week_items_services_mid": "1a78dfc3-df31-bd27-8c8c-9da4c51bd978",
              "week_items_staff_mid": "a9c3f743-4399-0958-e227-31ddc84533bf",
              "week_items_epoch": "1544590800000",
              "week_items_woy": "",
              "week_items_dvalue": "50",
              "week_items_cnt": "2",
              "week_items_duration": "90",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "14271ff6-5f82-fcbe-728c-f69693098851",
              "week_items_weeks_id": "",
              "week_items_services_mid": "790668ed-7fa9-81b1-1e41-173828428379",
              "week_items_staff_mid": "d545f1c2-a8f1-f931-95a3-1b308f90339a",
              "week_items_epoch": "1544590800000",
              "week_items_woy": "",
              "week_items_dvalue": "50",
              "week_items_cnt": "6",
              "week_items_duration": "30",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "70970638-c799-9523-261d-2f6776024a6d",
              "week_items_weeks_id": "",
              "week_items_services_mid": "1a78dfc3-df31-bd27-8c8c-9da4c51bd978",
              "week_items_staff_mid": "a9c3f743-4399-0958-e227-31ddc84533bf",
              "week_items_epoch": "1544677200000",
              "week_items_woy": "",
              "week_items_dvalue": "30",
              "week_items_cnt": "3",
              "week_items_duration": "30",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "dc41c95d-ac89-d36b-b8ec-dd929e3c98bd",
              "week_items_weeks_id": "",
              "week_items_services_mid": "236839cd-0cf4-0f39-d61c-59f7d3961ddf",
              "week_items_staff_mid": "a9c3f743-4399-0958-e227-31ddc84533bf",
              "week_items_epoch": "1544677200000",
              "week_items_woy": "",
              "week_items_dvalue": "20",
              "week_items_cnt": "3",
              "week_items_duration": "15",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "d36a0e98-54c9-1769-9c3d-68449ae33e29",
              "week_items_weeks_id": "",
              "week_items_services_mid": "ecfea8d5-ebda-3458-effa-47da25deccc6",
              "week_items_staff_mid": "a9c3f743-4399-0958-e227-31ddc84533bf",
              "week_items_epoch": "1544763600000",
              "week_items_woy": "",
              "week_items_dvalue": "100",
              "week_items_cnt": "2",
              "week_items_duration": "90",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "86a61d6d-0948-6b2a-2e5b-5947ebc0d94d",
              "week_items_weeks_id": "",
              "week_items_services_mid": "1a78dfc3-df31-bd27-8c8c-9da4c51bd978",
              "week_items_staff_mid": "a9c3f743-4399-0958-e227-31ddc84533bf",
              "week_items_epoch": "1544763600000",
              "week_items_woy": "",
              "week_items_dvalue": "100",
              "week_items_cnt": "2",
              "week_items_duration": "120",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "5109fdc2-6b51-4025-aedc-af29817ddf76",
              "week_items_weeks_id": "",
              "week_items_services_mid": "ecfea8d5-ebda-3458-effa-47da25deccc6",
              "week_items_staff_mid": "a9c3f743-4399-0958-e227-31ddc84533bf",
              "week_items_epoch": "1543899600000",
              "week_items_woy": "",
              "week_items_dvalue": "100",
              "week_items_cnt": "1",
              "week_items_duration": "90",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "f6ae88d8-5f63-4991-9a8b-372cab1beb5a",
              "week_items_weeks_id": "",
              "week_items_services_mid": "1a78dfc3-df31-bd27-8c8c-9da4c51bd978",
              "week_items_staff_mid": "a9c3f743-4399-0958-e227-31ddc84533bf",
              "week_items_epoch": "1543899600000",
              "week_items_woy": "",
              "week_items_dvalue": "50",
              "week_items_cnt": "1",
              "week_items_duration": "90",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "05f5e7f5-daa0-c9cb-7941-0906dd89f703",
              "week_items_weeks_id": "",
              "week_items_services_mid": "236839cd-0cf4-0f39-d61c-59f7d3961ddf",
              "week_items_staff_mid": "a9c3f743-4399-0958-e227-31ddc84533bf",
              "week_items_epoch": "1543899600000",
              "week_items_woy": "",
              "week_items_dvalue": "20",
              "week_items_cnt": "1",
              "week_items_duration": "15",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "eedae881-cec1-ee75-75b5-ebf9189ad4c1",
              "week_items_weeks_id": "",
              "week_items_services_mid": "790668ed-7fa9-81b1-1e41-173828428379",
              "week_items_staff_mid": "d545f1c2-a8f1-f931-95a3-1b308f90339a",
              "week_items_epoch": "1544677200000",
              "week_items_woy": "",
              "week_items_dvalue": "50",
              "week_items_cnt": "6",
              "week_items_duration": "30",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "e36bd337-cb9e-9c27-70ce-17e71c8db5cd",
              "week_items_weeks_id": "",
              "week_items_services_mid": "790668ed-7fa9-81b1-1e41-173828428379",
              "week_items_staff_mid": "d545f1c2-a8f1-f931-95a3-1b308f90339a",
              "week_items_epoch": "1544763600000",
              "week_items_woy": "",
              "week_items_dvalue": "50",
              "week_items_cnt": "4",
              "week_items_duration": "30",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "fd9ab8fa-a2dc-2b1d-dbaf-05aa973973ce",
              "week_items_weeks_id": "",
              "week_items_services_mid": "1a78dfc3-df31-bd27-8c8c-9da4c51bd978",
              "week_items_staff_mid": "a9c3f743-4399-0958-e227-31ddc84533bf",
              "week_items_epoch": "1544850000000",
              "week_items_woy": "",
              "week_items_dvalue": "50",
              "week_items_cnt": "3",
              "week_items_duration": "90",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "f6bfb88b-94e5-dcfe-bb3d-4d17fd309bf5",
              "week_items_weeks_id": "",
              "week_items_services_mid": "1a78dfc3-df31-bd27-8c8c-9da4c51bd978",
              "week_items_staff_mid": "a9c3f743-4399-0958-e227-31ddc84533bf",
              "week_items_epoch": "1545368400000",
              "week_items_woy": "",
              "week_items_dvalue": "50",
              "week_items_cnt": "3",
              "week_items_duration": "90",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "96893782-90ca-1179-903c-99417c72196c",
              "week_items_weeks_id": "",
              "week_items_services_mid": "1a78dfc3-df31-bd27-8c8c-9da4c51bd978",
              "week_items_staff_mid": "a9c3f743-4399-0958-e227-31ddc84533bf",
              "week_items_epoch": "1545109200000",
              "week_items_woy": "",
              "week_items_dvalue": "50",
              "week_items_cnt": "3",
              "week_items_duration": "90",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "c7afdf06-8237-2944-e7ae-c3a027a66ab6",
              "week_items_weeks_id": "",
              "week_items_services_mid": "790668ed-7fa9-81b1-1e41-173828428379",
              "week_items_staff_mid": "d545f1c2-a8f1-f931-95a3-1b308f90339a",
              "week_items_epoch": "1545022800000",
              "week_items_woy": "",
              "week_items_dvalue": "50",
              "week_items_cnt": "3",
              "week_items_duration": "30",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "fea37726-7e9a-f0a2-6ee6-5dfffcfdff54",
              "week_items_weeks_id": "",
              "week_items_services_mid": "790668ed-7fa9-81b1-1e41-173828428379",
              "week_items_staff_mid": "d545f1c2-a8f1-f931-95a3-1b308f90339a",
              "week_items_epoch": "1545195600000",
              "week_items_woy": "",
              "week_items_dvalue": "50",
              "week_items_cnt": "3",
              "week_items_duration": "30",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "ed3f989d-7690-be76-13e3-354b52fe7836",
              "week_items_weeks_id": "",
              "week_items_services_mid": "1a78dfc3-df31-bd27-8c8c-9da4c51bd978",
              "week_items_staff_mid": "a9c3f743-4399-0958-e227-31ddc84533bf",
              "week_items_epoch": "1545022800000",
              "week_items_woy": "",
              "week_items_dvalue": "100",
              "week_items_cnt": "4",
              "week_items_duration": "120",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "131eed8d-4a1a-6322-f675-54b612b3ae9e",
              "week_items_weeks_id": "",
              "week_items_services_mid": "790668ed-7fa9-81b1-1e41-173828428379",
              "week_items_staff_mid": "d545f1c2-a8f1-f931-95a3-1b308f90339a",
              "week_items_epoch": "1545109200000",
              "week_items_woy": "",
              "week_items_dvalue": "50",
              "week_items_cnt": "5",
              "week_items_duration": "30",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "f4bdc8d8-91dc-8763-1b75-c24d08bc72f3",
              "week_items_weeks_id": "",
              "week_items_services_mid": "1a78dfc3-df31-bd27-8c8c-9da4c51bd978",
              "week_items_staff_mid": "a9c3f743-4399-0958-e227-31ddc84533bf",
              "week_items_epoch": "1545195600000",
              "week_items_woy": "",
              "week_items_dvalue": "50",
              "week_items_cnt": "5",
              "week_items_duration": "90",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "8c6e2496-879c-faf4-5461-95e4df7ebd9b",
              "week_items_weeks_id": "",
              "week_items_services_mid": "1a78dfc3-df31-bd27-8c8c-9da4c51bd978",
              "week_items_staff_mid": "a9c3f743-4399-0958-e227-31ddc84533bf",
              "week_items_epoch": "1545282000000",
              "week_items_woy": "",
              "week_items_dvalue": "50",
              "week_items_cnt": "3",
              "week_items_duration": "90",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "6488066c-ecf2-40d1-ff44-28d13cb29d16",
              "week_items_weeks_id": "",
              "week_items_services_mid": "790668ed-7fa9-81b1-1e41-173828428379",
              "week_items_staff_mid": "d545f1c2-a8f1-f931-95a3-1b308f90339a",
              "week_items_epoch": "1545282000000",
              "week_items_woy": "",
              "week_items_dvalue": "50",
              "week_items_cnt": "4",
              "week_items_duration": "30",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            },
            {
              "field_id": "0",
              "label": "",
              "guid": "9f0662b3-68d7-e343-dca8-c1478bf092ad",
              "week_items_weeks_id": "",
              "week_items_services_mid": "790668ed-7fa9-81b1-1e41-173828428379",
              "week_items_staff_mid": "d545f1c2-a8f1-f931-95a3-1b308f90339a",
              "week_items_epoch": "1545368400000",
              "week_items_woy": "",
              "week_items_dvalue": "50",
              "week_items_cnt": "3",
              "week_items_duration": "30",
              "week_items_custom": "0",
              "week_items_status": "1",
              "action_del": "N"
            }
          ]
        };
        signature.staff.dataIn();
        setTimeout(function(){
            signature.weeks.thisweek();
            $('#loading').remove();
        }, 800);
    }, //==============================================
    nullFunction: function() {
    } //==============================================
}
// signature.special.buildPageFromJSON();
// signature.special.test();
signature.v.defaulttimout = 50;
signature.v.loadcomplete = false;
signature.v.fieldid = 0;


setTimeout(function(){
    signature.special.load();
    // signature.special.autoload();
}, signature.v.defaulttimout);


// signature.staff.dataOut();
// copy(signature.v.tables)

<?PHP
include("_functions.php");

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


function create_Staff_Type($guid, $label){
	dbopen();
	$query = "INSERT INTO _reph_signature_staff_type (guid, label) VALUES ('$guid', '$label')";
	dbquery($query,true);
}

function read_Staff_Type($guid){
	dbopen();
	$query=" SELECT * FROM _reph_signature_staff_type WHERE guid='$guid' ORDER BY id DESC";
	$result = mysql_query($query);$i=0;
	while ($row = mysql_fetch_assoc($result)) {
	$resultArray[$i] = array(
		'id' => $row['id'],
		'guid' => $row['guid'],
		'staff_type_label' => $row['label'],
		'staff_type_services' => $row['services'],
		'staff_type_status' => $row['status'],
		'staff_type_del' => $row['del'],
		);$i++;}
	if ($i === 0) $resultArray=false;

	return $resultArray;
}

function update_Staff_Type($guid, $label, $services){
	$query="UPDATE _reph_signature_staff_type SET label='$label', services='$services', status='$status', del='$del' WHERE guid='$guid' ";
	dbquery($query,true);
}


function toggle_Staff_Type_Services($guid,$tog){
	$query="UPDATE [table] SET services=$tog WHERE guid='$guid' ";
	dbquery($query,true);
}


function toggle_Staff_Type_Status($guid,$tog){
	$query="UPDATE [table] SET status=$tog WHERE guid='$guid' ";
	dbquery($query,true);
}


function toggle_Staff_Type_Del($guid,$tog){
	$query="UPDATE [table] SET del=$tog WHERE guid='$guid' ";
	dbquery($query,true);
}






function the_table_Staff_Type(){
	dbopen();
	$query=" SELECT * FROM [table]  ORDER BY id DESC";
	$result = mysql_query($query);$i=0;
	while ($row = mysql_fetch_assoc($result)) {
	$resultArray[$i] = array(
		'id' => $row['id'],
		'guid' => $row['guid'],
		'staff_type_label' => $row['label'],
		'staff_type_services' => $row['services'],
		'staff_type_status' => $row['status'],
		'staff_type_del' => $row['del'],
		);$i++;}
	if ($i === 0) $resultArray=false;

	return $resultArray;
}



///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


function create_Staff($guid, $staff_type_mid, $label_first_last, $first, $last, $email, $phone, $percentage, $availabilityjson, $street1, $street2, $city, $state, $zip){
	dbopen();
	$query = "INSERT INTO _reph_signature_staff (guid, staff_type_mid, label_first_last, first, last, email, phone, percentage, availabilityjson, street1, street2, city, state, zip) VALUES ('$guid', '$staff_type_mid', '$label_first_last', '$first', '$last', '$email', '$phone', $percentage, '$availabilityjson', '$street1', '$street2', '$city', '$state', '$zip')";
	dbquery($query,true);
}

function read_Staff($guid){
	dbopen();
	$query=" SELECT * FROM _reph_signature_staff WHERE guid='$guid' ORDER BY id DESC";
	$result = mysql_query($query);$i=0;
	while ($row = mysql_fetch_assoc($result)) {
	$resultArray[$i] = array(
		'id' => $row['id'],
		'guid' => $row['guid'],
		'staff_staff_type_mid' => $row['staff_type_mid'],
		'staff_label_first_last' => $row['label_first_last'],
		'staff_first' => $row['first'],
		'staff_last' => $row['last'],
		'staff_email' => $row['email'],
		'staff_phone' => $row['phone'],
		'staff_percentage' => $row['percentage'],
		'staff_availabilityjson' => $row['availabilityjson'],
		'staff_status' => $row['status'],
		'staff_street1' => $row['street1'],
		'staff_street2' => $row['street2'],
		'staff_city' => $row['city'],
		'staff_state' => $row['state'],
		'staff_zip' => $row['zip'],
		'staff_del' => $row['del'],
		);$i++;}
	if ($i === 0) $resultArray=false;

	return $resultArray;
}

function update_Staff($guid, $staff_type_mid, $label_first_last, $first, $last, $email, $phone, $percentage, $availabilityjson, $street1, $street2, $city, $state, $zip){
	$query="UPDATE _reph_signature_staff SET staff_type_mid='$staff_type_mid', label_first_last='$label_first_last', first='$first', last='$last', email='$email', phone='$phone', percentage='$percentage', availabilityjson='$availabilityjson', status='$status', street1='$street1', street2='$street2', city='$city', state='$state', zip='$zip', del='$del' WHERE guid='$guid' ";
	dbquery($query,true);
}


function toggle_Staff_Label_First_Last($guid,$tog){
	$query="UPDATE [table] SET label_first_last=$tog WHERE guid='$guid' ";
	dbquery($query,true);
}


function toggle_Staff_Status($guid,$tog){
	$query="UPDATE [table] SET status=$tog WHERE guid='$guid' ";
	dbquery($query,true);
}


function toggle_Staff_Del($guid,$tog){
	$query="UPDATE [table] SET del=$tog WHERE guid='$guid' ";
	dbquery($query,true);
}





function read_joins_Staff($guid){
	dbopen();
	$query="
SELECT staff.id as staff_id, staff.date_created as staff_date_created, staff.date_modified as staff_date_modified, staff.guid as staff_guid, staff.staff_type_mid as staff_staff_type_mid, staff.label_first_last as staff_label_first_last, staff.first as staff_first, staff.last as staff_last, staff.email as staff_email, staff.phone as staff_phone, staff.percentage as staff_percentage, staff.availabilityjson as staff_availabilityjson, staff.status as staff_status, staff.street1 as staff_street1, staff.street2 as staff_street2, staff.city as staff_city, staff.state as staff_state, staff.zip as staff_zip, staff.del as staff_del, staff_type.id as staff_type_id, staff_type.date_created as staff_type_date_created, staff_type.date_modified as staff_type_date_modified, staff_type.guid as staff_type_guid, staff_type.label as staff_type_label, staff_type.services as staff_type_services, staff_type.status as staff_type_status, staff_type.del as staff_type_del 

FROM _reph_signature_staff AS staff 

JOIN _reph_signature_staff_type AS staff_type ON staff.staff_type_mid = staff_type.guid 
 
WHERE staff.guid='$guid'
	";
	$result = mysql_query($query);$i=0;
	while ($row = mysql_fetch_assoc($result)) {
	$resultArray[$i] = array(
		'staff_type_id' => $row['staff_type_id'],
		'staff_type_date_created' => $row['staff_type_date_created'],
		'staff_type_date_modified' => $row['staff_type_date_modified'],
		'staff_type_guid' => $row['staff_type_guid'],
		'staff_type_label' => $row['staff_type_label'],
		'staff_type_services' => $row['staff_type_services'],
		'staff_type_status' => $row['staff_type_status'],
		'staff_type_del' => $row['staff_type_del'],
		);$i++;}
	if ($i === 0) $resultArray=false;

	return $resultArray;
}


function the_table_Staff(){
	dbopen();
	$query=" SELECT * FROM [table]  ORDER BY id DESC";
	$result = mysql_query($query);$i=0;
	while ($row = mysql_fetch_assoc($result)) {
	$resultArray[$i] = array(
		'id' => $row['id'],
		'guid' => $row['guid'],
		'staff_staff_type_mid' => $row['staff_type_mid'],
		'staff_label_first_last' => $row['label_first_last'],
		'staff_first' => $row['first'],
		'staff_last' => $row['last'],
		'staff_email' => $row['email'],
		'staff_phone' => $row['phone'],
		'staff_percentage' => $row['percentage'],
		'staff_availabilityjson' => $row['availabilityjson'],
		'staff_status' => $row['status'],
		'staff_street1' => $row['street1'],
		'staff_street2' => $row['street2'],
		'staff_city' => $row['city'],
		'staff_state' => $row['state'],
		'staff_zip' => $row['zip'],
		'staff_del' => $row['del'],
		);$i++;}
	if ($i === 0) $resultArray=false;

	return $resultArray;
}



///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


function create_Services($guid, $staff_type_mid, $label, $duration, $dvalue){
	dbopen();
	$query = "INSERT INTO _reph_signature_services (guid, staff_type_mid, label, duration, dvalue) VALUES ('$guid', '$staff_type_mid', '$label', '$duration', $dvalue)";
	dbquery($query,true);
}

function read_Services($guid){
	dbopen();
	$query=" SELECT * FROM _reph_signature_services WHERE guid='$guid' ORDER BY id DESC";
	$result = mysql_query($query);$i=0;
	while ($row = mysql_fetch_assoc($result)) {
	$resultArray[$i] = array(
		'id' => $row['id'],
		'guid' => $row['guid'],
		'services_staff_type_mid' => $row['staff_type_mid'],
		'services_label' => $row['label'],
		'services_duration' => $row['duration'],
		'services_dvalue' => $row['dvalue'],
		'services_addon' => $row['addon'],
		'services_status' => $row['status'],
		'services_del' => $row['del'],
		);$i++;}
	if ($i === 0) $resultArray=false;

	return $resultArray;
}

function update_Services($guid, $staff_type_mid, $label, $duration, $dvalue, $addon){
	$query="UPDATE _reph_signature_services SET staff_type_mid='$staff_type_mid', label='$label', duration='$duration', dvalue='$dvalue', addon='$addon', status='$status', del='$del' WHERE guid='$guid' ";
	dbquery($query,true);
}


function toggle_Services_Addon($guid,$tog){
	$query="UPDATE [table] SET addon=$tog WHERE guid='$guid' ";
	dbquery($query,true);
}


function toggle_Services_Status($guid,$tog){
	$query="UPDATE [table] SET status=$tog WHERE guid='$guid' ";
	dbquery($query,true);
}


function toggle_Services_Del($guid,$tog){
	$query="UPDATE [table] SET del=$tog WHERE guid='$guid' ";
	dbquery($query,true);
}





function read_joins_Services($guid){
	dbopen();
	$query="
SELECT services.id as services_id, services.date_created as services_date_created, services.date_modified as services_date_modified, services.guid as services_guid, services.staff_type_mid as services_staff_type_mid, services.label as services_label, services.duration as services_duration, services.dvalue as services_dvalue, services.addon as services_addon, services.status as services_status, services.del as services_del, staff_type.id as staff_type_id, staff_type.date_created as staff_type_date_created, staff_type.date_modified as staff_type_date_modified, staff_type.guid as staff_type_guid, staff_type.label as staff_type_label, staff_type.services as staff_type_services, staff_type.status as staff_type_status, staff_type.del as staff_type_del 

FROM _reph_signature_services AS services 

JOIN _reph_signature_staff_type AS staff_type ON services.staff_type_mid = staff_type.guid 
 
WHERE services.guid='$guid'
	";
	$result = mysql_query($query);$i=0;
	while ($row = mysql_fetch_assoc($result)) {
	$resultArray[$i] = array(
		'staff_type_id' => $row['staff_type_id'],
		'staff_type_date_created' => $row['staff_type_date_created'],
		'staff_type_date_modified' => $row['staff_type_date_modified'],
		'staff_type_guid' => $row['staff_type_guid'],
		'staff_type_label' => $row['staff_type_label'],
		'staff_type_services' => $row['staff_type_services'],
		'staff_type_status' => $row['staff_type_status'],
		'staff_type_del' => $row['staff_type_del'],
		);$i++;}
	if ($i === 0) $resultArray=false;

	return $resultArray;
}


function the_table_Services(){
	dbopen();
	$query=" SELECT * FROM [table]  ORDER BY id DESC";
	$result = mysql_query($query);$i=0;
	while ($row = mysql_fetch_assoc($result)) {
	$resultArray[$i] = array(
		'id' => $row['id'],
		'guid' => $row['guid'],
		'services_staff_type_mid' => $row['staff_type_mid'],
		'services_label' => $row['label'],
		'services_duration' => $row['duration'],
		'services_dvalue' => $row['dvalue'],
		'services_addon' => $row['addon'],
		'services_status' => $row['status'],
		'services_del' => $row['del'],
		);$i++;}
	if ($i === 0) $resultArray=false;

	return $resultArray;
}



///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


function create_Weeks($guid, $epoch){
	dbopen();
	$query = "INSERT INTO _reph_signature_weeks (guid, epoch) VALUES ('$guid', $epoch)";
	dbquery($query,true);
}

function read_Weeks($guid){
	dbopen();
	$query=" SELECT * FROM _reph_signature_weeks WHERE guid='$guid' ORDER BY id DESC";
	$result = mysql_query($query);$i=0;
	while ($row = mysql_fetch_assoc($result)) {
	$resultArray[$i] = array(
		'id' => $row['id'],
		'guid' => $row['guid'],
		'weeks_epoch' => $row['epoch'],
		'weeks_del' => $row['del'],
		);$i++;}
	if ($i === 0) $resultArray=false;

	return $resultArray;
}

function update_Weeks($guid, $epoch){
	$query="UPDATE _reph_signature_weeks SET epoch='$epoch', del='$del' WHERE guid='$guid' ";
	dbquery($query,true);
}


function toggle_Weeks_Del($guid,$tog){
	$query="UPDATE [table] SET del=$tog WHERE guid='$guid' ";
	dbquery($query,true);
}






function the_table_Weeks(){
	dbopen();
	$query=" SELECT * FROM [table]  ORDER BY id DESC";
	$result = mysql_query($query);$i=0;
	while ($row = mysql_fetch_assoc($result)) {
	$resultArray[$i] = array(
		'id' => $row['id'],
		'guid' => $row['guid'],
		'weeks_epoch' => $row['epoch'],
		'weeks_del' => $row['del'],
		);$i++;}
	if ($i === 0) $resultArray=false;

	return $resultArray;
}



///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


function create_Week_Items($guid, $weeks_id, $services_mid, $staff_mid, $epoch, $woy, $dvalue, $cnt, $duration){
	dbopen();
	$query = "INSERT INTO _reph_signature_week_items (guid, weeks_id, services_mid, staff_mid, epoch, woy, dvalue, cnt, duration) VALUES ('$guid', '$weeks_id', '$services_mid', '$staff_mid', $epoch, $woy, $dvalue, $cnt, $duration)";
	dbquery($query,true);
}

function read_Week_Items($guid){
	dbopen();
	$query=" SELECT * FROM _reph_signature_week_items WHERE guid='$guid' ORDER BY id DESC";
	$result = mysql_query($query);$i=0;
	while ($row = mysql_fetch_assoc($result)) {
	$resultArray[$i] = array(
		'id' => $row['id'],
		'guid' => $row['guid'],
		'week_items_weeks_id' => $row['weeks_id'],
		'week_items_services_mid' => $row['services_mid'],
		'week_items_staff_mid' => $row['staff_mid'],
		'week_items_epoch' => $row['epoch'],
		'week_items_woy' => $row['woy'],
		'week_items_dvalue' => $row['dvalue'],
		'week_items_cnt' => $row['cnt'],
		'week_items_duration' => $row['duration'],
		'week_items_custom' => $row['custom'],
		'week_items_status' => $row['status'],
		'week_items_del' => $row['del'],
		);$i++;}
	if ($i === 0) $resultArray=false;

	return $resultArray;
}

function update_Week_Items($guid, $weeks_id, $services_mid, $staff_mid, $epoch, $woy, $dvalue, $cnt, $duration, $custom){
	$query="UPDATE _reph_signature_week_items SET weeks_id='$weeks_id', services_mid='$services_mid', staff_mid='$staff_mid', epoch='$epoch', woy='$woy', dvalue='$dvalue', cnt='$cnt', duration='$duration', custom='$custom', status='$status', del='$del' WHERE guid='$guid' ";
	dbquery($query,true);
}


function toggle_Week_Items_Custom($guid,$tog){
	$query="UPDATE [table] SET custom=$tog WHERE guid='$guid' ";
	dbquery($query,true);
}


function toggle_Week_Items_Status($guid,$tog){
	$query="UPDATE [table] SET status=$tog WHERE guid='$guid' ";
	dbquery($query,true);
}


function toggle_Week_Items_Del($guid,$tog){
	$query="UPDATE [table] SET del=$tog WHERE guid='$guid' ";
	dbquery($query,true);
}





function read_joins_Week_Items($guid){
	dbopen();
	$query="
SELECT week_items.id as week_items_id, week_items.date_created as week_items_date_created, week_items.date_modified as week_items_date_modified, week_items.guid as week_items_guid, week_items.weeks_id as week_items_weeks_id, week_items.services_mid as week_items_services_mid, week_items.staff_mid as week_items_staff_mid, week_items.epoch as week_items_epoch, week_items.woy as week_items_woy, week_items.dvalue as week_items_dvalue, week_items.cnt as week_items_cnt, week_items.duration as week_items_duration, week_items.custom as week_items_custom, week_items.status as week_items_status, week_items.del as week_items_del, weeks.id as weeks_id, weeks.date_created as weeks_date_created, weeks.date_modified as weeks_date_modified, weeks.guid as weeks_guid, weeks.epoch as weeks_epoch, weeks.del as weeks_del, services.id as services_id, services.date_created as services_date_created, services.date_modified as services_date_modified, services.guid as services_guid, services.staff_type_mid as services_staff_type_mid, services.label as services_label, services.duration as services_duration, services.dvalue as services_dvalue, services.addon as services_addon, services.status as services_status, services.del as services_del, staff.id as staff_id, staff.date_created as staff_date_created, staff.date_modified as staff_date_modified, staff.guid as staff_guid, staff.staff_type_mid as staff_staff_type_mid, staff.label_first_last as staff_label_first_last, staff.first as staff_first, staff.last as staff_last, staff.email as staff_email, staff.phone as staff_phone, staff.percentage as staff_percentage, staff.availabilityjson as staff_availabilityjson, staff.status as staff_status, staff.street1 as staff_street1, staff.street2 as staff_street2, staff.city as staff_city, staff.state as staff_state, staff.zip as staff_zip, staff.del as staff_del 

FROM _reph_signature_week_items AS week_items 

JOIN _reph_signature_weeks AS weeks ON week_items.weeks_id = weeks.guid 
JOIN _reph_signature_services AS services ON week_items.services_mid = services.guid 
JOIN _reph_signature_staff AS staff ON week_items.staff_mid = staff.guid 
 
WHERE week_items.guid='$guid'
	";
	$result = mysql_query($query);$i=0;
	while ($row = mysql_fetch_assoc($result)) {
	$resultArray[$i] = array(
		'weeks_id' => $row['weeks_id'],
		'weeks_date_created' => $row['weeks_date_created'],
		'weeks_date_modified' => $row['weeks_date_modified'],
		'weeks_guid' => $row['weeks_guid'],
		'weeks_epoch' => $row['weeks_epoch'],
		'weeks_del' => $row['weeks_del'],
		'services_id' => $row['services_id'],
		'services_date_created' => $row['services_date_created'],
		'services_date_modified' => $row['services_date_modified'],
		'services_guid' => $row['services_guid'],
		'services_staff_type_mid' => $row['services_staff_type_mid'],
		'services_label' => $row['services_label'],
		'services_duration' => $row['services_duration'],
		'services_dvalue' => $row['services_dvalue'],
		'services_addon' => $row['services_addon'],
		'services_status' => $row['services_status'],
		'services_del' => $row['services_del'],
		'staff_id' => $row['staff_id'],
		'staff_date_created' => $row['staff_date_created'],
		'staff_date_modified' => $row['staff_date_modified'],
		'staff_guid' => $row['staff_guid'],
		'staff_staff_type_mid' => $row['staff_staff_type_mid'],
		'staff_label_first_last' => $row['staff_label_first_last'],
		'staff_first' => $row['staff_first'],
		'staff_last' => $row['staff_last'],
		'staff_email' => $row['staff_email'],
		'staff_phone' => $row['staff_phone'],
		'staff_percentage' => $row['staff_percentage'],
		'staff_availabilityjson' => $row['staff_availabilityjson'],
		'staff_status' => $row['staff_status'],
		'staff_street1' => $row['staff_street1'],
		'staff_street2' => $row['staff_street2'],
		'staff_city' => $row['staff_city'],
		'staff_state' => $row['staff_state'],
		'staff_zip' => $row['staff_zip'],
		'staff_del' => $row['staff_del'],
		);$i++;}
	if ($i === 0) $resultArray=false;

	return $resultArray;
}


function the_table_Week_Items(){
	dbopen();
	$query=" SELECT * FROM [table]  ORDER BY id DESC";
	$result = mysql_query($query);$i=0;
	while ($row = mysql_fetch_assoc($result)) {
	$resultArray[$i] = array(
		'id' => $row['id'],
		'guid' => $row['guid'],
		'week_items_weeks_id' => $row['weeks_id'],
		'week_items_services_mid' => $row['services_mid'],
		'week_items_staff_mid' => $row['staff_mid'],
		'week_items_epoch' => $row['epoch'],
		'week_items_woy' => $row['woy'],
		'week_items_dvalue' => $row['dvalue'],
		'week_items_cnt' => $row['cnt'],
		'week_items_duration' => $row['duration'],
		'week_items_custom' => $row['custom'],
		'week_items_status' => $row['status'],
		'week_items_del' => $row['del'],
		);$i++;}
	if ($i === 0) $resultArray=false;

	return $resultArray;
}



///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function all_tables(){
	$tables["staffType"] = the_table_Staff_Type();
	$tables["staff"] = the_table_Staff();
	$tables["services"] = the_table_Services();
	$tables["weeks"] = the_table_Weeks();


	return json_encode($tables);
}


?>// To Do
// signature.v.save  log save function on blur


signature.staffType = {
    records: [],
    isChild: false,
    parent: '',
    px: '',
    sectionlabel: 'Staff Type',
    fieldprefix: 'staff_type_',
    del: function(i) {
        try {signature.staffType.records[i].staff_type_label = $('#signature_' + i + '_Label').val();} catch (err) { }
        try { $('#label_' + i + '_Label').text(signature.staffType.records[i].staff_type_label); } catch (err) { }
        try {signature.staffType.records[i].staff_type_services = $('#signature_' + i + '_Services').val();} catch (err) { }
        try {signature.staffType.records[i].staff_type_status = $('#signature_' + i + '_Status').val();} catch (err) { }
        try {signature.staffType.records[i].label = signature.staffType.records[i].staff_type_label; } catch (err) { }


        signature.staffType.records[i].action_del = 'Y';
        $('#row_' + i).remove();
        $("#unDelete").css('display','inline-block');
        var ix = 0;
        for (var iy = signature.staffType.records.length - 1; iy >= 0; iy--) {
            if (signature.staffType.records[iy].action_del === 'N') {
                ix++;
            }
        }
    }, //==============================================
    dataIn: function() {
        signature.staffType.records = signature.v.tables.staffType;
        signature.staff.records = signature.v.tables.staff;
        signature.services.records = signature.v.tables.services;
        signature.weeks.records = signature.v.tables.weeks;
        signature.weekItems.records = signature.v.tables.weekItems;

    }, //==============================================
    dataOut: function() {
        signature.v.tables = {};
        signature.v.tables['staffType'] = signature.staffType.records;
        signature.v.tables['staff'] = signature.staff.records;
        signature.v.tables['services'] = signature.services.records;
        signature.v.tables['weeks'] = signature.weeks.records;
        signature.v.tables['weekItems'] = signature.weekItems.records;

    }, //==============================================
    weekDateToDate: function(year, week, day) {
      const firstDayOfYear = new Date(year, 0, 1);
      const days = 2 + day + (week - 1) * 7 - firstDayOfYear.getDay();
      return new Date(year, 0, days);
    }, //==============================================
    getWeekNumber: function(d) {
        d = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));
        d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay()||7));
        var yearStart = new Date(Date.UTC(d.getUTCFullYear(),0,1));
        var weekNo = Math.ceil(( ( (d - yearStart) / 86400000) + 1)/7);
        return [d.getUTCFullYear(), weekNo];
        // return weekNo;
    }, //==============================================
    thisweek: function() {
        signature.v.area = 'weeks';
        if (signature.v.save.length > 0) {
            eval(signature.v.save);
        }
        signature.v.save = '';
        var result = signature.staffType.getWeekNumber(new Date());
        signature.v.week = result[1];
        signature.v.year = result[0];
        signature.staffType.displayweek();
        // signature.staffType.thisweek();
    }, //==============================================
    weekup: function() {
        signature.v.week ++;
        signature.staffType.displayweek();
    }, //==============================================
    weekdown: function() {
        signature.v.week --;
        signature.staffType.displayweek();
    }, //==============================================
    epochresolve: function(epoch,datestring) {
        var d = new Date(Number(epoch));
        if (datestring === 'string') {
            var thedate = d.toString().split(' ');
            var result = thedate[0]+' '+thedate[1]+' '+thedate[2]+' '+thedate[3];
        } else {
            var result = d;
        }
        return result;
    }, //==============================================
    displayweek: function() {
        $('#manage').html('<div id="datearea"></div>');
        $('#datearea').append('<br /><br />');
        for (var i = 0; i < 6; i++) {
            var thedate = signature.staffType.weekDateToDate(signature.v.year,signature.v.week,i).toString().split(' ');
            var epoch = signature.staffType.weekDateToDate(signature.v.year,signature.v.week,i).getTime();
            var displaydate = thedate[0]+' '+thedate[1]+' '+thedate[2]+' '+thedate[3];
            $('#datearea').append('<div id="date_'+i+'_day" class="dateitem" epoch="'+epoch+'"><span class="datetitle" onclick="signature.v.selecteddate=\''+epoch+'\';signature.staff.selectpageunspecific(\'\');">'+displaydate+'</span><div class="dayreport"></div></div>');
            // $('#manage').append('<div onclick="signature.v.selecteddate=\''+epoch+'\';signature.staff.selectpageunspecific(\'\');">'+displaydate+' epoch: '+epoch+'</div>');
            if ((i+1) % 3 === 0) {
                $('#datearea').append('<br />');
            }
        }


        signature.v.unspecificpost = 'signature.special.buildPageFromJSON();';
        // signature.v.unspecificpost = 'alert(signature.staffType.epochresolve(signature.v.selecteddate,\'string\') +" "+ signature.v.selecteddate +" "+ signature.staffType.resolveidunspecific(signature.v.selectedguid));';

        $('#manage').prepend('<div id="theweektotals"></div>');
        $('#manage').prepend('<div><div class="button" onclick="signature.staffType.weekdown()" style="padding: 5px">last week</div> &nbsp; <div class="button" onclick="signature.staffType.weekup()" style="padding: 5px">next week</div></div>');
        $('#manage').prepend('<div>'+signature.v.week+'</div>');
        try {
            if (signature.v.cal_script.length > 0) {
                eval(signature.v.cal_script);
            } else {
            }
        } catch (err) {console.log('error');}
    },//==============================================
    refreshselectionunspecific: function() {
        // console.log(signature.v.searchfor);
        var action = signature.v.refreshaction.replace('SEARCHHERE',signature.v.searchfor);
        // console.log(action);
        eval(action);
    },//==============================================
    selectpageunspecific: function(search) {
        $('#selectsomething').remove();
        $('body').append('<div id="selectsomething"><span class="close" onClick="$(\'#selectsomething\').remove();">X</span><div id="selectsomethinginner"><span id="selectheader">'+signature.staffType.sectionlabel+'</span><hr /><input type="text" id="selectsearch" value="'+search+'"><br /><div class="items"></div></div></div>');
        // var labels = [];
        try {
            for (var i = 0; i < signature.staffType.records.length; i++) {
                if (signature.staffType.records[i][signature.staffType.fieldprefix+'status'] === '1') {
                    if (search.length > 0) {
                        if (signature.staffType.records[i]['label'].toLowerCase().includes(search.toLowerCase())) {
                            $('#selectsomething .items').append('<div class="item" guid="'+signature.staffType.records[i]['guid']+'" onclick="signature.v.selectedguid=$(this).attr(\'guid\');$(\'#selectsomething\').remove();eval(signature.v.unspecificpost);">'+signature.staffType.records[i]['label']+'</div>');
                        }
                    } else {
                        $('#selectsomething .items').append('<div class="item" guid="'+signature.staffType.records[i]['guid']+'" onclick="signature.v.selectedguid=$(this).attr(\'guid\');$(\'#selectsomething\').remove();eval(signature.v.unspecificpost);">'+signature.staffType.records[i]['label']+'</div>');
                    }
                    // labels.push({'label':signature.staffType.records[i]['label'], 'guid':signature.staffType.records[i]['guid'], });
                }
            }
        } catch(err) {}
        // for (var i = 0; i < labels.length; i++) {}
        if (signature.staffType.records.length === 0) {
            $('#selectsomething .items').append('<div class="item" >No Records</div>');
            $('#selectsomething .items').append('<div class="item" ></div>');
            $('#selectsomething .items').append('<div class="item button" onClick="signature.staffType.manage();$(\'#selectsomething\').remove();">Add Record</div>');
            $('#selectsearch').remove();
        } else {
            signature.v.refreshaction = 'signature.staffType.selectpageunspecific(\'SEARCHHERE\');';
            $('#selectsomething').append('<script>$("#selectsearch").keyup(function() {signature.v.searchfor = $("#selectsearch").val();signature.staffType.doThisWhenDone("autosearch", 200, signature.staffType.refreshselectionunspecific);});</script>');        
            $('#selectsearch').focusTextToEnd();
        }
    }, //==============================================
    manage: function() {
        signature.v.area = 'staffType';
        if (signature.v.save.length > 0) {
            eval(signature.v.save);
        }
        signature.v.save = 'signature.staffType.varUpdate();';


        if (signature.staffType.isChild) {
            var data = {"field_id":"0","label":"","guid":signature.staffType.guid(),"staff_type_label":"","staff_type_services":"1","staff_type_status":"1","action_del":"N"};
            var keys = Object.keys(data);
            for (var i = 0; i < keys.length; i++) {
                if (keys[i].includes('_id') && keys[i] !== 'field_id') {
                    signature.staffType.px = keys[i];
                }
            }
        }

        $('#manage').html('');
        if (signature.staffType.records.length === 0) {
            signature.staffType.add();
        } else {
            signature.staffType.buildPageFromJSON();
        }
        
        // signature.staffType.manage();
    }, //==============================================
    add: function() {
        var data = {"field_id":"0","label":"","guid":signature.staffType.guid(),"staff_type_label":"","staff_type_services":"1","staff_type_status":"1","action_del":"N"};

        signature.staffType.varUpdate();
        signature.staffType.records.push(data);
        signature.staffType.buildPageFromJSON();
        return data
    }, //==============================================
    varUpdate: function(id,tog) {
        try {
            for(var i = 0;i < signature.staffType.records.length; i++){
                if (signature.staffType.hasFields()) {
                    try {signature.staffType.records[i].staff_type_label = $('#signature_' + i + '_Label').val();} catch (err) { }
                    try { $('#label_' + i + '_Label').text(signature.staffType.records[i].staff_type_label); } catch (err) { }
                    try {signature.staffType.records[i].staff_type_services = $('#signature_' + i + '_Services').val();} catch (err) { }
                    try {signature.staffType.records[i].staff_type_status = $('#signature_' + i + '_Status').val();} catch (err) { }
                    try {signature.staffType.records[i].label = signature.staffType.records[i].staff_type_label; } catch (err) { }

                }
            }
        } catch (err) {}
//         try {
//             for(var i = 0;i < signature.staffType.records.length; i++){
//                 if (signature.staffType.hasFields()) {
// [js_HTML_ROW_Val_DEL]
//                 }
//             }
//         } catch (err) {}
        // console.log(signature.staffType.records);
    }, //==============================================
    togglerow: function(id,tog) {
        if (!tog) {
            ans = confirm('Restore?');
        } else {
            ans = confirm('Used?');
        }
        if (ans) {
            window.location.href = '?id=' + id + '&toggle='+tog+'&manage';
        }
    }, //==============================================
    valid: function() {
        var valid = true;
        var ix = 0
        try {
            for (var iy = signature.staffType.records.length - 1; iy >= 0; iy--) {
                if (signature.staffType.records[iy].action_del === 'N') {
                    ix++;
                }
            }
        } catch (err) {}
        try {
            for (var i = 0; i < signature.staffType.records.length; i++) {
                try {
                    if (signature.staffType.records[i].action_del === 'N') {

                        var item = '#signature_' + i + '_Label';
                        if ($(item).val().length) {
                            $(item).css('border-color','');
                        } else {
                            $(item).css('border-color','crimson');
                            valid = false;
                        }

                        var item = '#signature_' + i + '_Services';
                        if ($(item).val().length > 0) {
                            if(isNaN($(item).val())){
                                $(item).css('border-color','crimson');
                                valid = false
                            } else {
                                $(item).css('border-color','');
                            }
                        } else {
                            $(item).css('border-color','crimson');
                            valid = false;
                        }

                        var item = '#signature_' + i + '_Status';
                        if ($(item).val().length > 0) {
                            if(isNaN($(item).val())){
                                $(item).css('border-color','crimson');
                                valid = false
                            } else {
                                $(item).css('border-color','');
                            }
                        } else {
                            $(item).css('border-color','crimson');
                            valid = false;
                        }

                    }
                } catch (err) {}
            }
        } catch (err) {}
        return valid
    }, //==============================================
    excel: function() {
        signature.staffType.download('excel.php','certificates.csv');
    }, //==============================================
    download: function(uri, filename) {
        var link = document.createElement('a');
        if (typeof link.download === 'string') {
            document.body.appendChild(link);
            link.download = filename;
            link.href = uri;
            link.click();
            document.body.removeChild(link);
        } else {
            location.replace(uri);
        }
    }, //==============================================
    send: function() {
        if (signature.staffType.valid()) {

            $('body').append(signature.v.loader);

            for (var i = 0; i < signature.staffType.records.length; i++) {
                try {
                    try {signature.staffType.records[i].staff_type_label = $('#signature_' + i + '_Label').val();} catch (err) { }
                    try { $('#label_' + i + '_Label').text(signature.staffType.records[i].staff_type_label); } catch (err) { }
                    try {signature.staffType.records[i].staff_type_services = $('#signature_' + i + '_Services').val();} catch (err) { }
                    try {signature.staffType.records[i].staff_type_status = $('#signature_' + i + '_Status').val();} catch (err) { }
                    try {signature.staffType.records[i].label = signature.staffType.records[i].staff_type_label; } catch (err) { }


                } catch (err) {}
            }
            $('#JSON').val(JSON.stringify(signature.staffType.records));
            $.post("[js_PHP_FILE_SEND]", $("#form").serialize())
                .done(function(data) {
                    console.log(data);
                    try {
                        signature.staffType.records = JSON.parse(data)


                    } catch (err) {
                        alert('Error');
                    }
                    $('#loading').remove();
                });
        }
    }, //==============================================
    loadJSON: function() {
        if (signature.shared.isLoaded(3)) {
            signature.staffType.buildPageFromJSON();
        } else {
            setTimeout(function() { signature.staffType.loadJSON(); }, 800);
        }
    },//==============================================
    unDelete: function() {
        $("#unDelete").css('display','none');
        for (var i = 0; i < signature.staffType.records.length; i++) {
            try {
                    try {signature.staffType.records[i].staff_type_label = $('#signature_' + i + '_Label').val();} catch (err) { }
                    try { $('#label_' + i + '_Label').text(signature.staffType.records[i].staff_type_label); } catch (err) { }
                    try {signature.staffType.records[i].staff_type_services = $('#signature_' + i + '_Services').val();} catch (err) { }
                    try {signature.staffType.records[i].staff_type_status = $('#signature_' + i + '_Status').val();} catch (err) { }
                    try {signature.staffType.records[i].label = signature.staffType.records[i].staff_type_label; } catch (err) { }


                signature.staffType.records[i].action_del = 'N';
            } catch(err) {
                signature.staffType.records[i].action_del = 'N';
            }
        }
        //signature.staffType.records = JSON.parse(signature.v.recover);
        signature.staffType.buildPageFromJSON();
    },//==============================================
    hasFields: function() {
        var result = false;
        for (var i = 0; i < signature.staffType.records.length; i++) {
            if ( $( '#signature_' + i + '_Label' ).length ) {
                result = true;
            }
        }
        return result;
        // 
    },//==============================================
    resolveidunspecific: function(id) {
        // console.log(idx+' - '+labelid+' - '+id);
        var found = false;
        var label = '';
        if (id.length > 0) {

	        try {
	        	if (!found) {
	        		for (var i = 0; i < signature.staffType.records.length; i++) {
	        			if (signature.staffType.records[i].guid === id) {
	        				label = signature.staffType.records[i]['label'];
	        				found = true;
	        			}
	        		}
	        	}
	        } catch(err) {}

	        try {
	        	if (!found) {
	        		for (var i = 0; i < signature.staff.records.length; i++) {
	        			if (signature.staff.records[i].guid === id) {
	        				label = signature.staff.records[i]['label'];
	        				found = true;
	        			}
	        		}
	        	}
	        } catch(err) {}

	        try {
	        	if (!found) {
	        		for (var i = 0; i < signature.services.records.length; i++) {
	        			if (signature.services.records[i].guid === id) {
	        				label = signature.services.records[i]['label'];
	        				found = true;
	        			}
	        		}
	        	}
	        } catch(err) {}

        }
        // console.log(found,label);
        return label;
        // signature.staffType.resolveids();
    },//==============================================
    resolveid: function(idx,id,labelid) {
        // console.log(idx+' - '+labelid+' - '+id);
        var found = false;
        var label = '';
        if (id.length > 0) {

	        try {
	        	if (!found) {
	        		for (var i = 0; i < signature.staffType.records.length; i++) {
	        			if (signature.staffType.records[i].guid === id) {
	        				label = signature.staffType.records[i]['label'];
	        				found = true;
	        			}
	        		}
	        	}
	        } catch(err) {}

	        try {
	        	if (!found) {
	        		for (var i = 0; i < signature.staff.records.length; i++) {
	        			if (signature.staff.records[i].guid === id) {
	        				label = signature.staff.records[i]['label'];
	        				found = true;
	        			}
	        		}
	        	}
	        } catch(err) {}

	        try {
	        	if (!found) {
	        		for (var i = 0; i < signature.services.records.length; i++) {
	        			if (signature.services.records[i].guid === id) {
	        				label = signature.services.records[i]['label'];
	        				found = true;
	        			}
	        		}
	        	}
	        } catch(err) {}

        }
        // console.log(found,label);
        if (found) {
            $('#'+labelid).text(label);
        }
        // signature.staffType.resolveids();
    },//==============================================
    resolveids: function() {
        $('.resolvethisid').each(function( index ) {
            signature.staffType.resolveid($(this).parent().parent().parent().attr('idx'),$(this).val(),$(this).parent().parent().attr('findlabel'))
        });
    },//==============================================
    formBlur: function() {
        // console.log('formBlur');
        if (signature.v.area !== 'timelog') {
            if ( $('#'+signature.v.lastID).hasClass('_Label_') && $('#'+signature.v.lastID).val() === '') { $('#'+signature.v.lastID).val('Label') }
            if ( $('#'+signature.v.lastID).hasClass('_Services_') && $('#'+signature.v.lastID).val() === '') { $('#'+signature.v.lastID).val('Services') }
            if ( $('#'+signature.v.lastID).hasClass('_Status_') && $('#'+signature.v.lastID).val() === '') { $('#'+signature.v.lastID).val('Status') }

            signature.staffType.varUpdate();
            $('.itemLabel').css('display','inline-block');
            $('input').css('display','none');
        }
    },//==============================================
    toggleSwitches: function() {
        signature.staffType.varUpdate();
        for (var i = 0; i < signature.staffType.records.length; i++) {
            try {
                if (signature.staffType.records[i].action_del === 'N') {
                    try {signature.staffType.records[i].staff_type_services = $('#signature_' + i + '_Services').val();} catch (err) { }
                    if (signature.staffType.records[i].staff_type_services === '1') {$('#toggle_' + i + '_Services_on').css('display','inline-block');$('#toggle_' + i + '_Services_off').css('display','none');} else {$('#toggle_' + i + '_Services_on').css('display','none');$('#toggle_' + i + '_Services_off').css('display','inline-block');}
                    try {signature.staffType.records[i].staff_type_status = $('#signature_' + i + '_Status').val();} catch (err) { }
                    if (signature.staffType.records[i].staff_type_status === '1') {$('#toggle_' + i + '_Status_on').css('display','inline-block');$('#toggle_' + i + '_Status_off').css('display','none');} else {$('#toggle_' + i + '_Status_on').css('display','none');$('#toggle_' + i + '_Status_off').css('display','inline-block');}

                }

            } catch(err) {}
        }
    },//==============================================
    toggle: function(p,field,vid,lid) {
        // console.log($('#'+vid).val());
        if ($('#'+vid).val() === '1') {
            $('#'+vid).val(0);
            $('#'+p+' .toggleOn').css('display','none');
            $('#'+p+' .toggleOff').css('display','inline-block');
        } else {
            $('#'+vid).val(1);
            $('#'+p+' .toggleOn').css('display','inline-block');
            $('#'+p+' .toggleOff').css('display','none');
        }
    },//==============================================
    selected: function(i,label,tbl,field,vid,lid,tableLabel) {
        $('#selectsomething').remove();
        $('#'+vid).val(signature.staffType.records[i]['guid'])
        $('#'+lid).text(signature.staffType.records[i]['label']);
    },//==============================================
    refreshselection: function() {
        // console.log(signature.v.searchfor);
        var action = signature.v.refreshaction.replace('SEARCHHERE',signature.v.searchfor);
        // console.log(action);
        eval(action);
    },//==============================================
    selectpage: function(label,tbl,field,vid,lid,tableLabel,search) {
        $('#selectsomething').remove();
        $('body').append('<div id="selectsomething"><span class="close" onClick="$(\'#selectsomething\').remove();">X</span><div id="selectsomethinginner"><span id="selectheader">'+label+'</span><hr /><input type="text" id="selectsearch" value="'+search+'"><br /><div class="items"></div></div></div>');
        var labels = [];
        try {
            for (var i = 0; i < signature.staffType.records.length; i++) {
                if (signature.staffType.records[i][signature.staffType.fieldprefix+'status'] === '1') {
                    labels.push(signature.staffType.records[i]['label']);
                }
            }
        } catch(err) {}
        for (var i = 0; i < labels.length; i++) {
            if (search.length > 0) {
                if (labels[i].includes(search)) {
                    $('#selectsomething .items').append('<div class="item" onclick="signature.staffType.selected(\''+i+'\',\''+label+'\',\''+tbl+'\',\''+field+'\',\''+vid+'\',\''+lid+'\',\''+tableLabel+'\');">'+labels[i]+'</div>');
                }
            } else {
                $('#selectsomething .items').append('<div class="item" onclick="signature.staffType.selected(\''+i+'\',\''+label+'\',\''+tbl+'\',\''+field+'\',\''+vid+'\',\''+lid+'\',\''+tableLabel+'\');">'+labels[i]+'</div>');
            }
        }
        if (labels.length === 0) {
            $('#selectsomething .items').append('<div class="item" >No Records</div>');
            $('#selectsomething .items').append('<div class="item" ></div>');
            $('#selectsomething .items').append('<div class="item button" onClick="signature.staffType.manage();$(\'#selectsomething\').remove();">Add Record</div>');
            $('#selectsearch').remove();
        } else {
            signature.v.refreshaction = 'signature.'+tbl+'.selectpage(\''+label+'\',\''+tbl+'\',\''+field+'\',\''+vid+'\',\''+lid+'\',\''+tableLabel+'\',\'SEARCHHERE\');';
            $('#selectsomething').append('<script>$("#selectsearch").keyup(function() {signature.v.searchfor = $("#selectsearch").val();signature.staffType.doThisWhenDone("autosearch", 200, signature.staffType.refreshselection);});</script>');
            $('#selectsearch').focusTextToEnd();
        }
    },//==============================================
    select: function(label,tbl,field,vid,lid,tableLabel) {
        // alert(label+' '+tbl);
        // console.log('1');
        var taskAction = 'signature.'+tbl+'.selectpage(\''+label+'\',\''+tbl+'\',\''+field+'\',\''+vid+'\',\''+lid+'\',\''+tableLabel+'\',\'\');';
        // console.log('2');
        eval(taskAction);
        // console.log(taskAction)
        // console.log('3');
    },//==============================================
    formFocus: function(idx,id) {
        signature.v.lastID = id;
        signature.v.lastIDX = idx;
        if ('signature_'+idx+'_Label' === id && $('#'+id).val() === 'Label') { $('#'+id).val('') }
        if ('signature_'+idx+'_Services' === id && $('#'+id).val() === 'Services') { $('#'+id).val('') }
        if ('signature_'+idx+'_Status' === id && $('#'+id).val() === 'Status') { $('#'+id).val('') }

    },//==============================================
    managechildren: function(guid) {
        // console.log(guid);
        // $('.thechild').remove();
        // $('.managechildrenbutton').remove();
        // $('.certItemParent').each(function( index ) {
        //     console.log('each - '+$(this).attr('guid'));
        //     if ($(this).attr('guid') !== guid) {
        //         console.log('not match');
        //         $(this).remove();
        //     }
        // });
        // $("[guid='"+guid+"']").append('<div class="thechild"></div>');
        


        // console.log('done');
    },//==============================================
    saveThenOpen: function() {
        signature.shared.close();
        signature.shared.runWhen(null, 'closed', function(){signature.staffType.obj.edit();});
    }, //==============================================
    htmlRow: function(i, id, guid, label, services, status) {
            if (typeof i === 'undefined') {
                i = signature.staffType.records.length - 1;
            }
            if (typeof id === 'undefined') {
                id = 0;
            }
            
            if (typeof label === 'undefined') { label = ''; }
            if (typeof services === 'undefined') { services = '1'; }
            if (typeof status === 'undefined') { status = '1'; }


            if (label === '') { label = 'Label'; }
            if (services === '') { services = 'Services'; }
            if (status === '') { status = 'Status'; }


            $('#manage').append('\
            <div id="row_' + i + '" class="certItemParent certItem" idx="' + i + '" guid="' + guid + '" onblur="$(\'.morebutton\').css(\'display\',\'inline-block\');$(\'.more\').css(\'display\',\'none\');">\
                <div id="eDelete' + i + '" class="eDelete" title="delete" onClick="signature.staffType.del(' + i + ');">\
                   <img src="images/delete.png">\
                </div>\
                <div class="signatureItem">\
                    <div id="label_' + i + '_Label" class="itemLabel label" onclick="signature.staffType.doThisWhenDone(\'field_focus\', 8000, signature.staffType.formBlur);signature.staffType.varUpdate();$(\'.itemLabel\').css(\'display\',\'inline-block\');$(\'input\').css(\'display\',\'none\');$(\'#\'+$(this).attr(\'relatedfield\')).css(\'display\',\'inline-block\');$(this).css(\'display\',\'none\');" relatedfield="signature_' + i + '_Label"> Label: </div>\
                    <div id="eefLabel" class="signatureField">\
                        <input name="Label_' + i + '" type="text" id="signature_' + i + '_Label" class="signaturebox _Label_" value="' + label + '" style="display:none;"  relatedfield="label_' + i + '_Label" >\
                    </div>\
                </div>\
                <div class="signatureItem">\
                    <div class="item_Label services" style="display:none;"> Services: </div>\
                    <div id="eefServices_' + i + '_" class="signatureField thetoggle" relatedfield="label_' + i + '_Services_" onclick="signature.staffType.toggle(\'eefServices_' + i + '_\',\'services\',\'signature_' + i + '_Services\',\'label_' + i + '_Services_\');"><span id="label_' + i + '_Services_" class="togglelabel" style="display:none;">Services</span>\
                        <img src="images/toggle_on.png" style="height:23px;width: 50px; display:none;" id="toggle_' + i + '_Services_on" class="toggleOn">\
                        <img src="images/toggle_off.png" style="height:23px;width: 50px; display:none;" id="toggle_' + i + '_Services_off" class="toggleOff">\
                        <input name="Services_' + i + '" type="hidden" id="signature_' + i + '_Services" class="signaturebox _Services_" value="' + services + '">\
                    </div>\
                </div>\
                <div class="signatureItem">\
                    <div class="item_Label status" style="display:none;"> Status: </div>\
                    <div id="eefStatus_' + i + '_" class="signatureField thetoggle" relatedfield="label_' + i + '_Status_" onclick="signature.staffType.toggle(\'eefStatus_' + i + '_\',\'status\',\'signature_' + i + '_Status\',\'label_' + i + '_Status_\');"><span id="label_' + i + '_Status_" class="togglelabel" style="display:none;">Status</span>\
                        <img src="images/toggle_on.png" style="height:23px;width: 50px; display:none;" id="toggle_' + i + '_Status_on" class="toggleOn">\
                        <img src="images/toggle_off.png" style="height:23px;width: 50px; display:none;" id="toggle_' + i + '_Status_off" class="toggleOff">\
                        <input name="Status_' + i + '" type="hidden" id="signature_' + i + '_Status" class="signaturebox _Status_" value="' + status + '">\
                    </div>\
                </div>\
                <br />\
                <div id="someSpace"></div>\
                \
            </div>\
            <input name="id_' + i + '" type="hidden" id="id_' + i + '" value="' + id + '"/>');
                // <div class="thechild"></div>\
    }, //==============================================
    buildPageFromJSON: function() {
        // signature.staffType.varUpdate();
        // console.log('buildPageFromJSON');
        //signature.v.recover = JSON.stringify(signature.staffType.records);
        $('#manage').html('');

        try {
            for(var i = 0;i < signature.staffType.records.length; i++){

                if (signature.staffType.records[i].action_del === 'N') {
                    if (signature.staffType.isChild) {
                        if (signature.staffType.parent === signature.staffType.records[i][signature.staffType.px]) {
                            signature.staffType.htmlRow(i, signature.staffType.records[i].field_id, signature.staffType.records[i].guid, signature.staffType.records[i].staff_type_label, signature.staffType.records[i].staff_type_services, signature.staffType.records[i].staff_type_status);
                        }

                    } else {
                        signature.staffType.htmlRow(i, signature.staffType.records[i].field_id, signature.staffType.records[i].guid, signature.staffType.records[i].staff_type_label, signature.staffType.records[i].staff_type_services, signature.staffType.records[i].staff_type_status);
                    }
                    
                    // signature.staffType.htmlRow(i, field_id, first, last, email, certificate, cnt, dvalue, status);
                }
            }
        } catch (err) {}
        signature.staffType.varUpdate();
        $('.add').remove();
        $('.save').remove();
        $('#manage').append('<br /><br /><br />');
        $('#manage').append('<div class="button add" onclick="signature.staffType.add();">Add</div>');
        $('#manage').append('<div class="button save" onclick="signature.staffType.varUpdate();">Save</div>');
        $('#manage').append("<script>$( '.signaturebox' ).focus(function() { signature.staffType.doThisWhenDone('field_focus', 8000, signature.staffType.formBlur);signature.staffType.formFocus($(this).parent().parent().parent().attr('idx'),$(this).attr('id')); });</script>");
        $('#manage').append("<script>$( '.signaturebox' ).blur(function() { signature.staffType.formBlur(); });</script>");
        $('#manage').append("<script>$( '.thetoggle' ).hover( function() { $('#'+$(this).attr('relatedfield')).css('display','inline-block'); }, function() { $( '.togglelabel' ).css('display','none' ); } );</script>");
        $('#manage').prepend('<div id="thesection">'+signature.staffType.sectionlabel+'</div>');
        
        signature.staffType.toggleSwitches();
        signature.staffType.resolveids();
    }, //==============================================
    runDoThis: function(myLabel) {
        if (typeof signature.v.doThis !== 'undefined') {
            var nowish = start = new Date().getTime();
            var run = false;
            for (var j = 0; j < signature.v.doThis.length; j++) {
                var thisLabel = signature.v.doThis[j].myLabel;
                var thisWait = signature.v.doThis[j].wait;
                var thisStamp = signature.v.doThis[j].stamp;
                if (myLabel === thisLabel) {

                    if ((nowish - thisStamp) > thisWait) {var checkStamp =  true;} else {var checkStamp =  false;}
                    if (checkStamp) {
                        var run = true;
                        var thisLabel = signature.v.doThis[j].myLabel;
                        var thisScript = signature.v.doThis[j].script;
                    }
                }
            }
        }
        if (run) {
            thisScript();
        }
    }, //==============================================
    doThisWhenDone: function(myLabel, waitfor, script) {
        var isNew = true;
        var isFirst = false;
        var stamp = start = new Date().getTime();
        if (typeof signature.v.doThis === 'undefined') {
            var nextID = 0
            signature.v.doThis = new Array();
            signature.v.doThis = [];
            signature.v.doThis.length = 0;
            var isFirst = true;
        } else {
            var nextID = signature.v.doThis.length;
        }
        if (!isFirst) {
            for (var j = 0; j < signature.v.doThis.length; j++) {
                var thisLabel = signature.v.doThis[j].myLabel;
                if (myLabel === thisLabel) {
                    var isNew = false;
                    signature.v.doThis[j] = {
                        myLabel: myLabel,
                        stamp: stamp,
                        wait: waitfor,
                        script: script
                    };
                }
            }
        }
        if (isNew) {

            signature.v.doThis[nextID] = {
                myLabel: myLabel,
                stamp: stamp,
                wait: waitfor,
                script: script
            };
        }
        var waitforAbout = waitfor + 50;
        setTimeout(function() { signature.staffType.runDoThis(myLabel); }, waitforAbout);

        // signature.staffType.doThisWhenDone(myLabel, waitfor, script);
    }, //==============================================
    getField: function(guid,field) {
        var result = '';
        if (signature.staffType.records.length > 0) {

            var keys = Object.keys(signature.staffType.records[0]);
            for (var i = 0; i < keys.length; i++) {
                if (keys[i].includes(field) && keys[i] !== 'field_id') {
                    var theKey = keys[i];
                }
            }


            for(var i = 0;i < signature.staffType.records.length; i++){
                if (signature.staffType.records[i].guid === guid) {
                    var result = signature.staffType.records[i][theKey];
                }
            }
        } else {
            var result = 'No ' + signature.staffType.sectionlabel + ' Records';
        }
        
        
        return result;
    }, //==============================================
    guid: function() {
        function s4() {
        return Math.floor((1 + Math.random()) * 0x10000)
            .toString(16)
            .substring(1);
        }
        return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();
    }, //==============================================
    nullFunction: function() {
        //signature.shared.log('null');
    } //==============================================
}
// signature.v.loader = '<div id="loading"><img src="images/dance.gif"></div>';
signature.v.loader = '<div id="loading"><img src="images/gears.gif"></div>';
signature.v.save = '';
signature.v.area = '';
// To Do
// signature.v.save  log save function on blur


signature.staff = {
    records: [],
    isChild: false,
    parent: '',
    px: '',
    sectionlabel: 'Staff',
    fieldprefix: 'staff_',
    del: function(i) {
        try {signature.staff.records[i].staff_staff_type_mid = $('#signature_' + i + '_Staff_Type_Mid').val();} catch (err) { }
        try {signature.staff.records[i].staff_label_first_last = $('#signature_' + i + '_Label_First_Last').val();} catch (err) { }
        try {signature.staff.records[i].staff_first = $('#signature_' + i + '_First').val();} catch (err) { }
        try { $('#label_' + i + '_First').text(signature.staff.records[i].staff_first); } catch (err) { }
        try {signature.staff.records[i].staff_last = $('#signature_' + i + '_Last').val();} catch (err) { }
        try { $('#label_' + i + '_Last').text(signature.staff.records[i].staff_last); } catch (err) { }
        try {signature.staff.records[i].staff_email = $('#signature_' + i + '_Email').val();} catch (err) { }
        try { $('#label_' + i + '_Email').text(signature.staff.records[i].staff_email); } catch (err) { }
        try {signature.staff.records[i].staff_phone = $('#signature_' + i + '_Phone').val();} catch (err) { }
        try { $('#label_' + i + '_Phone').text(signature.staff.records[i].staff_phone); } catch (err) { }
        try {signature.staff.records[i].staff_percentage = $('#signature_' + i + '_Percentage').val();} catch (err) { }
        try { $('#label_' + i + '_Percentage').text(signature.staff.records[i].staff_percentage); } catch (err) { }
        try {signature.staff.records[i].staff_availabilityjson = $('#signature_' + i + '_Availabilityjson').val();} catch (err) { }
        try { $('#label_' + i + '_Availabilityjson').text(signature.staff.records[i].staff_availabilityjson); } catch (err) { }
        try {signature.staff.records[i].staff_status = $('#signature_' + i + '_Status').val();} catch (err) { }
        try {signature.staff.records[i].staff_street1 = $('#signature_' + i + '_Street1').val();} catch (err) { }
        try { $('#label_' + i + '_Street1').text(signature.staff.records[i].staff_street1); } catch (err) { }
        try {signature.staff.records[i].staff_street2 = $('#signature_' + i + '_Street2').val();} catch (err) { }
        try { $('#label_' + i + '_Street2').text(signature.staff.records[i].staff_street2); } catch (err) { }
        try {signature.staff.records[i].staff_city = $('#signature_' + i + '_City').val();} catch (err) { }
        try { $('#label_' + i + '_City').text(signature.staff.records[i].staff_city); } catch (err) { }
        try {signature.staff.records[i].staff_state = $('#signature_' + i + '_State').val();} catch (err) { }
        try { $('#label_' + i + '_State').text(signature.staff.records[i].staff_state); } catch (err) { }
        try {signature.staff.records[i].staff_zip = $('#signature_' + i + '_Zip').val();} catch (err) { }
        try { $('#label_' + i + '_Zip').text(signature.staff.records[i].staff_zip); } catch (err) { }
        try {signature.staff.records[i].label = signature.staff.records[i].staff_first+" "+signature.staff.records[i].staff_last; } catch (err) { }


        signature.staff.records[i].action_del = 'Y';
        $('#row_' + i).remove();
        $("#unDelete").css('display','inline-block');
        var ix = 0;
        for (var iy = signature.staff.records.length - 1; iy >= 0; iy--) {
            if (signature.staff.records[iy].action_del === 'N') {
                ix++;
            }
        }
    }, //==============================================
    dataIn: function() {
        signature.staffType.records = signature.v.tables.staffType;
        signature.staff.records = signature.v.tables.staff;
        signature.services.records = signature.v.tables.services;
        signature.weeks.records = signature.v.tables.weeks;
        signature.weekItems.records = signature.v.tables.weekItems;

    }, //==============================================
    dataOut: function() {
        signature.v.tables = {};
        signature.v.tables['staffType'] = signature.staffType.records;
        signature.v.tables['staff'] = signature.staff.records;
        signature.v.tables['services'] = signature.services.records;
        signature.v.tables['weeks'] = signature.weeks.records;
        signature.v.tables['weekItems'] = signature.weekItems.records;

    }, //==============================================
    weekDateToDate: function(year, week, day) {
      const firstDayOfYear = new Date(year, 0, 1);
      const days = 2 + day + (week - 1) * 7 - firstDayOfYear.getDay();
      return new Date(year, 0, days);
    }, //==============================================
    getWeekNumber: function(d) {
        d = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));
        d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay()||7));
        var yearStart = new Date(Date.UTC(d.getUTCFullYear(),0,1));
        var weekNo = Math.ceil(( ( (d - yearStart) / 86400000) + 1)/7);
        return [d.getUTCFullYear(), weekNo];
        // return weekNo;
    }, //==============================================
    thisweek: function() {
        signature.v.area = 'weeks';
        if (signature.v.save.length > 0) {
            eval(signature.v.save);
        }
        signature.v.save = '';
        var result = signature.staff.getWeekNumber(new Date());
        signature.v.week = result[1];
        signature.v.year = result[0];
        signature.staff.displayweek();
        // signature.staff.thisweek();
    }, //==============================================
    weekup: function() {
        signature.v.week ++;
        signature.staff.displayweek();
    }, //==============================================
    weekdown: function() {
        signature.v.week --;
        signature.staff.displayweek();
    }, //==============================================
    epochresolve: function(epoch,datestring) {
        var d = new Date(Number(epoch));
        if (datestring === 'string') {
            var thedate = d.toString().split(' ');
            var result = thedate[0]+' '+thedate[1]+' '+thedate[2]+' '+thedate[3];
        } else {
            var result = d;
        }
        return result;
    }, //==============================================
    displayweek: function() {
        $('#manage').html('<div id="datearea"></div>');
        $('#datearea').append('<br /><br />');
        for (var i = 0; i < 6; i++) {
            var thedate = signature.staff.weekDateToDate(signature.v.year,signature.v.week,i).toString().split(' ');
            var epoch = signature.staff.weekDateToDate(signature.v.year,signature.v.week,i).getTime();
            var displaydate = thedate[0]+' '+thedate[1]+' '+thedate[2]+' '+thedate[3];
            $('#datearea').append('<div id="date_'+i+'_day" class="dateitem" epoch="'+epoch+'"><span class="datetitle" onclick="signature.v.selecteddate=\''+epoch+'\';signature.staff.selectpageunspecific(\'\');">'+displaydate+'</span><div class="dayreport"></div></div>');
            // $('#manage').append('<div onclick="signature.v.selecteddate=\''+epoch+'\';signature.staff.selectpageunspecific(\'\');">'+displaydate+' epoch: '+epoch+'</div>');
            if ((i+1) % 3 === 0) {
                $('#datearea').append('<br />');
            }
        }


        signature.v.unspecificpost = 'signature.special.buildPageFromJSON();';
        // signature.v.unspecificpost = 'alert(signature.staff.epochresolve(signature.v.selecteddate,\'string\') +" "+ signature.v.selecteddate +" "+ signature.staff.resolveidunspecific(signature.v.selectedguid));';

        $('#manage').prepend('<div id="theweektotals"></div>');
        $('#manage').prepend('<div><div class="button" onclick="signature.staff.weekdown()" style="padding: 5px">last week</div> &nbsp; <div class="button" onclick="signature.staff.weekup()" style="padding: 5px">next week</div></div>');
        $('#manage').prepend('<div>'+signature.v.week+'</div>');
        try {
            if (signature.v.cal_script.length > 0) {
                eval(signature.v.cal_script);
            } else {
            }
        } catch (err) {console.log('error');}
    },//==============================================
    refreshselectionunspecific: function() {
        // console.log(signature.v.searchfor);
        var action = signature.v.refreshaction.replace('SEARCHHERE',signature.v.searchfor);
        // console.log(action);
        eval(action);
    },//==============================================
    selectpageunspecific: function(search) {
        $('#selectsomething').remove();
        $('body').append('<div id="selectsomething"><span class="close" onClick="$(\'#selectsomething\').remove();">X</span><div id="selectsomethinginner"><span id="selectheader">'+signature.staff.sectionlabel+'</span><hr /><input type="text" id="selectsearch" value="'+search+'"><br /><div class="items"></div></div></div>');
        // var labels = [];
        try {
            for (var ii = 0; ii < signature.staffType.records.length; ii++) {
                var firstX = true;
                for (var i = 0; i < signature.staff.records.length; i++) {
                    if (signature.staff.records[i][signature.staff.fieldprefix+'status'] === '1' && signature.staffType.records[ii].guid == signature.staff.records[i].staff_staff_type_mid) {
                        if (search.length > 0) {
                            if (signature.staff.records[i]['label'].toLowerCase().includes(search.toLowerCase())) {
                                if (firstX) {
                                    var firstX = false;
                                    $('#selectsomething .items').append('<div class="grouplabel" style="text-align: left; font-size: 80%; font-weight: 700;">'+signature.staffType.records[ii]['label']+'</div>');
                                }
                                $('#selectsomething .items').append('<div class="item" guid="'+signature.staff.records[i]['guid']+'" onclick="signature.v.selectedguid=$(this).attr(\'guid\');$(\'#selectsomething\').remove();eval(signature.v.unspecificpost);">'+signature.staff.records[i]['label']+'</div>');
                            }
                        } else {
                            if (firstX) {
                                var firstX = false;
                                $('#selectsomething .items').append('<div class="grouplabel" style="text-align: left; font-size: 80%; font-weight: 700;">'+signature.staffType.records[ii]['label']+'</div>');
                            }
                            $('#selectsomething .items').append('<div class="item" guid="'+signature.staff.records[i]['guid']+'" onclick="signature.v.selectedguid=$(this).attr(\'guid\');$(\'#selectsomething\').remove();eval(signature.v.unspecificpost);">'+signature.staff.records[i]['label']+'</div>');
                        }
                        // labels.push({'label':signature.staff.records[i]['label'], 'guid':signature.staff.records[i]['guid'], });
                    }
                }
            }
        } catch(err) {}

        // for (var i = 0; i < labels.length; i++) {}
        if (signature.staff.records.length === 0) {
            $('#selectsomething .items').append('<div class="item" >No Records</div>');
            $('#selectsomething .items').append('<div class="item" ></div>');
            $('#selectsomething .items').append('<div class="item button" onClick="signature.staff.manage();$(\'#selectsomething\').remove();">Add Record</div>');
            $('#selectsearch').remove();
        } else {
            signature.v.refreshaction = 'signature.staff.selectpageunspecific(\'SEARCHHERE\');';
            $('#selectsomething').append('<script>$("#selectsearch").keyup(function() {signature.v.searchfor = $("#selectsearch").val();signature.staff.doThisWhenDone("autosearch", 200, signature.staff.refreshselectionunspecific);});</script>');        
            $('#selectsearch').focusTextToEnd();
        }
    }, //==============================================
    manage: function() {
        signature.v.area = 'staff';
        if (signature.v.save.length > 0) {
            eval(signature.v.save);
        }
        signature.v.save = 'signature.staff.varUpdate();';


        if (signature.staff.isChild) {
            var data = {"field_id":"0","label":"","guid":signature.staff.guid(),"staff_staff_type_mid":"","staff_first":"","staff_last":"","staff_email":"","staff_phone":"","staff_percentage":"","staff_status":"1","staff_street1":"","staff_street2":"","staff_city":"","staff_state":"","staff_zip":"","action_del":"N"};
            var keys = Object.keys(data);
            for (var i = 0; i < keys.length; i++) {
                if (keys[i].includes('_id') && keys[i] !== 'field_id') {
                    signature.staff.px = keys[i];
                }
            }
        }

        $('#manage').html('');
        if (signature.staff.records.length === 0) {
            signature.staff.add();
        } else {
            signature.staff.buildPageFromJSON();
        }
        
        // signature.staff.manage();
    }, //==============================================
    add: function() {
        var data = {"field_id":"0","label":"","guid":signature.staff.guid(),"staff_staff_type_mid":"","staff_first":"","staff_last":"","staff_email":"","staff_phone":"","staff_percentage":"","staff_status":"1","staff_street1":"","staff_street2":"","staff_city":"","staff_state":"","staff_zip":"","action_del":"N"};

        signature.staff.varUpdate();
        signature.staff.records.push(data);
        signature.staff.buildPageFromJSON();
        return data
    }, //==============================================
    varUpdate: function(id,tog) {
        try {
            for(var i = 0;i < signature.staff.records.length; i++){
                if (signature.staff.hasFields()) {
                    try {signature.staff.records[i].staff_staff_type_mid = $('#signature_' + i + '_Staff_Type_Mid').val();} catch (err) { }
                    try {signature.staff.records[i].staff_label_first_last = $('#signature_' + i + '_Label_First_Last').val();} catch (err) { }
                    try {signature.staff.records[i].staff_first = $('#signature_' + i + '_First').val();} catch (err) { }
                    try { $('#label_' + i + '_First').text(signature.staff.records[i].staff_first); } catch (err) { }
                    try {signature.staff.records[i].staff_last = $('#signature_' + i + '_Last').val();} catch (err) { }
                    try { $('#label_' + i + '_Last').text(signature.staff.records[i].staff_last); } catch (err) { }
                    try {signature.staff.records[i].staff_email = $('#signature_' + i + '_Email').val();} catch (err) { }
                    try { $('#label_' + i + '_Email').text(signature.staff.records[i].staff_email); } catch (err) { }
                    try {signature.staff.records[i].staff_phone = $('#signature_' + i + '_Phone').val();} catch (err) { }
                    try { $('#label_' + i + '_Phone').text(signature.staff.records[i].staff_phone); } catch (err) { }
                    try {signature.staff.records[i].staff_percentage = $('#signature_' + i + '_Percentage').val();} catch (err) { }
                    try { $('#label_' + i + '_Percentage').text(signature.staff.records[i].staff_percentage); } catch (err) { }
                    try {signature.staff.records[i].staff_availabilityjson = $('#signature_' + i + '_Availabilityjson').val();} catch (err) { }
                    try { $('#label_' + i + '_Availabilityjson').text(signature.staff.records[i].staff_availabilityjson); } catch (err) { }
                    try {signature.staff.records[i].staff_status = $('#signature_' + i + '_Status').val();} catch (err) { }
                    try {signature.staff.records[i].staff_street1 = $('#signature_' + i + '_Street1').val();} catch (err) { }
                    try { $('#label_' + i + '_Street1').text(signature.staff.records[i].staff_street1); } catch (err) { }
                    try {signature.staff.records[i].staff_street2 = $('#signature_' + i + '_Street2').val();} catch (err) { }
                    try { $('#label_' + i + '_Street2').text(signature.staff.records[i].staff_street2); } catch (err) { }
                    try {signature.staff.records[i].staff_city = $('#signature_' + i + '_City').val();} catch (err) { }
                    try { $('#label_' + i + '_City').text(signature.staff.records[i].staff_city); } catch (err) { }
                    try {signature.staff.records[i].staff_state = $('#signature_' + i + '_State').val();} catch (err) { }
                    try { $('#label_' + i + '_State').text(signature.staff.records[i].staff_state); } catch (err) { }
                    try {signature.staff.records[i].staff_zip = $('#signature_' + i + '_Zip').val();} catch (err) { }
                    try { $('#label_' + i + '_Zip').text(signature.staff.records[i].staff_zip); } catch (err) { }
                    try {signature.staff.records[i].label = signature.staff.records[i].staff_first+" "+signature.staff.records[i].staff_last; } catch (err) { }

                }
            }
        } catch (err) {}
//         try {
//             for(var i = 0;i < signature.staff.records.length; i++){
//                 if (signature.staff.hasFields()) {
// [js_HTML_ROW_Val_DEL]
//                 }
//             }
//         } catch (err) {}
        // console.log(signature.staff.records);
    }, //==============================================
    togglerow: function(id,tog) {
        if (!tog) {
            ans = confirm('Restore?');
        } else {
            ans = confirm('Used?');
        }
        if (ans) {
            window.location.href = '?id=' + id + '&toggle='+tog+'&manage';
        }
    }, //==============================================
    valid: function() {
        var valid = true;
        var ix = 0
        try {
            for (var iy = signature.staff.records.length - 1; iy >= 0; iy--) {
                if (signature.staff.records[iy].action_del === 'N') {
                    ix++;
                }
            }
        } catch (err) {}
        try {
            for (var i = 0; i < signature.staff.records.length; i++) {
                try {
                    if (signature.staff.records[i].action_del === 'N') {

                        var item = '#signature_' + i + '_Staff_Type_Mid';
                        if ($(item).val().length) {
                            $(item).css('border-color','');
                        } else {
                            $(item).css('border-color','crimson');
                            valid = false;
                        }

                        var item = '#signature_' + i + '_Label_First_Last';
                        if ($(item).val().length) {
                            $(item).css('border-color','');
                        } else {
                            $(item).css('border-color','crimson');
                            valid = false;
                        }

                        var item = '#signature_' + i + '_First';
                        if ($(item).val().length) {
                            $(item).css('border-color','');
                        } else {
                            $(item).css('border-color','crimson');
                            valid = false;
                        }

                        var item = '#signature_' + i + '_Last';
                        if ($(item).val().length) {
                            $(item).css('border-color','');
                        } else {
                            $(item).css('border-color','crimson');
                            valid = false;
                        }

                        var item = '#signature_' + i + '_Email';
                        if ($(item).val().length) {
                            if ($(item).val().includes("@") && $(item).val().includes(".")) {
                                $(item).css('border-color','');
                            } else {
                                $(item).css('border-color','crimson');
                                valid = false;
                            }
                        } else {
                            $(item).css('border-color','crimson');
                            valid = false;
                        }

                        var item = '#signature_' + i + '_Phone';
                        if ($(item).val().length) {
                            $(item).css('border-color','');
                        } else {
                            $(item).css('border-color','crimson');
                            valid = false;
                        }

                        var item = '#signature_' + i + '_Percentage';
                        if ($(item).val().length > 0) {
                            if(isNaN($(item).val())){
                                $(item).css('border-color','crimson');
                                valid = false
                            } else {
                                $(item).css('border-color','');
                            }
                        } else {
                            $(item).css('border-color','crimson');
                            valid = false;
                        }

                        var item = '#signature_' + i + '_Availabilityjson';
                        if ($(item).val().length) {
                            $(item).css('border-color','');
                        } else {
                            $(item).css('border-color','crimson');
                            valid = false;
                        }

                        var item = '#signature_' + i + '_Status';
                        if ($(item).val().length > 0) {
                            if(isNaN($(item).val())){
                                $(item).css('border-color','crimson');
                                valid = false
                            } else {
                                $(item).css('border-color','');
                            }
                        } else {
                            $(item).css('border-color','crimson');
                            valid = false;
                        }

                        var item = '#signature_' + i + '_Street1';
                        if ($(item).val().length) {
                            $(item).css('border-color','');
                        } else {
                            $(item).css('border-color','crimson');
                            valid = false;
                        }

                        var item = '#signature_' + i + '_Street2';
                        if ($(item).val().length) {
                            $(item).css('border-color','');
                        } else {
                            $(item).css('border-color','crimson');
                            valid = false;
                        }

                        var item = '#signature_' + i + '_City';
                        if ($(item).val().length) {
                            $(item).css('border-color','');
                        } else {
                            $(item).css('border-color','crimson');
                            valid = false;
                        }

                        var item = '#signature_' + i + '_State';
                        if ($(item).val().length) {
                            $(item).css('border-color','');
                        } else {
                            $(item).css('border-color','crimson');
                            valid = false;
                        }

                        var item = '#signature_' + i + '_Zip';
                        if ($(item).val().length) {
                            $(item).css('border-color','');
                        } else {
                            $(item).css('border-color','crimson');
                            valid = false;
                        }

                    }
                } catch (err) {}
            }
        } catch (err) {}
        return valid
    }, //==============================================
    excel: function() {
        signature.staff.download('excel.php','certificates.csv');
    }, //==============================================
    download: function(uri, filename) {
        var link = document.createElement('a');
        if (typeof link.download === 'string') {
            document.body.appendChild(link);
            link.download = filename;
            link.href = uri;
            link.click();
            document.body.removeChild(link);
        } else {
            location.replace(uri);
        }
    }, //==============================================
    send: function() {
        if (signature.staff.valid()) {

            $('body').append(signature.v.loader);

            for (var i = 0; i < signature.staff.records.length; i++) {
                try {
                    try {signature.staff.records[i].staff_staff_type_mid = $('#signature_' + i + '_Staff_Type_Mid').val();} catch (err) { }
                    try {signature.staff.records[i].staff_label_first_last = $('#signature_' + i + '_Label_First_Last').val();} catch (err) { }
                    try {signature.staff.records[i].staff_first = $('#signature_' + i + '_First').val();} catch (err) { }
                    try { $('#label_' + i + '_First').text(signature.staff.records[i].staff_first); } catch (err) { }
                    try {signature.staff.records[i].staff_last = $('#signature_' + i + '_Last').val();} catch (err) { }
                    try { $('#label_' + i + '_Last').text(signature.staff.records[i].staff_last); } catch (err) { }
                    try {signature.staff.records[i].staff_email = $('#signature_' + i + '_Email').val();} catch (err) { }
                    try { $('#label_' + i + '_Email').text(signature.staff.records[i].staff_email); } catch (err) { }
                    try {signature.staff.records[i].staff_phone = $('#signature_' + i + '_Phone').val();} catch (err) { }
                    try { $('#label_' + i + '_Phone').text(signature.staff.records[i].staff_phone); } catch (err) { }
                    try {signature.staff.records[i].staff_percentage = $('#signature_' + i + '_Percentage').val();} catch (err) { }
                    try { $('#label_' + i + '_Percentage').text(signature.staff.records[i].staff_percentage); } catch (err) { }
                    try {signature.staff.records[i].staff_availabilityjson = $('#signature_' + i + '_Availabilityjson').val();} catch (err) { }
                    try { $('#label_' + i + '_Availabilityjson').text(signature.staff.records[i].staff_availabilityjson); } catch (err) { }
                    try {signature.staff.records[i].staff_status = $('#signature_' + i + '_Status').val();} catch (err) { }
                    try {signature.staff.records[i].staff_street1 = $('#signature_' + i + '_Street1').val();} catch (err) { }
                    try { $('#label_' + i + '_Street1').text(signature.staff.records[i].staff_street1); } catch (err) { }
                    try {signature.staff.records[i].staff_street2 = $('#signature_' + i + '_Street2').val();} catch (err) { }
                    try { $('#label_' + i + '_Street2').text(signature.staff.records[i].staff_street2); } catch (err) { }
                    try {signature.staff.records[i].staff_city = $('#signature_' + i + '_City').val();} catch (err) { }
                    try { $('#label_' + i + '_City').text(signature.staff.records[i].staff_city); } catch (err) { }
                    try {signature.staff.records[i].staff_state = $('#signature_' + i + '_State').val();} catch (err) { }
                    try { $('#label_' + i + '_State').text(signature.staff.records[i].staff_state); } catch (err) { }
                    try {signature.staff.records[i].staff_zip = $('#signature_' + i + '_Zip').val();} catch (err) { }
                    try { $('#label_' + i + '_Zip').text(signature.staff.records[i].staff_zip); } catch (err) { }
                    try {signature.staff.records[i].label = signature.staff.records[i].staff_first+" "+signature.staff.records[i].staff_last; } catch (err) { }


                } catch (err) {}
            }
            $('#JSON').val(JSON.stringify(signature.staff.records));
            $.post("[js_PHP_FILE_SEND]", $("#form").serialize())
                .done(function(data) {
                    console.log(data);
                    try {
                        signature.staff.records = JSON.parse(data)


                    } catch (err) {
                        alert('Error');
                    }
                    $('#loading').remove();
                });
        }
    }, //==============================================
    loadJSON: function() {
        if (signature.shared.isLoaded(3)) {
            signature.staff.buildPageFromJSON();
        } else {
            setTimeout(function() { signature.staff.loadJSON(); }, 800);
        }
    },//==============================================
    unDelete: function() {
        $("#unDelete").css('display','none');
        for (var i = 0; i < signature.staff.records.length; i++) {
            try {
                    try {signature.staff.records[i].staff_staff_type_mid = $('#signature_' + i + '_Staff_Type_Mid').val();} catch (err) { }
                    try {signature.staff.records[i].staff_label_first_last = $('#signature_' + i + '_Label_First_Last').val();} catch (err) { }
                    try {signature.staff.records[i].staff_first = $('#signature_' + i + '_First').val();} catch (err) { }
                    try { $('#label_' + i + '_First').text(signature.staff.records[i].staff_first); } catch (err) { }
                    try {signature.staff.records[i].staff_last = $('#signature_' + i + '_Last').val();} catch (err) { }
                    try { $('#label_' + i + '_Last').text(signature.staff.records[i].staff_last); } catch (err) { }
                    try {signature.staff.records[i].staff_email = $('#signature_' + i + '_Email').val();} catch (err) { }
                    try { $('#label_' + i + '_Email').text(signature.staff.records[i].staff_email); } catch (err) { }
                    try {signature.staff.records[i].staff_phone = $('#signature_' + i + '_Phone').val();} catch (err) { }
                    try { $('#label_' + i + '_Phone').text(signature.staff.records[i].staff_phone); } catch (err) { }
                    try {signature.staff.records[i].staff_percentage = $('#signature_' + i + '_Percentage').val();} catch (err) { }
                    try { $('#label_' + i + '_Percentage').text(signature.staff.records[i].staff_percentage); } catch (err) { }
                    try {signature.staff.records[i].staff_availabilityjson = $('#signature_' + i + '_Availabilityjson').val();} catch (err) { }
                    try { $('#label_' + i + '_Availabilityjson').text(signature.staff.records[i].staff_availabilityjson); } catch (err) { }
                    try {signature.staff.records[i].staff_status = $('#signature_' + i + '_Status').val();} catch (err) { }
                    try {signature.staff.records[i].staff_street1 = $('#signature_' + i + '_Street1').val();} catch (err) { }
                    try { $('#label_' + i + '_Street1').text(signature.staff.records[i].staff_street1); } catch (err) { }
                    try {signature.staff.records[i].staff_street2 = $('#signature_' + i + '_Street2').val();} catch (err) { }
                    try { $('#label_' + i + '_Street2').text(signature.staff.records[i].staff_street2); } catch (err) { }
                    try {signature.staff.records[i].staff_city = $('#signature_' + i + '_City').val();} catch (err) { }
                    try { $('#label_' + i + '_City').text(signature.staff.records[i].staff_city); } catch (err) { }
                    try {signature.staff.records[i].staff_state = $('#signature_' + i + '_State').val();} catch (err) { }
                    try { $('#label_' + i + '_State').text(signature.staff.records[i].staff_state); } catch (err) { }
                    try {signature.staff.records[i].staff_zip = $('#signature_' + i + '_Zip').val();} catch (err) { }
                    try { $('#label_' + i + '_Zip').text(signature.staff.records[i].staff_zip); } catch (err) { }
                    try {signature.staff.records[i].label = signature.staff.records[i].staff_first+" "+signature.staff.records[i].staff_last; } catch (err) { }


                signature.staff.records[i].action_del = 'N';
            } catch(err) {
                signature.staff.records[i].action_del = 'N';
            }
        }
        //signature.staff.records = JSON.parse(signature.v.recover);
        signature.staff.buildPageFromJSON();
    },//==============================================
    hasFields: function() {
        var result = false;
        for (var i = 0; i < signature.staff.records.length; i++) {
            if ( $( '#signature_' + i + '_First' ).length ) {
                result = true;
            }
        }
        return result;
        // 
    },//==============================================
    resolveidunspecific: function(id) {
        // console.log(idx+' - '+labelid+' - '+id);
        var found = false;
        var label = '';
        if (id.length > 0) {

	        try {
	        	if (!found) {
	        		for (var i = 0; i < signature.staffType.records.length; i++) {
	        			if (signature.staffType.records[i].guid === id) {
	        				label = signature.staffType.records[i]['label'];
	        				found = true;
	        			}
	        		}
	        	}
	        } catch(err) {}

	        try {
	        	if (!found) {
	        		for (var i = 0; i < signature.staff.records.length; i++) {
	        			if (signature.staff.records[i].guid === id) {
	        				label = signature.staff.records[i]['label'];
	        				found = true;
	        			}
	        		}
	        	}
	        } catch(err) {}

	        try {
	        	if (!found) {
	        		for (var i = 0; i < signature.services.records.length; i++) {
	        			if (signature.services.records[i].guid === id) {
	        				label = signature.services.records[i]['label'];
	        				found = true;
	        			}
	        		}
	        	}
	        } catch(err) {}

        }
        // console.log(found,label);
        return label;
        // signature.staff.resolveids();
    },//==============================================
    resolveid: function(idx,id,labelid) {
        // console.log(idx+' - '+labelid+' - '+id);
        var found = false;
        var label = '';
        if (id.length > 0) {

	        try {
	        	if (!found) {
	        		for (var i = 0; i < signature.staffType.records.length; i++) {
	        			if (signature.staffType.records[i].guid === id) {
	        				label = signature.staffType.records[i]['label'];
	        				found = true;
	        			}
	        		}
	        	}
	        } catch(err) {}

	        try {
	        	if (!found) {
	        		for (var i = 0; i < signature.staff.records.length; i++) {
	        			if (signature.staff.records[i].guid === id) {
	        				label = signature.staff.records[i]['label'];
	        				found = true;
	        			}
	        		}
	        	}
	        } catch(err) {}

	        try {
	        	if (!found) {
	        		for (var i = 0; i < signature.services.records.length; i++) {
	        			if (signature.services.records[i].guid === id) {
	        				label = signature.services.records[i]['label'];
	        				found = true;
	        			}
	        		}
	        	}
	        } catch(err) {}

        }
        // console.log(found,label);
        if (found) {
            $('#'+labelid).text(label);
        }
        // signature.staff.resolveids();
    },//==============================================
    resolveids: function() {
        $('.resolvethisid').each(function( index ) {
            signature.staff.resolveid($(this).parent().parent().parent().attr('idx'),$(this).val(),$(this).parent().parent().attr('findlabel'))
        });
    },//==============================================
    formBlur: function() {
        // console.log('formBlur');
        if (signature.v.area !== 'timelog') {
            if ( $('#'+signature.v.lastID).hasClass('_Staff_Type_Mid_') && $('#'+signature.v.lastID).val() === '') { $('#'+signature.v.lastID).val('Staff Type') }
            if ( $('#'+signature.v.lastID).hasClass('_First_') && $('#'+signature.v.lastID).val() === '') { $('#'+signature.v.lastID).val('First') }
            if ( $('#'+signature.v.lastID).hasClass('_Last_') && $('#'+signature.v.lastID).val() === '') { $('#'+signature.v.lastID).val('Last') }
            if ( $('#'+signature.v.lastID).hasClass('_Email_') && $('#'+signature.v.lastID).val() === '') { $('#'+signature.v.lastID).val('Email') }
            if ( $('#'+signature.v.lastID).hasClass('_Phone_') && $('#'+signature.v.lastID).val() === '') { $('#'+signature.v.lastID).val('Phone') }
            if ( $('#'+signature.v.lastID).hasClass('_Percentage_') && $('#'+signature.v.lastID).val() === '') { $('#'+signature.v.lastID).val('%') }
            if ( $('#'+signature.v.lastID).hasClass('_Status_') && $('#'+signature.v.lastID).val() === '') { $('#'+signature.v.lastID).val('Status') }
            if ( $('#'+signature.v.lastID).hasClass('_Street1_') && $('#'+signature.v.lastID).val() === '') { $('#'+signature.v.lastID).val('Street1') }
            if ( $('#'+signature.v.lastID).hasClass('_Street2_') && $('#'+signature.v.lastID).val() === '') { $('#'+signature.v.lastID).val('Street2') }
            if ( $('#'+signature.v.lastID).hasClass('_City_') && $('#'+signature.v.lastID).val() === '') { $('#'+signature.v.lastID).val('City') }
            if ( $('#'+signature.v.lastID).hasClass('_State_') && $('#'+signature.v.lastID).val() === '') { $('#'+signature.v.lastID).val('State') }
            if ( $('#'+signature.v.lastID).hasClass('_Zip_') && $('#'+signature.v.lastID).val() === '') { $('#'+signature.v.lastID).val('Zip') }

            signature.staff.varUpdate();
            $('.itemLabel').css('display','inline-block');
            $('input').css('display','none');
        }
    },//==============================================
    toggleSwitches: function() {
        signature.staff.varUpdate();
        for (var i = 0; i < signature.staff.records.length; i++) {
            try {
                if (signature.staff.records[i].action_del === 'N') {
                    try {signature.staff.records[i].staff_label_first_last = $('#signature_' + i + '_Label_First_Last').val();} catch (err) { }
                    if (signature.staff.records[i].staff_label_first_last === '1') {$('#toggle_' + i + '_Label_First_Last_on').css('display','inline-block');$('#toggle_' + i + '_Label_First_Last_off').css('display','none');} else {$('#toggle_' + i + '_Label_First_Last_on').css('display','none');$('#toggle_' + i + '_Label_First_Last_off').css('display','inline-block');}
                    try {signature.staff.records[i].staff_status = $('#signature_' + i + '_Status').val();} catch (err) { }
                    if (signature.staff.records[i].staff_status === '1') {$('#toggle_' + i + '_Status_on').css('display','inline-block');$('#toggle_' + i + '_Status_off').css('display','none');} else {$('#toggle_' + i + '_Status_on').css('display','none');$('#toggle_' + i + '_Status_off').css('display','inline-block');}

                }

            } catch(err) {}
        }
    },//==============================================
    toggle: function(p,field,vid,lid) {
        // console.log($('#'+vid).val());
        if ($('#'+vid).val() === '1') {
            $('#'+vid).val(0);
            $('#'+p+' .toggleOn').css('display','none');
            $('#'+p+' .toggleOff').css('display','inline-block');
        } else {
            $('#'+vid).val(1);
            $('#'+p+' .toggleOn').css('display','inline-block');
            $('#'+p+' .toggleOff').css('display','none');
        }
    },//==============================================
    selected: function(i,label,tbl,field,vid,lid,tableLabel) {
        $('#selectsomething').remove();
        $('#'+vid).val(signature.staff.records[i]['guid'])
        $('#'+lid).text(signature.staff.records[i]['label']);
    },//==============================================
    refreshselection: function() {
        // console.log(signature.v.searchfor);
        var action = signature.v.refreshaction.replace('SEARCHHERE',signature.v.searchfor);
        // console.log(action);
        eval(action);
    },//==============================================
    selectpage: function(label,tbl,field,vid,lid,tableLabel,search) {
        $('#selectsomething').remove();
        $('body').append('<div id="selectsomething"><span class="close" onClick="$(\'#selectsomething\').remove();">X</span><div id="selectsomethinginner"><span id="selectheader">'+label+'</span><hr /><input type="text" id="selectsearch" value="'+search+'"><br /><div class="items"></div></div></div>');
        var labels = [];
        try {
            for (var i = 0; i < signature.staff.records.length; i++) {
                if (signature.staff.records[i][signature.staff.fieldprefix+'status'] === '1') {
                    labels.push(signature.staff.records[i]['label']);
                }
            }
        } catch(err) {}
        for (var i = 0; i < labels.length; i++) {
            if (search.length > 0) {
                if (labels[i].includes(search)) {
                    $('#selectsomething .items').append('<div class="item" onclick="signature.staff.selected(\''+i+'\',\''+label+'\',\''+tbl+'\',\''+field+'\',\''+vid+'\',\''+lid+'\',\''+tableLabel+'\');">'+labels[i]+'</div>');
                }
            } else {
                $('#selectsomething .items').append('<div class="item" onclick="signature.staff.selected(\''+i+'\',\''+label+'\',\''+tbl+'\',\''+field+'\',\''+vid+'\',\''+lid+'\',\''+tableLabel+'\');">'+labels[i]+'</div>');
            }
        }
        if (labels.length === 0) {
            $('#selectsomething .items').append('<div class="item" >No Records</div>');
            $('#selectsomething .items').append('<div class="item" ></div>');
            $('#selectsomething .items').append('<div class="item button" onClick="signature.staff.manage();$(\'#selectsomething\').remove();">Add Record</div>');
            $('#selectsearch').remove();
        } else {
            signature.v.refreshaction = 'signature.'+tbl+'.selectpage(\''+label+'\',\''+tbl+'\',\''+field+'\',\''+vid+'\',\''+lid+'\',\''+tableLabel+'\',\'SEARCHHERE\');';
            $('#selectsomething').append('<script>$("#selectsearch").keyup(function() {signature.v.searchfor = $("#selectsearch").val();signature.staff.doThisWhenDone("autosearch", 200, signature.staff.refreshselection);});</script>');
            $('#selectsearch').focusTextToEnd();
        }
    },//==============================================
    select: function(label,tbl,field,vid,lid,tableLabel) {
        // alert(label+' '+tbl);
        // console.log('1');
        var taskAction = 'signature.'+tbl+'.selectpage(\''+label+'\',\''+tbl+'\',\''+field+'\',\''+vid+'\',\''+lid+'\',\''+tableLabel+'\',\'\');';
        // console.log('2');
        eval(taskAction);
        // console.log(taskAction)
        // console.log('3');
    },//==============================================
    formFocus: function(idx,id) {
        signature.v.lastID = id;
        signature.v.lastIDX = idx;
        if ('signature_'+idx+'_Staff_Type_Mid' === id && $('#'+id).val() === 'Staff Type') { $('#'+id).val('') }
        if ('signature_'+idx+'_First' === id && $('#'+id).val() === 'First') { $('#'+id).val('') }
        if ('signature_'+idx+'_Last' === id && $('#'+id).val() === 'Last') { $('#'+id).val('') }
        if ('signature_'+idx+'_Email' === id && $('#'+id).val() === 'Email') { $('#'+id).val('') }
        if ('signature_'+idx+'_Phone' === id && $('#'+id).val() === 'Phone') { $('#'+id).val('') }
        if ('signature_'+idx+'_Percentage' === id && $('#'+id).val() === '%') { $('#'+id).val('') }
        if ('signature_'+idx+'_Status' === id && $('#'+id).val() === 'Status') { $('#'+id).val('') }
        if ('signature_'+idx+'_Street1' === id && $('#'+id).val() === 'Street1') { $('#'+id).val('') }
        if ('signature_'+idx+'_Street2' === id && $('#'+id).val() === 'Street2') { $('#'+id).val('') }
        if ('signature_'+idx+'_City' === id && $('#'+id).val() === 'City') { $('#'+id).val('') }
        if ('signature_'+idx+'_State' === id && $('#'+id).val() === 'State') { $('#'+id).val('') }
        if ('signature_'+idx+'_Zip' === id && $('#'+id).val() === 'Zip') { $('#'+id).val('') }

    },//==============================================
    managechildren: function(guid) {
        // console.log(guid);
        // $('.thechild').remove();
        // $('.managechildrenbutton').remove();
        // $('.certItemParent').each(function( index ) {
        //     console.log('each - '+$(this).attr('guid'));
        //     if ($(this).attr('guid') !== guid) {
        //         console.log('not match');
        //         $(this).remove();
        //     }
        // });
        // $("[guid='"+guid+"']").append('<div class="thechild"></div>');
        


        // console.log('done');
    },//==============================================
    saveThenOpen: function() {
        signature.shared.close();
        signature.shared.runWhen(null, 'closed', function(){signature.staff.obj.edit();});
    }, //==============================================
    htmlRow: function(i, id, guid, staff_type_mid, first, last, email, phone, percentage, status, street1, street2, city, state, zip) {
            if (typeof i === 'undefined') {
                i = signature.staff.records.length - 1;
            }
            if (typeof id === 'undefined') {
                id = 0;
            }
            
            if (typeof staff_type_mid === 'undefined') { staff_type_mid = ''; }
            if (typeof first === 'undefined') { first = ''; }
            if (typeof last === 'undefined') { last = ''; }
            if (typeof email === 'undefined') { email = ''; }
            if (typeof phone === 'undefined') { phone = ''; }
            if (typeof percentage === 'undefined') { percentage = ''; }
            if (typeof status === 'undefined') { status = '1'; }
            if (typeof street1 === 'undefined') { street1 = ''; }
            if (typeof street2 === 'undefined') { street2 = ''; }
            if (typeof city === 'undefined') { city = ''; }
            if (typeof state === 'undefined') { state = ''; }
            if (typeof zip === 'undefined') { zip = ''; }


            if (staff_type_mid === '') { staff_type_mid = 'Staff Type'; }
            if (first === '') { first = 'First'; }
            if (last === '') { last = 'Last'; }
            if (email === '') { email = 'Email'; }
            if (phone === '') { phone = 'Phone'; }
            if (percentage === '') { percentage = '%'; }
            if (status === '') { status = 'Status'; }
            if (street1 === '') { street1 = 'Street1'; }
            if (street2 === '') { street2 = 'Street2'; }
            if (city === '') { city = 'City'; }
            if (state === '') { state = 'State'; }
            if (zip === '') { zip = 'Zip'; }


            $('#manage').append('\
            <div id="row_' + i + '" class="certItemParent certItem" idx="' + i + '" guid="' + guid + '" onblur="$(\'.morebutton\').css(\'display\',\'inline-block\');$(\'.more\').css(\'display\',\'none\');">\
                <div id="eDelete' + i + '" class="eDelete" title="delete" onClick="signature.staff.del(' + i + ');">\
                   <img src="images/delete.png">\
                </div>\
                <div class="signatureItem" findlabel="label_' + i + '_Staff_Type_Mid_">\
                    <div class="item_Label staff_type_mid" style="display:none;"> Staff Type: </div>\
                    <div id="eefStaff_Type_Mid" class="signatureField" onclick="signature.staff.select(\'Staff Type\',\'staffType\',\'staff_type_mid\',\'signature_' + i + '_Staff_Type_Mid\',\'label_' + i + '_Staff_Type_Mid_\',\'staff_type_label\');">\
                    	<span id="label_' + i + '_Staff_Type_Mid_">Staff Type</span>\
                        <input name="Staff_Type_Mid_' + i + '" type="hidden" id="signature_' + i + '_Staff_Type_Mid" class="resolvethisid signaturebox _Staff_Type_Mid_" value="' + staff_type_mid + '">\
                    </div>\
                </div>\
                <div class="signatureItem">\
                    <div id="label_' + i + '_First" class="itemLabel first" onclick="signature.staff.doThisWhenDone(\'field_focus\', 8000, signature.staff.formBlur);signature.staff.varUpdate();$(\'.itemLabel\').css(\'display\',\'inline-block\');$(\'input\').css(\'display\',\'none\');$(\'#\'+$(this).attr(\'relatedfield\')).css(\'display\',\'inline-block\');$(this).css(\'display\',\'none\');" relatedfield="signature_' + i + '_First"> First: </div>\
                    <div id="eefFirst" class="signatureField">\
                        <input name="First_' + i + '" type="text" id="signature_' + i + '_First" class="signaturebox _First_" value="' + first + '" style="display:none;"  relatedfield="label_' + i + '_First" >\
                    </div>\
                </div>\
                <div class="signatureItem">\
                    <div id="label_' + i + '_Last" class="itemLabel last" onclick="signature.staff.doThisWhenDone(\'field_focus\', 8000, signature.staff.formBlur);signature.staff.varUpdate();$(\'.itemLabel\').css(\'display\',\'inline-block\');$(\'input\').css(\'display\',\'none\');$(\'#\'+$(this).attr(\'relatedfield\')).css(\'display\',\'inline-block\');$(this).css(\'display\',\'none\');" relatedfield="signature_' + i + '_Last"> Last: </div>\
                    <div id="eefLast" class="signatureField">\
                        <input name="Last_' + i + '" type="text" id="signature_' + i + '_Last" class="signaturebox _Last_" value="' + last + '" style="display:none;"  relatedfield="label_' + i + '_Last" >\
                    </div>\
                </div>\
                <div class="signatureItem">\
                    <div id="label_' + i + '_Email" class="itemLabel email" onclick="signature.staff.doThisWhenDone(\'field_focus\', 8000, signature.staff.formBlur);signature.staff.varUpdate();$(\'.itemLabel\').css(\'display\',\'inline-block\');$(\'input\').css(\'display\',\'none\');$(\'#\'+$(this).attr(\'relatedfield\')).css(\'display\',\'inline-block\');$(this).css(\'display\',\'none\');" relatedfield="signature_' + i + '_Email"> Email: </div>\
                    <div id="eefEmail" class="signatureField">\
                        <input name="Email_' + i + '" type="text" id="signature_' + i + '_Email" class="signaturebox _Email_" value="' + email + '" style="display:none;"  relatedfield="label_' + i + '_Email" >\
                    </div>\
                </div>\
                <div class="signatureItem">\
                    <div id="label_' + i + '_Phone" class="itemLabel phone" onclick="signature.staff.doThisWhenDone(\'field_focus\', 8000, signature.staff.formBlur);signature.staff.varUpdate();$(\'.itemLabel\').css(\'display\',\'inline-block\');$(\'input\').css(\'display\',\'none\');$(\'#\'+$(this).attr(\'relatedfield\')).css(\'display\',\'inline-block\');$(this).css(\'display\',\'none\');" relatedfield="signature_' + i + '_Phone"> Phone: </div>\
                    <div id="eefPhone" class="signatureField">\
                        <input name="Phone_' + i + '" type="text" id="signature_' + i + '_Phone" class="signaturebox _Phone_" value="' + phone + '" style="display:none;"  relatedfield="label_' + i + '_Phone" >\
                    </div>\
                </div>\
                <div class="signatureItem">\
                    <div id="label_' + i + '_Percentage" class="itemLabel percentage" onclick="signature.staff.doThisWhenDone(\'field_focus\', 8000, signature.staff.formBlur);signature.staff.varUpdate();$(\'.itemLabel\').css(\'display\',\'inline-block\');$(\'input\').css(\'display\',\'none\');$(\'#\'+$(this).attr(\'relatedfield\')).css(\'display\',\'inline-block\');$(this).css(\'display\',\'none\');" relatedfield="signature_' + i + '_Percentage"> %: </div>\
                    <div id="eefPercentage" class="signatureField">\
                        <input name="Percentage_' + i + '" type="text" id="signature_' + i + '_Percentage" class="signaturebox _Percentage_" value="' + percentage + '" style="display:none;"  relatedfield="label_' + i + '_Percentage" >\
                    </div>\
                </div>\
                <div class="signatureItem">\
                    <div class="item_Label status" style="display:none;"> Status: </div>\
                    <div id="eefStatus_' + i + '_" class="signatureField thetoggle" relatedfield="label_' + i + '_Status_" onclick="signature.staff.toggle(\'eefStatus_' + i + '_\',\'status\',\'signature_' + i + '_Status\',\'label_' + i + '_Status_\');"><span id="label_' + i + '_Status_" class="togglelabel" style="display:none;">Status</span>\
                        <img src="images/toggle_on.png" style="height:23px;width: 50px; display:none;" id="toggle_' + i + '_Status_on" class="toggleOn">\
                        <img src="images/toggle_off.png" style="height:23px;width: 50px; display:none;" id="toggle_' + i + '_Status_off" class="toggleOff">\
                        <input name="Status_' + i + '" type="hidden" id="signature_' + i + '_Status" class="signaturebox _Status_" value="' + status + '">\
                    </div>\
                </div>\
<div class="morebutton" onclick="$(\'#\'+$(this).parent().attr(\'id\')+\' .more\').css(\'display\',\'block\');$(\'#\'+$(this).parent().attr(\'id\')+\' .morebutton\').css(\'display\',\'none\');" style="display:inline-block; padding: 10px;"><sub>more</sub></div><div class="more" style="display:none;">\
                <div class="signatureItem">\
                    <div id="label_' + i + '_Street1" class="itemLabel street1" onclick="signature.staff.doThisWhenDone(\'field_focus\', 8000, signature.staff.formBlur);signature.staff.varUpdate();$(\'.itemLabel\').css(\'display\',\'inline-block\');$(\'input\').css(\'display\',\'none\');$(\'#\'+$(this).attr(\'relatedfield\')).css(\'display\',\'inline-block\');$(this).css(\'display\',\'none\');" relatedfield="signature_' + i + '_Street1"> Street1: </div>\
                    <div id="eefStreet1" class="signatureField">\
                        <input name="Street1_' + i + '" type="text" id="signature_' + i + '_Street1" class="signaturebox _Street1_" value="' + street1 + '" style="display:none;"  relatedfield="label_' + i + '_Street1" >\
                    </div>\
                </div>\
                <div class="signatureItem">\
                    <div id="label_' + i + '_Street2" class="itemLabel street2" onclick="signature.staff.doThisWhenDone(\'field_focus\', 8000, signature.staff.formBlur);signature.staff.varUpdate();$(\'.itemLabel\').css(\'display\',\'inline-block\');$(\'input\').css(\'display\',\'none\');$(\'#\'+$(this).attr(\'relatedfield\')).css(\'display\',\'inline-block\');$(this).css(\'display\',\'none\');" relatedfield="signature_' + i + '_Street2"> Street2: </div>\
                    <div id="eefStreet2" class="signatureField">\
                        <input name="Street2_' + i + '" type="text" id="signature_' + i + '_Street2" class="signaturebox _Street2_" value="' + street2 + '" style="display:none;"  relatedfield="label_' + i + '_Street2" >\
                    </div>\
                </div>\
                <div class="signatureItem">\
                    <div id="label_' + i + '_City" class="itemLabel city" onclick="signature.staff.doThisWhenDone(\'field_focus\', 8000, signature.staff.formBlur);signature.staff.varUpdate();$(\'.itemLabel\').css(\'display\',\'inline-block\');$(\'input\').css(\'display\',\'none\');$(\'#\'+$(this).attr(\'relatedfield\')).css(\'display\',\'inline-block\');$(this).css(\'display\',\'none\');" relatedfield="signature_' + i + '_City"> City: </div>\
                    <div id="eefCity" class="signatureField">\
                        <input name="City_' + i + '" type="text" id="signature_' + i + '_City" class="signaturebox _City_" value="' + city + '" style="display:none;"  relatedfield="label_' + i + '_City" >\
                    </div>\
                </div>\
                <div class="signatureItem">\
                    <div id="label_' + i + '_State" class="itemLabel state" onclick="signature.staff.doThisWhenDone(\'field_focus\', 8000, signature.staff.formBlur);signature.staff.varUpdate();$(\'.itemLabel\').css(\'display\',\'inline-block\');$(\'input\').css(\'display\',\'none\');$(\'#\'+$(this).attr(\'relatedfield\')).css(\'display\',\'inline-block\');$(this).css(\'display\',\'none\');" relatedfield="signature_' + i + '_State"> State: </div>\
                    <div id="eefState" class="signatureField">\
                        <input name="State_' + i + '" type="text" id="signature_' + i + '_State" class="signaturebox _State_" value="' + state + '" style="display:none;"  relatedfield="label_' + i + '_State" >\
                    </div>\
                </div>\
                <div class="signatureItem">\
                    <div id="label_' + i + '_Zip" class="itemLabel zip" onclick="signature.staff.doThisWhenDone(\'field_focus\', 8000, signature.staff.formBlur);signature.staff.varUpdate();$(\'.itemLabel\').css(\'display\',\'inline-block\');$(\'input\').css(\'display\',\'none\');$(\'#\'+$(this).attr(\'relatedfield\')).css(\'display\',\'inline-block\');$(this).css(\'display\',\'none\');" relatedfield="signature_' + i + '_Zip"> Zip: </div>\
                    <div id="eefZip" class="signatureField">\
                        <input name="Zip_' + i + '" type="text" id="signature_' + i + '_Zip" class="signaturebox _Zip_" value="' + zip + '" style="display:none;"  relatedfield="label_' + i + '_Zip" >\
                    </div>\
                </div>\
</div>\
                <br />\
                <div id="someSpace"></div>\
                \
            </div>\
            <input name="id_' + i + '" type="hidden" id="id_' + i + '" value="' + id + '"/>');
                // <div class="thechild"></div>\
    }, //==============================================
    buildPageFromJSON: function() {
        // signature.staff.varUpdate();
        // console.log('buildPageFromJSON');
        //signature.v.recover = JSON.stringify(signature.staff.records);
        $('#manage').html('');

        try {
            for(var i = 0;i < signature.staff.records.length; i++){

                if (signature.staff.records[i].action_del === 'N') {
                    if (signature.staff.isChild) {
                        if (signature.staff.parent === signature.staff.records[i][signature.staff.px]) {
                            signature.staff.htmlRow(i, signature.staff.records[i].field_id, signature.staff.records[i].guid, signature.staff.records[i].staff_staff_type_mid, signature.staff.records[i].staff_first, signature.staff.records[i].staff_last, signature.staff.records[i].staff_email, signature.staff.records[i].staff_phone, signature.staff.records[i].staff_percentage, signature.staff.records[i].staff_status, signature.staff.records[i].staff_street1, signature.staff.records[i].staff_street2, signature.staff.records[i].staff_city, signature.staff.records[i].staff_state, signature.staff.records[i].staff_zip);
                        }

                    } else {
                        signature.staff.htmlRow(i, signature.staff.records[i].field_id, signature.staff.records[i].guid, signature.staff.records[i].staff_staff_type_mid, signature.staff.records[i].staff_first, signature.staff.records[i].staff_last, signature.staff.records[i].staff_email, signature.staff.records[i].staff_phone, signature.staff.records[i].staff_percentage, signature.staff.records[i].staff_status, signature.staff.records[i].staff_street1, signature.staff.records[i].staff_street2, signature.staff.records[i].staff_city, signature.staff.records[i].staff_state, signature.staff.records[i].staff_zip);
                    }
                    
                    // signature.staff.htmlRow(i, field_id, first, last, email, certificate, cnt, dvalue, status);
                }
            }
        } catch (err) {}
        signature.staff.varUpdate();
        $('.add').remove();
        $('.save').remove();
        $('#manage').append('<br /><br /><br />');
        $('#manage').append('<div class="button add" onclick="signature.staff.add();">Add</div>');
        $('#manage').append('<div class="button save" onclick="signature.staff.varUpdate();">Save</div>');
        $('#manage').append("<script>$( '.signaturebox' ).focus(function() { signature.staff.doThisWhenDone('field_focus', 8000, signature.staff.formBlur);signature.staff.formFocus($(this).parent().parent().parent().attr('idx'),$(this).attr('id')); });</script>");
        $('#manage').append("<script>$( '.signaturebox' ).blur(function() { signature.staff.formBlur(); });</script>");
        $('#manage').append("<script>$( '.thetoggle' ).hover( function() { $('#'+$(this).attr('relatedfield')).css('display','inline-block'); }, function() { $( '.togglelabel' ).css('display','none' ); } );</script>");
        $('#manage').prepend('<div id="thesection">'+signature.staff.sectionlabel+'</div>');
        
        signature.staff.toggleSwitches();
        signature.staff.resolveids();
    }, //==============================================
    runDoThis: function(myLabel) {
        if (typeof signature.v.doThis !== 'undefined') {
            var nowish = start = new Date().getTime();
            var run = false;
            for (var j = 0; j < signature.v.doThis.length; j++) {
                var thisLabel = signature.v.doThis[j].myLabel;
                var thisWait = signature.v.doThis[j].wait;
                var thisStamp = signature.v.doThis[j].stamp;
                if (myLabel === thisLabel) {

                    if ((nowish - thisStamp) > thisWait) {var checkStamp =  true;} else {var checkStamp =  false;}
                    if (checkStamp) {
                        var run = true;
                        var thisLabel = signature.v.doThis[j].myLabel;
                        var thisScript = signature.v.doThis[j].script;
                    }
                }
            }
        }
        if (run) {
            thisScript();
        }
    }, //==============================================
    doThisWhenDone: function(myLabel, waitfor, script) {
        var isNew = true;
        var isFirst = false;
        var stamp = start = new Date().getTime();
        if (typeof signature.v.doThis === 'undefined') {
            var nextID = 0
            signature.v.doThis = new Array();
            signature.v.doThis = [];
            signature.v.doThis.length = 0;
            var isFirst = true;
        } else {
            var nextID = signature.v.doThis.length;
        }
        if (!isFirst) {
            for (var j = 0; j < signature.v.doThis.length; j++) {
                var thisLabel = signature.v.doThis[j].myLabel;
                if (myLabel === thisLabel) {
                    var isNew = false;
                    signature.v.doThis[j] = {
                        myLabel: myLabel,
                        stamp: stamp,
                        wait: waitfor,
                        script: script
                    };
                }
            }
        }
        if (isNew) {

            signature.v.doThis[nextID] = {
                myLabel: myLabel,
                stamp: stamp,
                wait: waitfor,
                script: script
            };
        }
        var waitforAbout = waitfor + 50;
        setTimeout(function() { signature.staff.runDoThis(myLabel); }, waitforAbout);

        // signature.staff.doThisWhenDone(myLabel, waitfor, script);
    }, //==============================================
    getField: function(guid,field) {
        var result = '';
        if (signature.staff.records.length > 0) {

            var keys = Object.keys(signature.staff.records[0]);
            for (var i = 0; i < keys.length; i++) {
                if (keys[i].includes(field) && keys[i] !== 'field_id') {
                    var theKey = keys[i];
                }
            }


            for(var i = 0;i < signature.staff.records.length; i++){
                if (signature.staff.records[i].guid === guid) {
                    var result = signature.staff.records[i][theKey];
                }
            }
        } else {
            var result = 'No ' + signature.staff.sectionlabel + ' Records';
        }
        
        
        return result;
    }, //==============================================
    guid: function() {
        function s4() {
        return Math.floor((1 + Math.random()) * 0x10000)
            .toString(16)
            .substring(1);
        }
        return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();
    }, //==============================================
    nullFunction: function() {
        //signature.shared.log('null');
    } //==============================================
}
// signature.v.loader = '<div id="loading"><img src="images/dance.gif"></div>';
signature.v.loader = '<div id="loading"><img src="images/gears.gif"></div>';
signature.v.save = '';
signature.v.area = '';
// To Do
// signature.v.save  log save function on blur


signature.services = {
    records: [],
    isChild: false,
    parent: '',
    px: '',
    sectionlabel: 'Services',
    fieldprefix: 'services_',
    del: function(i) {
        try {signature.services.records[i].services_staff_type_mid = $('#signature_' + i + '_Staff_Type_Mid').val();} catch (err) { }
        try {signature.services.records[i].services_label = $('#signature_' + i + '_Label').val();} catch (err) { }
        try { $('#label_' + i + '_Label').text(signature.services.records[i].services_label); } catch (err) { }
        try {signature.services.records[i].services_duration = $('#signature_' + i + '_Duration').val();} catch (err) { }
        try { $('#label_' + i + '_Duration').text(signature.services.records[i].services_duration); } catch (err) { }
        try {signature.services.records[i].services_dvalue = $('#signature_' + i + '_Dvalue').val();} catch (err) { }
        try { $('#label_' + i + '_Dvalue').text(signature.services.records[i].services_dvalue); } catch (err) { }
        try {signature.services.records[i].services_addon = $('#signature_' + i + '_Addon').val();} catch (err) { }
        try {signature.services.records[i].services_status = $('#signature_' + i + '_Status').val();} catch (err) { }
        try {signature.services.records[i].label = signature.services.records[i].services_label; } catch (err) { }


        signature.services.records[i].action_del = 'Y';
        $('#row_' + i).remove();
        $("#unDelete").css('display','inline-block');
        var ix = 0;
        for (var iy = signature.services.records.length - 1; iy >= 0; iy--) {
            if (signature.services.records[iy].action_del === 'N') {
                ix++;
            }
        }
    }, //==============================================
    dataIn: function() {
        signature.staffType.records = signature.v.tables.staffType;
        signature.staff.records = signature.v.tables.staff;
        signature.services.records = signature.v.tables.services;
        signature.weeks.records = signature.v.tables.weeks;
        signature.weekItems.records = signature.v.tables.weekItems;

    }, //==============================================
    dataOut: function() {
        signature.v.tables = {};
        signature.v.tables['staffType'] = signature.staffType.records;
        signature.v.tables['staff'] = signature.staff.records;
        signature.v.tables['services'] = signature.services.records;
        signature.v.tables['weeks'] = signature.weeks.records;
        signature.v.tables['weekItems'] = signature.weekItems.records;

    }, //==============================================
    weekDateToDate: function(year, week, day) {
      const firstDayOfYear = new Date(year, 0, 1);
      const days = 2 + day + (week - 1) * 7 - firstDayOfYear.getDay();
      return new Date(year, 0, days);
    }, //==============================================
    getWeekNumber: function(d) {
        d = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));
        d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay()||7));
        var yearStart = new Date(Date.UTC(d.getUTCFullYear(),0,1));
        var weekNo = Math.ceil(( ( (d - yearStart) / 86400000) + 1)/7);
        return [d.getUTCFullYear(), weekNo];
        // return weekNo;
    }, //==============================================
    thisweek: function() {
        signature.v.area = 'weeks';
        if (signature.v.save.length > 0) {
            eval(signature.v.save);
        }
        signature.v.save = '';
        var result = signature.services.getWeekNumber(new Date());
        signature.v.week = result[1];
        signature.v.year = result[0];
        signature.services.displayweek();
        // signature.services.thisweek();
    }, //==============================================
    weekup: function() {
        signature.v.week ++;
        signature.services.displayweek();
    }, //==============================================
    weekdown: function() {
        signature.v.week --;
        signature.services.displayweek();
    }, //==============================================
    epochresolve: function(epoch,datestring) {
        var d = new Date(Number(epoch));
        if (datestring === 'string') {
            var thedate = d.toString().split(' ');
            var result = thedate[0]+' '+thedate[1]+' '+thedate[2]+' '+thedate[3];
        } else {
            var result = d;
        }
        return result;
    }, //==============================================
    displayweek: function() {
        $('#manage').html('<div id="datearea"></div>');
        $('#datearea').append('<br /><br />');
        for (var i = 0; i < 6; i++) {
            var thedate = signature.services.weekDateToDate(signature.v.year,signature.v.week,i).toString().split(' ');
            var epoch = signature.services.weekDateToDate(signature.v.year,signature.v.week,i).getTime();
            var displaydate = thedate[0]+' '+thedate[1]+' '+thedate[2]+' '+thedate[3];
            $('#datearea').append('<div id="date_'+i+'_day" class="dateitem" epoch="'+epoch+'"><span class="datetitle" onclick="signature.v.selecteddate=\''+epoch+'\';signature.staff.selectpageunspecific(\'\');">'+displaydate+'</span><div class="dayreport"></div></div>');
            // $('#manage').append('<div onclick="signature.v.selecteddate=\''+epoch+'\';signature.staff.selectpageunspecific(\'\');">'+displaydate+' epoch: '+epoch+'</div>');
            if ((i+1) % 3 === 0) {
                $('#datearea').append('<br />');
            }
        }


        signature.v.unspecificpost = 'signature.special.buildPageFromJSON();';
        // signature.v.unspecificpost = 'alert(signature.services.epochresolve(signature.v.selecteddate,\'string\') +" "+ signature.v.selecteddate +" "+ signature.services.resolveidunspecific(signature.v.selectedguid));';

        $('#manage').prepend('<div id="theweektotals"></div>');
        $('#manage').prepend('<div><div class="button" onclick="signature.services.weekdown()" style="padding: 5px">last week</div> &nbsp; <div class="button" onclick="signature.services.weekup()" style="padding: 5px">next week</div></div>');
        $('#manage').prepend('<div>'+signature.v.week+'</div>');
        try {
            if (signature.v.cal_script.length > 0) {
                eval(signature.v.cal_script);
            } else {
            }
        } catch (err) {console.log('error');}
    },//==============================================
    refreshselectionunspecific: function() {
        // console.log(signature.v.searchfor);
        var action = signature.v.refreshaction.replace('SEARCHHERE',signature.v.searchfor);
        // console.log(action);
        eval(action);
    },//==============================================
    selectpageunspecific: function(search) {
        $('#selectsomething').remove();
        $('body').append('<div id="selectsomething"><span class="close" onClick="$(\'#selectsomething\').remove();">X</span><div id="selectsomethinginner"><span id="selectheader">'+signature.services.sectionlabel+'</span><hr /><input type="text" id="selectsearch" value="'+search+'"><br /><div class="items"></div></div></div>');
        // var labels = [];
        try {
            for (var ii = 0; ii < signature.staffType.records.length; ii++) {
                var firstX = true;
                for (var i = 0; i < signature.services.records.length; i++) {
                    if (signature.services.records[i][signature.services.fieldprefix+'status'] === '1' && signature.staffType.records[ii].guid == signature.services.records[i].services_staff_type_mid) {
                        if (search.length > 0) {
                            if (signature.services.records[i]['label'].toLowerCase().includes(search.toLowerCase())) {
                                if (firstX) {
                                    var firstX = false;
                                    $('#selectsomething .items').append('<div class="grouplabel" style="text-align: left; font-size: 80%; font-weight: 700;">'+signature.staffType.records[ii]['label']+'</div>');
                                }
                                $('#selectsomething .items').append('<div class="item" guid="'+signature.services.records[i]['guid']+'" onclick="signature.v.selectedguid=$(this).attr(\'guid\');$(\'#selectsomething\').remove();eval(signature.v.unspecificpost);">'+signature.services.records[i]['label']+'</div>');
                            }
                        } else {
                            if (firstX) {
                                var firstX = false;
                                $('#selectsomething .items').append('<div class="grouplabel" style="text-align: left; font-size: 80%; font-weight: 700;">'+signature.staffType.records[ii]['label']+'</div>');
                            }
                            $('#selectsomething .items').append('<div class="item" guid="'+signature.services.records[i]['guid']+'" onclick="signature.v.selectedguid=$(this).attr(\'guid\');$(\'#selectsomething\').remove();eval(signature.v.unspecificpost);">'+signature.services.records[i]['label']+'</div>');
                        }
                        // labels.push({'label':signature.services.records[i]['label'], 'guid':signature.services.records[i]['guid'], });
                    }
                }
            }
        } catch(err) {}

        // for (var i = 0; i < labels.length; i++) {}
        if (signature.services.records.length === 0) {
            $('#selectsomething .items').append('<div class="item" >No Records</div>');
            $('#selectsomething .items').append('<div class="item" ></div>');
            $('#selectsomething .items').append('<div class="item button" onClick="signature.services.manage();$(\'#selectsomething\').remove();">Add Record</div>');
            $('#selectsearch').remove();
        } else {
            signature.v.refreshaction = 'signature.services.selectpageunspecific(\'SEARCHHERE\');';
            $('#selectsomething').append('<script>$("#selectsearch").keyup(function() {signature.v.searchfor = $("#selectsearch").val();signature.services.doThisWhenDone("autosearch", 200, signature.services.refreshselectionunspecific);});</script>');        
            $('#selectsearch').focusTextToEnd();
        }
    }, //==============================================
    manage: function() {
        signature.v.area = 'services';
        if (signature.v.save.length > 0) {
            eval(signature.v.save);
        }
        signature.v.save = 'signature.services.varUpdate();';


        if (signature.services.isChild) {
            var data = {"field_id":"0","label":"","guid":signature.services.guid(),"services_staff_type_mid":"","services_label":"","services_duration":"","services_dvalue":"","services_addon":"0","services_status":"1","action_del":"N"};
            var keys = Object.keys(data);
            for (var i = 0; i < keys.length; i++) {
                if (keys[i].includes('_id') && keys[i] !== 'field_id') {
                    signature.services.px = keys[i];
                }
            }
        }

        $('#manage').html('');
        if (signature.services.records.length === 0) {
            signature.services.add();
        } else {
            signature.services.buildPageFromJSON();
        }
        
        // signature.services.manage();
    }, //==============================================
    add: function() {
        var data = {"field_id":"0","label":"","guid":signature.services.guid(),"services_staff_type_mid":"","services_label":"","services_duration":"","services_dvalue":"","services_addon":"0","services_status":"1","action_del":"N"};

        signature.services.varUpdate();
        signature.services.records.push(data);
        signature.services.buildPageFromJSON();
        return data
    }, //==============================================
    varUpdate: function(id,tog) {
        try {
            for(var i = 0;i < signature.services.records.length; i++){
                if (signature.services.hasFields()) {
                    try {signature.services.records[i].services_staff_type_mid = $('#signature_' + i + '_Staff_Type_Mid').val();} catch (err) { }
                    try {signature.services.records[i].services_label = $('#signature_' + i + '_Label').val();} catch (err) { }
                    try { $('#label_' + i + '_Label').text(signature.services.records[i].services_label); } catch (err) { }
                    try {signature.services.records[i].services_duration = $('#signature_' + i + '_Duration').val();} catch (err) { }
                    try { $('#label_' + i + '_Duration').text(signature.services.records[i].services_duration); } catch (err) { }
                    try {signature.services.records[i].services_dvalue = $('#signature_' + i + '_Dvalue').val();} catch (err) { }
                    try { $('#label_' + i + '_Dvalue').text(signature.services.records[i].services_dvalue); } catch (err) { }
                    try {signature.services.records[i].services_addon = $('#signature_' + i + '_Addon').val();} catch (err) { }
                    try {signature.services.records[i].services_status = $('#signature_' + i + '_Status').val();} catch (err) { }
                    try {signature.services.records[i].label = signature.services.records[i].services_label; } catch (err) { }

                }
            }
        } catch (err) {}
//         try {
//             for(var i = 0;i < signature.services.records.length; i++){
//                 if (signature.services.hasFields()) {
// [js_HTML_ROW_Val_DEL]
//                 }
//             }
//         } catch (err) {}
        // console.log(signature.services.records);
    }, //==============================================
    togglerow: function(id,tog) {
        if (!tog) {
            ans = confirm('Restore?');
        } else {
            ans = confirm('Used?');
        }
        if (ans) {
            window.location.href = '?id=' + id + '&toggle='+tog+'&manage';
        }
    }, //==============================================
    valid: function() {
        var valid = true;
        var ix = 0
        try {
            for (var iy = signature.services.records.length - 1; iy >= 0; iy--) {
                if (signature.services.records[iy].action_del === 'N') {
                    ix++;
                }
            }
        } catch (err) {}
        try {
            for (var i = 0; i < signature.services.records.length; i++) {
                try {
                    if (signature.services.records[i].action_del === 'N') {

                        var item = '#signature_' + i + '_Staff_Type_Mid';
                        if ($(item).val().length) {
                            $(item).css('border-color','');
                        } else {
                            $(item).css('border-color','crimson');
                            valid = false;
                        }

                        var item = '#signature_' + i + '_Label';
                        if ($(item).val().length) {
                            $(item).css('border-color','');
                        } else {
                            $(item).css('border-color','crimson');
                            valid = false;
                        }

                        var item = '#signature_' + i + '_Duration';
                        if ($(item).val().length) {
                            $(item).css('border-color','');
                        } else {
                            $(item).css('border-color','crimson');
                            valid = false;
                        }

                        var item = '#signature_' + i + '_Dvalue';
                        if ($(item).val().length > 0) {
                            if(isNaN($(item).val())){
                                $(item).css('border-color','crimson');
                                valid = false
                            } else {
                                $(item).css('border-color','');
                            }
                        } else {
                            $(item).css('border-color','crimson');
                            valid = false;
                        }

                        var item = '#signature_' + i + '_Addon';
                        if ($(item).val().length > 0) {
                            if(isNaN($(item).val())){
                                $(item).css('border-color','crimson');
                                valid = false
                            } else {
                                $(item).css('border-color','');
                            }
                        } else {
                            $(item).css('border-color','crimson');
                            valid = false;
                        }

                        var item = '#signature_' + i + '_Status';
                        if ($(item).val().length > 0) {
                            if(isNaN($(item).val())){
                                $(item).css('border-color','crimson');
                                valid = false
                            } else {
                                $(item).css('border-color','');
                            }
                        } else {
                            $(item).css('border-color','crimson');
                            valid = false;
                        }

                    }
                } catch (err) {}
            }
        } catch (err) {}
        return valid
    }, //==============================================
    excel: function() {
        signature.services.download('excel.php','certificates.csv');
    }, //==============================================
    download: function(uri, filename) {
        var link = document.createElement('a');
        if (typeof link.download === 'string') {
            document.body.appendChild(link);
            link.download = filename;
            link.href = uri;
            link.click();
            document.body.removeChild(link);
        } else {
            location.replace(uri);
        }
    }, //==============================================
    send: function() {
        if (signature.services.valid()) {

            $('body').append(signature.v.loader);

            for (var i = 0; i < signature.services.records.length; i++) {
                try {
                    try {signature.services.records[i].services_staff_type_mid = $('#signature_' + i + '_Staff_Type_Mid').val();} catch (err) { }
                    try {signature.services.records[i].services_label = $('#signature_' + i + '_Label').val();} catch (err) { }
                    try { $('#label_' + i + '_Label').text(signature.services.records[i].services_label); } catch (err) { }
                    try {signature.services.records[i].services_duration = $('#signature_' + i + '_Duration').val();} catch (err) { }
                    try { $('#label_' + i + '_Duration').text(signature.services.records[i].services_duration); } catch (err) { }
                    try {signature.services.records[i].services_dvalue = $('#signature_' + i + '_Dvalue').val();} catch (err) { }
                    try { $('#label_' + i + '_Dvalue').text(signature.services.records[i].services_dvalue); } catch (err) { }
                    try {signature.services.records[i].services_addon = $('#signature_' + i + '_Addon').val();} catch (err) { }
                    try {signature.services.records[i].services_status = $('#signature_' + i + '_Status').val();} catch (err) { }
                    try {signature.services.records[i].label = signature.services.records[i].services_label; } catch (err) { }


                } catch (err) {}
            }
            $('#JSON').val(JSON.stringify(signature.services.records));
            $.post("[js_PHP_FILE_SEND]", $("#form").serialize())
                .done(function(data) {
                    console.log(data);
                    try {
                        signature.services.records = JSON.parse(data)


                    } catch (err) {
                        alert('Error');
                    }
                    $('#loading').remove();
                });
        }
    }, //==============================================
    loadJSON: function() {
        if (signature.shared.isLoaded(3)) {
            signature.services.buildPageFromJSON();
        } else {
            setTimeout(function() { signature.services.loadJSON(); }, 800);
        }
    },//==============================================
    unDelete: function() {
        $("#unDelete").css('display','none');
        for (var i = 0; i < signature.services.records.length; i++) {
            try {
                    try {signature.services.records[i].services_staff_type_mid = $('#signature_' + i + '_Staff_Type_Mid').val();} catch (err) { }
                    try {signature.services.records[i].services_label = $('#signature_' + i + '_Label').val();} catch (err) { }
                    try { $('#label_' + i + '_Label').text(signature.services.records[i].services_label); } catch (err) { }
                    try {signature.services.records[i].services_duration = $('#signature_' + i + '_Duration').val();} catch (err) { }
                    try { $('#label_' + i + '_Duration').text(signature.services.records[i].services_duration); } catch (err) { }
                    try {signature.services.records[i].services_dvalue = $('#signature_' + i + '_Dvalue').val();} catch (err) { }
                    try { $('#label_' + i + '_Dvalue').text(signature.services.records[i].services_dvalue); } catch (err) { }
                    try {signature.services.records[i].services_addon = $('#signature_' + i + '_Addon').val();} catch (err) { }
                    try {signature.services.records[i].services_status = $('#signature_' + i + '_Status').val();} catch (err) { }
                    try {signature.services.records[i].label = signature.services.records[i].services_label; } catch (err) { }


                signature.services.records[i].action_del = 'N';
            } catch(err) {
                signature.services.records[i].action_del = 'N';
            }
        }
        //signature.services.records = JSON.parse(signature.v.recover);
        signature.services.buildPageFromJSON();
    },//==============================================
    hasFields: function() {
        var result = false;
        for (var i = 0; i < signature.services.records.length; i++) {
            if ( $( '#signature_' + i + '_Label' ).length ) {
                result = true;
            }
        }
        return result;
        // 
    },//==============================================
    resolveidunspecific: function(id) {
        // console.log(idx+' - '+labelid+' - '+id);
        var found = false;
        var label = '';
        if (id.length > 0) {

	        try {
	        	if (!found) {
	        		for (var i = 0; i < signature.staffType.records.length; i++) {
	        			if (signature.staffType.records[i].guid === id) {
	        				label = signature.staffType.records[i]['label'];
	        				found = true;
	        			}
	        		}
	        	}
	        } catch(err) {}

	        try {
	        	if (!found) {
	        		for (var i = 0; i < signature.staff.records.length; i++) {
	        			if (signature.staff.records[i].guid === id) {
	        				label = signature.staff.records[i]['label'];
	        				found = true;
	        			}
	        		}
	        	}
	        } catch(err) {}

	        try {
	        	if (!found) {
	        		for (var i = 0; i < signature.services.records.length; i++) {
	        			if (signature.services.records[i].guid === id) {
	        				label = signature.services.records[i]['label'];
	        				found = true;
	        			}
	        		}
	        	}
	        } catch(err) {}

        }
        // console.log(found,label);
        return label;
        // signature.services.resolveids();
    },//==============================================
    resolveid: function(idx,id,labelid) {
        // console.log(idx+' - '+labelid+' - '+id);
        var found = false;
        var label = '';
        if (id.length > 0) {

	        try {
	        	if (!found) {
	        		for (var i = 0; i < signature.staffType.records.length; i++) {
	        			if (signature.staffType.records[i].guid === id) {
	        				label = signature.staffType.records[i]['label'];
	        				found = true;
	        			}
	        		}
	        	}
	        } catch(err) {}

	        try {
	        	if (!found) {
	        		for (var i = 0; i < signature.staff.records.length; i++) {
	        			if (signature.staff.records[i].guid === id) {
	        				label = signature.staff.records[i]['label'];
	        				found = true;
	        			}
	        		}
	        	}
	        } catch(err) {}

	        try {
	        	if (!found) {
	        		for (var i = 0; i < signature.services.records.length; i++) {
	        			if (signature.services.records[i].guid === id) {
	        				label = signature.services.records[i]['label'];
	        				found = true;
	        			}
	        		}
	        	}
	        } catch(err) {}

        }
        // console.log(found,label);
        if (found) {
            $('#'+labelid).text(label);
        }
        // signature.services.resolveids();
    },//==============================================
    resolveids: function() {
        $('.resolvethisid').each(function( index ) {
            signature.services.resolveid($(this).parent().parent().parent().attr('idx'),$(this).val(),$(this).parent().parent().attr('findlabel'))
        });
    },//==============================================
    formBlur: function() {
        // console.log('formBlur');
        if (signature.v.area !== 'timelog') {
            if ( $('#'+signature.v.lastID).hasClass('_Staff_Type_Mid_') && $('#'+signature.v.lastID).val() === '') { $('#'+signature.v.lastID).val('Staff Type') }
            if ( $('#'+signature.v.lastID).hasClass('_Label_') && $('#'+signature.v.lastID).val() === '') { $('#'+signature.v.lastID).val('Label') }
            if ( $('#'+signature.v.lastID).hasClass('_Duration_') && $('#'+signature.v.lastID).val() === '') { $('#'+signature.v.lastID).val('Duration') }
            if ( $('#'+signature.v.lastID).hasClass('_Dvalue_') && $('#'+signature.v.lastID).val() === '') { $('#'+signature.v.lastID).val('Value') }
            if ( $('#'+signature.v.lastID).hasClass('_Addon_') && $('#'+signature.v.lastID).val() === '') { $('#'+signature.v.lastID).val('Addon') }
            if ( $('#'+signature.v.lastID).hasClass('_Status_') && $('#'+signature.v.lastID).val() === '') { $('#'+signature.v.lastID).val('Status') }

            signature.services.varUpdate();
            $('.itemLabel').css('display','inline-block');
            $('input').css('display','none');
        }
    },//==============================================
    toggleSwitches: function() {
        signature.services.varUpdate();
        for (var i = 0; i < signature.services.records.length; i++) {
            try {
                if (signature.services.records[i].action_del === 'N') {
                    try {signature.services.records[i].services_addon = $('#signature_' + i + '_Addon').val();} catch (err) { }
                    if (signature.services.records[i].services_addon === '1') {$('#toggle_' + i + '_Addon_on').css('display','inline-block');$('#toggle_' + i + '_Addon_off').css('display','none');} else {$('#toggle_' + i + '_Addon_on').css('display','none');$('#toggle_' + i + '_Addon_off').css('display','inline-block');}
                    try {signature.services.records[i].services_status = $('#signature_' + i + '_Status').val();} catch (err) { }
                    if (signature.services.records[i].services_status === '1') {$('#toggle_' + i + '_Status_on').css('display','inline-block');$('#toggle_' + i + '_Status_off').css('display','none');} else {$('#toggle_' + i + '_Status_on').css('display','none');$('#toggle_' + i + '_Status_off').css('display','inline-block');}

                }

            } catch(err) {}
        }
    },//==============================================
    toggle: function(p,field,vid,lid) {
        // console.log($('#'+vid).val());
        if ($('#'+vid).val() === '1') {
            $('#'+vid).val(0);
            $('#'+p+' .toggleOn').css('display','none');
            $('#'+p+' .toggleOff').css('display','inline-block');
        } else {
            $('#'+vid).val(1);
            $('#'+p+' .toggleOn').css('display','inline-block');
            $('#'+p+' .toggleOff').css('display','none');
        }
    },//==============================================
    selected: function(i,label,tbl,field,vid,lid,tableLabel) {
        $('#selectsomething').remove();
        $('#'+vid).val(signature.services.records[i]['guid'])
        $('#'+lid).text(signature.services.records[i]['label']);
    },//==============================================
    refreshselection: function() {
        // console.log(signature.v.searchfor);
        var action = signature.v.refreshaction.replace('SEARCHHERE',signature.v.searchfor);
        // console.log(action);
        eval(action);
    },//==============================================
    selectpage: function(label,tbl,field,vid,lid,tableLabel,search) {
        $('#selectsomething').remove();
        $('body').append('<div id="selectsomething"><span class="close" onClick="$(\'#selectsomething\').remove();">X</span><div id="selectsomethinginner"><span id="selectheader">'+label+'</span><hr /><input type="text" id="selectsearch" value="'+search+'"><br /><div class="items"></div></div></div>');
        var labels = [];
        try {
            for (var i = 0; i < signature.services.records.length; i++) {
                if (signature.services.records[i][signature.services.fieldprefix+'status'] === '1') {
                    labels.push(signature.services.records[i]['label']);
                }
            }
        } catch(err) {}
        for (var i = 0; i < labels.length; i++) {
            if (search.length > 0) {
                if (labels[i].includes(search)) {
                    $('#selectsomething .items').append('<div class="item" onclick="signature.services.selected(\''+i+'\',\''+label+'\',\''+tbl+'\',\''+field+'\',\''+vid+'\',\''+lid+'\',\''+tableLabel+'\');">'+labels[i]+'</div>');
                }
            } else {
                $('#selectsomething .items').append('<div class="item" onclick="signature.services.selected(\''+i+'\',\''+label+'\',\''+tbl+'\',\''+field+'\',\''+vid+'\',\''+lid+'\',\''+tableLabel+'\');">'+labels[i]+'</div>');
            }
        }
        if (labels.length === 0) {
            $('#selectsomething .items').append('<div class="item" >No Records</div>');
            $('#selectsomething .items').append('<div class="item" ></div>');
            $('#selectsomething .items').append('<div class="item button" onClick="signature.services.manage();$(\'#selectsomething\').remove();">Add Record</div>');
            $('#selectsearch').remove();
        } else {
            signature.v.refreshaction = 'signature.'+tbl+'.selectpage(\''+label+'\',\''+tbl+'\',\''+field+'\',\''+vid+'\',\''+lid+'\',\''+tableLabel+'\',\'SEARCHHERE\');';
            $('#selectsomething').append('<script>$("#selectsearch").keyup(function() {signature.v.searchfor = $("#selectsearch").val();signature.services.doThisWhenDone("autosearch", 200, signature.services.refreshselection);});</script>');
            $('#selectsearch').focusTextToEnd();
        }
    },//==============================================
    select: function(label,tbl,field,vid,lid,tableLabel) {
        // alert(label+' '+tbl);
        // console.log('1');
        var taskAction = 'signature.'+tbl+'.selectpage(\''+label+'\',\''+tbl+'\',\''+field+'\',\''+vid+'\',\''+lid+'\',\''+tableLabel+'\',\'\');';
        // console.log('2');
        eval(taskAction);
        // console.log(taskAction)
        // console.log('3');
    },//==============================================
    formFocus: function(idx,id) {
        signature.v.lastID = id;
        signature.v.lastIDX = idx;
        if ('signature_'+idx+'_Staff_Type_Mid' === id && $('#'+id).val() === 'Staff Type') { $('#'+id).val('') }
        if ('signature_'+idx+'_Label' === id && $('#'+id).val() === 'Label') { $('#'+id).val('') }
        if ('signature_'+idx+'_Duration' === id && $('#'+id).val() === 'Duration') { $('#'+id).val('') }
        if ('signature_'+idx+'_Dvalue' === id && $('#'+id).val() === 'Value') { $('#'+id).val('') }
        if ('signature_'+idx+'_Addon' === id && $('#'+id).val() === 'Addon') { $('#'+id).val('') }
        if ('signature_'+idx+'_Status' === id && $('#'+id).val() === 'Status') { $('#'+id).val('') }

    },//==============================================
    managechildren: function(guid) {
        // console.log(guid);
        // $('.thechild').remove();
        // $('.managechildrenbutton').remove();
        // $('.certItemParent').each(function( index ) {
        //     console.log('each - '+$(this).attr('guid'));
        //     if ($(this).attr('guid') !== guid) {
        //         console.log('not match');
        //         $(this).remove();
        //     }
        // });
        // $("[guid='"+guid+"']").append('<div class="thechild"></div>');
        


        // console.log('done');
    },//==============================================
    saveThenOpen: function() {
        signature.shared.close();
        signature.shared.runWhen(null, 'closed', function(){signature.services.obj.edit();});
    }, //==============================================
    htmlRow: function(i, id, guid, staff_type_mid, label, duration, dvalue, addon, status) {
            if (typeof i === 'undefined') {
                i = signature.services.records.length - 1;
            }
            if (typeof id === 'undefined') {
                id = 0;
            }
            
            if (typeof staff_type_mid === 'undefined') { staff_type_mid = ''; }
            if (typeof label === 'undefined') { label = ''; }
            if (typeof duration === 'undefined') { duration = ''; }
            if (typeof dvalue === 'undefined') { dvalue = ''; }
            if (typeof addon === 'undefined') { addon = '0'; }
            if (typeof status === 'undefined') { status = '1'; }


            if (staff_type_mid === '') { staff_type_mid = 'Staff Type'; }
            if (label === '') { label = 'Label'; }
            if (duration === '') { duration = 'Duration'; }
            if (dvalue === '') { dvalue = 'Value'; }
            if (addon === '') { addon = 'Addon'; }
            if (status === '') { status = 'Status'; }


            $('#manage').append('\
            <div id="row_' + i + '" class="certItemParent certItem" idx="' + i + '" guid="' + guid + '" onblur="$(\'.morebutton\').css(\'display\',\'inline-block\');$(\'.more\').css(\'display\',\'none\');">\
                <div id="eDelete' + i + '" class="eDelete" title="delete" onClick="signature.services.del(' + i + ');">\
                   <img src="images/delete.png">\
                </div>\
                <div class="signatureItem" findlabel="label_' + i + '_Staff_Type_Mid_">\
                    <div class="item_Label staff_type_mid" style="display:none;"> Staff Type: </div>\
                    <div id="eefStaff_Type_Mid" class="signatureField" onclick="signature.services.select(\'Staff Type\',\'staffType\',\'staff_type_mid\',\'signature_' + i + '_Staff_Type_Mid\',\'label_' + i + '_Staff_Type_Mid_\',\'staff_type_label\');">\
                    	<span id="label_' + i + '_Staff_Type_Mid_">Staff Type</span>\
                        <input name="Staff_Type_Mid_' + i + '" type="hidden" id="signature_' + i + '_Staff_Type_Mid" class="resolvethisid signaturebox _Staff_Type_Mid_" value="' + staff_type_mid + '">\
                    </div>\
                </div>\
                <div class="signatureItem">\
                    <div id="label_' + i + '_Label" class="itemLabel label" onclick="signature.services.doThisWhenDone(\'field_focus\', 8000, signature.services.formBlur);signature.services.varUpdate();$(\'.itemLabel\').css(\'display\',\'inline-block\');$(\'input\').css(\'display\',\'none\');$(\'#\'+$(this).attr(\'relatedfield\')).css(\'display\',\'inline-block\');$(this).css(\'display\',\'none\');" relatedfield="signature_' + i + '_Label"> Label: </div>\
                    <div id="eefLabel" class="signatureField">\
                        <input name="Label_' + i + '" type="text" id="signature_' + i + '_Label" class="signaturebox _Label_" value="' + label + '" style="display:none;"  relatedfield="label_' + i + '_Label" >\
                    </div>\
                </div>\
                <div class="signatureItem">\
                    <div id="label_' + i + '_Duration" class="itemLabel duration" onclick="signature.services.doThisWhenDone(\'field_focus\', 8000, signature.services.formBlur);signature.services.varUpdate();$(\'.itemLabel\').css(\'display\',\'inline-block\');$(\'input\').css(\'display\',\'none\');$(\'#\'+$(this).attr(\'relatedfield\')).css(\'display\',\'inline-block\');$(this).css(\'display\',\'none\');" relatedfield="signature_' + i + '_Duration"> Duration: </div>\
                    <div id="eefDuration" class="signatureField">\
                        <input name="Duration_' + i + '" type="text" id="signature_' + i + '_Duration" class="signaturebox _Duration_" value="' + duration + '" style="display:none;"  relatedfield="label_' + i + '_Duration" >\
                    </div>\
                </div>\
                <div class="signatureItem">\
                    <div id="label_' + i + '_Dvalue" class="itemLabel dvalue" onclick="signature.services.doThisWhenDone(\'field_focus\', 8000, signature.services.formBlur);signature.services.varUpdate();$(\'.itemLabel\').css(\'display\',\'inline-block\');$(\'input\').css(\'display\',\'none\');$(\'#\'+$(this).attr(\'relatedfield\')).css(\'display\',\'inline-block\');$(this).css(\'display\',\'none\');" relatedfield="signature_' + i + '_Dvalue"> Value: </div>\
                    <div id="eefDvalue" class="signatureField">\
                        <input name="Dvalue_' + i + '" type="text" id="signature_' + i + '_Dvalue" class="signaturebox _Dvalue_" value="' + dvalue + '" style="display:none;"  relatedfield="label_' + i + '_Dvalue" >\
                    </div>\
                </div>\
                <div class="signatureItem">\
                    <div class="item_Label addon" style="display:none;"> Addon: </div>\
                    <div id="eefAddon_' + i + '_" class="signatureField thetoggle" relatedfield="label_' + i + '_Addon_" onclick="signature.services.toggle(\'eefAddon_' + i + '_\',\'addon\',\'signature_' + i + '_Addon\',\'label_' + i + '_Addon_\');"><span id="label_' + i + '_Addon_" class="togglelabel" style="display:none;">Addon</span>\
                        <img src="images/toggle_on.png" style="height:23px;width: 50px; display:none;" id="toggle_' + i + '_Addon_on" class="toggleOn">\
                        <img src="images/toggle_off.png" style="height:23px;width: 50px; display:none;" id="toggle_' + i + '_Addon_off" class="toggleOff">\
                        <input name="Addon_' + i + '" type="hidden" id="signature_' + i + '_Addon" class="signaturebox _Addon_" value="' + addon + '">\
                    </div>\
                </div>\
                <div class="signatureItem">\
                    <div class="item_Label status" style="display:none;"> Status: </div>\
                    <div id="eefStatus_' + i + '_" class="signatureField thetoggle" relatedfield="label_' + i + '_Status_" onclick="signature.services.toggle(\'eefStatus_' + i + '_\',\'status\',\'signature_' + i + '_Status\',\'label_' + i + '_Status_\');"><span id="label_' + i + '_Status_" class="togglelabel" style="display:none;">Status</span>\
                        <img src="images/toggle_on.png" style="height:23px;width: 50px; display:none;" id="toggle_' + i + '_Status_on" class="toggleOn">\
                        <img src="images/toggle_off.png" style="height:23px;width: 50px; display:none;" id="toggle_' + i + '_Status_off" class="toggleOff">\
                        <input name="Status_' + i + '" type="hidden" id="signature_' + i + '_Status" class="signaturebox _Status_" value="' + status + '">\
                    </div>\
                </div>\
                <br />\
                <div id="someSpace"></div>\
                \
            </div>\
            <input name="id_' + i + '" type="hidden" id="id_' + i + '" value="' + id + '"/>');
                // <div class="thechild"></div>\
    }, //==============================================
    buildPageFromJSON: function() {
        // signature.services.varUpdate();
        // console.log('buildPageFromJSON');
        //signature.v.recover = JSON.stringify(signature.services.records);
        $('#manage').html('');

        try {
            for(var i = 0;i < signature.services.records.length; i++){

                if (signature.services.records[i].action_del === 'N') {
                    if (signature.services.isChild) {
                        if (signature.services.parent === signature.services.records[i][signature.services.px]) {
                            signature.services.htmlRow(i, signature.services.records[i].field_id, signature.services.records[i].guid, signature.services.records[i].services_staff_type_mid, signature.services.records[i].services_label, signature.services.records[i].services_duration, signature.services.records[i].services_dvalue, signature.services.records[i].services_addon, signature.services.records[i].services_status);
                        }

                    } else {
                        signature.services.htmlRow(i, signature.services.records[i].field_id, signature.services.records[i].guid, signature.services.records[i].services_staff_type_mid, signature.services.records[i].services_label, signature.services.records[i].services_duration, signature.services.records[i].services_dvalue, signature.services.records[i].services_addon, signature.services.records[i].services_status);
                    }
                    
                    // signature.services.htmlRow(i, field_id, first, last, email, certificate, cnt, dvalue, status);
                }
            }
        } catch (err) {}
        signature.services.varUpdate();
        $('.add').remove();
        $('.save').remove();
        $('#manage').append('<br /><br /><br />');
        $('#manage').append('<div class="button add" onclick="signature.services.add();">Add</div>');
        $('#manage').append('<div class="button save" onclick="signature.services.varUpdate();">Save</div>');
        $('#manage').append("<script>$( '.signaturebox' ).focus(function() { signature.services.doThisWhenDone('field_focus', 8000, signature.services.formBlur);signature.services.formFocus($(this).parent().parent().parent().attr('idx'),$(this).attr('id')); });</script>");
        $('#manage').append("<script>$( '.signaturebox' ).blur(function() { signature.services.formBlur(); });</script>");
        $('#manage').append("<script>$( '.thetoggle' ).hover( function() { $('#'+$(this).attr('relatedfield')).css('display','inline-block'); }, function() { $( '.togglelabel' ).css('display','none' ); } );</script>");
        $('#manage').prepend('<div id="thesection">'+signature.services.sectionlabel+'</div>');
        
        signature.services.toggleSwitches();
        signature.services.resolveids();
    }, //==============================================
    runDoThis: function(myLabel) {
        if (typeof signature.v.doThis !== 'undefined') {
            var nowish = start = new Date().getTime();
            var run = false;
            for (var j = 0; j < signature.v.doThis.length; j++) {
                var thisLabel = signature.v.doThis[j].myLabel;
                var thisWait = signature.v.doThis[j].wait;
                var thisStamp = signature.v.doThis[j].stamp;
                if (myLabel === thisLabel) {

                    if ((nowish - thisStamp) > thisWait) {var checkStamp =  true;} else {var checkStamp =  false;}
                    if (checkStamp) {
                        var run = true;
                        var thisLabel = signature.v.doThis[j].myLabel;
                        var thisScript = signature.v.doThis[j].script;
                    }
                }
            }
        }
        if (run) {
            thisScript();
        }
    }, //==============================================
    doThisWhenDone: function(myLabel, waitfor, script) {
        var isNew = true;
        var isFirst = false;
        var stamp = start = new Date().getTime();
        if (typeof signature.v.doThis === 'undefined') {
            var nextID = 0
            signature.v.doThis = new Array();
            signature.v.doThis = [];
            signature.v.doThis.length = 0;
            var isFirst = true;
        } else {
            var nextID = signature.v.doThis.length;
        }
        if (!isFirst) {
            for (var j = 0; j < signature.v.doThis.length; j++) {
                var thisLabel = signature.v.doThis[j].myLabel;
                if (myLabel === thisLabel) {
                    var isNew = false;
                    signature.v.doThis[j] = {
                        myLabel: myLabel,
                        stamp: stamp,
                        wait: waitfor,
                        script: script
                    };
                }
            }
        }
        if (isNew) {

            signature.v.doThis[nextID] = {
                myLabel: myLabel,
                stamp: stamp,
                wait: waitfor,
                script: script
            };
        }
        var waitforAbout = waitfor + 50;
        setTimeout(function() { signature.services.runDoThis(myLabel); }, waitforAbout);

        // signature.services.doThisWhenDone(myLabel, waitfor, script);
    }, //==============================================
    getField: function(guid,field) {
        var result = '';
        if (signature.services.records.length > 0) {

            var keys = Object.keys(signature.services.records[0]);
            for (var i = 0; i < keys.length; i++) {
                if (keys[i].includes(field) && keys[i] !== 'field_id') {
                    var theKey = keys[i];
                }
            }


            for(var i = 0;i < signature.services.records.length; i++){
                if (signature.services.records[i].guid === guid) {
                    var result = signature.services.records[i][theKey];
                }
            }
        } else {
            var result = 'No ' + signature.services.sectionlabel + ' Records';
        }
        
        
        return result;
    }, //==============================================
    guid: function() {
        function s4() {
        return Math.floor((1 + Math.random()) * 0x10000)
            .toString(16)
            .substring(1);
        }
        return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();
    }, //==============================================
    nullFunction: function() {
        //signature.shared.log('null');
    } //==============================================
}
// signature.v.loader = '<div id="loading"><img src="images/dance.gif"></div>';
signature.v.loader = '<div id="loading"><img src="images/gears.gif"></div>';
signature.v.save = '';
signature.v.area = '';
// To Do
// signature.v.save  log save function on blur


signature.weeks = {
    records: [],
    isChild: false,
    parent: '',
    px: '',
    sectionlabel: 'Weeks',
    fieldprefix: 'weeks_',
    del: function(i) {
        try {signature.weeks.records[i].weeks_epoch = $('#signature_' + i + '_Epoch').val();} catch (err) { }
        try { $('#label_' + i + '_Epoch').text(signature.weeks.records[i].weeks_epoch); } catch (err) { }


        signature.weeks.records[i].action_del = 'Y';
        $('#row_' + i).remove();
        $("#unDelete").css('display','inline-block');
        var ix = 0;
        for (var iy = signature.weeks.records.length - 1; iy >= 0; iy--) {
            if (signature.weeks.records[iy].action_del === 'N') {
                ix++;
            }
        }
    }, //==============================================
    dataIn: function() {
        signature.staffType.records = signature.v.tables.staffType;
        signature.staff.records = signature.v.tables.staff;
        signature.services.records = signature.v.tables.services;
        signature.weeks.records = signature.v.tables.weeks;
        signature.weekItems.records = signature.v.tables.weekItems;

    }, //==============================================
    dataOut: function() {
        signature.v.tables = {};
        signature.v.tables['staffType'] = signature.staffType.records;
        signature.v.tables['staff'] = signature.staff.records;
        signature.v.tables['services'] = signature.services.records;
        signature.v.tables['weeks'] = signature.weeks.records;
        signature.v.tables['weekItems'] = signature.weekItems.records;

    }, //==============================================
    weekDateToDate: function(year, week, day) {
      const firstDayOfYear = new Date(year, 0, 1);
      const days = 2 + day + (week - 1) * 7 - firstDayOfYear.getDay();
      return new Date(year, 0, days);
    }, //==============================================
    getWeekNumber: function(d) {
        d = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));
        d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay()||7));
        var yearStart = new Date(Date.UTC(d.getUTCFullYear(),0,1));
        var weekNo = Math.ceil(( ( (d - yearStart) / 86400000) + 1)/7);
        return [d.getUTCFullYear(), weekNo];
        // return weekNo;
    }, //==============================================
    thisweek: function() {
        signature.v.area = 'weeks';
        if (signature.v.save.length > 0) {
            eval(signature.v.save);
        }
        signature.v.save = '';
        var result = signature.weeks.getWeekNumber(new Date());
        signature.v.week = result[1];
        signature.v.year = result[0];
        signature.weeks.displayweek();
        // signature.weeks.thisweek();
    }, //==============================================
    weekup: function() {
        signature.v.week ++;
        signature.weeks.displayweek();
    }, //==============================================
    weekdown: function() {
        signature.v.week --;
        signature.weeks.displayweek();
    }, //==============================================
    epochresolve: function(epoch,datestring) {
        var d = new Date(Number(epoch));
        if (datestring === 'string') {
            var thedate = d.toString().split(' ');
            var result = thedate[0]+' '+thedate[1]+' '+thedate[2]+' '+thedate[3];
        } else {
            var result = d;
        }
        return result;
    }, //==============================================
    displayweek: function() {
        $('#manage').html('<div id="datearea"></div>');
        $('#datearea').append('<br /><br />');
        for (var i = 0; i < 6; i++) {
            var thedate = signature.weeks.weekDateToDate(signature.v.year,signature.v.week,i).toString().split(' ');
            var epoch = signature.weeks.weekDateToDate(signature.v.year,signature.v.week,i).getTime();
            var displaydate = thedate[0]+' '+thedate[1]+' '+thedate[2]+' '+thedate[3];
            $('#datearea').append('<div id="date_'+i+'_day" class="dateitem" epoch="'+epoch+'"><span class="datetitle" onclick="signature.v.selecteddate=\''+epoch+'\';signature.staff.selectpageunspecific(\'\');">'+displaydate+'</span><div class="dayreport"></div></div>');
            // $('#manage').append('<div onclick="signature.v.selecteddate=\''+epoch+'\';signature.staff.selectpageunspecific(\'\');">'+displaydate+' epoch: '+epoch+'</div>');
            if ((i+1) % 3 === 0) {
                $('#datearea').append('<br />');
            }
        }


        signature.v.unspecificpost = 'signature.special.buildPageFromJSON();';
        // signature.v.unspecificpost = 'alert(signature.weeks.epochresolve(signature.v.selecteddate,\'string\') +" "+ signature.v.selecteddate +" "+ signature.weeks.resolveidunspecific(signature.v.selectedguid));';

        $('#manage').prepend('<div id="theweektotals"></div>');
        $('#manage').prepend('<div><div class="button" onclick="signature.weeks.weekdown()" style="padding: 5px">last week</div> &nbsp; <div class="button" onclick="signature.weeks.weekup()" style="padding: 5px">next week</div></div>');
        $('#manage').prepend('<div>'+signature.v.week+'</div>');
        try {
            if (signature.v.cal_script.length > 0) {
                eval(signature.v.cal_script);
            } else {
            }
        } catch (err) {console.log('error');}
    },//==============================================
    refreshselectionunspecific: function() {
        // console.log(signature.v.searchfor);
        var action = signature.v.refreshaction.replace('SEARCHHERE',signature.v.searchfor);
        // console.log(action);
        eval(action);
    },//==============================================
    selectpageunspecific: function(search) {
        $('#selectsomething').remove();
        $('body').append('<div id="selectsomething"><span class="close" onClick="$(\'#selectsomething\').remove();">X</span><div id="selectsomethinginner"><span id="selectheader">'+signature.weeks.sectionlabel+'</span><hr /><input type="text" id="selectsearch" value="'+search+'"><br /><div class="items"></div></div></div>');
        // var labels = [];
        try {
            for (var i = 0; i < signature.weeks.records.length; i++) {
                if (signature.weeks.records[i][signature.weeks.fieldprefix+'status'] === '1') {
                    if (search.length > 0) {
                        if (signature.weeks.records[i]['label'].toLowerCase().includes(search.toLowerCase())) {
                            $('#selectsomething .items').append('<div class="item" guid="'+signature.weeks.records[i]['guid']+'" onclick="signature.v.selectedguid=$(this).attr(\'guid\');$(\'#selectsomething\').remove();eval(signature.v.unspecificpost);">'+signature.weeks.records[i]['label']+'</div>');
                        }
                    } else {
                        $('#selectsomething .items').append('<div class="item" guid="'+signature.weeks.records[i]['guid']+'" onclick="signature.v.selectedguid=$(this).attr(\'guid\');$(\'#selectsomething\').remove();eval(signature.v.unspecificpost);">'+signature.weeks.records[i]['label']+'</div>');
                    }
                    // labels.push({'label':signature.weeks.records[i]['label'], 'guid':signature.weeks.records[i]['guid'], });
                }
            }
        } catch(err) {}
        // for (var i = 0; i < labels.length; i++) {}
        if (signature.weeks.records.length === 0) {
            $('#selectsomething .items').append('<div class="item" >No Records</div>');
            $('#selectsomething .items').append('<div class="item" ></div>');
            $('#selectsomething .items').append('<div class="item button" onClick="signature.weeks.manage();$(\'#selectsomething\').remove();">Add Record</div>');
            $('#selectsearch').remove();
        } else {
            signature.v.refreshaction = 'signature.weeks.selectpageunspecific(\'SEARCHHERE\');';
            $('#selectsomething').append('<script>$("#selectsearch").keyup(function() {signature.v.searchfor = $("#selectsearch").val();signature.weeks.doThisWhenDone("autosearch", 200, signature.weeks.refreshselectionunspecific);});</script>');        
            $('#selectsearch').focusTextToEnd();
        }
    }, //==============================================
    manage: function() {
        signature.v.area = 'weeks';
        if (signature.v.save.length > 0) {
            eval(signature.v.save);
        }
        signature.v.save = 'signature.weeks.varUpdate();';


        if (signature.weeks.isChild) {
            var data = {"field_id":"0","label":"","guid":signature.weeks.guid(),"weeks_epoch":"","action_del":"N"};
            var keys = Object.keys(data);
            for (var i = 0; i < keys.length; i++) {
                if (keys[i].includes('_id') && keys[i] !== 'field_id') {
                    signature.weeks.px = keys[i];
                }
            }
        }

        $('#manage').html('');
        if (signature.weeks.records.length === 0) {
            signature.weeks.add();
        } else {
            signature.weeks.buildPageFromJSON();
        }
        
        // signature.weeks.manage();
    }, //==============================================
    add: function() {
        var data = {"field_id":"0","label":"","guid":signature.weeks.guid(),"weeks_epoch":"","action_del":"N"};

        signature.weeks.varUpdate();
        signature.weeks.records.push(data);
        signature.weeks.buildPageFromJSON();
        return data
    }, //==============================================
    varUpdate: function(id,tog) {
        try {
            for(var i = 0;i < signature.weeks.records.length; i++){
                if (signature.weeks.hasFields()) {
                    try {signature.weeks.records[i].weeks_epoch = $('#signature_' + i + '_Epoch').val();} catch (err) { }
                    try { $('#label_' + i + '_Epoch').text(signature.weeks.records[i].weeks_epoch); } catch (err) { }

                }
            }
        } catch (err) {}
//         try {
//             for(var i = 0;i < signature.weeks.records.length; i++){
//                 if (signature.weeks.hasFields()) {
// [js_HTML_ROW_Val_DEL]
//                 }
//             }
//         } catch (err) {}
        // console.log(signature.weeks.records);
    }, //==============================================
    togglerow: function(id,tog) {
        if (!tog) {
            ans = confirm('Restore?');
        } else {
            ans = confirm('Used?');
        }
        if (ans) {
            window.location.href = '?id=' + id + '&toggle='+tog+'&manage';
        }
    }, //==============================================
    valid: function() {
        var valid = true;
        var ix = 0
        try {
            for (var iy = signature.weeks.records.length - 1; iy >= 0; iy--) {
                if (signature.weeks.records[iy].action_del === 'N') {
                    ix++;
                }
            }
        } catch (err) {}
        try {
            for (var i = 0; i < signature.weeks.records.length; i++) {
                try {
                    if (signature.weeks.records[i].action_del === 'N') {

                        var item = '#signature_' + i + '_Epoch';
                        if ($(item).val().length > 0) {
                            if(isNaN($(item).val())){
                                $(item).css('border-color','crimson');
                                valid = false
                            } else {
                                $(item).css('border-color','');
                            }
                        } else {
                            $(item).css('border-color','crimson');
                            valid = false;
                        }

                    }
                } catch (err) {}
            }
        } catch (err) {}
        return valid
    }, //==============================================
    excel: function() {
        signature.weeks.download('excel.php','certificates.csv');
    }, //==============================================
    download: function(uri, filename) {
        var link = document.createElement('a');
        if (typeof link.download === 'string') {
            document.body.appendChild(link);
            link.download = filename;
            link.href = uri;
            link.click();
            document.body.removeChild(link);
        } else {
            location.replace(uri);
        }
    }, //==============================================
    send: function() {
        if (signature.weeks.valid()) {

            $('body').append(signature.v.loader);

            for (var i = 0; i < signature.weeks.records.length; i++) {
                try {
                    try {signature.weeks.records[i].weeks_epoch = $('#signature_' + i + '_Epoch').val();} catch (err) { }
                    try { $('#label_' + i + '_Epoch').text(signature.weeks.records[i].weeks_epoch); } catch (err) { }


                } catch (err) {}
            }
            $('#JSON').val(JSON.stringify(signature.weeks.records));
            $.post("[js_PHP_FILE_SEND]", $("#form").serialize())
                .done(function(data) {
                    console.log(data);
                    try {
                        signature.weeks.records = JSON.parse(data)


                    } catch (err) {
                        alert('Error');
                    }
                    $('#loading').remove();
                });
        }
    }, //==============================================
    loadJSON: function() {
        if (signature.shared.isLoaded(3)) {
            signature.weeks.buildPageFromJSON();
        } else {
            setTimeout(function() { signature.weeks.loadJSON(); }, 800);
        }
    },//==============================================
    unDelete: function() {
        $("#unDelete").css('display','none');
        for (var i = 0; i < signature.weeks.records.length; i++) {
            try {
                    try {signature.weeks.records[i].weeks_epoch = $('#signature_' + i + '_Epoch').val();} catch (err) { }
                    try { $('#label_' + i + '_Epoch').text(signature.weeks.records[i].weeks_epoch); } catch (err) { }


                signature.weeks.records[i].action_del = 'N';
            } catch(err) {
                signature.weeks.records[i].action_del = 'N';
            }
        }
        //signature.weeks.records = JSON.parse(signature.v.recover);
        signature.weeks.buildPageFromJSON();
    },//==============================================
    hasFields: function() {
        var result = false;
        for (var i = 0; i < signature.weeks.records.length; i++) {
            if ( $( '#signature_' + i + '_Epoch' ).length ) {
                result = true;
            }
        }
        return result;
        // 
    },//==============================================
    resolveidunspecific: function(id) {
        // console.log(idx+' - '+labelid+' - '+id);
        var found = false;
        var label = '';
        if (id.length > 0) {

	        try {
	        	if (!found) {
	        		for (var i = 0; i < signature.staffType.records.length; i++) {
	        			if (signature.staffType.records[i].guid === id) {
	        				label = signature.staffType.records[i]['label'];
	        				found = true;
	        			}
	        		}
	        	}
	        } catch(err) {}

	        try {
	        	if (!found) {
	        		for (var i = 0; i < signature.staff.records.length; i++) {
	        			if (signature.staff.records[i].guid === id) {
	        				label = signature.staff.records[i]['label'];
	        				found = true;
	        			}
	        		}
	        	}
	        } catch(err) {}

	        try {
	        	if (!found) {
	        		for (var i = 0; i < signature.services.records.length; i++) {
	        			if (signature.services.records[i].guid === id) {
	        				label = signature.services.records[i]['label'];
	        				found = true;
	        			}
	        		}
	        	}
	        } catch(err) {}

        }
        // console.log(found,label);
        return label;
        // signature.weeks.resolveids();
    },//==============================================
    resolveid: function(idx,id,labelid) {
        // console.log(idx+' - '+labelid+' - '+id);
        var found = false;
        var label = '';
        if (id.length > 0) {

	        try {
	        	if (!found) {
	        		for (var i = 0; i < signature.staffType.records.length; i++) {
	        			if (signature.staffType.records[i].guid === id) {
	        				label = signature.staffType.records[i]['label'];
	        				found = true;
	        			}
	        		}
	        	}
	        } catch(err) {}

	        try {
	        	if (!found) {
	        		for (var i = 0; i < signature.staff.records.length; i++) {
	        			if (signature.staff.records[i].guid === id) {
	        				label = signature.staff.records[i]['label'];
	        				found = true;
	        			}
	        		}
	        	}
	        } catch(err) {}

	        try {
	        	if (!found) {
	        		for (var i = 0; i < signature.services.records.length; i++) {
	        			if (signature.services.records[i].guid === id) {
	        				label = signature.services.records[i]['label'];
	        				found = true;
	        			}
	        		}
	        	}
	        } catch(err) {}

        }
        // console.log(found,label);
        if (found) {
            $('#'+labelid).text(label);
        }
        // signature.weeks.resolveids();
    },//==============================================
    resolveids: function() {
        $('.resolvethisid').each(function( index ) {
            signature.weeks.resolveid($(this).parent().parent().parent().attr('idx'),$(this).val(),$(this).parent().parent().attr('findlabel'))
        });
    },//==============================================
    formBlur: function() {
        // console.log('formBlur');
        if (signature.v.area !== 'timelog') {
            if ( $('#'+signature.v.lastID).hasClass('_Epoch_') && $('#'+signature.v.lastID).val() === '') { $('#'+signature.v.lastID).val('Epoch') }

            signature.weeks.varUpdate();
            $('.itemLabel').css('display','inline-block');
            $('input').css('display','none');
        }
    },//==============================================
    toggleSwitches: function() {
        signature.weeks.varUpdate();
        for (var i = 0; i < signature.weeks.records.length; i++) {
            try {
                if (signature.weeks.records[i].action_del === 'N') {

                }

            } catch(err) {}
        }
    },//==============================================
    toggle: function(p,field,vid,lid) {
        // console.log($('#'+vid).val());
        if ($('#'+vid).val() === '1') {
            $('#'+vid).val(0);
            $('#'+p+' .toggleOn').css('display','none');
            $('#'+p+' .toggleOff').css('display','inline-block');
        } else {
            $('#'+vid).val(1);
            $('#'+p+' .toggleOn').css('display','inline-block');
            $('#'+p+' .toggleOff').css('display','none');
        }
    },//==============================================
    selected: function(i,label,tbl,field,vid,lid,tableLabel) {
        $('#selectsomething').remove();
        $('#'+vid).val(signature.weeks.records[i]['guid'])
        $('#'+lid).text(signature.weeks.records[i]['label']);
    },//==============================================
    refreshselection: function() {
        // console.log(signature.v.searchfor);
        var action = signature.v.refreshaction.replace('SEARCHHERE',signature.v.searchfor);
        // console.log(action);
        eval(action);
    },//==============================================
    selectpage: function(label,tbl,field,vid,lid,tableLabel,search) {
        $('#selectsomething').remove();
        $('body').append('<div id="selectsomething"><span class="close" onClick="$(\'#selectsomething\').remove();">X</span><div id="selectsomethinginner"><span id="selectheader">'+label+'</span><hr /><input type="text" id="selectsearch" value="'+search+'"><br /><div class="items"></div></div></div>');
        var labels = [];
        try {
            for (var i = 0; i < signature.weeks.records.length; i++) {
                if (signature.weeks.records[i][signature.weeks.fieldprefix+'status'] === '1') {
                    labels.push(signature.weeks.records[i]['label']);
                }
            }
        } catch(err) {}
        for (var i = 0; i < labels.length; i++) {
            if (search.length > 0) {
                if (labels[i].includes(search)) {
                    $('#selectsomething .items').append('<div class="item" onclick="signature.weeks.selected(\''+i+'\',\''+label+'\',\''+tbl+'\',\''+field+'\',\''+vid+'\',\''+lid+'\',\''+tableLabel+'\');">'+labels[i]+'</div>');
                }
            } else {
                $('#selectsomething .items').append('<div class="item" onclick="signature.weeks.selected(\''+i+'\',\''+label+'\',\''+tbl+'\',\''+field+'\',\''+vid+'\',\''+lid+'\',\''+tableLabel+'\');">'+labels[i]+'</div>');
            }
        }
        if (labels.length === 0) {
            $('#selectsomething .items').append('<div class="item" >No Records</div>');
            $('#selectsomething .items').append('<div class="item" ></div>');
            $('#selectsomething .items').append('<div class="item button" onClick="signature.weeks.manage();$(\'#selectsomething\').remove();">Add Record</div>');
            $('#selectsearch').remove();
        } else {
            signature.v.refreshaction = 'signature.'+tbl+'.selectpage(\''+label+'\',\''+tbl+'\',\''+field+'\',\''+vid+'\',\''+lid+'\',\''+tableLabel+'\',\'SEARCHHERE\');';
            $('#selectsomething').append('<script>$("#selectsearch").keyup(function() {signature.v.searchfor = $("#selectsearch").val();signature.weeks.doThisWhenDone("autosearch", 200, signature.weeks.refreshselection);});</script>');
            $('#selectsearch').focusTextToEnd();
        }
    },//==============================================
    select: function(label,tbl,field,vid,lid,tableLabel) {
        // alert(label+' '+tbl);
        // console.log('1');
        var taskAction = 'signature.'+tbl+'.selectpage(\''+label+'\',\''+tbl+'\',\''+field+'\',\''+vid+'\',\''+lid+'\',\''+tableLabel+'\',\'\');';
        // console.log('2');
        eval(taskAction);
        // console.log(taskAction)
        // console.log('3');
    },//==============================================
    formFocus: function(idx,id) {
        signature.v.lastID = id;
        signature.v.lastIDX = idx;
        if ('signature_'+idx+'_Epoch' === id && $('#'+id).val() === 'Epoch') { $('#'+id).val('') }

    },//==============================================
    managechildren: function(guid) {
        // console.log(guid);
        // $('.thechild').remove();
        // $('.managechildrenbutton').remove();
        // $('.certItemParent').each(function( index ) {
        //     console.log('each - '+$(this).attr('guid'));
        //     if ($(this).attr('guid') !== guid) {
        //         console.log('not match');
        //         $(this).remove();
        //     }
        // });
        // $("[guid='"+guid+"']").append('<div class="thechild"></div>');
        signature.weekItems.parent = guid;  signature.weekItems.manage();


        // console.log('done');
    },//==============================================
    saveThenOpen: function() {
        signature.shared.close();
        signature.shared.runWhen(null, 'closed', function(){signature.weeks.obj.edit();});
    }, //==============================================
    htmlRow: function(i, id, guid, epoch) {
            if (typeof i === 'undefined') {
                i = signature.weeks.records.length - 1;
            }
            if (typeof id === 'undefined') {
                id = 0;
            }
            
            if (typeof epoch === 'undefined') { epoch = ''; }


            if (epoch === '') { epoch = 'Epoch'; }


            $('#manage').append('\
            <div id="row_' + i + '" class="certItemParent certItem" idx="' + i + '" guid="' + guid + '" onblur="$(\'.morebutton\').css(\'display\',\'inline-block\');$(\'.more\').css(\'display\',\'none\');">\
                <div id="eDelete' + i + '" class="eDelete" title="delete" onClick="signature.weeks.del(' + i + ');">\
                   <img src="images/delete.png">\
                </div>\
                <div class="signatureItem">\
                    <div id="label_' + i + '_Epoch" class="itemLabel epoch" onclick="signature.weeks.doThisWhenDone(\'field_focus\', 8000, signature.weeks.formBlur);signature.weeks.varUpdate();$(\'.itemLabel\').css(\'display\',\'inline-block\');$(\'input\').css(\'display\',\'none\');$(\'#\'+$(this).attr(\'relatedfield\')).css(\'display\',\'inline-block\');$(this).css(\'display\',\'none\');" relatedfield="signature_' + i + '_Epoch"> Epoch: </div>\
                    <div id="eefEpoch" class="signatureField">\
                        <input name="Epoch_' + i + '" type="text" id="signature_' + i + '_Epoch" class="signaturebox _Epoch_" value="' + epoch + '" style="display:none;"  relatedfield="label_' + i + '_Epoch" >\
                    </div>\
                </div>\
                <br />\
                <div id="someSpace"></div>\
                <div class="button managechildrenbutton" onclick="signature.weeks.managechildren(\'' + guid + '\')">Manage This</div><hr />\
            </div>\
            <input name="id_' + i + '" type="hidden" id="id_' + i + '" value="' + id + '"/>');
                // <div class="thechild"></div>\
    }, //==============================================
    buildPageFromJSON: function() {
        // signature.weeks.varUpdate();
        // console.log('buildPageFromJSON');
        //signature.v.recover = JSON.stringify(signature.weeks.records);
        $('#manage').html('');

        try {
            for(var i = 0;i < signature.weeks.records.length; i++){

                if (signature.weeks.records[i].action_del === 'N') {
                    if (signature.weeks.isChild) {
                        if (signature.weeks.parent === signature.weeks.records[i][signature.weeks.px]) {
                            signature.weeks.htmlRow(i, signature.weeks.records[i].field_id, signature.weeks.records[i].guid, signature.weeks.records[i].weeks_epoch);
                        }

                    } else {
                        signature.weeks.htmlRow(i, signature.weeks.records[i].field_id, signature.weeks.records[i].guid, signature.weeks.records[i].weeks_epoch);
                    }
                    
                    // signature.weeks.htmlRow(i, field_id, first, last, email, certificate, cnt, dvalue, status);
                }
            }
        } catch (err) {}
        signature.weeks.varUpdate();
        $('.add').remove();
        $('.save').remove();
        $('#manage').append('<br /><br /><br />');
        $('#manage').append('<div class="button add" onclick="signature.weeks.add();">Add</div>');
        $('#manage').append('<div class="button save" onclick="signature.weeks.varUpdate();">Save</div>');
        $('#manage').append("<script>$( '.signaturebox' ).focus(function() { signature.weeks.doThisWhenDone('field_focus', 8000, signature.weeks.formBlur);signature.weeks.formFocus($(this).parent().parent().parent().attr('idx'),$(this).attr('id')); });</script>");
        $('#manage').append("<script>$( '.signaturebox' ).blur(function() { signature.weeks.formBlur(); });</script>");
        $('#manage').append("<script>$( '.thetoggle' ).hover( function() { $('#'+$(this).attr('relatedfield')).css('display','inline-block'); }, function() { $( '.togglelabel' ).css('display','none' ); } );</script>");
        $('#manage').prepend('<div id="thesection">'+signature.weeks.sectionlabel+'</div>');
        
        signature.weeks.toggleSwitches();
        signature.weeks.resolveids();
    }, //==============================================
    runDoThis: function(myLabel) {
        if (typeof signature.v.doThis !== 'undefined') {
            var nowish = start = new Date().getTime();
            var run = false;
            for (var j = 0; j < signature.v.doThis.length; j++) {
                var thisLabel = signature.v.doThis[j].myLabel;
                var thisWait = signature.v.doThis[j].wait;
                var thisStamp = signature.v.doThis[j].stamp;
                if (myLabel === thisLabel) {

                    if ((nowish - thisStamp) > thisWait) {var checkStamp =  true;} else {var checkStamp =  false;}
                    if (checkStamp) {
                        var run = true;
                        var thisLabel = signature.v.doThis[j].myLabel;
                        var thisScript = signature.v.doThis[j].script;
                    }
                }
            }
        }
        if (run) {
            thisScript();
        }
    }, //==============================================
    doThisWhenDone: function(myLabel, waitfor, script) {
        var isNew = true;
        var isFirst = false;
        var stamp = start = new Date().getTime();
        if (typeof signature.v.doThis === 'undefined') {
            var nextID = 0
            signature.v.doThis = new Array();
            signature.v.doThis = [];
            signature.v.doThis.length = 0;
            var isFirst = true;
        } else {
            var nextID = signature.v.doThis.length;
        }
        if (!isFirst) {
            for (var j = 0; j < signature.v.doThis.length; j++) {
                var thisLabel = signature.v.doThis[j].myLabel;
                if (myLabel === thisLabel) {
                    var isNew = false;
                    signature.v.doThis[j] = {
                        myLabel: myLabel,
                        stamp: stamp,
                        wait: waitfor,
                        script: script
                    };
                }
            }
        }
        if (isNew) {

            signature.v.doThis[nextID] = {
                myLabel: myLabel,
                stamp: stamp,
                wait: waitfor,
                script: script
            };
        }
        var waitforAbout = waitfor + 50;
        setTimeout(function() { signature.weeks.runDoThis(myLabel); }, waitforAbout);

        // signature.weeks.doThisWhenDone(myLabel, waitfor, script);
    }, //==============================================
    getField: function(guid,field) {
        var result = '';
        if (signature.weeks.records.length > 0) {

            var keys = Object.keys(signature.weeks.records[0]);
            for (var i = 0; i < keys.length; i++) {
                if (keys[i].includes(field) && keys[i] !== 'field_id') {
                    var theKey = keys[i];
                }
            }


            for(var i = 0;i < signature.weeks.records.length; i++){
                if (signature.weeks.records[i].guid === guid) {
                    var result = signature.weeks.records[i][theKey];
                }
            }
        } else {
            var result = 'No ' + signature.weeks.sectionlabel + ' Records';
        }
        
        
        return result;
    }, //==============================================
    guid: function() {
        function s4() {
        return Math.floor((1 + Math.random()) * 0x10000)
            .toString(16)
            .substring(1);
        }
        return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();
    }, //==============================================
    nullFunction: function() {
        //signature.shared.log('null');
    } //==============================================
}
// signature.v.loader = '<div id="loading"><img src="images/dance.gif"></div>';
signature.v.loader = '<div id="loading"><img src="images/gears.gif"></div>';
signature.v.save = '';
signature.v.area = '';
// To Do
// signature.v.save  log save function on blur


signature.weekItems = {
    records: [],
    isChild: true,
    parent: '',
    px: '',
    sectionlabel: 'Week Items',
    fieldprefix: 'week_items_',
    del: function(i) {
        try {signature.weekItems.records[i].week_items_weeks_id = $('#signature_' + i + '_Weeks_Id').val();} catch (err) { }
        try {signature.weekItems.records[i].week_items_services_mid = $('#signature_' + i + '_Services_Mid').val();} catch (err) { }
        try {signature.weekItems.records[i].week_items_staff_mid = $('#signature_' + i + '_Staff_Mid').val();} catch (err) { }
        try {signature.weekItems.records[i].week_items_epoch = $('#signature_' + i + '_Epoch').val();} catch (err) { }
        try { $('#label_' + i + '_Epoch').text(signature.weekItems.records[i].week_items_epoch); } catch (err) { }
        try {signature.weekItems.records[i].week_items_woy = $('#signature_' + i + '_Woy').val();} catch (err) { }
        try { $('#label_' + i + '_Woy').text(signature.weekItems.records[i].week_items_woy); } catch (err) { }
        try {signature.weekItems.records[i].week_items_dvalue = $('#signature_' + i + '_Dvalue').val();} catch (err) { }
        try { $('#label_' + i + '_Dvalue').text(signature.weekItems.records[i].week_items_dvalue); } catch (err) { }
        try {signature.weekItems.records[i].week_items_cnt = $('#signature_' + i + '_Cnt').val();} catch (err) { }
        try { $('#label_' + i + '_Cnt').text(signature.weekItems.records[i].week_items_cnt); } catch (err) { }
        try {signature.weekItems.records[i].week_items_duration = $('#signature_' + i + '_Duration').val();} catch (err) { }
        try { $('#label_' + i + '_Duration').text(signature.weekItems.records[i].week_items_duration); } catch (err) { }
        try {signature.weekItems.records[i].week_items_custom = $('#signature_' + i + '_Custom').val();} catch (err) { }
        try {signature.weekItems.records[i].week_items_status = $('#signature_' + i + '_Status').val();} catch (err) { }


        signature.weekItems.records[i].action_del = 'Y';
        $('#row_' + i).remove();
        $("#unDelete").css('display','inline-block');
        var ix = 0;
        for (var iy = signature.weekItems.records.length - 1; iy >= 0; iy--) {
            if (signature.weekItems.records[iy].action_del === 'N') {
                ix++;
            }
        }
    }, //==============================================
    dataIn: function() {
        signature.staffType.records = signature.v.tables.staffType;
        signature.staff.records = signature.v.tables.staff;
        signature.services.records = signature.v.tables.services;
        signature.weeks.records = signature.v.tables.weeks;
        signature.weekItems.records = signature.v.tables.weekItems;

    }, //==============================================
    dataOut: function() {
        signature.v.tables = {};
        signature.v.tables['staffType'] = signature.staffType.records;
        signature.v.tables['staff'] = signature.staff.records;
        signature.v.tables['services'] = signature.services.records;
        signature.v.tables['weeks'] = signature.weeks.records;
        signature.v.tables['weekItems'] = signature.weekItems.records;

    }, //==============================================
    weekDateToDate: function(year, week, day) {
      const firstDayOfYear = new Date(year, 0, 1);
      const days = 2 + day + (week - 1) * 7 - firstDayOfYear.getDay();
      return new Date(year, 0, days);
    }, //==============================================
    getWeekNumber: function(d) {
        d = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));
        d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay()||7));
        var yearStart = new Date(Date.UTC(d.getUTCFullYear(),0,1));
        var weekNo = Math.ceil(( ( (d - yearStart) / 86400000) + 1)/7);
        return [d.getUTCFullYear(), weekNo];
        // return weekNo;
    }, //==============================================
    thisweek: function() {
        signature.v.area = 'weeks';
        if (signature.v.save.length > 0) {
            eval(signature.v.save);
        }
        signature.v.save = '';
        var result = signature.weekItems.getWeekNumber(new Date());
        signature.v.week = result[1];
        signature.v.year = result[0];
        signature.weekItems.displayweek();
        // signature.weekItems.thisweek();
    }, //==============================================
    weekup: function() {
        signature.v.week ++;
        signature.weekItems.displayweek();
    }, //==============================================
    weekdown: function() {
        signature.v.week --;
        signature.weekItems.displayweek();
    }, //==============================================
    epochresolve: function(epoch,datestring) {
        var d = new Date(Number(epoch));
        if (datestring === 'string') {
            var thedate = d.toString().split(' ');
            var result = thedate[0]+' '+thedate[1]+' '+thedate[2]+' '+thedate[3];
        } else {
            var result = d;
        }
        return result;
    }, //==============================================
    displayweek: function() {
        $('#manage').html('<div id="datearea"></div>');
        $('#datearea').append('<br /><br />');
        for (var i = 0; i < 6; i++) {
            var thedate = signature.weekItems.weekDateToDate(signature.v.year,signature.v.week,i).toString().split(' ');
            var epoch = signature.weekItems.weekDateToDate(signature.v.year,signature.v.week,i).getTime();
            var displaydate = thedate[0]+' '+thedate[1]+' '+thedate[2]+' '+thedate[3];
            $('#datearea').append('<div id="date_'+i+'_day" class="dateitem" epoch="'+epoch+'"><span class="datetitle" onclick="signature.v.selecteddate=\''+epoch+'\';signature.staff.selectpageunspecific(\'\');">'+displaydate+'</span><div class="dayreport"></div></div>');
            // $('#manage').append('<div onclick="signature.v.selecteddate=\''+epoch+'\';signature.staff.selectpageunspecific(\'\');">'+displaydate+' epoch: '+epoch+'</div>');
            if ((i+1) % 3 === 0) {
                $('#datearea').append('<br />');
            }
        }


        signature.v.unspecificpost = 'signature.special.buildPageFromJSON();';
        // signature.v.unspecificpost = 'alert(signature.weekItems.epochresolve(signature.v.selecteddate,\'string\') +" "+ signature.v.selecteddate +" "+ signature.weekItems.resolveidunspecific(signature.v.selectedguid));';

        $('#manage').prepend('<div id="theweektotals"></div>');
        $('#manage').prepend('<div><div class="button" onclick="signature.weekItems.weekdown()" style="padding: 5px">last week</div> &nbsp; <div class="button" onclick="signature.weekItems.weekup()" style="padding: 5px">next week</div></div>');
        $('#manage').prepend('<div>'+signature.v.week+'</div>');
        try {
            if (signature.v.cal_script.length > 0) {
                eval(signature.v.cal_script);
            } else {
            }
        } catch (err) {console.log('error');}
    },//==============================================
    refreshselectionunspecific: function() {
        // console.log(signature.v.searchfor);
        var action = signature.v.refreshaction.replace('SEARCHHERE',signature.v.searchfor);
        // console.log(action);
        eval(action);
    },//==============================================
    selectpageunspecific: function(search) {
        $('#selectsomething').remove();
        $('body').append('<div id="selectsomething"><span class="close" onClick="$(\'#selectsomething\').remove();">X</span><div id="selectsomethinginner"><span id="selectheader">'+signature.weekItems.sectionlabel+'</span><hr /><input type="text" id="selectsearch" value="'+search+'"><br /><div class="items"></div></div></div>');
        // var labels = [];
        try {
            for (var ii = 0; ii < signature.staff.records.length; ii++) {
                var firstX = true;
                for (var i = 0; i < signature.weekItems.records.length; i++) {
                    if (signature.weekItems.records[i][signature.weekItems.fieldprefix+'status'] === '1' && signature.staff.records[ii].guid == signature.weekItems.records[i].week_items_staff_mid) {
                        if (search.length > 0) {
                            if (signature.weekItems.records[i]['label'].toLowerCase().includes(search.toLowerCase())) {
                                if (firstX) {
                                    var firstX = false;
                                    $('#selectsomething .items').append('<div class="grouplabel" style="text-align: left; font-size: 80%; font-weight: 700;">'+signature.staff.records[ii]['label']+'</div>');
                                }
                                $('#selectsomething .items').append('<div class="item" guid="'+signature.weekItems.records[i]['guid']+'" onclick="signature.v.selectedguid=$(this).attr(\'guid\');$(\'#selectsomething\').remove();eval(signature.v.unspecificpost);">'+signature.weekItems.records[i]['label']+'</div>');
                            }
                        } else {
                            if (firstX) {
                                var firstX = false;
                                $('#selectsomething .items').append('<div class="grouplabel" style="text-align: left; font-size: 80%; font-weight: 700;">'+signature.staff.records[ii]['label']+'</div>');
                            }
                            $('#selectsomething .items').append('<div class="item" guid="'+signature.weekItems.records[i]['guid']+'" onclick="signature.v.selectedguid=$(this).attr(\'guid\');$(\'#selectsomething\').remove();eval(signature.v.unspecificpost);">'+signature.weekItems.records[i]['label']+'</div>');
                        }
                        // labels.push({'label':signature.weekItems.records[i]['label'], 'guid':signature.weekItems.records[i]['guid'], });
                    }
                }
            }
        } catch(err) {}

        // for (var i = 0; i < labels.length; i++) {}
        if (signature.weekItems.records.length === 0) {
            $('#selectsomething .items').append('<div class="item" >No Records</div>');
            $('#selectsomething .items').append('<div class="item" ></div>');
            $('#selectsomething .items').append('<div class="item button" onClick="signature.weekItems.manage();$(\'#selectsomething\').remove();">Add Record</div>');
            $('#selectsearch').remove();
        } else {
            signature.v.refreshaction = 'signature.weekItems.selectpageunspecific(\'SEARCHHERE\');';
            $('#selectsomething').append('<script>$("#selectsearch").keyup(function() {signature.v.searchfor = $("#selectsearch").val();signature.weekItems.doThisWhenDone("autosearch", 200, signature.weekItems.refreshselectionunspecific);});</script>');        
            $('#selectsearch').focusTextToEnd();
        }
    }, //==============================================
    manage: function() {
        signature.v.area = 'weekItems';
        if (signature.v.save.length > 0) {
            eval(signature.v.save);
        }
        signature.v.save = 'signature.weekItems.varUpdate();';


        if (signature.weekItems.isChild) {
            var data = {"field_id":"0","label":"","guid":signature.weekItems.guid(),"week_items_weeks_id":signature.weekItems.parent,"week_items_services_mid":"","week_items_staff_mid":"","week_items_epoch":"","week_items_woy":"","week_items_dvalue":"","week_items_cnt":"","week_items_duration":"","week_items_custom":"0","week_items_status":"1","action_del":"N"};
            var keys = Object.keys(data);
            for (var i = 0; i < keys.length; i++) {
                if (keys[i].includes('_id') && keys[i] !== 'field_id') {
                    signature.weekItems.px = keys[i];
                }
            }
        }

        $('#manage').html('');
        if (signature.weekItems.records.length === 0) {
            signature.weekItems.add();
        } else {
            signature.weekItems.buildPageFromJSON();
        }
        
        // signature.weekItems.manage();
    }, //==============================================
    add: function() {
        var data = {"field_id":"0","label":"","guid":signature.weekItems.guid(),"week_items_weeks_id":signature.weekItems.parent,"week_items_services_mid":"","week_items_staff_mid":"","week_items_epoch":"","week_items_woy":"","week_items_dvalue":"","week_items_cnt":"","week_items_duration":"","week_items_custom":"0","week_items_status":"1","action_del":"N"};

        signature.weekItems.varUpdate();
        signature.weekItems.records.push(data);
        signature.weekItems.buildPageFromJSON();
        return data
    }, //==============================================
    varUpdate: function(id,tog) {
        try {
            for(var i = 0;i < signature.weekItems.records.length; i++){
                if (signature.weekItems.hasFields()) {
                    try {signature.weekItems.records[i].week_items_weeks_id = $('#signature_' + i + '_Weeks_Id').val();} catch (err) { }
                    try {signature.weekItems.records[i].week_items_services_mid = $('#signature_' + i + '_Services_Mid').val();} catch (err) { }
                    try {signature.weekItems.records[i].week_items_staff_mid = $('#signature_' + i + '_Staff_Mid').val();} catch (err) { }
                    try {signature.weekItems.records[i].week_items_epoch = $('#signature_' + i + '_Epoch').val();} catch (err) { }
                    try { $('#label_' + i + '_Epoch').text(signature.weekItems.records[i].week_items_epoch); } catch (err) { }
                    try {signature.weekItems.records[i].week_items_woy = $('#signature_' + i + '_Woy').val();} catch (err) { }
                    try { $('#label_' + i + '_Woy').text(signature.weekItems.records[i].week_items_woy); } catch (err) { }
                    try {signature.weekItems.records[i].week_items_dvalue = $('#signature_' + i + '_Dvalue').val();} catch (err) { }
                    try { $('#label_' + i + '_Dvalue').text(signature.weekItems.records[i].week_items_dvalue); } catch (err) { }
                    try {signature.weekItems.records[i].week_items_cnt = $('#signature_' + i + '_Cnt').val();} catch (err) { }
                    try { $('#label_' + i + '_Cnt').text(signature.weekItems.records[i].week_items_cnt); } catch (err) { }
                    try {signature.weekItems.records[i].week_items_duration = $('#signature_' + i + '_Duration').val();} catch (err) { }
                    try { $('#label_' + i + '_Duration').text(signature.weekItems.records[i].week_items_duration); } catch (err) { }
                    try {signature.weekItems.records[i].week_items_custom = $('#signature_' + i + '_Custom').val();} catch (err) { }
                    try {signature.weekItems.records[i].week_items_status = $('#signature_' + i + '_Status').val();} catch (err) { }

                }
            }
        } catch (err) {}
//         try {
//             for(var i = 0;i < signature.weekItems.records.length; i++){
//                 if (signature.weekItems.hasFields()) {
// [js_HTML_ROW_Val_DEL]
//                 }
//             }
//         } catch (err) {}
        // console.log(signature.weekItems.records);
    }, //==============================================
    togglerow: function(id,tog) {
        if (!tog) {
            ans = confirm('Restore?');
        } else {
            ans = confirm('Used?');
        }
        if (ans) {
            window.location.href = '?id=' + id + '&toggle='+tog+'&manage';
        }
    }, //==============================================
    valid: function() {
        var valid = true;
        var ix = 0
        try {
            for (var iy = signature.weekItems.records.length - 1; iy >= 0; iy--) {
                if (signature.weekItems.records[iy].action_del === 'N') {
                    ix++;
                }
            }
        } catch (err) {}
        try {
            for (var i = 0; i < signature.weekItems.records.length; i++) {
                try {
                    if (signature.weekItems.records[i].action_del === 'N') {

                        var item = '#signature_' + i + '_Weeks_Id';
                        if ($(item).val().length) {
                            $(item).css('border-color','');
                        } else {
                            $(item).css('border-color','crimson');
                            valid = false;
                        }

                        var item = '#signature_' + i + '_Services_Mid';
                        if ($(item).val().length) {
                            $(item).css('border-color','');
                        } else {
                            $(item).css('border-color','crimson');
                            valid = false;
                        }

                        var item = '#signature_' + i + '_Staff_Mid';
                        if ($(item).val().length) {
                            $(item).css('border-color','');
                        } else {
                            $(item).css('border-color','crimson');
                            valid = false;
                        }

                        var item = '#signature_' + i + '_Epoch';
                        if ($(item).val().length > 0) {
                            if(isNaN($(item).val())){
                                $(item).css('border-color','crimson');
                                valid = false
                            } else {
                                $(item).css('border-color','');
                            }
                        } else {
                            $(item).css('border-color','crimson');
                            valid = false;
                        }

                        var item = '#signature_' + i + '_Woy';
                        if ($(item).val().length > 0) {
                            if(isNaN($(item).val())){
                                $(item).css('border-color','crimson');
                                valid = false
                            } else {
                                $(item).css('border-color','');
                            }
                        } else {
                            $(item).css('border-color','crimson');
                            valid = false;
                        }

                        var item = '#signature_' + i + '_Dvalue';
                        if ($(item).val().length > 0) {
                            if(isNaN($(item).val())){
                                $(item).css('border-color','crimson');
                                valid = false
                            } else {
                                $(item).css('border-color','');
                            }
                        } else {
                            $(item).css('border-color','crimson');
                            valid = false;
                        }

                        var item = '#signature_' + i + '_Cnt';
                        if ($(item).val().length > 0) {
                            if(isNaN($(item).val())){
                                $(item).css('border-color','crimson');
                                valid = false
                            } else {
                                $(item).css('border-color','');
                            }
                        } else {
                            $(item).css('border-color','crimson');
                            valid = false;
                        }

                        var item = '#signature_' + i + '_Duration';
                        if ($(item).val().length > 0) {
                            if(isNaN($(item).val())){
                                $(item).css('border-color','crimson');
                                valid = false
                            } else {
                                $(item).css('border-color','');
                            }
                        } else {
                            $(item).css('border-color','crimson');
                            valid = false;
                        }

                        var item = '#signature_' + i + '_Custom';
                        if ($(item).val().length > 0) {
                            if(isNaN($(item).val())){
                                $(item).css('border-color','crimson');
                                valid = false
                            } else {
                                $(item).css('border-color','');
                            }
                        } else {
                            $(item).css('border-color','crimson');
                            valid = false;
                        }

                        var item = '#signature_' + i + '_Status';
                        if ($(item).val().length > 0) {
                            if(isNaN($(item).val())){
                                $(item).css('border-color','crimson');
                                valid = false
                            } else {
                                $(item).css('border-color','');
                            }
                        } else {
                            $(item).css('border-color','crimson');
                            valid = false;
                        }

                    }
                } catch (err) {}
            }
        } catch (err) {}
        return valid
    }, //==============================================
    excel: function() {
        signature.weekItems.download('excel.php','certificates.csv');
    }, //==============================================
    download: function(uri, filename) {
        var link = document.createElement('a');
        if (typeof link.download === 'string') {
            document.body.appendChild(link);
            link.download = filename;
            link.href = uri;
            link.click();
            document.body.removeChild(link);
        } else {
            location.replace(uri);
        }
    }, //==============================================
    send: function() {
        if (signature.weekItems.valid()) {

            $('body').append(signature.v.loader);

            for (var i = 0; i < signature.weekItems.records.length; i++) {
                try {
                    try {signature.weekItems.records[i].week_items_weeks_id = $('#signature_' + i + '_Weeks_Id').val();} catch (err) { }
                    try {signature.weekItems.records[i].week_items_services_mid = $('#signature_' + i + '_Services_Mid').val();} catch (err) { }
                    try {signature.weekItems.records[i].week_items_staff_mid = $('#signature_' + i + '_Staff_Mid').val();} catch (err) { }
                    try {signature.weekItems.records[i].week_items_epoch = $('#signature_' + i + '_Epoch').val();} catch (err) { }
                    try { $('#label_' + i + '_Epoch').text(signature.weekItems.records[i].week_items_epoch); } catch (err) { }
                    try {signature.weekItems.records[i].week_items_woy = $('#signature_' + i + '_Woy').val();} catch (err) { }
                    try { $('#label_' + i + '_Woy').text(signature.weekItems.records[i].week_items_woy); } catch (err) { }
                    try {signature.weekItems.records[i].week_items_dvalue = $('#signature_' + i + '_Dvalue').val();} catch (err) { }
                    try { $('#label_' + i + '_Dvalue').text(signature.weekItems.records[i].week_items_dvalue); } catch (err) { }
                    try {signature.weekItems.records[i].week_items_cnt = $('#signature_' + i + '_Cnt').val();} catch (err) { }
                    try { $('#label_' + i + '_Cnt').text(signature.weekItems.records[i].week_items_cnt); } catch (err) { }
                    try {signature.weekItems.records[i].week_items_duration = $('#signature_' + i + '_Duration').val();} catch (err) { }
                    try { $('#label_' + i + '_Duration').text(signature.weekItems.records[i].week_items_duration); } catch (err) { }
                    try {signature.weekItems.records[i].week_items_custom = $('#signature_' + i + '_Custom').val();} catch (err) { }
                    try {signature.weekItems.records[i].week_items_status = $('#signature_' + i + '_Status').val();} catch (err) { }


                } catch (err) {}
            }
            $('#JSON').val(JSON.stringify(signature.weekItems.records));
            $.post("[js_PHP_FILE_SEND]", $("#form").serialize())
                .done(function(data) {
                    console.log(data);
                    try {
                        signature.weekItems.records = JSON.parse(data)


                    } catch (err) {
                        alert('Error');
                    }
                    $('#loading').remove();
                });
        }
    }, //==============================================
    loadJSON: function() {
        if (signature.shared.isLoaded(3)) {
            signature.weekItems.buildPageFromJSON();
        } else {
            setTimeout(function() { signature.weekItems.loadJSON(); }, 800);
        }
    },//==============================================
    unDelete: function() {
        $("#unDelete").css('display','none');
        for (var i = 0; i < signature.weekItems.records.length; i++) {
            try {
                    try {signature.weekItems.records[i].week_items_weeks_id = $('#signature_' + i + '_Weeks_Id').val();} catch (err) { }
                    try {signature.weekItems.records[i].week_items_services_mid = $('#signature_' + i + '_Services_Mid').val();} catch (err) { }
                    try {signature.weekItems.records[i].week_items_staff_mid = $('#signature_' + i + '_Staff_Mid').val();} catch (err) { }
                    try {signature.weekItems.records[i].week_items_epoch = $('#signature_' + i + '_Epoch').val();} catch (err) { }
                    try { $('#label_' + i + '_Epoch').text(signature.weekItems.records[i].week_items_epoch); } catch (err) { }
                    try {signature.weekItems.records[i].week_items_woy = $('#signature_' + i + '_Woy').val();} catch (err) { }
                    try { $('#label_' + i + '_Woy').text(signature.weekItems.records[i].week_items_woy); } catch (err) { }
                    try {signature.weekItems.records[i].week_items_dvalue = $('#signature_' + i + '_Dvalue').val();} catch (err) { }
                    try { $('#label_' + i + '_Dvalue').text(signature.weekItems.records[i].week_items_dvalue); } catch (err) { }
                    try {signature.weekItems.records[i].week_items_cnt = $('#signature_' + i + '_Cnt').val();} catch (err) { }
                    try { $('#label_' + i + '_Cnt').text(signature.weekItems.records[i].week_items_cnt); } catch (err) { }
                    try {signature.weekItems.records[i].week_items_duration = $('#signature_' + i + '_Duration').val();} catch (err) { }
                    try { $('#label_' + i + '_Duration').text(signature.weekItems.records[i].week_items_duration); } catch (err) { }
                    try {signature.weekItems.records[i].week_items_custom = $('#signature_' + i + '_Custom').val();} catch (err) { }
                    try {signature.weekItems.records[i].week_items_status = $('#signature_' + i + '_Status').val();} catch (err) { }


                signature.weekItems.records[i].action_del = 'N';
            } catch(err) {
                signature.weekItems.records[i].action_del = 'N';
            }
        }
        //signature.weekItems.records = JSON.parse(signature.v.recover);
        signature.weekItems.buildPageFromJSON();
    },//==============================================
    hasFields: function() {
        var result = false;
        for (var i = 0; i < signature.weekItems.records.length; i++) {
            if ( $( '#signature_' + i + '_Weeks_Id' ).length ) {
                result = true;
            }
        }
        return result;
        // 
    },//==============================================
    resolveidunspecific: function(id) {
        // console.log(idx+' - '+labelid+' - '+id);
        var found = false;
        var label = '';
        if (id.length > 0) {

	        try {
	        	if (!found) {
	        		for (var i = 0; i < signature.staffType.records.length; i++) {
	        			if (signature.staffType.records[i].guid === id) {
	        				label = signature.staffType.records[i]['label'];
	        				found = true;
	        			}
	        		}
	        	}
	        } catch(err) {}

	        try {
	        	if (!found) {
	        		for (var i = 0; i < signature.staff.records.length; i++) {
	        			if (signature.staff.records[i].guid === id) {
	        				label = signature.staff.records[i]['label'];
	        				found = true;
	        			}
	        		}
	        	}
	        } catch(err) {}

	        try {
	        	if (!found) {
	        		for (var i = 0; i < signature.services.records.length; i++) {
	        			if (signature.services.records[i].guid === id) {
	        				label = signature.services.records[i]['label'];
	        				found = true;
	        			}
	        		}
	        	}
	        } catch(err) {}

        }
        // console.log(found,label);
        return label;
        // signature.weekItems.resolveids();
    },//==============================================
    resolveid: function(idx,id,labelid) {
        // console.log(idx+' - '+labelid+' - '+id);
        var found = false;
        var label = '';
        if (id.length > 0) {

	        try {
	        	if (!found) {
	        		for (var i = 0; i < signature.staffType.records.length; i++) {
	        			if (signature.staffType.records[i].guid === id) {
	        				label = signature.staffType.records[i]['label'];
	        				found = true;
	        			}
	        		}
	        	}
	        } catch(err) {}

	        try {
	        	if (!found) {
	        		for (var i = 0; i < signature.staff.records.length; i++) {
	        			if (signature.staff.records[i].guid === id) {
	        				label = signature.staff.records[i]['label'];
	        				found = true;
	        			}
	        		}
	        	}
	        } catch(err) {}

	        try {
	        	if (!found) {
	        		for (var i = 0; i < signature.services.records.length; i++) {
	        			if (signature.services.records[i].guid === id) {
	        				label = signature.services.records[i]['label'];
	        				found = true;
	        			}
	        		}
	        	}
	        } catch(err) {}

        }
        // console.log(found,label);
        if (found) {
            $('#'+labelid).text(label);
        }
        // signature.weekItems.resolveids();
    },//==============================================
    resolveids: function() {
        $('.resolvethisid').each(function( index ) {
            signature.weekItems.resolveid($(this).parent().parent().parent().attr('idx'),$(this).val(),$(this).parent().parent().attr('findlabel'))
        });
    },//==============================================
    formBlur: function() {
        // console.log('formBlur');
        if (signature.v.area !== 'timelog') {
            if ( $('#'+signature.v.lastID).hasClass('_Weeks_Id_') && $('#'+signature.v.lastID).val() === '') { $('#'+signature.v.lastID).val('Weeks') }
            if ( $('#'+signature.v.lastID).hasClass('_Services_Mid_') && $('#'+signature.v.lastID).val() === '') { $('#'+signature.v.lastID).val('Services') }
            if ( $('#'+signature.v.lastID).hasClass('_Staff_Mid_') && $('#'+signature.v.lastID).val() === '') { $('#'+signature.v.lastID).val('Staff') }
            if ( $('#'+signature.v.lastID).hasClass('_Epoch_') && $('#'+signature.v.lastID).val() === '') { $('#'+signature.v.lastID).val('Epoch') }
            if ( $('#'+signature.v.lastID).hasClass('_Woy_') && $('#'+signature.v.lastID).val() === '') { $('#'+signature.v.lastID).val('Woy') }
            if ( $('#'+signature.v.lastID).hasClass('_Dvalue_') && $('#'+signature.v.lastID).val() === '') { $('#'+signature.v.lastID).val('Value') }
            if ( $('#'+signature.v.lastID).hasClass('_Cnt_') && $('#'+signature.v.lastID).val() === '') { $('#'+signature.v.lastID).val('Cnt') }
            if ( $('#'+signature.v.lastID).hasClass('_Duration_') && $('#'+signature.v.lastID).val() === '') { $('#'+signature.v.lastID).val('Duration') }
            if ( $('#'+signature.v.lastID).hasClass('_Custom_') && $('#'+signature.v.lastID).val() === '') { $('#'+signature.v.lastID).val('Custom') }
            if ( $('#'+signature.v.lastID).hasClass('_Status_') && $('#'+signature.v.lastID).val() === '') { $('#'+signature.v.lastID).val('Status') }

            signature.weekItems.varUpdate();
            $('.itemLabel').css('display','inline-block');
            $('input').css('display','none');
        }
    },//==============================================
    toggleSwitches: function() {
        signature.weekItems.varUpdate();
        for (var i = 0; i < signature.weekItems.records.length; i++) {
            try {
                if (signature.weekItems.records[i].action_del === 'N') {
                    try {signature.weekItems.records[i].week_items_custom = $('#signature_' + i + '_Custom').val();} catch (err) { }
                    if (signature.weekItems.records[i].week_items_custom === '1') {$('#toggle_' + i + '_Custom_on').css('display','inline-block');$('#toggle_' + i + '_Custom_off').css('display','none');} else {$('#toggle_' + i + '_Custom_on').css('display','none');$('#toggle_' + i + '_Custom_off').css('display','inline-block');}
                    try {signature.weekItems.records[i].week_items_status = $('#signature_' + i + '_Status').val();} catch (err) { }
                    if (signature.weekItems.records[i].week_items_status === '1') {$('#toggle_' + i + '_Status_on').css('display','inline-block');$('#toggle_' + i + '_Status_off').css('display','none');} else {$('#toggle_' + i + '_Status_on').css('display','none');$('#toggle_' + i + '_Status_off').css('display','inline-block');}

                }

            } catch(err) {}
        }
    },//==============================================
    toggle: function(p,field,vid,lid) {
        // console.log($('#'+vid).val());
        if ($('#'+vid).val() === '1') {
            $('#'+vid).val(0);
            $('#'+p+' .toggleOn').css('display','none');
            $('#'+p+' .toggleOff').css('display','inline-block');
        } else {
            $('#'+vid).val(1);
            $('#'+p+' .toggleOn').css('display','inline-block');
            $('#'+p+' .toggleOff').css('display','none');
        }
    },//==============================================
    selected: function(i,label,tbl,field,vid,lid,tableLabel) {
        $('#selectsomething').remove();
        $('#'+vid).val(signature.weekItems.records[i]['guid'])
        $('#'+lid).text(signature.weekItems.records[i]['label']);
    },//==============================================
    refreshselection: function() {
        // console.log(signature.v.searchfor);
        var action = signature.v.refreshaction.replace('SEARCHHERE',signature.v.searchfor);
        // console.log(action);
        eval(action);
    },//==============================================
    selectpage: function(label,tbl,field,vid,lid,tableLabel,search) {
        $('#selectsomething').remove();
        $('body').append('<div id="selectsomething"><span class="close" onClick="$(\'#selectsomething\').remove();">X</span><div id="selectsomethinginner"><span id="selectheader">'+label+'</span><hr /><input type="text" id="selectsearch" value="'+search+'"><br /><div class="items"></div></div></div>');
        var labels = [];
        try {
            for (var i = 0; i < signature.weekItems.records.length; i++) {
                if (signature.weekItems.records[i][signature.weekItems.fieldprefix+'status'] === '1') {
                    labels.push(signature.weekItems.records[i]['label']);
                }
            }
        } catch(err) {}
        for (var i = 0; i < labels.length; i++) {
            if (search.length > 0) {
                if (labels[i].includes(search)) {
                    $('#selectsomething .items').append('<div class="item" onclick="signature.weekItems.selected(\''+i+'\',\''+label+'\',\''+tbl+'\',\''+field+'\',\''+vid+'\',\''+lid+'\',\''+tableLabel+'\');">'+labels[i]+'</div>');
                }
            } else {
                $('#selectsomething .items').append('<div class="item" onclick="signature.weekItems.selected(\''+i+'\',\''+label+'\',\''+tbl+'\',\''+field+'\',\''+vid+'\',\''+lid+'\',\''+tableLabel+'\');">'+labels[i]+'</div>');
            }
        }
        if (labels.length === 0) {
            $('#selectsomething .items').append('<div class="item" >No Records</div>');
            $('#selectsomething .items').append('<div class="item" ></div>');
            $('#selectsomething .items').append('<div class="item button" onClick="signature.weekItems.manage();$(\'#selectsomething\').remove();">Add Record</div>');
            $('#selectsearch').remove();
        } else {
            signature.v.refreshaction = 'signature.'+tbl+'.selectpage(\''+label+'\',\''+tbl+'\',\''+field+'\',\''+vid+'\',\''+lid+'\',\''+tableLabel+'\',\'SEARCHHERE\');';
            $('#selectsomething').append('<script>$("#selectsearch").keyup(function() {signature.v.searchfor = $("#selectsearch").val();signature.weekItems.doThisWhenDone("autosearch", 200, signature.weekItems.refreshselection);});</script>');
            $('#selectsearch').focusTextToEnd();
        }
    },//==============================================
    select: function(label,tbl,field,vid,lid,tableLabel) {
        // alert(label+' '+tbl);
        // console.log('1');
        var taskAction = 'signature.'+tbl+'.selectpage(\''+label+'\',\''+tbl+'\',\''+field+'\',\''+vid+'\',\''+lid+'\',\''+tableLabel+'\',\'\');';
        // console.log('2');
        eval(taskAction);
        // console.log(taskAction)
        // console.log('3');
    },//==============================================
    formFocus: function(idx,id) {
        signature.v.lastID = id;
        signature.v.lastIDX = idx;
        if ('signature_'+idx+'_Weeks_Id' === id && $('#'+id).val() === 'Weeks') { $('#'+id).val('') }
        if ('signature_'+idx+'_Services_Mid' === id && $('#'+id).val() === 'Services') { $('#'+id).val('') }
        if ('signature_'+idx+'_Staff_Mid' === id && $('#'+id).val() === 'Staff') { $('#'+id).val('') }
        if ('signature_'+idx+'_Epoch' === id && $('#'+id).val() === 'Epoch') { $('#'+id).val('') }
        if ('signature_'+idx+'_Woy' === id && $('#'+id).val() === 'Woy') { $('#'+id).val('') }
        if ('signature_'+idx+'_Dvalue' === id && $('#'+id).val() === 'Value') { $('#'+id).val('') }
        if ('signature_'+idx+'_Cnt' === id && $('#'+id).val() === 'Cnt') { $('#'+id).val('') }
        if ('signature_'+idx+'_Duration' === id && $('#'+id).val() === 'Duration') { $('#'+id).val('') }
        if ('signature_'+idx+'_Custom' === id && $('#'+id).val() === 'Custom') { $('#'+id).val('') }
        if ('signature_'+idx+'_Status' === id && $('#'+id).val() === 'Status') { $('#'+id).val('') }

    },//==============================================
    managechildren: function(guid) {
        // console.log(guid);
        // $('.thechild').remove();
        // $('.managechildrenbutton').remove();
        // $('.certItemParent').each(function( index ) {
        //     console.log('each - '+$(this).attr('guid'));
        //     if ($(this).attr('guid') !== guid) {
        //         console.log('not match');
        //         $(this).remove();
        //     }
        // });
        // $("[guid='"+guid+"']").append('<div class="thechild"></div>');
        


        // console.log('done');
    },//==============================================
    saveThenOpen: function() {
        signature.shared.close();
        signature.shared.runWhen(null, 'closed', function(){signature.weekItems.obj.edit();});
    }, //==============================================
    htmlRow: function(i, id, guid, weeks_id, services_mid, staff_mid, epoch, woy, dvalue, cnt, duration, custom, status) {
            if (typeof i === 'undefined') {
                i = signature.weekItems.records.length - 1;
            }
            if (typeof id === 'undefined') {
                id = 0;
            }
            
            if (typeof weeks_id === 'undefined') { weeks_id = ''; }
            if (typeof services_mid === 'undefined') { services_mid = ''; }
            if (typeof staff_mid === 'undefined') { staff_mid = ''; }
            if (typeof epoch === 'undefined') { epoch = ''; }
            if (typeof woy === 'undefined') { woy = ''; }
            if (typeof dvalue === 'undefined') { dvalue = ''; }
            if (typeof cnt === 'undefined') { cnt = ''; }
            if (typeof duration === 'undefined') { duration = ''; }
            if (typeof custom === 'undefined') { custom = '0'; }
            if (typeof status === 'undefined') { status = '1'; }


            if (weeks_id === '') { weeks_id = 'Weeks'; }
            if (services_mid === '') { services_mid = 'Services'; }
            if (staff_mid === '') { staff_mid = 'Staff'; }
            if (epoch === '') { epoch = 'Epoch'; }
            if (woy === '') { woy = 'Woy'; }
            if (dvalue === '') { dvalue = 'Value'; }
            if (cnt === '') { cnt = 'Cnt'; }
            if (duration === '') { duration = 'Duration'; }
            if (custom === '') { custom = 'Custom'; }
            if (status === '') { status = 'Status'; }


            $('#manage').append('\
            <div id="row_' + i + '" class="certItemParent certItem" idx="' + i + '" guid="' + guid + '" onblur="$(\'.morebutton\').css(\'display\',\'inline-block\');$(\'.more\').css(\'display\',\'none\');">\
                <div id="eDelete' + i + '" class="eDelete" title="delete" onClick="signature.weekItems.del(' + i + ');">\
                   <img src="images/delete.png">\
                </div>\
                <input name="Weeks_Id_' + i + '" type="hidden" id="signature_' + i + '_Weeks_Id" class="signaturebox _Weeks_Id_" value="' + weeks_id + '">\
                <div class="signatureItem" findlabel="label_' + i + '_Services_Mid_">\
                    <div class="item_Label services_mid" style="display:none;"> Services: </div>\
                    <div id="eefServices_Mid" class="signatureField" onclick="signature.weekItems.select(\'Services\',\'services\',\'services_mid\',\'signature_' + i + '_Services_Mid\',\'label_' + i + '_Services_Mid_\',\'services_label\');">\
                    	<span id="label_' + i + '_Services_Mid_">Services</span>\
                        <input name="Services_Mid_' + i + '" type="hidden" id="signature_' + i + '_Services_Mid" class="resolvethisid signaturebox _Services_Mid_" value="' + services_mid + '">\
                    </div>\
                </div>\
                <div class="signatureItem" findlabel="label_' + i + '_Staff_Mid_">\
                    <div class="item_Label staff_mid" style="display:none;"> Staff: </div>\
                    <div id="eefStaff_Mid" class="signatureField" onclick="signature.weekItems.select(\'Staff\',\'staff\',\'staff_mid\',\'signature_' + i + '_Staff_Mid\',\'label_' + i + '_Staff_Mid_\',\'staff_label_first_last\');">\
                    	<span id="label_' + i + '_Staff_Mid_">Staff</span>\
                        <input name="Staff_Mid_' + i + '" type="hidden" id="signature_' + i + '_Staff_Mid" class="resolvethisid signaturebox _Staff_Mid_" value="' + staff_mid + '">\
                    </div>\
                </div>\
                <div class="signatureItem">\
                    <div id="label_' + i + '_Epoch" class="itemLabel epoch" onclick="signature.weekItems.doThisWhenDone(\'field_focus\', 8000, signature.weekItems.formBlur);signature.weekItems.varUpdate();$(\'.itemLabel\').css(\'display\',\'inline-block\');$(\'input\').css(\'display\',\'none\');$(\'#\'+$(this).attr(\'relatedfield\')).css(\'display\',\'inline-block\');$(this).css(\'display\',\'none\');" relatedfield="signature_' + i + '_Epoch"> Epoch: </div>\
                    <div id="eefEpoch" class="signatureField">\
                        <input name="Epoch_' + i + '" type="text" id="signature_' + i + '_Epoch" class="signaturebox _Epoch_" value="' + epoch + '" style="display:none;"  relatedfield="label_' + i + '_Epoch" >\
                    </div>\
                </div>\
                <div class="signatureItem">\
                    <div id="label_' + i + '_Woy" class="itemLabel woy" onclick="signature.weekItems.doThisWhenDone(\'field_focus\', 8000, signature.weekItems.formBlur);signature.weekItems.varUpdate();$(\'.itemLabel\').css(\'display\',\'inline-block\');$(\'input\').css(\'display\',\'none\');$(\'#\'+$(this).attr(\'relatedfield\')).css(\'display\',\'inline-block\');$(this).css(\'display\',\'none\');" relatedfield="signature_' + i + '_Woy"> Woy: </div>\
                    <div id="eefWoy" class="signatureField">\
                        <input name="Woy_' + i + '" type="text" id="signature_' + i + '_Woy" class="signaturebox _Woy_" value="' + woy + '" style="display:none;"  relatedfield="label_' + i + '_Woy" >\
                    </div>\
                </div>\
                <div class="signatureItem">\
                    <div id="label_' + i + '_Dvalue" class="itemLabel dvalue" onclick="signature.weekItems.doThisWhenDone(\'field_focus\', 8000, signature.weekItems.formBlur);signature.weekItems.varUpdate();$(\'.itemLabel\').css(\'display\',\'inline-block\');$(\'input\').css(\'display\',\'none\');$(\'#\'+$(this).attr(\'relatedfield\')).css(\'display\',\'inline-block\');$(this).css(\'display\',\'none\');" relatedfield="signature_' + i + '_Dvalue"> Value: </div>\
                    <div id="eefDvalue" class="signatureField">\
                        <input name="Dvalue_' + i + '" type="text" id="signature_' + i + '_Dvalue" class="signaturebox _Dvalue_" value="' + dvalue + '" style="display:none;"  relatedfield="label_' + i + '_Dvalue" >\
                    </div>\
                </div>\
                <div class="signatureItem">\
                    <div id="label_' + i + '_Cnt" class="itemLabel cnt" onclick="signature.weekItems.doThisWhenDone(\'field_focus\', 8000, signature.weekItems.formBlur);signature.weekItems.varUpdate();$(\'.itemLabel\').css(\'display\',\'inline-block\');$(\'input\').css(\'display\',\'none\');$(\'#\'+$(this).attr(\'relatedfield\')).css(\'display\',\'inline-block\');$(this).css(\'display\',\'none\');" relatedfield="signature_' + i + '_Cnt"> Cnt: </div>\
                    <div id="eefCnt" class="signatureField">\
                        <input name="Cnt_' + i + '" type="text" id="signature_' + i + '_Cnt" class="signaturebox _Cnt_" value="' + cnt + '" style="display:none;"  relatedfield="label_' + i + '_Cnt" >\
                    </div>\
                </div>\
                <div class="signatureItem">\
                    <div id="label_' + i + '_Duration" class="itemLabel duration" onclick="signature.weekItems.doThisWhenDone(\'field_focus\', 8000, signature.weekItems.formBlur);signature.weekItems.varUpdate();$(\'.itemLabel\').css(\'display\',\'inline-block\');$(\'input\').css(\'display\',\'none\');$(\'#\'+$(this).attr(\'relatedfield\')).css(\'display\',\'inline-block\');$(this).css(\'display\',\'none\');" relatedfield="signature_' + i + '_Duration"> Duration: </div>\
                    <div id="eefDuration" class="signatureField">\
                        <input name="Duration_' + i + '" type="text" id="signature_' + i + '_Duration" class="signaturebox _Duration_" value="' + duration + '" style="display:none;"  relatedfield="label_' + i + '_Duration" >\
                    </div>\
                </div>\
                <div class="signatureItem">\
                    <div class="item_Label custom" style="display:none;"> Custom: </div>\
                    <div id="eefCustom_' + i + '_" class="signatureField thetoggle" relatedfield="label_' + i + '_Custom_" onclick="signature.weekItems.toggle(\'eefCustom_' + i + '_\',\'custom\',\'signature_' + i + '_Custom\',\'label_' + i + '_Custom_\');"><span id="label_' + i + '_Custom_" class="togglelabel" style="display:none;">Custom</span>\
                        <img src="images/toggle_on.png" style="height:23px;width: 50px; display:none;" id="toggle_' + i + '_Custom_on" class="toggleOn">\
                        <img src="images/toggle_off.png" style="height:23px;width: 50px; display:none;" id="toggle_' + i + '_Custom_off" class="toggleOff">\
                        <input name="Custom_' + i + '" type="hidden" id="signature_' + i + '_Custom" class="signaturebox _Custom_" value="' + custom + '">\
                    </div>\
                </div>\
                <div class="signatureItem">\
                    <div class="item_Label status" style="display:none;"> Status: </div>\
                    <div id="eefStatus_' + i + '_" class="signatureField thetoggle" relatedfield="label_' + i + '_Status_" onclick="signature.weekItems.toggle(\'eefStatus_' + i + '_\',\'status\',\'signature_' + i + '_Status\',\'label_' + i + '_Status_\');"><span id="label_' + i + '_Status_" class="togglelabel" style="display:none;">Status</span>\
                        <img src="images/toggle_on.png" style="height:23px;width: 50px; display:none;" id="toggle_' + i + '_Status_on" class="toggleOn">\
                        <img src="images/toggle_off.png" style="height:23px;width: 50px; display:none;" id="toggle_' + i + '_Status_off" class="toggleOff">\
                        <input name="Status_' + i + '" type="hidden" id="signature_' + i + '_Status" class="signaturebox _Status_" value="' + status + '">\
                    </div>\
                </div>\
                <br />\
                <div id="someSpace"></div>\
                \
            </div>\
            <input name="id_' + i + '" type="hidden" id="id_' + i + '" value="' + id + '"/>');
                // <div class="thechild"></div>\
    }, //==============================================
    buildPageFromJSON: function() {
        // signature.weekItems.varUpdate();
        // console.log('buildPageFromJSON');
        //signature.v.recover = JSON.stringify(signature.weekItems.records);
        $('#manage').html('');

        try {
            for(var i = 0;i < signature.weekItems.records.length; i++){

                if (signature.weekItems.records[i].action_del === 'N') {
                    if (signature.weekItems.isChild) {
                        if (signature.weekItems.parent === signature.weekItems.records[i][signature.weekItems.px]) {
                            signature.weekItems.htmlRow(i, signature.weekItems.records[i].field_id, signature.weekItems.records[i].guid, signature.weekItems.records[i].week_items_weeks_id, signature.weekItems.records[i].week_items_services_mid, signature.weekItems.records[i].week_items_staff_mid, signature.weekItems.records[i].week_items_epoch, signature.weekItems.records[i].week_items_woy, signature.weekItems.records[i].week_items_dvalue, signature.weekItems.records[i].week_items_cnt, signature.weekItems.records[i].week_items_duration, signature.weekItems.records[i].week_items_custom, signature.weekItems.records[i].week_items_status);
                        }

                    } else {
                        signature.weekItems.htmlRow(i, signature.weekItems.records[i].field_id, signature.weekItems.records[i].guid, signature.weekItems.records[i].week_items_weeks_id, signature.weekItems.records[i].week_items_services_mid, signature.weekItems.records[i].week_items_staff_mid, signature.weekItems.records[i].week_items_epoch, signature.weekItems.records[i].week_items_woy, signature.weekItems.records[i].week_items_dvalue, signature.weekItems.records[i].week_items_cnt, signature.weekItems.records[i].week_items_duration, signature.weekItems.records[i].week_items_custom, signature.weekItems.records[i].week_items_status);
                    }
                    
                    // signature.weekItems.htmlRow(i, field_id, first, last, email, certificate, cnt, dvalue, status);
                }
            }
        } catch (err) {}
        signature.weekItems.varUpdate();
        $('.add').remove();
        $('.save').remove();
        $('#manage').append('<br /><br /><br />');
        $('#manage').append('<div class="button add" onclick="signature.weekItems.add();">Add</div>');
        $('#manage').append('<div class="button save" onclick="signature.weekItems.varUpdate();">Save</div>');
        $('#manage').append("<script>$( '.signaturebox' ).focus(function() { signature.weekItems.doThisWhenDone('field_focus', 8000, signature.weekItems.formBlur);signature.weekItems.formFocus($(this).parent().parent().parent().attr('idx'),$(this).attr('id')); });</script>");
        $('#manage').append("<script>$( '.signaturebox' ).blur(function() { signature.weekItems.formBlur(); });</script>");
        $('#manage').append("<script>$( '.thetoggle' ).hover( function() { $('#'+$(this).attr('relatedfield')).css('display','inline-block'); }, function() { $( '.togglelabel' ).css('display','none' ); } );</script>");
        $('#manage').prepend('<div id="thesection">'+signature.weekItems.sectionlabel+'</div>');
        
        signature.weekItems.toggleSwitches();
        signature.weekItems.resolveids();
    }, //==============================================
    runDoThis: function(myLabel) {
        if (typeof signature.v.doThis !== 'undefined') {
            var nowish = start = new Date().getTime();
            var run = false;
            for (var j = 0; j < signature.v.doThis.length; j++) {
                var thisLabel = signature.v.doThis[j].myLabel;
                var thisWait = signature.v.doThis[j].wait;
                var thisStamp = signature.v.doThis[j].stamp;
                if (myLabel === thisLabel) {

                    if ((nowish - thisStamp) > thisWait) {var checkStamp =  true;} else {var checkStamp =  false;}
                    if (checkStamp) {
                        var run = true;
                        var thisLabel = signature.v.doThis[j].myLabel;
                        var thisScript = signature.v.doThis[j].script;
                    }
                }
            }
        }
        if (run) {
            thisScript();
        }
    }, //==============================================
    doThisWhenDone: function(myLabel, waitfor, script) {
        var isNew = true;
        var isFirst = false;
        var stamp = start = new Date().getTime();
        if (typeof signature.v.doThis === 'undefined') {
            var nextID = 0
            signature.v.doThis = new Array();
            signature.v.doThis = [];
            signature.v.doThis.length = 0;
            var isFirst = true;
        } else {
            var nextID = signature.v.doThis.length;
        }
        if (!isFirst) {
            for (var j = 0; j < signature.v.doThis.length; j++) {
                var thisLabel = signature.v.doThis[j].myLabel;
                if (myLabel === thisLabel) {
                    var isNew = false;
                    signature.v.doThis[j] = {
                        myLabel: myLabel,
                        stamp: stamp,
                        wait: waitfor,
                        script: script
                    };
                }
            }
        }
        if (isNew) {

            signature.v.doThis[nextID] = {
                myLabel: myLabel,
                stamp: stamp,
                wait: waitfor,
                script: script
            };
        }
        var waitforAbout = waitfor + 50;
        setTimeout(function() { signature.weekItems.runDoThis(myLabel); }, waitforAbout);

        // signature.weekItems.doThisWhenDone(myLabel, waitfor, script);
    }, //==============================================
    getField: function(guid,field) {
        var result = '';
        if (signature.weekItems.records.length > 0) {

            var keys = Object.keys(signature.weekItems.records[0]);
            for (var i = 0; i < keys.length; i++) {
                if (keys[i].includes(field) && keys[i] !== 'field_id') {
                    var theKey = keys[i];
                }
            }


            for(var i = 0;i < signature.weekItems.records.length; i++){
                if (signature.weekItems.records[i].guid === guid) {
                    var result = signature.weekItems.records[i][theKey];
                }
            }
        } else {
            var result = 'No ' + signature.weekItems.sectionlabel + ' Records';
        }
        
        
        return result;
    }, //==============================================
    guid: function() {
        function s4() {
        return Math.floor((1 + Math.random()) * 0x10000)
            .toString(16)
            .substring(1);
        }
        return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();
    }, //==============================================
    nullFunction: function() {
        //signature.shared.log('null');
    } //==============================================
}
// signature.v.loader = '<div id="loading"><img src="images/dance.gif"></div>';
signature.v.loader = '<div id="loading"><img src="images/gears.gif"></div>';
signature.v.save = '';
signature.v.area = '';
/*@import url(responsive.css);*/
* {
	font-family: Calibri, Arial;
}
a {
	text-decoration:none;
	color:#333;
	cursor:pointer;
}
/*.dateitem {
    border-style: solid;
    border-width: unset;
    border-color: #000;
    width: 200px;
    height: 200px;
    float: left;
}*/
#thesection {
    padding: 40px;
    font-size: 200%;
}
#selectsomething .item {
    padding: 5px;
}
#selectsomething .close {
    float: right;
    padding: 5px;
    color: crimson;
    font-size: 105%;
    font-weight: bolder;
}
#selectheader {
    font-size: 150%;
}
#selectsomethinginner {
    padding: 20px;
}
#selectsomething {
    z-index: 1000;
    position: fixed;
    height: auto;
    width: auto;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    text-align: center;
    background-color: #FFF;
    border-style: solid;
    border-width: unset;
    border-color: #000;
    min-width: 300px;
}
#loading {
    z-index: 1000;
}
#login .signatureItem,
#login .signatureField,
#login .itemLabel {
    display: block !important;;
}
#loading img {
    position: fixed;
    height: 100%;
    width: auto;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
}

.togglerow,
.deleterow {
    text-align: center;
}
.title {
    margin-left: auto;
    margin-right: auto;
    display: block;
    width: 300px;
    text-align: center;
    font-size: 180%;
}

a:hover {
	color:#000;
}




.error {
	color:red;
}

textarea {
    height: 75px;
}
.save,
.nosave {
    display: inline-block;
}

.signatureItem {
/*	background-color: #ECF9FF;*/
    border-style: solid;
    border-width: thin;
	border-color:#FFF;
}
.toggleSwitch {
    height: 34px;
    padding-left: 75px;
    display: inline-block;
    text-align: left;
    vertical-align: middle;
    background-repeat: no-repeat;
    background-position: left center;
}


input,
textarea {
	background-color: #ECF9FF;
}
.dDelete {
	cursor:pointer;
}

.uploadProgress {
    height: 35px;
}
.bar {
    display: inline-block;
    background-image:url(../images/uploading.gif);
    background-repeat: repeat-x;
    /*background-size: 100% 100%;*/
}
.percent {
    position: absolute;
    color: #000;
    text-shadow: 2px 2px #FFF;
    font-weight: bolder;
    text-shadow: 2px 2px #FFF;
    margin-top: 5px;
}
.percent span {
    background-color: #FFF;
    vertical-align: middle;
}


#menu {
	color:#CCC;
	background-color:#FFF;
	text-decoration:none;
	height:20px;
    z-index: 2;
	text-align:right;
}
#menu {
	position: absolute;
	right: 20px;
	top: 80px;
}

.uploadFiles span {
    color:red;
    font-weight: bolder;
}


.saveBottom {
    position: relative;
    height: 30px;
    text-align: right;
    color: #000;
    z-index: 3;
    display: none;
}
.menuLines {
	display: block;
    width: 20px;
    height: 3px;
    margin: 0 auto;
    margin-top: 3px;
    background-color: #292929;
}
#main {
    position: relative;
    top: 20px;
}

.menuItems {
	display:none;
	color:#fff !important;
    background-color: #000;
    border-style: solid;
    border-width: thin;
    -moz-border-radius-bottomright: 20px;
    -webkit-border-bottom-right-radius: 20px;
    -moz-border-radius-bottomleft: 20px;
    -webkit-border-bottom-left-radius: 20px;
	padding:10px;
}
.menuItems a {
	color:#fff !important;
}
#menu:hover .menuButton {
//	display:none;
}
#menu:hover .menuItems {
	display:block;
}
#menu:hover {
	height:100px;
}
.button {
    display: inline;
    font-style: normal;
    font-variant: normal;
    font-weight: bold;
    font-stretch: normal;
    font-size: 14px;
    line-height: normal;
    font-family: Arial;
    text-decoration: none;
    color: rgb(51, 51, 51);
    padding: 2px 6px;
    border-width: 1px;
    border-style: solid;
    border-color: rgb(204, 204, 204) rgb(51, 51, 51) rgb(51, 51, 51) rgb(204, 204, 204);
    cursor: pointer;
    background-color: rgb(238, 238, 238);
}
.button:hover {
    background-color: #999;
}

input[type="radio"] {
    width: 18px;
    height: 18px;
}
input[type=radio]:checked {
    width: 18px;
    height: 18px;
    background-color: #000;
}

.itemLabel {
	color: #000;
}
h1, h2, h3 {
	color:#000;
}
#displayToggle {
    width: 30px;
    height: 30px;
    text-align: right;
	z-index:2;
	color:#000;
	text-align:center;
	vertical-align:middle;
}
#displayToggle img {
	margin-top:2.5px;
}
#zoom,
#zoomPlaceholder {
	position:fixed;
    width: 40px;
    height: 110px;
	left:20px;
	bottom:20px;
	cursor:pointer;
	text-align:center;
}
#zoom {
    z-index:2;
    background-color: rgba(255, 255, 255, 0.7);
    display:none;
}
#zoomPlaceholder {
    z-index:100;
}
#zoom img {
	margin-bottom:10px;
}
#displayToggle span {
/*	background-color:#FFF;*/
}
#frameContainer {
	width:100%;
	height:5px;
}

#status {
    position: fixed;
    right: 20px;
    top: 45px;
    width: 800px;
    height: 20px;
    text-align: right;
	z-index:3;
	color:#000;
}

#status span {
	/*background-color:#FFF;*/
}


.signatureField,
.signatureItem,
.itemLabel {
    overflow: hidden;
/*	display:inline;*/
	display: inline-block;
}
.blue {
    color: blue;
}

//=====================================================================
//=====================================================================
.eAction button {
    width: 45px;
}
.eAction {
    width: 45px !important;
    padding: 1px;
    display: Inline-block;
    position: relative;
}
.eDelete {
    padding-top: 5px;
    color: #900;
    font-size: 20px;
    display: Inline-block;
    position: relative;
    vertical-align: top;
    cursor: pointer;
}

.sectionLabel {
    font-size: 150%;
}
.editInfoSection .sectionLabel {
    font-size: 110%;
}
.sectionLabel {
    width: 95%;
    color: #000;
    font-weight: bold;
	/*margin-top:30px;	*/
}
.sectionLabel {
	margin-top:10px;
}
.signatureItemEdit {
    width: 98%;
    display: Inline-block;
    position: relative;
    padding: 5px;

    border-style: solid;
    border-width: 1px;

    vertical-align: top;
}
.itemLabelEdit {
/*    display: Inline-block;*/
	display:block;
    position: relative;
}

#DIALOGBK {
    position: fixed;
    background-color: #ccc;
    opacity: .8;
    width: 100%;
    height: 100%;
    z-index: 10;
    top: 0px;
    display: none;
}
#DIALOG {
    z-index: 11;

    width: 400px;
    position: fixed;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    -ms-transform: translate(-50%, -50%);
    -webkit-transform: translate(-50%, -50%);
    background-color: #fff;

    border-style: solid;
    border-width: thin;

    -moz-border-radius-topright: 20px;
    -webkit-border-top-right-radius: 20px;
    -moz-border-radius-topleft: 20px;
    -webkit-border-top-left-radius: 20px;
    -moz-border-radius-bottomright: 20px;
    -webkit-border-bottom-right-radius: 20px;
    -moz-border-radius-bottomleft: 20px;
    -webkit-border-bottom-left-radius: 20px;

    margin:20px;
    padding: 20px;


}
.DIALOGCHOICE {
    z-index: 12;



    background-color: #000;
    color: #fff;

    border-style: solid;
    border-width: thin;

    -moz-border-radius-topright: 20px;
    -webkit-border-top-right-radius: 20px;
    -moz-border-radius-topleft: 20px;
    -webkit-border-top-left-radius: 20px;
    -moz-border-radius-bottomright: 20px;
    -webkit-border-bottom-right-radius: 20px;
    -moz-border-radius-bottomleft: 20px;
    -webkit-border-bottom-left-radius: 20px;

    text-align: center;
}

.DIALOGCHOICE:hover {
    background-color: #fff;
    color: #000;
}

.sbox {
    width: 40px;
}
#login {
    display: block;
    margin-left: auto;
    margin-right: auto;
    text-align: center;
}

.signatureItem {
/*    display: Inline-block;
    position: relative;
    width: 219px;*/
    padding: 5px;
/*
    border-style: solid;
    border-width: 1px;
*/
    vertical-align: top;
}


#pageError span {
	display:block;
	color:#FFF;
	margin-bottom:25px;
	font-weight:bolder;
	font-size:150%;
	background-color:#000;
	top:0px;
}
#pageError {
	position: fixed;
	top: 50%;
	left: 50%;
	margin-top: -100px;
	margin-left: -100px;
	width:200px;
	height:200px;
    border-style: solid;
    border-width: 15px;
	border-color:#000;
    -moz-border-radius-topright: 20px;
    -webkit-border-top-right-radius: 20px;
    -moz-border-radius-topleft: 20px;
    -webkit-border-top-left-radius: 20px;
    -moz-border-radius-bottomright: 20px;
    -webkit-border-bottom-right-radius: 20px;
    -moz-border-radius-bottomleft: 20px;
    -webkit-border-bottom-left-radius: 20px;
	background-color:#CCC;
	text-align:center;
	z-index:99999;
}
body {
    margin-left: 0px;
    margin-top: 0px;
    margin-right: 0px;
    margin-bottom: 0px;
    font-size: 110%;
}

#logo {
	vertical-align:middle;
    margin-left:auto;
    margin-right:auto;
    width: 300px;
    display: block;
}
#header {
    width: 95%;
    position: relative;
    top: 20px;
	left: 20px;
}

.sub {
    vertical-align: sub;
}
.compensation div {
    text-align: center;
    color:#000;
}
@media only screen and (min-width: 0px) and (max-width: 887px) {
	#manage .signatureItem,
	#manage .signatureItem {
		width: 95% !important;
	}
	#manage {
		width: 100%;
	}
	#manage .signatureItemParent {
		margin: 20px;
		border-top: 1px solid black;
	}
	.eDelete {
		width: 100%;
	}
	#insertButton {
	    border-top: 3px solid black;
	    margin: 20px;
	}
}
@media only screen and (min-width: 888px) {
	#manage .signatureItem,
	#manage .signatureItem {
		height: 42px !important;
		overflow: hidden;
		white-space: nowrap;
		text-overflow: ellipsis !important;
	}
	#manage {
	    margin-left: auto;
	    margin-right: auto;
	    width: 887px;
	    text-align: center;
	}
	.signatureItem {
		min-height: 54px;
	}
}# import os
import sys
# import simplejson as json
# import shutil
# import sqlite3
import _rightThumb._construct as __
__.appReg = __name__
import _rightThumb._base as _
import _rightThumb._vars as _v
import _rightThumb._string as _str

_.switches.register('Input', '-i,-f,-file','payroll.sql')
_.switches.register('App', '-app','signature')
_.switches.register('Prefix', '-pre,-prefix','_reph_signature_')

# _.switches.register('Table', '-table','_reph_signature_+staff')
# _.switches.register('Fields', '-fields','first last')

# _.switches.register('Output', '-o','folder\\appOut.py')
# _.switches.register('Move', '-move','completed_in-folder_name')

_.appInfo[__name__] = {
	'file': 'crud.py',
	'description': 'Changes the world',
	'prerequisite': [],
	'examples': [],
	'columns': [],
	}

_.appInfo[__name__]['examples'].append('p crud -prefix _reph_signature_ -app signature -file payroll.sql')
# _.appInfo[__name__]['examples'].append('p crud -table _reph_signature_+staff -fields first last')

# _.appInfo[__name__]['columns'].append({'name': 'name', 'abbreviation': 'n'})


# def formatColumns(columns):
# 	result = ''
# 	for c in columns.split(','):
# 		for col in _.appInfo[__name__]['columns']:
# 			for a in col['abbreviation'].split(','):
# 				if a == c:
# 					c = col['name']
# 		result += c + ','
# 	result = result[:-1]
# 	return result

# _.switches.trigger('Column',formatColumns)

if not __name__ == '__main__':
	_.argvProcess = False


_.switches.process()
def focus():
	__.appReg = __name__




# pipeData = ''

# if not sys.stdin.isatty():
# 	pipeData = sys.stdin.readlines()
# 	try:
# 		if pipeData[0][0].isalnum() == False:
# 			pipeData[0] = pipeData[0][1:]
# 	except Exception as e:
# 		pass


# if _.switches.isActive('_File_'):
# 	_.tables.register('toCheck') # table, rows = []
# 	_.switches.fieldSet('_File_','active',True)
# 	_.switches.fieldSet('_File_','value','toCheck.json')
# 	_.tables.get('toCheck',_.switches.value('_File_'))
# 	_.tables.trigger('toCheck','stamp,time,date',_.float2Dated,True)
# 	_.tables.sort('toCheck', 'name')

# 	_.tables.registerView('test_table','sample3','name,age','age') # table, view, fields, sort
# 	_.tables.view('test_table','sample') # table, view

# 	_.switches.fieldGet('Column','pos')
# 	if _.switches.exists('Column2'):
# 		print('This is a switch')




# 	if _.switches.isActive('Output') == True:


# 	if _.switches.isActive('Move') == True:
# 	        shutil.move(_.ci(_.switches.value('Input')), _.switches.value('Move') + '\\' + _.ci(_.switches.value('Input')))
# 	# if _.showLine(string):
# 		# print(line)



########################################################################################
# class TheChildItems:

# 	def __init__(self, name, switch):
# 		self.name = name
# 		self.active = False
# 		self.value = None

# 	def trigger(self,script):
# 		self.script_trigger = script

# 	def changeStatus(self,newStatus):
# 		self.active = newStatus
# class TheParentItems:

# 	def __init__(self):
# 		self.childItemRows = []

# 	def register(self, name):
# 		self.childItemRows.append(TheChildItems(name))
# 	def print(self):
# 		childItems = []
# 		for ci in self.childItemRows:
# 			childItems.append({'name':ci.name})
# 		_.tables.register('childClassItems',childItems)
# 		# tables.trigger('switches','switch,name',test,True)
# 		_.tables.print('childClassItems','name')
# 	def printStatus(self):
# 		childItems = []
# 		for ci in self.childItemRows:
# 			if ci.active:
# 				active = 'True'
# 			else:
# 				active = 'False'
# 			value = ci.value
# 			if ci.value == True:
# 				value = 'True'
# 			elif ci.value == False:
# 				value = 'False'

# 			childItems.append({'name':ci.name ,'active':active,'value': value})
# 		_.tables.register('childClassItems',childItems)
# 		_.tables.print('childClassItems','name,active,value')
# 	def status(self,name,newStatus):
# 		for i,ci in enumerate(self.childItemRows):
# 			if ci.name == name:
# 				self.childItemRows[i].changeStatus(newStatus)

# if _.switches.isActive('Move'):
    # shutil.move(_.ci(_.switches.value('Input')), _.switches.value('Move') + '\\' + _.ci(_.switches.value('Input')))


########################################



# 	json = _.getTable('base64Key.json')
#	books = _.getText(_v.myTables + '\\bible_books.csv')

# _.saveTable(jsonFile,'file.json')
# _.saveText(convertedFile,_.ci(_.switches.value('Output')))
# _.saveText(convertedFile,'file.txt')
# _.showLine(item)
########################################################################################
def clean(string):
	# string = _str.replaceAll(string,'\t',' ')
	string = string.replace('\t',' ')
	string = _str.replaceDuplicate(string,' ')
	string = _str.cleanBE(string,' ')
	return string

def php_funcname(table):
	prefix = _.switches.value('Prefix')
	# print(prefix)

	# print(table)
	# sys.exit()
	table = table.replace(prefix,'')
	# print(table)
	table = table.replace('_',' ')
	table = table.title()
	table = table.replace(' ','_')
	return table

def php_funcfields(fields,cu):
	f = ''
	for field in fields:
		if actionable(field,',status,del'):
			if cu == 'c':
				if len(field['default']) == 0:
					f += '$' + field['field'] + ', '
			else:
				f += '$' + field['field'] + ', '
	f = _str.cleanBE(f,', ')
	return f

def php_tfields(fields):
	f = ''
	for field in fields:
		if actionable(field,',status,del'):
			if len(field['default']) == 0:
				f += field['field'] + ', '
	f = _str.cleanBE(f,', ')
	return f

def php_vfields(fields):
	f = ''
	for field in fields:
		if actionable(field,',status,del'):
			if len(field['default']) == 0:
				if field['type'] == 'int':
					f += ""+'$' + field['field'] + "" + ', '
				else:
					f += "'"+'$' + field['field'] + "'" + ', '
	f = _str.cleanBE(f,', ')
	return f

def php_readfields(table,fields):
	prefix = _.switches.value('Prefix')
	abrev = []
	t = table.replace(prefix,'')
	b = "\n		'FIELD1' => $row['FIELD2'],"
	f = ''
	for field in fields:
		if actionable(field,''):
			fx = t + '_' + field['field']
			f += b.replace('FIELD2',field['field']).replace('FIELD1',fx)
	f = _str.cleanBE(f,', ')
	return f

def php_updatefields(fields):
	b = "FIELD='$FIELD', "
	f = ''
	for field in fields:
		if actionable(field,''):
			f += b.replace('FIELD',field['field'])
	f = _str.cleanBE(f,', ')
	return f
def php_toggleArea(crudToggle,fields):
	f = ''
	for field in fields:
		if actionable(field,''):
			if 'toggle' in field['note']:
				f += crudToggle.replace('[funcToggleField]',field['field'].title()).replace('[toggleField]',field['field'])
	return f
def php_joinsArea(crudJoins,thisTable,fields):
	global data
	result = ''
	hasJoins = False
	for field in fields:
		if field['note'] == 'altID':
			hasJoins = True
	if hasJoins:
		
		queryX = 'SELECT [select_fields] \n\n'\
				'FROM [table] AS [abrev] \n\n'\
				'[JOINDATA] \n'\
				'WHERE [abrev].guid=\'$guid\''
		prefix = _.switches.value('Prefix')
		abrev = []
		t = thisTable.replace(prefix,'')

		# print(thisTable)
		buildJoins = ''
		buildfields = ''
		buildfieldsArr = ''
		for field in fields:
			buildfields += thisTable.replace(prefix,'')+'.'+field['field'] + ' as ' + thisTable.replace(prefix,'')+'_'+field['field']+', '

		joinX = 'JOIN [join_table] AS [join_abrev] ON [abrev].[join_field] = [join_abrev].guid \n'
		arrX = "\n		'FIELD' => $row['FIELD'],"
		for field in fields:
			if field['note'] == 'altID':
				fx = field['field'].replace('_mid','').replace('_id','')
				tx = prefix + fx
				for i,table in enumerate(data['sql']):
					if table['table'] == tx:
						t = tx.replace(prefix,'')
						a = tx.replace(prefix,'')
						jn = joinX.replace('[join_table]',tx)
						jn = jn.replace('[join_abrev]',a)
						jn = jn.replace('[join_field]',field['field'])
						buildJoins += jn
						for tfield in table['fields']:
							buildfields += a+'.'+tfield['field'] + ' as ' + a+'_'+tfield['field']+', '
							buildfieldsArr += arrX.replace('FIELD',a+'_'+tfield['field'])
		# print()
		buildfields = _str.cleanBE(buildfields,', ')
		queryX = queryX.replace('[JOINDATA]',buildJoins)
		queryX = queryX.replace('[select_fields]',buildfields)
		queryX = queryX.replace('[table]',thisTable)
		queryX = queryX.replace('[abrev]',thisTable.replace(prefix,''))
		result = crudJoins.replace('[readfields]',buildfieldsArr)
		result = result.replace('[theQuery]',queryX)
		# print(result)
	return result

def php_combineTables():
	global data
	app = _.switches.value('App')
	f = ''
	b = ''
	for d in data['sql']:
		if not '_items' in d['table']:
			table = jsAppTable(d['table'])
			f += b.replace('[js_APP]',app).replace('[js_APP_TABLE]',table).replace('TABLELABEL',jsSectionLable(app,d['table']))
	return f


def phpaction(table,fields):
	global phpCrudBase
	global functions
	crud = phpCrudBase['crud']
	crudToggle = phpCrudBase['crud_toggle']
	crudJoins = phpCrudBase['crud_joins']
	crudTables = phpCrudBase['crud_tables']



	funcname0 = '[funcname]'
	funcname1 = php_funcname(table)
	crud = crud.replace(funcname0,funcname1)
	crudToggle = crudToggle.replace(funcname0,funcname1)
	crudJoins = crudJoins.replace(funcname0,funcname1)
	crudTables = crudTables.replace(funcname0,funcname1)

	funcfields0 = '[funcfields_c]'
	funcfields1 = php_funcfields(fields,'c')
	crud = crud.replace(funcfields0,funcfields1)

	funcfields0 = '[funcfields_u]'
	funcfields1 = php_funcfields(fields,'u')
	crud = crud.replace(funcfields0,funcfields1)

	tfields0 = '[tfields]'
	tfields1 = php_tfields(fields)
	crud = crud.replace(tfields0,tfields1)

	vfields0 = '[vfields]'
	vfields1 = php_vfields(fields)
	crud = crud.replace(vfields0,vfields1)

	readfields0 = '[readfields]'
	readfields1 = php_readfields(table,fields)
	crud = crud.replace(readfields0,readfields1)
	crudTables = crudTables.replace(readfields0,readfields1)

	table0 = '[table]'
	table1 = table
	crud = crud.replace(table0,table1)

	updatefields0 = '[updatefields]'
	updatefields1 = php_updatefields(fields)
	crud = crud.replace(updatefields0,updatefields1)


	toggleArea0 = '[toggle]'
	toggleArea1 = php_toggleArea(crudToggle,fields)
	crud = crud.replace(toggleArea0,toggleArea1)

	joinsArea0 = '[joins]'
	joinsArea1 = php_joinsArea(crudJoins,table,fields)
	crud = crud.replace(joinsArea0,joinsArea1)

	joinsArea0 = '[table_data]'
	crud = crud.replace(joinsArea0,crudTables)

	# crud += php_combineTables()




	# crudToggle
	# crudJoins
	# crudTables




	# for line in crud.split('\n'):
	# 	if 'function ' in line:
	# 		function = clean(line.split('function ')[1].split('{')[0])
	# 		functions.append(function)
	# 		print(function)



	# print(crud)

	return crud

def actionable(row,omit):
	# field,type,length,default,note
	result = True
	for o in omit.split(','):
		if '*' in o:
			if o.replace('*','') in row['field']:
				result = False
		elif row['field'] == o:
			result = False
			
	if row['note'] == 'thisID':
		result = False
	# if row['note'] == 'thisID'
	if 'timestamp' in row['default']:
		result = False
	if 'auto' in row['default']:
		result = False
	if 'epoch' in row['note']:
		result = False
	# print(row['note'])
	return result




def jsAppTable(table):
	prefix = _.switches.value('Prefix')
	table = table.replace(prefix,'')
	table = 'x'+table.replace('_',' ')
	table = table.title()
	table = table[1:]
	table = table.replace(' ','')
	table = table.replace('_','')
	return table

def jsFieldVal(app,table,fields,spaces):
	abrev = []
	b = spaces + "try {[js_APP].[js_APP_TABLE].records[i].FIELD1 = $('#[js_APP]_' + i + '_FIELD2').val();} catch (err) { }\n"
	d = spaces + "try { $('#label_' + i + '_FIELD2').text([js_APP].[js_APP_TABLE].records[i].FIELD1); } catch (err) { }\n"
	f = ''
	label = ''
	processedFields = []
	for field in fields:
		if 'label' in field['field']:
			label = field['field']
		if actionable(field,'del'):
			fx = jsFieldName(table,field['field'])
			processedFields.append(fx)
			f += b.replace('FIELD2',field['field'].title()).replace('FIELD1',fx).replace('[js_APP]',app)
			if '_mid' in field['field']:
				pass
			elif '_id' in field['field']:
				pass
			elif 'toggle' in field['note']:
				pass
			else:
				f += d.replace('FIELD2',field['field'].title()).replace('FIELD1',fx).replace('[js_APP]',app)
	# f += b.replace('FIELD2',field['field'].title()).replace('FIELD1',fx).replace('[js_APP]',app)
	x = spaces + 'try {[js_APP].[js_APP_TABLE].records[i].label = '
	if 'label_' in label:
	
		for li in label.replace('label_','').split('_'):
			for pf in processedFields:
				if li in pf and not 'label' in pf:
					x += '[js_APP].[js_APP_TABLE].records[i].' + pf + '+" "+'
		x = _str.cleanBE(x,'+" "+')
	else:
		for pf in processedFields:
			if 'label' in pf:
				x += '[js_APP].[js_APP_TABLE].records[i].' + pf + ''
	x += '; } catch (err) { }\n'
	# print(label,x)
	if len(label) > 0:
		x = x.replace('[js_APP]',app)
		f += x
	# return ''
	return f

def jsFieldValToggle(app,table,fields,spaces):
	abrev = []
	b = spaces + "try {[js_APP].[js_APP_TABLE].records[i].FIELD1 = $('#[js_APP]_' + i + '_FIELD2').val();} catch (err) { }\n"
	b += spaces + "if ([js_APP].[js_APP_TABLE].records[i].FIELD1 === '1') {$('#toggle_' + i + '_FIELD2_on').css('display','inline-block');$('#toggle_' + i + '_FIELD2_off').css('display','none');} else {$('#toggle_' + i + '_FIELD2_on').css('display','none');$('#toggle_' + i + '_FIELD2_off').css('display','inline-block');}\n"
	f = ''
	for field in fields:
		if actionable(field,'del'):
			if 'toggle' in field['note']:
				fx = jsFieldName(table,field['field'])
				f += b.replace('FIELD2',field['field'].title()).replace('FIELD1',fx).replace('[js_APP]',app)
	f = _str.cleanBE(f,', ')
	return f


def jsFieldName(table,field):
	prefix = _.switches.value('Prefix')
	t = table.replace(prefix,'')
	return t + '_' + field
	# return field
	# return '_'+field


def jsValidateSection(app,table,fields,spaces):
	global jsValidate
	# print(jsValidate)
	# sys.exit()
	abrev = []
	f = ''
	for field in fields:
		if actionable(field,'del'):
			if 'email' in field['field']:
				b = jsValidate['email']
			elif field['type'] == 'int':
				b = jsValidate['int']
			else:
				b = jsValidate['text']
			fx = jsFieldName(table,field['field'])
			f += b.replace('FIELD',field['field'].title()).replace('[js_APP]',app).replace('[spaces]',spaces)
	f = _str.cleanBE(f,', ')
	return f

def jsHTMLFields(fields):
	f = ''
	for field in fields:
		if actionable(field,'del,*json,label_*'):
			f += field['field'] + ', '
	f = _str.cleanBE(f,', ')
	return f

def  jsHTMLUndefined(fields,spaces):
	f = ''
	b = "[spaces]if (typeof FIELD === 'undefined') { FIELD = 'DEFAULT'; }\n"
	for field in fields:
		if actionable(field,'del,*json,label_*'):
			f += b.replace('FIELD',field['field']).replace('[spaces]',spaces).replace('DEFAULT',field['default'])
	return f

def  jsHTMLROW(jsCrudBase,app,fields):
	global data

	# jsCrudBase['row_plain']
	# jsCrudBase['row_select']
	# jsCrudBase['row_toggle']

	f = ''
	hasStatus = False
	lastStatus = False
	for field in fields:
		if actionable(field,'del,*json,label_*'):
			tbl = ''
			tblLabel = ''
			if '_mid' in field['field']:
				for d in data['sql']:
					if field['field'].replace('_mid','') in d['table']:
						tbl = jsAppTable(d['table'])
						for fl in d['fields']:
							if 'label' in fl['field']:
								tblLabel = jsFieldName(d['table'],fl['field'])
								# print(d['table'],fl['field'])
								# print(tblLabel)
				code = jsCrudBase['row_select']
			elif '_id' in field['field']:
				code = jsCrudBase['row_hidden']
			elif 'toggle' in field['note']:
				code = jsCrudBase['row_toggle']
			else:
				code = jsCrudBase['row_plain']
			n = jsFieldLabel(field['field'])
			if lastStatus:
				lastStatus = False
				hasStatus = True
				f += jsCrudBase['more_button']

			f += code.replace('FIELD1',field['field']).replace('FIELD2',field['field'].title()).replace('[js_APP]',app).replace('FIELD3',n).replace('[js_APP_TABLE_ALT]',tbl).replace('[js_TABLE_LABEL]',tblLabel)
			if field['field'] == 'status':
				lastStatus = True
	if hasStatus:
		f += '\n</div>\\'
	return f

def  jsHTMLNull(app,table,fields,spaces):
	f = ''
	b = "[spaces]if ([js_APP].[js_APP_TABLE].records[i].FIELD === null) { [js_APP].[js_APP_TABLE].records[i].FIELD = 'DEFAULT'; }\n"
	for field in fields:
		if actionable(field,'del,*json,label_*'):
			f += b.replace('FIELD',jsFieldName(table,field['field'])).replace('[spaces]',spaces).replace('[js_APP]',app).replace('DEFAULT',field['default'])
	return f

def  jsHTMLFieldsJSON(app,table,fields):
	f = ''
	b = '[js_APP].[js_APP_TABLE].records[i].FIELD, '
	for field in fields:
		if actionable(field,'del,*json,label_*'):
			f += b.replace('FIELD',jsFieldName(table,field['field'])).replace('[js_APP]',app)
	f = _str.cleanBE(f,', ')
	return f

def jsAdd(app,table,fields):
	f = ''
	b = '"FIELD":"DEFAULT",'
	for field in fields:
		if actionable(field,'del,*json,label_*'):
			if table.endswith('_items') and field['field'].endswith('_id'):
				# print(jsFieldName(table,field['field']))
				f += b.replace('FIELD',jsFieldName(table,field['field'])).replace('"DEFAULT"',app+'.'+jsAppTable(table)+'.parent')
			else:
				f += b.replace('FIELD',jsFieldName(table,field['field'])).replace('DEFAULT',field['default'])
	f = _str.cleanBE(f,', ')
	return f

def  jsHTMLDefault(fields,spaces):
	f = ''
	b = "[spaces]if (FIELD1 === '') { FIELD1 = 'FIELD2'; }\n"
	for field in fields:
		if actionable(field,'del,*json,label_*'):
			n = jsFieldLabel(field['field'])
			f += b.replace('FIELD1',field['field']).replace('[spaces]',spaces).replace('FIELD2',n)
	return f
def  jsFormFocus(app,fields,spaces):
	f = ''
	b = "[spaces]if ('[js_APP]_'+idx+'_FIELD1' === id && $('#'+id).val() === 'FIELD2') { $('#'+id).val('') }\n"
	for field in fields:
		if actionable(field,'del,*json,label_*'):
			n = jsFieldLabel(field['field'])
			f += b.replace('FIELD1',field['field'].title()).replace('[spaces]',spaces).replace('FIELD2',n).replace('[js_APP]',app)
	return f

def  jsFormBlur(app,fields,spaces):
	f = ''
	b = "[spaces]if ( $('#'+[js_APP].v.lastID).hasClass('_FIELD1_') && $('#'+[js_APP].v.lastID).val() === '') { $('#'+[js_APP].v.lastID).val('FIELD2') }\n"
	for field in fields:
		if actionable(field,'del,*json,label_*'):
			n = jsFieldLabel(field['field'])
			f += b.replace('FIELD1',field['field'].title()).replace('[spaces]',spaces).replace('FIELD2',n).replace('[js_APP]',app)
	return f

def jsFieldLabel(field):
	return field.replace('_mid','').replace('_id','').replace('_',' ').replace('dvalue','value').replace('percentage','%').title()

def  jsaField(app,fields):
	f = ''
	b = "'#[js_APP]_' + i + '_FIELD2'"
	found = False
	for field in fields:
		if actionable(field,'del,*json,label_*'):
			if '_mid' in field['field']:
				pass
			elif 'toggle' in field['note']:
				pass
			else:
				if not found:
					found = True
					f = b.replace('FIELD2',field['field'].title()).replace('[js_APP]',app)
	return f

def jsResolveIDs(app):
	global jsCrudBase
	global data
	f = ''
	for d in data['sql']:
		found = False
		for fl in d['fields']:
			if 'label' in fl['field']:
				found = True
		if found:
			table = jsAppTable(d['table'])
			f += jsCrudBase['resolveids'].replace('[js_APP]',app).replace('[js_APP_TABLE]',table)
	return f

def jsAddChildDiv(app,table):
	global data
	global jsCrudBase
	f = ''
	found = False
	for d in data['sql']:
		if d['table'] == (table + '_items') or d['table'] == (table[:-1] + '_items'):
			print(d['table'])
			found = True
		if found:
			# f = '$(\'[js_main_app_id]\').append(\'<div class="thechild"></div>\');'
			f = jsCrudBase['manage_children']
	f = f.replace('[js_APP]',app)
	f = f.replace('[js_APP_TABLE]',jsAppTable(table))
	return f

def jsMainAppId(app,table):
	# if table.endswith('_items'):
	# 	f = '.thechild'
	# else:
	# 	f = '#manage'
	# return f
	return '#manage'

def jsChildManageFunction(app,table):
	global data
	f = ''
	found = False
	for d in data['sql']:
		if d['table'] == (table + '_items') or d['table'] == (table[:-1] + '_items'):
			f = '[js_APP].[js_APP_TABLE].parent = guid;  [js_APP].[js_APP_TABLE].manage();'
			f = f.replace('[js_APP_TABLE]',jsAppTable(d['table']))
	f = f.replace('[js_APP]',app)
	return f

def jsIsChild(app,table):
	if table.endswith('_items'):
		f = 'true'
	else:
		f = 'false'
	return f


def jsSectionLable(app,table):
	prefix = _.switches.value('Prefix')
	table = table.replace(prefix,'')
	table = table.replace('_',' ')
	table = table.title()
	return table

def jsFieldPrefix(table,fields):
	f = ''
	found = False
	for field in fields:
		if not found:
			x = jsFieldName(table,field['field'])
			f = x.replace(field['field'],'')
			if not x == f:
				found = True
	return f



def jsSelectPageUn(app,table,fields):
	global data
	global jsCrudBase
	prefix = _.switches.value('Prefix')
	f = ''
	found = False
	for field in fields:
		if field['note'] == 'altID':
			fx = field['field'].replace('_mid','').replace('_id','')
			tx = prefix + fx
			for i,tablex in enumerate(data['sql']):
				if tablex['table'] == tx:
					print(table,tx)
					t = jsAppTable(tx)
					g = jsFieldName(table,field['field'])
					found = True


	if found:
		f = jsCrudBase['selectpage_unspecific_has_group']
		f = f.replace('[js_APP_TABLE_GROUP]',t)
		f = f.replace('[js_group_id]',g)
	else:
		f = jsCrudBase['selectpage_unspecific_no_group']
	f = f.replace('[js_APP]',app)
	f = f.replace('[js_APP_TABLE]',jsAppTable(table))
	return f


def jsDataOut(app):
	global data
	f = ''
	b = '        [js_APP].v.tables[\'[js_APP_TABLE]\'] = [js_APP].[js_APP_TABLE].records;\n'
	for i,table in enumerate(data['sql']):
		t = t = jsAppTable(table['table'])
		f += b.replace('[js_APP]',app).replace('[js_APP_TABLE]',t)
	return f

def jsDataIn(app):
	global data
	f = ''
	b = '        [js_APP].[js_APP_TABLE].records = [js_APP].v.tables.[js_APP_TABLE];\n'
	for i,table in enumerate(data['sql']):
		t = t = jsAppTable(table['table'])
		f += b.replace('[js_APP]',app).replace('[js_APP_TABLE]',t)
	return f



def jsaction(table,fields):
	global jsCrudBase
	crud = jsCrudBase['crud']
	# jsCrudBase['row_plain']
	# jsCrudBase['row_select']

	app = _.switches.value('App')


	crud = crud.replace('[js_APP]',app.lower())
	crud = crud.replace('[js_update_json_field_data_0]',jsFieldVal(app,table,fields,'        '))
	crud = crud.replace('[js_update_json_field_data_1]',jsFieldVal(app,table,fields,'                    '))
	crud = crud.replace('[js_update_json_field_data_2]',jsFieldVal(app,table,fields,'                    '))
	crud = crud.replace('[js_update_json_field_data_3]',jsFieldValToggle(app,table,fields,'                    '))
	crud = crud.replace('[js_VALIDATE]',jsValidateSection(app,table,fields,'                        '))
	crud = crud.replace('[JS_HTML_FIELDS]',jsHTMLFields(fields))
	crud = crud.replace('[js_HTML_ROW_undefined]',jsHTMLUndefined(fields,'            '))
	crud = crud.replace('[js_HTML_ROW]\\',jsHTMLROW(jsCrudBase,app,fields))
	# crud = crud.replace('[js_HTML_ROW_null]',jsHTMLNull(app,table,fields,'                '))
	crud = crud.replace('[js_HTML_ROW_null]','')
	crud = crud.replace('[js_HTMLFieldsJSON]',jsHTMLFieldsJSON(app,table,fields))
	crud = crud.replace('[js_add]',jsAdd(app,table,fields))
	crud = crud.replace('[js_HTML_ROW_Default]',jsHTMLDefault(fields,'            '))
	crud = crud.replace('[js_form_Focus]',jsFormFocus(app,fields,'        '))
	crud = crud.replace('[js_form_Blur]',jsFormBlur(app,fields,'            '))
	crud = crud.replace('[js_a_Field]',jsaField(app,fields))
	crud = crud.replace('[js_HTML_ROW_Val]',jsFieldVal(app,table,fields,'                    '))
	crud = crud.replace('[js_resolveids]',jsResolveIDs(app))
	crud = crud.replace('[js_add_child_div]',jsAddChildDiv(app,table))
	crud = crud.replace('[js_main_app_id]',jsMainAppId(app,table))
	crud = crud.replace('[js_child_manage_function]',jsChildManageFunction(app,table))
	crud = crud.replace('[js_is_child]',jsIsChild(app,table))
	crud = crud.replace('[js_section_label]',jsSectionLable(app,table))
	crud = crud.replace('[js_field_prefix]',jsFieldPrefix(table,fields))
	crud = crud.replace('[js_selectpage_unspecific]',jsSelectPageUn(app,table,fields))

	crud = crud.replace('[js_data_out]',jsDataOut(app))
	crud = crud.replace('[js_data_in]',jsDataIn(app))


	# crud = crud.replace('[js_HTML_ROW_Val_DEL]',jsFieldDel(app))




	crud = crud.replace('[js_APP_TABLE]',jsAppTable(table))

	return crud









def pagesIndexMenu():
	global pageData
	global data
	app = _.switches.value('App')
	b = '              <li><a onclick="[js_APP].[js_APP_TABLE].manage();">Manage TABLELABEL</a></li>\n'
	f = ''
	for d in data['sql']:
		if not '_items' in d['table']:
			table = jsAppTable(d['table'])
			f += b.replace('[js_APP]',app).replace('[js_APP_TABLE]',table).replace('TABLELABEL',jsSectionLable(app,d['table']))
	return f




# def pages():
# 	# global pageData
# 	app = _.switches.value('App')
# 	# pageData['index']
# 	return 

def php_allTables():
	global data
	global phpCrudBase

	app = _.switches.value('App')
	b = '	$tables["[js_APP_TABLE]"] = the_table_[funcname]();\n'
	f = ''
	for d in data['sql']:
		if not '_items' in d['table']:
			table = jsAppTable(d['table'])
			ft = php_funcname(d['table'])
			f += b.replace('[js_APP]',app).replace('[js_APP_TABLE]',table).replace('[funcname]',ft)
	return f

def action():
	global data
	# phpaction()
	sInput = _.switches.value('Input')
	sApp = _.switches.value('App')
	sPrefix = _.switches.value('Prefix')
	import auditSQL
	_.switches.fieldSet('Input','active',True)
	_.switches.fieldSet('Input','value',sInput)

	_.switches.fieldSet('App','active',True)
	_.switches.fieldSet('App','value',sApp)
	
	_.switches.fieldSet('Prefix','active',True)
	_.switches.fieldSet('Prefix','value',sPrefix)
	data = auditSQL.action()
	# print(__.appReg)
	focus()
	# print(__.appReg)
	
	# print(data)
	# print(data['sql'])



	phpcrud = ''
	jscrud = ''
	for i,table in enumerate(data['sql']):
		# if i == 1:
		jscrud += jsaction(table['table'],table['fields'])
		phpcrud += phpaction(table['table'],table['fields'])

	phpcrud += phpCrudBase['crud_tables_all'].replace('[php_all_tables]',php_allTables())

	_.saveText('<?PHP\ninclude("_functions.php");\n'+phpcrud+'\n?>','_auto_functions.php')
	_.saveText(jscrud,'_auto_functions.js')
	_.saveText(pageData['index'].replace('[html_menu]',pagesIndexMenu()),'index.php')



	# for i,table in enumerate(data['sql']):
	# 	print()
	# 	print(table['table'])
	# 	for field in table['fields']:
	# 		if actionable(field):
	# 			pass
	# 			print(field['field'])

			# print('\t',field['field'])
		# print(table['fields'])
		# _.tables.register('fields',table['fields'])
		# _.tables.print('fields','field,type,length,default,note')
			# print(field.keys())


data = []
##########################
theFile = _.getText(_v.webapp + '\\crud.php')
fileContent = ''
for i,c in enumerate(theFile):
	if i > 0:
		fileContent += c
phpCrudBase = {}
phpCrudBase['crud'] = fileContent
##########################
theFile = _.getText(_v.webapp + '\\crud_toggle.php')
fileContent = ''
for i,c in enumerate(theFile):
	if i > 0:
		fileContent += c
phpCrudBase['crud_toggle'] = fileContent
##########################
theFile = _.getText(_v.webapp + '\\crud_joins.php')
fileContent = ''
for i,c in enumerate(theFile):
	if i > 0:
		fileContent += c
phpCrudBase['crud_joins'] = fileContent
##########################
theFile = _.getText(_v.webapp + '\\crud_tables.php')
fileContent = ''
for i,c in enumerate(theFile):
	if i > 0:
		fileContent += c
phpCrudBase['crud_tables'] = fileContent
##########################
theFile = _.getText(_v.webapp + '\\crud_tables_all.php')
fileContent = ''
for i,c in enumerate(theFile):
	if i > 0:
		fileContent += c
phpCrudBase['crud_tables_all'] = fileContent
##########################
##########################
theFile = _.getText(_v.webapp + '\\crud.js')
fileContent = ''
for i,c in enumerate(theFile):
	fileContent += c
jsCrudBase = {}
jsCrudBase['crud'] = fileContent
##########################
theFile = _.getText(_v.webapp + '\\crud_HTML_ROW.js')
fileContent = ''
for i,c in enumerate(theFile):
	fileContent += c
jsCrudBase['row_plain'] = fileContent
##########################
theFile = _.getText(_v.webapp + '\\crud_HTML_ROW_Pull_Down.js')
fileContent = ''
for i,c in enumerate(theFile):
	fileContent += c
jsCrudBase['row_select'] = fileContent
##########################
theFile = _.getText(_v.webapp + '\\crud_HTML_ROW_Hidden.js')
fileContent = ''
for i,c in enumerate(theFile):
	fileContent += c
jsCrudBase['row_hidden'] = fileContent
##########################
theFile = _.getText(_v.webapp + '\\crud_HTML_ROW_Toggle.js')
fileContent = ''
for i,c in enumerate(theFile):
	fileContent += c
jsCrudBase['row_toggle'] = fileContent
##########################
theFile = _.getText(_v.webapp + '\\crud_HTML_ROW_MORE_.js')
fileContent = ''
for i,c in enumerate(theFile):
	fileContent += c
jsCrudBase['more_button'] = fileContent
##########################
theFile = _.getText(_v.webapp + '\\crud_manage_children.js')
fileContent = ''
for i,c in enumerate(theFile):
	fileContent += c
jsCrudBase['manage_children'] = fileContent
##########################
theFile = _.getText(_v.webapp + '\\crud_resolveids.js')
fileContent = ''
for i,c in enumerate(theFile):
	fileContent += c
jsCrudBase['resolveids'] = fileContent
##########################
theFile = _.getText(_v.webapp + '\\crud_selectpage_unspecific_no_group.js')
fileContent = ''
for i,c in enumerate(theFile):
	fileContent += c
jsCrudBase['selectpage_unspecific_no_group'] = fileContent
##########################
theFile = _.getText(_v.webapp + '\\crud_selectpage_unspecific_has_group.js')
fileContent = ''
for i,c in enumerate(theFile):
	fileContent += c
jsCrudBase['selectpage_unspecific_has_group'] = fileContent
##########################
##########################
theFile = _.getText(_v.webapp + '\\crud_validate_email.js')
fileContent = ''
for i,c in enumerate(theFile):
	fileContent += c
jsValidate = {}
jsValidate['email'] = fileContent
##########################
theFile = _.getText(_v.webapp + '\\crud_validate_text.js')
fileContent = ''
for i,c in enumerate(theFile):
	fileContent += c
jsValidate['text'] = fileContent
##########################
theFile = _.getText(_v.webapp + '\\crud_validate_int.js')
fileContent = ''
for i,c in enumerate(theFile):
	fileContent += c
jsValidate['int'] = fileContent
##########################
##########################
theFile = _.getText(_v.webapp + '\\index.php')
fileContent = ''
for i,c in enumerate(theFile):
	fileContent += c
pageData = {}
pageData['index'] = fileContent
##########################
functions = []


########################################################################################
if __name__ == '__main__':
	action()


# n %tmpf3%

#  -table _reph_signature_+staff_type -fields label
# -table _reph_signature_+staff -fields first last email availabilityjson addressjson stafftypeid
# -table _reph_signature_+services -fields label durationjson dvalue stafftypeid
# -table _reph_signature_+appointments -fields customerid time_start time_end
# -table _reph_signature_+appointment_items -fields appointmentid serviceid dvalue duration
# -table _reph_signature_+customers -fields first last email availabilityjson addressjson

# n %tmpf4%


# type %tmpf3% | p line --c -make "p crud {} >> %tmpf4% " | p execute


// To Do
// [js_APP].v.save  log save function on blur


[js_APP].[js_APP_TABLE] = {
    records: [],
    isChild: [js_is_child],
    parent: '',
    px: '',
    sectionlabel: '[js_section_label]',
    fieldprefix: '[js_field_prefix]',
    del: function(i) {
[js_update_json_field_data_0]

        [js_APP].[js_APP_TABLE].records[i].action_del = 'Y';
        $('#row_' + i).remove();
        $("#unDelete").css('display','inline-block');
        var ix = 0;
        for (var iy = [js_APP].[js_APP_TABLE].records.length - 1; iy >= 0; iy--) {
            if ([js_APP].[js_APP_TABLE].records[iy].action_del === 'N') {
                ix++;
            }
        }
    }, //==============================================
    dataIn: function() {
[js_data_in]
    }, //==============================================
    dataOut: function() {
        [js_APP].v.tables = {};
[js_data_out]
    }, //==============================================
    weekDateToDate: function(year, week, day) {
      const firstDayOfYear = new Date(year, 0, 1);
      const days = 2 + day + (week - 1) * 7 - firstDayOfYear.getDay();
      return new Date(year, 0, days);
    }, //==============================================
    getWeekNumber: function(d) {
        d = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));
        d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay()||7));
        var yearStart = new Date(Date.UTC(d.getUTCFullYear(),0,1));
        var weekNo = Math.ceil(( ( (d - yearStart) / 86400000) + 1)/7);
        return [d.getUTCFullYear(), weekNo];
        // return weekNo;
    }, //==============================================
    thisweek: function() {
        [js_APP].v.area = 'weeks';
        if ([js_APP].v.save.length > 0) {
            eval([js_APP].v.save);
        }
        [js_APP].v.save = '';
        var result = [js_APP].[js_APP_TABLE].getWeekNumber(new Date());
        [js_APP].v.week = result[1];
        [js_APP].v.year = result[0];
        [js_APP].[js_APP_TABLE].displayweek();
        // [js_APP].[js_APP_TABLE].thisweek();
    }, //==============================================
    weekup: function() {
        [js_APP].v.week ++;
        [js_APP].[js_APP_TABLE].displayweek();
    }, //==============================================
    weekdown: function() {
        [js_APP].v.week --;
        [js_APP].[js_APP_TABLE].displayweek();
    }, //==============================================
    epochresolve: function(epoch,datestring) {
        var d = new Date(Number(epoch));
        if (datestring === 'string') {
            var thedate = d.toString().split(' ');
            var result = thedate[0]+' '+thedate[1]+' '+thedate[2]+' '+thedate[3];
        } else {
            var result = d;
        }
        return result;
    }, //==============================================
    displayweek: function() {
        $('[js_main_app_id]').html('<div id="datearea"></div>');
        $('#datearea').append('<br /><br />');
        for (var i = 0; i < 6; i++) {
            var thedate = [js_APP].[js_APP_TABLE].weekDateToDate([js_APP].v.year,[js_APP].v.week,i).toString().split(' ');
            var epoch = [js_APP].[js_APP_TABLE].weekDateToDate([js_APP].v.year,[js_APP].v.week,i).getTime();
            var displaydate = thedate[0]+' '+thedate[1]+' '+thedate[2]+' '+thedate[3];
            $('#datearea').append('<div id="date_'+i+'_day" class="dateitem" epoch="'+epoch+'"><span class="datetitle" onclick="[js_APP].v.selecteddate=\''+epoch+'\';signature.staff.selectpageunspecific(\'\');">'+displaydate+'</span><div class="dayreport"></div></div>');
            // $('[js_main_app_id]').append('<div onclick="[js_APP].v.selecteddate=\''+epoch+'\';signature.staff.selectpageunspecific(\'\');">'+displaydate+' epoch: '+epoch+'</div>');
            if ((i+1) % 3 === 0) {
                $('#datearea').append('<br />');
            }
        }


        [js_APP].v.unspecificpost = 'signature.special.buildPageFromJSON();';
        // [js_APP].v.unspecificpost = 'alert([js_APP].[js_APP_TABLE].epochresolve([js_APP].v.selecteddate,\'string\') +" "+ [js_APP].v.selecteddate +" "+ [js_APP].[js_APP_TABLE].resolveidunspecific([js_APP].v.selectedguid));';

        $('[js_main_app_id]').prepend('<div id="theweektotals"></div>');
        $('[js_main_app_id]').prepend('<div><div class="button" onclick="[js_APP].[js_APP_TABLE].weekdown()" style="padding: 5px">last week</div> &nbsp; <div class="button" onclick="[js_APP].[js_APP_TABLE].weekup()" style="padding: 5px">next week</div></div>');
        $('[js_main_app_id]').prepend('<div>'+[js_APP].v.week+'</div>');
        try {
            if ([js_APP].v.cal_script.length > 0) {
                eval([js_APP].v.cal_script);
            } else {
            }
        } catch (err) {console.log('error');}
    },//==============================================
    refreshselectionunspecific: function() {
        // console.log([js_APP].v.searchfor);
        var action = [js_APP].v.refreshaction.replace('SEARCHHERE',[js_APP].v.searchfor);
        // console.log(action);
        eval(action);
    },//==============================================
    selectpageunspecific: function(search) {
        $('#selectsomething').remove();
        $('body').append('<div id="selectsomething"><span class="close" onClick="$(\'#selectsomething\').remove();">X</span><div id="selectsomethinginner"><span id="selectheader">'+[js_APP].[js_APP_TABLE].sectionlabel+'</span><hr /><input type="text" id="selectsearch" value="'+search+'"><br /><div class="items"></div></div></div>');
        // var labels = [];
[js_selectpage_unspecific]
        // for (var i = 0; i < labels.length; i++) {}
        if ([js_APP].[js_APP_TABLE].records.length === 0) {
            $('#selectsomething .items').append('<div class="item" >No Records</div>');
            $('#selectsomething .items').append('<div class="item" ></div>');
            $('#selectsomething .items').append('<div class="item button" onClick="[js_APP].[js_APP_TABLE].manage();$(\'#selectsomething\').remove();">Add Record</div>');
            $('#selectsearch').remove();
        } else {
            [js_APP].v.refreshaction = '[js_APP].[js_APP_TABLE].selectpageunspecific(\'SEARCHHERE\');';
            $('#selectsomething').append('<script>$("#selectsearch").keyup(function() {[js_APP].v.searchfor = $("#selectsearch").val();[js_APP].[js_APP_TABLE].doThisWhenDone("autosearch", 200, [js_APP].[js_APP_TABLE].refreshselectionunspecific);});</script>');        
            $('#selectsearch').focusTextToEnd();
        }
    }, //==============================================
    manage: function() {
        [js_APP].v.area = '[js_APP_TABLE]';
        if ([js_APP].v.save.length > 0) {
            eval([js_APP].v.save);
        }
        [js_APP].v.save = '[js_APP].[js_APP_TABLE].varUpdate();';


        if ([js_APP].[js_APP_TABLE].isChild) {
            var data = {"field_id":"0","label":"","guid":[js_APP].[js_APP_TABLE].guid(),[js_add]"action_del":"N"};
            var keys = Object.keys(data);
            for (var i = 0; i < keys.length; i++) {
                if (keys[i].includes('_id') && keys[i] !== 'field_id') {
                    [js_APP].[js_APP_TABLE].px = keys[i];
                }
            }
        }

        $('[js_main_app_id]').html('');
        if ([js_APP].[js_APP_TABLE].records.length === 0) {
            [js_APP].[js_APP_TABLE].add();
        } else {
            [js_APP].[js_APP_TABLE].buildPageFromJSON();
        }
        
        // [js_APP].[js_APP_TABLE].manage();
    }, //==============================================
    add: function() {
        var data = {"field_id":"0","label":"","guid":[js_APP].[js_APP_TABLE].guid(),[js_add]"action_del":"N"};

        [js_APP].[js_APP_TABLE].varUpdate();
        [js_APP].[js_APP_TABLE].records.push(data);
        [js_APP].[js_APP_TABLE].buildPageFromJSON();
        return data
    }, //==============================================
    varUpdate: function(id,tog) {
        try {
            for(var i = 0;i < [js_APP].[js_APP_TABLE].records.length; i++){
                if ([js_APP].[js_APP_TABLE].hasFields()) {
[js_HTML_ROW_Val]
                }
            }
        } catch (err) {}
//         try {
//             for(var i = 0;i < [js_APP].[js_APP_TABLE].records.length; i++){
//                 if ([js_APP].[js_APP_TABLE].hasFields()) {
// [js_HTML_ROW_Val_DEL]
//                 }
//             }
//         } catch (err) {}
        // console.log([js_APP].[js_APP_TABLE].records);
    }, //==============================================
    togglerow: function(id,tog) {
        if (!tog) {
            ans = confirm('Restore?');
        } else {
            ans = confirm('Used?');
        }
        if (ans) {
            window.location.href = '?id=' + id + '&toggle='+tog+'&manage';
        }
    }, //==============================================
    valid: function() {
        var valid = true;
        var ix = 0
        try {
            for (var iy = [js_APP].[js_APP_TABLE].records.length - 1; iy >= 0; iy--) {
                if ([js_APP].[js_APP_TABLE].records[iy].action_del === 'N') {
                    ix++;
                }
            }
        } catch (err) {}
        try {
            for (var i = 0; i < [js_APP].[js_APP_TABLE].records.length; i++) {
                try {
                    if ([js_APP].[js_APP_TABLE].records[i].action_del === 'N') {
[js_VALIDATE]
                    }
                } catch (err) {}
            }
        } catch (err) {}
        return valid
    }, //==============================================
    excel: function() {
        [js_APP].[js_APP_TABLE].download('excel.php','certificates.csv');
    }, //==============================================
    download: function(uri, filename) {
        var link = document.createElement('a');
        if (typeof link.download === 'string') {
            document.body.appendChild(link);
            link.download = filename;
            link.href = uri;
            link.click();
            document.body.removeChild(link);
        } else {
            location.replace(uri);
        }
    }, //==============================================
    send: function() {
        if ([js_APP].[js_APP_TABLE].valid()) {

            $('body').append([js_APP].v.loader);

            for (var i = 0; i < [js_APP].[js_APP_TABLE].records.length; i++) {
                try {
[js_update_json_field_data_1]

                } catch (err) {}
            }
            $('#JSON').val(JSON.stringify([js_APP].[js_APP_TABLE].records));
            $.post("[js_PHP_FILE_SEND]", $("#form").serialize())
                .done(function(data) {
                    console.log(data);
                    try {
                        [js_APP].[js_APP_TABLE].records = JSON.parse(data)


                    } catch (err) {
                        alert('Error');
                    }
                    $('#loading').remove();
                });
        }
    }, //==============================================
    loadJSON: function() {
        if ([js_APP].shared.isLoaded(3)) {
            [js_APP].[js_APP_TABLE].buildPageFromJSON();
        } else {
            setTimeout(function() { [js_APP].[js_APP_TABLE].loadJSON(); }, 800);
        }
    },//==============================================
    unDelete: function() {
        $("#unDelete").css('display','none');
        for (var i = 0; i < [js_APP].[js_APP_TABLE].records.length; i++) {
            try {
[js_update_json_field_data_2]

                [js_APP].[js_APP_TABLE].records[i].action_del = 'N';
            } catch(err) {
                [js_APP].[js_APP_TABLE].records[i].action_del = 'N';
            }
        }
        //[js_APP].[js_APP_TABLE].records = JSON.parse([js_APP].v.recover);
        [js_APP].[js_APP_TABLE].buildPageFromJSON();
    },//==============================================
    hasFields: function() {
        var result = false;
        for (var i = 0; i < [js_APP].[js_APP_TABLE].records.length; i++) {
            if ( $( [js_a_Field] ).length ) {
                result = true;
            }
        }
        return result;
        // 
    },//==============================================
    resolveidunspecific: function(id) {
        // console.log(idx+' - '+labelid+' - '+id);
        var found = false;
        var label = '';
        if (id.length > 0) {
[js_resolveids]
        }
        // console.log(found,label);
        return label;
        // [js_APP].[js_APP_TABLE].resolveids();
    },//==============================================
    resolveid: function(idx,id,labelid) {
        // console.log(idx+' - '+labelid+' - '+id);
        var found = false;
        var label = '';
        if (id.length > 0) {
[js_resolveids]
        }
        // console.log(found,label);
        if (found) {
            $('#'+labelid).text(label);
        }
        // [js_APP].[js_APP_TABLE].resolveids();
    },//==============================================
    resolveids: function() {
        $('.resolvethisid').each(function( index ) {
            [js_APP].[js_APP_TABLE].resolveid($(this).parent().parent().parent().attr('idx'),$(this).val(),$(this).parent().parent().attr('findlabel'))
        });
    },//==============================================
    formBlur: function() {
        // console.log('formBlur');
        if ([js_APP].v.area !== 'timelog') {
[js_form_Blur]
            [js_APP].[js_APP_TABLE].varUpdate();
            $('.itemLabel').css('display','inline-block');
            $('input').css('display','none');
        }
    },//==============================================
    toggleSwitches: function() {
        [js_APP].[js_APP_TABLE].varUpdate();
        for (var i = 0; i < [js_APP].[js_APP_TABLE].records.length; i++) {
            try {
                if ([js_APP].[js_APP_TABLE].records[i].action_del === 'N') {
[js_update_json_field_data_3]
                }

            } catch(err) {}
        }
    },//==============================================
    toggle: function(p,field,vid,lid) {
        // console.log($('#'+vid).val());
        if ($('#'+vid).val() === '1') {
            $('#'+vid).val(0);
            $('#'+p+' .toggleOn').css('display','none');
            $('#'+p+' .toggleOff').css('display','inline-block');
        } else {
            $('#'+vid).val(1);
            $('#'+p+' .toggleOn').css('display','inline-block');
            $('#'+p+' .toggleOff').css('display','none');
        }
    },//==============================================
    selected: function(i,label,tbl,field,vid,lid,tableLabel) {
        $('#selectsomething').remove();
        $('#'+vid).val([js_APP].[js_APP_TABLE].records[i]['guid'])
        $('#'+lid).text([js_APP].[js_APP_TABLE].records[i]['label']);
    },//==============================================
    refreshselection: function() {
        // console.log([js_APP].v.searchfor);
        var action = [js_APP].v.refreshaction.replace('SEARCHHERE',[js_APP].v.searchfor);
        // console.log(action);
        eval(action);
    },//==============================================
    selectpage: function(label,tbl,field,vid,lid,tableLabel,search) {
        $('#selectsomething').remove();
        $('body').append('<div id="selectsomething"><span class="close" onClick="$(\'#selectsomething\').remove();">X</span><div id="selectsomethinginner"><span id="selectheader">'+label+'</span><hr /><input type="text" id="selectsearch" value="'+search+'"><br /><div class="items"></div></div></div>');
        var labels = [];
        try {
            for (var i = 0; i < [js_APP].[js_APP_TABLE].records.length; i++) {
                if ([js_APP].[js_APP_TABLE].records[i][[js_APP].[js_APP_TABLE].fieldprefix+'status'] === '1') {
                    labels.push([js_APP].[js_APP_TABLE].records[i]['label']);
                }
            }
        } catch(err) {}
        for (var i = 0; i < labels.length; i++) {
            if (search.length > 0) {
                if (labels[i].includes(search)) {
                    $('#selectsomething .items').append('<div class="item" onclick="[js_APP].[js_APP_TABLE].selected(\''+i+'\',\''+label+'\',\''+tbl+'\',\''+field+'\',\''+vid+'\',\''+lid+'\',\''+tableLabel+'\');">'+labels[i]+'</div>');
                }
            } else {
                $('#selectsomething .items').append('<div class="item" onclick="[js_APP].[js_APP_TABLE].selected(\''+i+'\',\''+label+'\',\''+tbl+'\',\''+field+'\',\''+vid+'\',\''+lid+'\',\''+tableLabel+'\');">'+labels[i]+'</div>');
            }
        }
        if (labels.length === 0) {
            $('#selectsomething .items').append('<div class="item" >No Records</div>');
            $('#selectsomething .items').append('<div class="item" ></div>');
            $('#selectsomething .items').append('<div class="item button" onClick="[js_APP].[js_APP_TABLE].manage();$(\'#selectsomething\').remove();">Add Record</div>');
            $('#selectsearch').remove();
        } else {
            [js_APP].v.refreshaction = '[js_APP].'+tbl+'.selectpage(\''+label+'\',\''+tbl+'\',\''+field+'\',\''+vid+'\',\''+lid+'\',\''+tableLabel+'\',\'SEARCHHERE\');';
            $('#selectsomething').append('<script>$("#selectsearch").keyup(function() {[js_APP].v.searchfor = $("#selectsearch").val();[js_APP].[js_APP_TABLE].doThisWhenDone("autosearch", 200, [js_APP].[js_APP_TABLE].refreshselection);});</script>');
            $('#selectsearch').focusTextToEnd();
        }
    },//==============================================
    select: function(label,tbl,field,vid,lid,tableLabel) {
        // alert(label+' '+tbl);
        // console.log('1');
        var taskAction = '[js_APP].'+tbl+'.selectpage(\''+label+'\',\''+tbl+'\',\''+field+'\',\''+vid+'\',\''+lid+'\',\''+tableLabel+'\',\'\');';
        // console.log('2');
        eval(taskAction);
        // console.log(taskAction)
        // console.log('3');
    },//==============================================
    formFocus: function(idx,id) {
        [js_APP].v.lastID = id;
        [js_APP].v.lastIDX = idx;
[js_form_Focus]
    },//==============================================
    managechildren: function(guid) {
        // console.log(guid);
        // $('.thechild').remove();
        // $('.managechildrenbutton').remove();
        // $('.certItemParent').each(function( index ) {
        //     console.log('each - '+$(this).attr('guid'));
        //     if ($(this).attr('guid') !== guid) {
        //         console.log('not match');
        //         $(this).remove();
        //     }
        // });
        // $("[guid='"+guid+"']").append('<div class="thechild"></div>');
        [js_child_manage_function]


        // console.log('done');
    },//==============================================
    saveThenOpen: function() {
        [js_APP].shared.close();
        [js_APP].shared.runWhen(null, 'closed', function(){[js_APP].[js_APP_TABLE].obj.edit();});
    }, //==============================================
    htmlRow: function(i, id, guid, [JS_HTML_FIELDS]) {
            if (typeof i === 'undefined') {
                i = [js_APP].[js_APP_TABLE].records.length - 1;
            }
            if (typeof id === 'undefined') {
                id = 0;
            }
            
[js_HTML_ROW_undefined]

[js_HTML_ROW_Default]

            $('[js_main_app_id]').append('\
            <div id="row_' + i + '" class="certItemParent certItem" idx="' + i + '" guid="' + guid + '" onblur="$(\'.morebutton\').css(\'display\',\'inline-block\');$(\'.more\').css(\'display\',\'none\');">\
                <div id="eDelete' + i + '" class="eDelete" title="delete" onClick="[js_APP].[js_APP_TABLE].del(' + i + ');">\
                   <img src="images/delete.png">\
                </div>\[js_HTML_ROW]\
                <br />\
                <div id="someSpace"></div>\
                [js_add_child_div]\
            </div>\
            <input name="id_' + i + '" type="hidden" id="id_' + i + '" value="' + id + '"/>');
                // <div class="thechild"></div>\
    }, //==============================================
    buildPageFromJSON: function() {
        // [js_APP].[js_APP_TABLE].varUpdate();
        // console.log('buildPageFromJSON');
        //[js_APP].v.recover = JSON.stringify([js_APP].[js_APP_TABLE].records);
        $('[js_main_app_id]').html('');

        try {
            for(var i = 0;i < [js_APP].[js_APP_TABLE].records.length; i++){
[js_HTML_ROW_null]
                if ([js_APP].[js_APP_TABLE].records[i].action_del === 'N') {
                    if ([js_APP].[js_APP_TABLE].isChild) {
                        if ([js_APP].[js_APP_TABLE].parent === [js_APP].[js_APP_TABLE].records[i][[js_APP].[js_APP_TABLE].px]) {
                            [js_APP].[js_APP_TABLE].htmlRow(i, [js_APP].[js_APP_TABLE].records[i].field_id, [js_APP].[js_APP_TABLE].records[i].guid, [js_HTMLFieldsJSON]);
                        }

                    } else {
                        [js_APP].[js_APP_TABLE].htmlRow(i, [js_APP].[js_APP_TABLE].records[i].field_id, [js_APP].[js_APP_TABLE].records[i].guid, [js_HTMLFieldsJSON]);
                    }
                    
                    // [js_APP].[js_APP_TABLE].htmlRow(i, field_id, first, last, email, certificate, cnt, dvalue, status);
                }
            }
        } catch (err) {}
        [js_APP].[js_APP_TABLE].varUpdate();
        $('.add').remove();
        $('.save').remove();
        $('[js_main_app_id]').append('<br /><br /><br />');
        $('[js_main_app_id]').append('<div class="button add" onclick="[js_APP].[js_APP_TABLE].add();">Add</div>');
        $('[js_main_app_id]').append('<div class="button save" onclick="[js_APP].[js_APP_TABLE].varUpdate();">Save</div>');
        $('[js_main_app_id]').append("<script>$( '.[js_APP]box' ).focus(function() { [js_APP].[js_APP_TABLE].doThisWhenDone('field_focus', 8000, [js_APP].[js_APP_TABLE].formBlur);[js_APP].[js_APP_TABLE].formFocus($(this).parent().parent().parent().attr('idx'),$(this).attr('id')); });</script>");
        $('[js_main_app_id]').append("<script>$( '.[js_APP]box' ).blur(function() { [js_APP].[js_APP_TABLE].formBlur(); });</script>");
        $('[js_main_app_id]').append("<script>$( '.thetoggle' ).hover( function() { $('#'+$(this).attr('relatedfield')).css('display','inline-block'); }, function() { $( '.togglelabel' ).css('display','none' ); } );</script>");
        $('[js_main_app_id]').prepend('<div id="thesection">'+[js_APP].[js_APP_TABLE].sectionlabel+'</div>');
        
        [js_APP].[js_APP_TABLE].toggleSwitches();
        [js_APP].[js_APP_TABLE].resolveids();
    }, //==============================================
    runDoThis: function(myLabel) {
        if (typeof [js_APP].v.doThis !== 'undefined') {
            var nowish = start = new Date().getTime();
            var run = false;
            for (var j = 0; j < [js_APP].v.doThis.length; j++) {
                var thisLabel = [js_APP].v.doThis[j].myLabel;
                var thisWait = [js_APP].v.doThis[j].wait;
                var thisStamp = [js_APP].v.doThis[j].stamp;
                if (myLabel === thisLabel) {

                    if ((nowish - thisStamp) > thisWait) {var checkStamp =  true;} else {var checkStamp =  false;}
                    if (checkStamp) {
                        var run = true;
                        var thisLabel = [js_APP].v.doThis[j].myLabel;
                        var thisScript = [js_APP].v.doThis[j].script;
                    }
                }
            }
        }
        if (run) {
            thisScript();
        }
    }, //==============================================
    doThisWhenDone: function(myLabel, waitfor, script) {
        var isNew = true;
        var isFirst = false;
        var stamp = start = new Date().getTime();
        if (typeof [js_APP].v.doThis === 'undefined') {
            var nextID = 0
            [js_APP].v.doThis = new Array();
            [js_APP].v.doThis = [];
            [js_APP].v.doThis.length = 0;
            var isFirst = true;
        } else {
            var nextID = [js_APP].v.doThis.length;
        }
        if (!isFirst) {
            for (var j = 0; j < [js_APP].v.doThis.length; j++) {
                var thisLabel = [js_APP].v.doThis[j].myLabel;
                if (myLabel === thisLabel) {
                    var isNew = false;
                    [js_APP].v.doThis[j] = {
                        myLabel: myLabel,
                        stamp: stamp,
                        wait: waitfor,
                        script: script
                    };
                }
            }
        }
        if (isNew) {

            [js_APP].v.doThis[nextID] = {
                myLabel: myLabel,
                stamp: stamp,
                wait: waitfor,
                script: script
            };
        }
        var waitforAbout = waitfor + 50;
        setTimeout(function() { [js_APP].[js_APP_TABLE].runDoThis(myLabel); }, waitforAbout);

        // [js_APP].[js_APP_TABLE].doThisWhenDone(myLabel, waitfor, script);
    }, //==============================================
    getField: function(guid,field) {
        var result = '';
        if ([js_APP].[js_APP_TABLE].records.length > 0) {

            var keys = Object.keys([js_APP].[js_APP_TABLE].records[0]);
            for (var i = 0; i < keys.length; i++) {
                if (keys[i].includes(field) && keys[i] !== 'field_id') {
                    var theKey = keys[i];
                }
            }


            for(var i = 0;i < [js_APP].[js_APP_TABLE].records.length; i++){
                if ([js_APP].[js_APP_TABLE].records[i].guid === guid) {
                    var result = [js_APP].[js_APP_TABLE].records[i][theKey];
                }
            }
        } else {
            var result = 'No ' + [js_APP].[js_APP_TABLE].sectionlabel + ' Records';
        }
        
        
        return result;
    }, //==============================================
    guid: function() {
        function s4() {
        return Math.floor((1 + Math.random()) * 0x10000)
            .toString(16)
            .substring(1);
        }
        return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();
    }, //==============================================
    nullFunction: function() {
        //[js_APP].shared.log('null');
    } //==============================================
}
// [js_APP].v.loader = '<div id="loading"><img src="images/dance.gif"></div>';
[js_APP].v.loader = '<div id="loading"><img src="images/gears.gif"></div>';
[js_APP].v.save = '';
[js_APP].v.area = '';
<?

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


function create_[funcname]($guid, [funcfields_c]){
	dbopen();
	$query = "INSERT INTO [table] (guid, [tfields]) VALUES ('$guid', [vfields])";
	dbquery($query,true);
}

function read_[funcname]($guid){
	dbopen();
	$query=" SELECT * FROM [table] WHERE guid='$guid' ORDER BY id DESC";
	$result = mysql_query($query);$i=0;
	while ($row = mysql_fetch_assoc($result)) {
	$resultArray[$i] = array(
		'id' => $row['id'],
		'guid' => $row['guid'],[readfields]
		);$i++;}
	if ($i === 0) $resultArray=false;

	return $resultArray;
}

function update_[funcname]($guid, [funcfields_u]){
	$query="UPDATE [table] SET [updatefields] WHERE guid='$guid' ";
	dbquery($query,true);
}

function process_records_[funcname]($json){
	$JSON=json_decode($_POST['JSON'],true);
	$i = 0;
	foreach($JSON as $item) {
		$id=$item[field_id];
[process_records_fields]


		if ($del === 'Y' && $id !== '0' && $id !== 0) {
			toggle_[funcname]_Del($guid,$tog)
		} else if ($del === 'N' && ($id === '' || $id === '0' || $id === 0)) {
			$query = "INSERT INTO [table] (guid, [tfields]) VALUES ('$guid', [vfields])";
			dbquery($query,true);
		} else {
			$query="UPDATE [table] SET [updatefields] WHERE guid='$guid' ";
			dbquery($query,true);
		}
		

		$i++;
	}
}

[toggle]

[joins]

[table_data]

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

                <div class="[js_APP]Item">\
                    <div id="label_' + i + '_FIELD2" class="itemLabel FIELD1" onclick="[js_APP].[js_APP_TABLE].doThisWhenDone(\'field_focus\', 8000, [js_APP].[js_APP_TABLE].formBlur);[js_APP].[js_APP_TABLE].varUpdate();$(\'.itemLabel\').css(\'display\',\'inline-block\');$(\'input\').css(\'display\',\'none\');$(\'#\'+$(this).attr(\'relatedfield\')).css(\'display\',\'inline-block\');$(this).css(\'display\',\'none\');" relatedfield="[js_APP]_' + i + '_FIELD2"> FIELD3: </div>\
                    <div id="eefFIELD2" class="[js_APP]Field">\
                        <input name="FIELD2_' + i + '" type="text" id="[js_APP]_' + i + '_FIELD2" class="[js_APP]box _FIELD2_" value="' + FIELD1 + '" style="display:none;"  relatedfield="label_' + i + '_FIELD2" >\
                    </div>\
                </div>\
                <input name="FIELD2_' + i + '" type="hidden" id="[js_APP]_' + i + '_FIELD2" class="[js_APP]box _FIELD2_" value="' + FIELD1 + '">\
<div class="morebutton" onclick="$(\'#\'+$(this).parent().attr(\'id\')+\' .more\').css(\'display\',\'block\');$(\'#\'+$(this).parent().attr(\'id\')+\' .morebutton\').css(\'display\',\'none\');" style="display:inline-block; padding: 10px;"><sub>more</sub></div><div class="more" style="display:none;">\
                <div class="[js_APP]Item" findlabel="label_' + i + '_FIELD2_">\
                    <div class="item_Label FIELD1" style="display:none;"> FIELD3: </div>\
                    <div id="eefFIELD2" class="[js_APP]Field" onclick="[js_APP].[js_APP_TABLE].select(\'FIELD3\',\'[js_APP_TABLE_ALT]\',\'FIELD1\',\'[js_APP]_' + i + '_FIELD2\',\'label_' + i + '_FIELD2_\',\'[js_TABLE_LABEL]\');">\
                    	<span id="label_' + i + '_FIELD2_">FIELD3</span>\
                        <input name="FIELD2_' + i + '" type="hidden" id="[js_APP]_' + i + '_FIELD2" class="resolvethisid [js_APP]box _FIELD2_" value="' + FIELD1 + '">\
                    </div>\
                </div>\
                <div class="[js_APP]Item">\
                    <div class="item_Label FIELD1" style="display:none;"> FIELD3: </div>\
                    <div id="eefFIELD2_' + i + '_" class="[js_APP]Field thetoggle" relatedfield="label_' + i + '_FIELD2_" onclick="[js_APP].[js_APP_TABLE].toggle(\'eefFIELD2_' + i + '_\',\'FIELD1\',\'[js_APP]_' + i + '_FIELD2\',\'label_' + i + '_FIELD2_\');"><span id="label_' + i + '_FIELD2_" class="togglelabel" style="display:none;">FIELD3</span>\
                        <img src="images/toggle_on.png" style="height:23px;width: 50px; display:none;" id="toggle_' + i + '_FIELD2_on" class="toggleOn">\
                        <img src="images/toggle_off.png" style="height:23px;width: 50px; display:none;" id="toggle_' + i + '_FIELD2_off" class="toggleOff">\
                        <input name="FIELD2_' + i + '" type="hidden" id="[js_APP]_' + i + '_FIELD2" class="[js_APP]box _FIELD2_" value="' + FIELD1 + '">\
                    </div>\
                </div>\<?


function read_joins_[funcname]($guid){
	dbopen();
	$query="
[theQuery]
	";
	$result = mysql_query($query);$i=0;
	while ($row = mysql_fetch_assoc($result)) {
	$resultArray[$i] = array([readfields]
		);$i++;}
	if ($i === 0) $resultArray=false;

	return $resultArray;
}<div class="button managechildrenbutton" onclick="[js_APP].[js_APP_TABLE].managechildren(\'' + guid + '\')">Manage This</div><hr />
	        try {
	        	if (!found) {
	        		for (var i = 0; i < [js_APP].[js_APP_TABLE].records.length; i++) {
	        			if ([js_APP].[js_APP_TABLE].records[i].guid === id) {
	        				label = [js_APP].[js_APP_TABLE].records[i]['label'];
	        				found = true;
	        			}
	        		}
	        	}
	        } catch(err) {}
        try {
            for (var ii = 0; ii < [js_APP].[js_APP_TABLE_GROUP].records.length; ii++) {
                var firstX = true;
                for (var i = 0; i < [js_APP].[js_APP_TABLE].records.length; i++) {
                    if ([js_APP].[js_APP_TABLE].records[i][[js_APP].[js_APP_TABLE].fieldprefix+'status'] === '1' && [js_APP].[js_APP_TABLE_GROUP].records[ii].guid == [js_APP].[js_APP_TABLE].records[i].[js_group_id]) {
                        if (search.length > 0) {
                            if ([js_APP].[js_APP_TABLE].records[i]['label'].toLowerCase().includes(search.toLowerCase())) {
                                if (firstX) {
                                    var firstX = false;
                                    $('#selectsomething .items').append('<div class="grouplabel" style="text-align: left; font-size: 80%; font-weight: 700;">'+[js_APP].[js_APP_TABLE_GROUP].records[ii]['label']+'</div>');
                                }
                                $('#selectsomething .items').append('<div class="item" guid="'+[js_APP].[js_APP_TABLE].records[i]['guid']+'" onclick="[js_APP].v.selectedguid=$(this).attr(\'guid\');$(\'#selectsomething\').remove();eval([js_APP].v.unspecificpost);">'+[js_APP].[js_APP_TABLE].records[i]['label']+'</div>');
                            }
                        } else {
                            if (firstX) {
                                var firstX = false;
                                $('#selectsomething .items').append('<div class="grouplabel" style="text-align: left; font-size: 80%; font-weight: 700;">'+[js_APP].[js_APP_TABLE_GROUP].records[ii]['label']+'</div>');
                            }
                            $('#selectsomething .items').append('<div class="item" guid="'+[js_APP].[js_APP_TABLE].records[i]['guid']+'" onclick="[js_APP].v.selectedguid=$(this).attr(\'guid\');$(\'#selectsomething\').remove();eval([js_APP].v.unspecificpost);">'+[js_APP].[js_APP_TABLE].records[i]['label']+'</div>');
                        }
                        // labels.push({'label':[js_APP].[js_APP_TABLE].records[i]['label'], 'guid':[js_APP].[js_APP_TABLE].records[i]['guid'], });
                    }
                }
            }
        } catch(err) {}
        try {
            for (var i = 0; i < [js_APP].[js_APP_TABLE].records.length; i++) {
                if ([js_APP].[js_APP_TABLE].records[i][[js_APP].[js_APP_TABLE].fieldprefix+'status'] === '1') {
                    if (search.length > 0) {
                        if ([js_APP].[js_APP_TABLE].records[i]['label'].toLowerCase().includes(search.toLowerCase())) {
                            $('#selectsomething .items').append('<div class="item" guid="'+[js_APP].[js_APP_TABLE].records[i]['guid']+'" onclick="[js_APP].v.selectedguid=$(this).attr(\'guid\');$(\'#selectsomething\').remove();eval([js_APP].v.unspecificpost);">'+[js_APP].[js_APP_TABLE].records[i]['label']+'</div>');
                        }
                    } else {
                        $('#selectsomething .items').append('<div class="item" guid="'+[js_APP].[js_APP_TABLE].records[i]['guid']+'" onclick="[js_APP].v.selectedguid=$(this).attr(\'guid\');$(\'#selectsomething\').remove();eval([js_APP].v.unspecificpost);">'+[js_APP].[js_APP_TABLE].records[i]['label']+'</div>');
                    }
                    // labels.push({'label':[js_APP].[js_APP_TABLE].records[i]['label'], 'guid':[js_APP].[js_APP_TABLE].records[i]['guid'], });
                }
            }
        } catch(err) {}<?

function the_table_[funcname](){
	dbopen();
	$query=" SELECT * FROM [table]  ORDER BY id DESC";
	$result = mysql_query($query);$i=0;
	while ($row = mysql_fetch_assoc($result)) {
	$resultArray[$i] = array(
		'field_id' => $row['id'],
		'guid' => $row['guid'],[readfields]
		);$i++;}
	if ($i === 0) $resultArray=false;

	return $resultArray;
}


function all_tables(){
[php_all_tables]

	return json_encode($tables);
}

<?

function toggle_[funcname]_[funcToggleField]($guid,$tog){
	$query="UPDATE [table] SET [toggleField]=$tog WHERE guid='$guid' ";
	dbquery($query,true);
}


[spaces]var item = '#[js_APP]_' + i + '_FIELD';
[spaces]if ($(item).val().length) {
[spaces]    if ($(item).val().includes("@") && $(item).val().includes(".")) {
[spaces]        $(item).css('border-color','');
[spaces]    } else {
[spaces]        $(item).css('border-color','crimson');
[spaces]        valid = false;
[spaces]    }
[spaces]} else {
[spaces]    $(item).css('border-color','crimson');
[spaces]    valid = false;
[spaces]}

[spaces]var item = '#[js_APP]_' + i + '_FIELD';
[spaces]if ($(item).val().length > 0) {
[spaces]    if(isNaN($(item).val())){
[spaces]        $(item).css('border-color','crimson');
[spaces]        valid = false
[spaces]    } else {
[spaces]        $(item).css('border-color','');
[spaces]    }
[spaces]} else {
[spaces]    $(item).css('border-color','crimson');
[spaces]    valid = false;
[spaces]}

[spaces]var item = '#[js_APP]_' + i + '_FIELD';
[spaces]if ($(item).val().length) {
[spaces]    $(item).css('border-color','');
[spaces]} else {
[spaces]    $(item).css('border-color','crimson');
[spaces]    valid = false;
[spaces]}
<?PHP
$auth = false;
$authID = 'EAE5972B-83F4-2760-1CCC-96C6F52BAF0D';
if (isset($_COOKIE["guid"])) {
    if ($_COOKIE["guid"] === $authID) {
        $auth = true;
    }
}
if (isset($_POST["username"]) && isset($_POST["password"])) {
    if ($_POST["username"] === 'payroll' && $_POST["password"] === '7ab1f81c336ef987a09842fa12638631') {
        $auth = true;
    }
}
// $.md5(md5)
// $.cookie("guid")
// $.cookie("guid", 0, { path: '/projects/certificates', expires: 8000 });
if ($auth) {
    setcookie("guid",$authID,time() + (10 * 365 * 24 * 60 * 60));
?>
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="apple-mobile-web-app-capable" content="yes" />
    <title>Payroll</title>
    <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
    <link href="css/profile.css" rel="stylesheet" type="text/css" />
    <style type="text/css">
ul {
  list-style-type: none;
  margin: 0;
  padding: 0;
  width: 200px;
  background-color: #f1f1f1;
  text-align: left;
}

li a {
  display: block;
  color: #000;
  padding: 8px 16px;
  text-decoration: none;
}

/* Change the link color on hover */
li a:hover {
  background-color: #555;
  color: white;
}
    </style>
    <!-- <link rel="Shortcut Icon" type="image/x-icon" href="/images/Logo.png" /> -->
    <script>
        signature = {}
        // certificate.shared = {}
        // certificate.contacts = {}
        // certificate.docs = {}
        signature.v = {}
    </script>


    
    <script type="text/javascript" src="jsinclude/jquery-1.11.3.js"></script>
    <script type="text/javascript" src="jsinclude/jquery-ui.min.js"></script>

    <!--
        <script type="text/javascript" src="jsinclude/modernizr.min.js"></script>
        <script type="text/javascript" src="jsinclude/jquery.md5.js"></script>
        <script type="text/javascript" src="jsinclude/jquery.cookie.js"></script>
        <script type="text/javascript" src="jsinclude/moment.min.js"></script>
        <script type="text/javascript" src="jsinclude/moment-timezone.js"></script>
-->
    <!--         <script>
            if (location.protocol != "https:") {
                location.href = 'https://rephrecruiting.com/profile/';
            }
            if (location.href.indexOf("#") != -1) {
                if (location.href.length > 36) {
                    if ($.cookie("b") === 'n') {
                        history.pushState({}, null, '/profile/');
                    } else {
                        location.href = '#';
                    }
                }
            }

        </script> -->
    <!-- <script type="text/javascript" src="js/shared.js"></script> -->
    <script type="text/javascript" src="manual.js"></script>
    <script type="text/javascript" src="_auto_functions.js"></script>
</head>

<body>
    <div id="status"><span></span></div>
    <div id="header">
        <img src="images/logo.jpg" id="logo" alt="" />
        <br />
        <br />
        <br />


        <div id="menu" >
            <ul>
[html_menu]
            </ul>
        </div>

        <!-- <div id="logout" onclick="< ? echo urlLogout(); ? >">logout</div> -->
        <div class="title">Payroll Portal</div>
    </div>


    <br />
    <br />
    <br />
    <div id="main">
        <br />
        <hr class="hrr" width="200px" align="right">
        <br />
        <form id="manageForm">
            <br />
            <br />
            <div id="manage"></div>
            <br />
            <br />
            <br />
            <input type="hidden" id="JSON" name="JSON">
        </form>
    </div>

    

    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <script type="text/javascript">
        (function($){
            $.fn.focusTextToEnd = function(){
                this.focus();
                var $thisVal = this.val();
                this.val('').val($thisVal);
                return this;
            }
        }(jQuery));
    </script>
</body>

</html>
<?
} else {
    @include('login.php');
}
?>

//==============================================
certificate.login = {
    process: function() {
        var valid = true;
        if ($('#username').val().length === 0) {
            valid = false;
            $('#username').css('border-color','crimson');
        } else {
            $('#username').css('border-color','');
        }
        if ($('#password').val().length === 0) {
            valid = false;
            $('#password').css('border-color','crimson');
        } else {
            $('#password').css('border-color','');
        }
        if (valid) {
            var a = $.md5($('#password').val());
            var b = $.md5(a);
            var c = $.md5(b);
            $('#md5pass').val(c);
            $("#auth").submit();
        }
    }, //==============================================
    nullFunction: function() {
        //certificate.shared.log('null');
    } //==============================================
}/* CSS Document */

@import url(responsive.css);
@import url(style.css);
/*@import url(talent.css);*/

@media only screen and (min-width: 0px) and (max-width: 887px) {
	#contactBody .certItem,
	#orderBody .certItem {
		width: 95% !important;
	}
	#orderBody {
		width: 100%;
	}
	#contactBody .certItemParent {
		margin: 20px;
		border-top: 1px solid black;
	}
	.eDelete {
		width: 100%;
	}
	#insertButton {
	    border-top: 3px solid black;
	    margin: 20px;
	}
}
@media only screen and (min-width: 888px) {
	#contactBody .certItem,
	#orderBody .certItem {
		height: 42px !important;
		overflow: hidden;
		white-space: nowrap;
		text-overflow: ellipsis !important;
	}
	#orderBody {
	    margin-left: auto;
	    margin-right: auto;
	    width: 600px;
	    text-align: center;
	}
	#contactBody {
	    margin-left: auto;
	    margin-right: auto;
	    width: 800px;
	    text-align: center;
	}
	.certItem {
		min-height: 54px;
	}
}/*@import url(responsive.css);*/
* {
	font-family: Calibri, Arial;
}
a {
	text-decoration:none;
	color:#333;
	cursor:pointer;
}
#loading {
    z-index: 1000;
}
#login .certItem,
#login .certField,
#login .itemLabel {
    display: block !important;;
}
#loading img {
  position: fixed;
  height: 100%;
  width: auto;
  top: 50%;
  left: 50%;
  /* bring your own prefixes */
  transform: translate(-50%, -50%);
}

.togglerow,
.deleterow {
    text-align: center;
}
.title {
    margin-left: auto;
    margin-right: auto;
    display: block;
    width: 300px;
    text-align: center;
    font-size: 180%;
}

a:hover {
	color:#000;
}




.error {
	color:red;
}

textarea {
    height: 75px;
}
.save,
.nosave {
    display: inline-block;
}

.certItem {
/*	background-color: #ECF9FF;*/
    border-style: solid;
    border-width: thin;
	border-color:#FFF;
}
.toggleSwitch {
    height: 34px;
    padding-left: 75px;
    display: inline-block;
    text-align: left;
    vertical-align: middle;
    background-repeat: no-repeat;
    background-position: left center;
}


input,
textarea {
	background-color: #ECF9FF;
}
.dDelete {
	cursor:pointer;
}

.uploadProgress {
    height: 35px;
}
.bar {
    display: inline-block;
    background-image:url(../images/uploading.gif);
    background-repeat: repeat-x;
    /*background-size: 100% 100%;*/
}
.percent {
    position: absolute;
    color: #000;
    text-shadow: 2px 2px #FFF;
    font-weight: bolder;
    text-shadow: 2px 2px #FFF;
    margin-top: 5px;
}
.percent span {
    background-color: #FFF;
    vertical-align: middle;
}


#menu {
	color:#CCC;
	background-color:#FFF;
	text-decoration:none;
	height:20px;
    z-index: 2;
	text-align:right;
}
#menu {
	position: absolute;
	right: 20px;
	top: 80px;
}

.uploadFiles span {
    color:red;
    font-weight: bolder;
}


.saveBottom {
    position: relative;
    height: 30px;
    text-align: right;
    color: #000;
    z-index: 3;
    display: none;
}
.menuLines {
	display: block;
    width: 20px;
    height: 3px;
    margin: 0 auto;
    margin-top: 3px;
    background-color: #292929;
}
#main {
    position: relative;
    top: 20px;
}

.menuItems {
	display:none;
	color:#fff !important;
    background-color: #000;
    border-style: solid;
    border-width: thin;
    -moz-border-radius-bottomright: 20px;
    -webkit-border-bottom-right-radius: 20px;
    -moz-border-radius-bottomleft: 20px;
    -webkit-border-bottom-left-radius: 20px;
	padding:10px;
}
.menuItems a {
	color:#fff !important;
}
#menu:hover .menuButton {
//	display:none;
}
#menu:hover .menuItems {
	display:block;
}
#menu:hover {
	height:100px;
}
.button {
    display: inline;
    font-style: normal;
    font-variant: normal;
    font-weight: bold;
    font-stretch: normal;
    font-size: 14px;
    line-height: normal;
    font-family: Arial;
    text-decoration: none;
    color: rgb(51, 51, 51);
    padding: 2px 6px;
    border-width: 1px;
    border-style: solid;
    border-color: rgb(204, 204, 204) rgb(51, 51, 51) rgb(51, 51, 51) rgb(204, 204, 204);
    cursor: pointer;
    background-color: rgb(238, 238, 238);
}
.button:hover {
    background-color: #999;
}

input[type="radio"] {
    width: 18px;
    height: 18px;
}
input[type=radio]:checked {
    width: 18px;
    height: 18px;
    background-color: #000;
}

.itemLabel {
	color: #000;
}
h1, h2, h3 {
	color:#000;
}
#displayToggle {
    width: 30px;
    height: 30px;
    text-align: right;
	z-index:2;
	color:#000;
	text-align:center;
	vertical-align:middle;
}
#displayToggle img {
	margin-top:2.5px;
}
#zoom,
#zoomPlaceholder {
	position:fixed;
    width: 40px;
    height: 110px;
	left:20px;
	bottom:20px;
	cursor:pointer;
	text-align:center;
}
#zoom {
    z-index:2;
    background-color: rgba(255, 255, 255, 0.7);
    display:none;
}
#zoomPlaceholder {
    z-index:100;
}
#zoom img {
	margin-bottom:10px;
}
#displayToggle span {
/*	background-color:#FFF;*/
}
#frameContainer {
	width:100%;
	height:5px;
}

#status {
    position: fixed;
    right: 20px;
    top: 45px;
    width: 800px;
    height: 20px;
    text-align: right;
	z-index:3;
	color:#000;
}

#status span {
	/*background-color:#FFF;*/
}


.certField,
.certItem,
.itemLabel {
    overflow: hidden;
/*	display:inline;*/
	display: inline-block;
}
.blue {
    color: blue;
}

//=====================================================================
//=====================================================================
.eAction button {
    width: 45px;
}
.eAction {
    width: 45px !important;
    padding: 1px;
    display: Inline-block;
    position: relative;
}
#eDelete {
    padding-top: 5px;
    color: #900;
    font-size: 20px;
    display: Inline-block;
    position: relative;
    vertical-align: top;
    cursor: pointer;
}

.sectionLabel {
    font-size: 150%;
}
.editInfoSection .sectionLabel {
    font-size: 110%;
}
.sectionLabel {
    width: 95%;
    color: #000;
    font-weight: bold;
	/*margin-top:30px;	*/
}
.sectionLabel {
	margin-top:10px;
}
.certItemEdit {
    width: 98%;
    display: Inline-block;
    position: relative;
    padding: 5px;

    border-style: solid;
    border-width: 1px;

    vertical-align: top;
}
.itemLabelEdit {
/*    display: Inline-block;*/
	display:block;
    position: relative;
}

#DIALOGBK {
    position: fixed;
    background-color: #ccc;
    opacity: .8;
    width: 100%;
    height: 100%;
    z-index: 10;
    top: 0px;
    display: none;
}
#DIALOG {
    z-index: 11;

    width: 400px;
    position: fixed;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    -ms-transform: translate(-50%, -50%);
    -webkit-transform: translate(-50%, -50%);
    background-color: #fff;

    border-style: solid;
    border-width: thin;

    -moz-border-radius-topright: 20px;
    -webkit-border-top-right-radius: 20px;
    -moz-border-radius-topleft: 20px;
    -webkit-border-top-left-radius: 20px;
    -moz-border-radius-bottomright: 20px;
    -webkit-border-bottom-right-radius: 20px;
    -moz-border-radius-bottomleft: 20px;
    -webkit-border-bottom-left-radius: 20px;

    margin:20px;
    padding: 20px;


}
.DIALOGCHOICE {
    z-index: 12;



    background-color: #000;
    color: #fff;

    border-style: solid;
    border-width: thin;

    -moz-border-radius-topright: 20px;
    -webkit-border-top-right-radius: 20px;
    -moz-border-radius-topleft: 20px;
    -webkit-border-top-left-radius: 20px;
    -moz-border-radius-bottomright: 20px;
    -webkit-border-bottom-right-radius: 20px;
    -moz-border-radius-bottomleft: 20px;
    -webkit-border-bottom-left-radius: 20px;

    text-align: center;
}

.DIALOGCHOICE:hover {
    background-color: #fff;
    color: #000;
}

.sbox {
    width: 40px;
}
#login {
    display: block;
    margin-left: auto;
    margin-right: auto;
    text-align: center;
}

.certItem {
/*    display: Inline-block;
    position: relative;
    width: 219px;*/
    padding: 5px;
/*
    border-style: solid;
    border-width: 1px;
*/
    vertical-align: top;
}


#pageError span {
	display:block;
	color:#FFF;
	margin-bottom:25px;
	font-weight:bolder;
	font-size:150%;
	background-color:#000;
	top:0px;
}
#pageError {
	position: fixed;
	top: 50%;
	left: 50%;
	margin-top: -100px;
	margin-left: -100px;
	width:200px;
	height:200px;
    border-style: solid;
    border-width: 15px;
	border-color:#000;
    -moz-border-radius-topright: 20px;
    -webkit-border-top-right-radius: 20px;
    -moz-border-radius-topleft: 20px;
    -webkit-border-top-left-radius: 20px;
    -moz-border-radius-bottomright: 20px;
    -webkit-border-bottom-right-radius: 20px;
    -moz-border-radius-bottomleft: 20px;
    -webkit-border-bottom-left-radius: 20px;
	background-color:#CCC;
	text-align:center;
	z-index:99999;
}
body {
    margin-left: 0px;
    margin-top: 0px;
    margin-right: 0px;
    margin-bottom: 0px;
    font-size: 110%;
}

#logo {
	vertical-align:middle;
    margin-left:auto;
    margin-right:auto;
    width: 300px;
    display: block;
}
#header {
    width: 95%;
    position: relative;
    top: 20px;
	left: 20px;
}

.sub {
    vertical-align: sub;
}
.compensation div {
    text-align: center;
    color:#000;
}
