Home      Products & Services      Contact Us      Links

WebHatchers will design & develop your site for you.

Website Menu Heaven: menus, buttons, etc.

Send us your questions.

site search by freefind

SEO, Google, Privacy
   and Anonymity
Browser Insanity
Popups and Tooltips
Free Website Search
HTML Form Creator
Buttons and Menus
Image Uploading
Website Poll
IM and Texting
   or Not MySQL
Personal Status Boards
Content Management
Article Content
   Management Systems
Website Directory
   CMS Systems
Photo Gallery CMS
Forum CMS
Blog CMS
Customer Records
   Management CMS
Address Book CMS
Private Messaging CMS
Chat Room CMS
JavaScript Charts
   and Graphs

Free Personal Status Boards (PSB™)

Free Standard Free PSB

Free PSB Pro Version

Free Social PSB

Free Social PSB Plus (with Email)

Free Business PSB

Free Business PSB Plus (with Email)

PSB demo

Social PSB demo

Business PSB demo

So what's all this PSB stuff about?

Chart comparing business status boards

PSB hosting diagram

PSB Licence Agreement

Copyright © 2002 -
MCS Investments, Inc. sitemap

PSBs, social networking, social evolution, microcommunities, personal status boards
PSBs, social networking, business personal status boards
website design, ecommerce solutions
website menus, buttons, image rotators
Ez-Architect, home design software
the magic carpet and the cement wall, children's adventure book
the squirrel valley railroad, model railroad videos, model train dvds
the deep rock railroad, model railroad videos, model train dvds

MC Scheduler Management—Edit MC Scheduler

This script is called Edit-Scheduler.php

This utility displays all the caregivers scheduled to give care for two weeks, this week and next week, and then lets you edit them, by selecting caregiver names from a dropdown list and then click the selected name into the schedule. The care needers are the column names across the top of the schedule, while the 48 half-hour time slots are listed down the left side of the schedule. Only one day is displayed at a time. There are 14 convenient links at the top of the screen that lead to each of the 14 days in 2 weeks.

The MC Scheduler is a caregiving scheduler for kids and/or elders. It contains the application utilities listed above. There is a utility called Setup Scheduler which lets you enter the names of the kids and/or elders needing care. Then it saves 3 files, one with the names of the care needers, one with the names of the caregivers, and one with a blank 2-week schedule. The View Scheduler utility lets you see the schedule, with no editing.

Before you use the Edit MC Scheduler option on the main menu, you'll need to get everyone together and figure out the caregiving schedule which lasts two weeks, so you'll need to figure out who cares for whom. You'll see that the schedules are set up as half hour slots and cover 24 hours a day. When you first see the schedule it will be set up with two X characters for all slots for the whole two weeks. X means "no care needed." For most MCs or families or groups (or even babysitting co-ops), the slots from 9 p.m. to 7 a.m. will be left with the Xs (parents are "watching over" their kids by sleeping in their own rooms—but still available), so you'll need to set up caregivers for 7 in the morning to 9 at night, mostly, since after that we assume the kids and care-needing elders will be asleep. Of course, also in the daytime will be Xs for when kids are at school or soccer practice or music lessons or preschool or whatever. So even if kids are sleeping over at a different home in your group, it is assumed there are parents sleeping in a nearby room, available as needed.

The reason there are Xs over Xs and—once you fill in the slots—names over names, is that the primary caregiver is on top and the secondary caregiver is on the bottom. See Why Register for an MC? to see why caregiver choice is important—the kid should be able to choose which of these two people will care for him/her. The kid starts with the primary caregiver and chooses to switch to the secondary caregiver if he wants to. The best place for the caregiving is a space set aside for it. This allows kids to play with other kids in their group, and the chosen (primary or secondary) caregiver will be there, playing with or talking with the kids as they wish or—more often—reading a book or doing something on a computer while the kids play together.

The editing of the schedule is simple. Select one of the caregivers from the dropdown menu in Edit MC Scheduler, and click him or her wherever appropriate on the schedule either on top, as the primary caregiver or on the bottom as the secondary caregiver. Do this for the whole two weeks and then go on to the next caregiver from the dropdown menu, until all slots are filled as needed. Yes, the first scheduling meeting will be a long one. Bring snacks!

Even though we designed the Scheduler for MCs (microcommunities), there would be nothing to stop babysitting co-ops from using it. Most co-ops think in terms of one caregiver for so many kids. The American Academy of Pediatrics and the American Public Health Association recommend child-caregiver ratios of 3:1 for children from birth to 12 months, 4:1 for children from 13 to 30 months, 5:1 for children from 31 to 35 months, 7:1 for 3-year-olds, and 8:1 for 4-year-olds and older. We agree, but feel that there needs to be secondary caregivers as well—for backup. Like we say, the kids should be able to choose which of these two people will care for them.

On to the code: This utility displays all the caregivers scheduled to give care for two weeks, this week and next week, and then lets you edit them, by selecting caregiver names from a dropdown list and then click the selected name into the schedule. The first section is at the start of the script. First, we use the checkid.php script to ensure that the session id variable is set, and send the user to register-with-captcha.php if it is not. Then we put the session variable 'username' into $U—we will be checking that it is set in a second. Then we define a named constant '_NODIRECTACCESS'. We include the config.php file (in the includes folder) which uses the PHP defined() function to check on this constant. If it is not set, we are thrown out of the config.php file like yesterday's trash.

Next we check if the session variables 'groupname', 'username', and 'userid' are set. If not, we are sent to the login-to-mc.php script. We make sure $U is still equal to the session variable 'username', that it is not an empty string, and that it's at least 6 characters long or . . . you guessed it . . . the login script. We make sure the session id is set and send them away if not.

The reason we are willing to use JavaScript to send visitors away is that none of our scripts will work without it. One cannot register, enter data, get from here to there, etc., in most of our scripts without it. What serious web surfer turns off JavaScript? In case you were not aware, many sites rely totally on JavaScript for menu functioning and some of their scripts. And what about data entry? In case you didn't know it, it is a huge convenience for the user because of the way it does input validation. A good site will validate in JavaScript as well as PHP. When the JavaScript data validation script catches unacceptable input, it can simply send focus to the input box where the bad input happened, the user fixes it, and the script is submitted. But if JavaScript is disabled, the user gets sent to PHP data validation which catches the bad data and sends the user back to the input form to redo all input from scratch. The JavaScript data validation script will not make a user restart, if well written. If you have experienced restarting data entry in a long form due to an accidental character, you know exactly what we are talking about. It's maddening! And a good way to get users to surf away from your site forever. If a person turns off THE major browser scripting language just because of a miniscule chance of encountering a scripting exploit on some web page, rather than installing good anti-spyware and anti-virus software, his Internet experience overall will be greatly diminished. Many sites have no alternatives to their script-enabled navigation, so the person is 100% screwed on those sites. But even on those with the alternative, it is always cumbersome and awkward. Besides, the scheduler editing script requires AJAX which in turn needs JavaScript, and if you cannot edit the schedule, it's useless. Point taken?

Next, we declare a JavaScript function d(page){location.href="Edit-Scheduler.php?page="+page;} This function is the navigation script. When the user clicks on a link such as <a HREF="#" onClick=
, a 4 is sent as a parameter value to the d() function. The 4 gets dumped into the variable page, and then the Edit-Scheduler.php page is reloaded but with a query string sending the page number to PHP.

Then comes the JavaScript validateit() function. It checks out the inputted date from the user and sticks that and the next 13 dates in the 14-day MySQL table, unless the date was not validated, in which case a message is seen. The script uses the JavaScript date object new Date() function as well as the setDate() and getDate() methods. It takes the date—once validated—and figures out the next 13 days' dates as well. It puts these into an array and then uses the join() method The join() method joins the elements of an array into a string, and returns the string. We stick this string into a hidden field in a form so that the submitted form will tell PHP all the dates needed for the 2-week caregiving schedule.

Next comes a dropdown form of all the caregivers in the group. Note that in this standard HTML form there is no function called from the select tag such as an onchange event. Instead, the ClickinBody() function reads which of the option array elements is selected when you edit the schedue. More on that later, but we imagine you can figure out what it does, right? After all, the purpose of the utility is to edit a caregiver's schedule, and just clicking a form is useless unless you can do something with the selected person. We do—in an AJAX script lower down, we change the name in the MySQL table and the onscreen schedule simultaneously when you click in one of the schedule's data cells. But—more later.

We use the standard SELECT and mysql_fetch_array() procedure to get the date for the first day of the schedule, which is or will be stored in record 50, since each day uses 50 records and the date is last. If no date is found, a form is created to get the date the user wants for the first Sunday of his schedule. As he submits this, the validateit() function is run from an onsubmit event, and that is where the 14 dates are stuck into a string, as discussed above. The hidden field submitted with this form is named "dates."

Now we use PHP POST to get the submitted dates string and we use the PHP explode() function to turn it into an array for ease of use. POST is a 'superglobal', or automatic global, variable that precludes one from needing to declare global in functions, since it is available anywhere in the script. If no value was POSTed, the following set of MySQL UPDATE statements will not happen since the isset() function will find the array empty. These UPDATEs stick these dates into the table every 50th record, where dates are to reside.

If there is a page value that has been chosen via a clicked link, the selected page is loaded via MySQL's SELECT command. If the page desired is 4, then the variable $p gets a 4 and we select everything in the table where Day=4. There are 50 records per page, so all content where N=151 to 200 (which is the same as records 151 to 200) is loaded since this is the 4th set of 50 records in the table. The 48 half-hour time slots in a day are displayed down the left side (with the label Time at the top), while all the kids and/or elders are the labels of the columns, across the top. For ease of programming, the kid names table related to this specific user is consulted and the number of records and the names are gotten using mysql_num_rows() and mysql_fetch_array() and the names go into an array by use of array_push(). This helps with displaying.

The day of the week and the date (always the 49th and 50th record in each 50-record day) are found next and stuck into the page title. When you see all the OR operators in the code, this is because these are general scripts that will work regardless of which of the 14 pages it is. In the case of the page being 4, records 199 and 200 are where the day and date will be located. The reason the page title also contains the user name is to reassure the user that he or she has the right schedule, since there can be plenty of other users using the same scheduler application. One user name goes with each scheduler, and even the table names themselves get the user name prepended to them. One user name corresponds to one MC/group, since the administrator uses a user name he chooses when he registers his group.

JavaScript Object Notation (JSON) is used to get the PHP page number and number of kids. Simple numbers don't really need JSON to convert PHP to JavaScript, but we tend to use it since it is required for converting strings, arrays, and extremely precise numbers. Then we sniff browsers with our browser sniffer.

We need to know if we’re in a Netscape/Firefox browser, so we determined that above. And since an onMouseMove event handler works without event capturing in IE but only with event capturing Netscape/Firefox (there's no good excuse for this; it just simply requires event capturing in Netscape/Firefox!), we commence event capturing at this time; watch the syntax—the case of the characters is important. The function this event handler is pointed at is the getCoords function. In the coordinate reading operations in getCoords, take our word for it that this is a good way to read x and y—we tried other ways and this is best. Once we know where x and y are, we check if the coordinate are outside the area of the displayed schedule. If so, we declare that x=x. Don't overthink that one! If the clicking mouse during editing is inside the schedule, we figure out which schedule cell is being clicked in and we save xb and yb and topbot to represent xb: which kid/elder, yb: which time slot (e.g., 12:30p.m.), and topbot: whether we are clicking in the top half or the bottom half of the display cell. The reason there are names over other names is that the primary caregiver is on top and the secondary caregiver is on the bottom.

Now for our JavaScript function ClickinBody(). This contains AJAX and we do not mean a cleaning product. The first piece of business is to do nothing and exit if the click was outside the schedule area. Then we use the selectedIndex property to determine which of the dropdown list options (full of all caregivers in the group) were selected and we stick this in the variable person. Next we get the time of day it is now in milliseconds which we will append to a query string so the browser doesn't behave like an ass clown and get something out of the cache—which will be wrong. This actually turns out to be needed sometimes, as we found out in our chat script. The trick is to fool the browser into believing it is always a new page, and since the URL is always different, they do get fooled.

The variable j is an empty div outside the schedule and used only temporarily, which is why in the CSS styles we declared left:-1900px for the j div to keep it from interferring with our schedule. Calculating N is figuring which of the 700 records of the 2-week schedule is being updated. The name of the php script URL the AJAX script sends us to is edit-135W-790_________O8-6IY-Uv42ee.php which we will add a query string to.

The AJAX XMLHttpRequest object and onreadystatechange event and readyState property and status property and the open() and send() methods of the XMLHttpRequest object are all standard and used in standard ways in our script. The point is to update a name in the schedule fast and without refreshing the page. So we load the update page with the variable values it needs to do its work by putting them into a query string and using the open and send() methods. This is all very effiicient and works very nicely. When the values we need are echoed to the screen in edit-135W-790_________O8-6IY-Uv42ee.php (described here: Edit Schedule with Ajax.html), they end up getting stuck in the j div offscreen, and we stick the div contents into variable abc (using the innerHTML property, which sets or returns the inner HTML of an element) and split it on the "^" character and stick the 2 results in the arrr array. (The split() method is used to split a string into an array of substrings, and returns the new array.) Then we use document.getElementById(theid).innerHTML=contents; to stick the needed schedule cell data into the correct cell.

But one other trick is needed. We need to "Copy next week onto this week" every Sunday. There's a button on this page that actually says that. Clicking on it sends us to the JavaScript function confirming(). It uses the window confirm() method. This gives you a chance to change your mind if you goofed and hit the button by mistake. If you click OK, you will copy next week onto this week in the MySQL table, because it is assumed the old week is gone—history. Pressing the button called "Copy next week onto this week." even changes all the dates on the 14 days of the schedule in the process. Please note that these two weeks will have similar schedules. So when the 2nd week replaces the 1st week on Sunday, that just means that the current week (starting on Sunday) has bypassed the old week, which is now history, so the schedule needs to reflect that we are now experiencing the Next week as This week, and the new Next week is an exact copy of the current This week. All that is required is to have everyone peruse the new Next week schedule and tell the administrator of any needed changes, since the new This week schedule should be okay since the group will have had a week in which to report changes to next week, which has now arrived. But the new Next week schedule will need adjustments, since it is not based on anything except a general known caregiving pattern. These adjustments can be done in a Sunday meeting or in less structured ways—the group will decide which. Weeks of caregiving need and caregiving availability are similar, but usually not identical. People get exceptions, like getting sick, having appointments, going on trips, freeing up some extra time unexpectedly, getting different shifts at work, etc.

This script below is called Edit-Scheduler.php

if (!isset($_SESSION['groupname']) || !isset($_SESSION['userid']) || !isset($_SESSION['username']) || $_SESSION['username']<>$U || !isset($U) || $U=="" || strlen($U)<6 || !isset($_SESSION['sessionid'])){echo '<script language="javascript">alert("Please login, then select MC Scheduler."); window.location = "login-to-mc.php";</script>';}

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Edit MC Scheduler</title>
<meta name="description" content="Edit MC Scheduler">
<meta name="keywords" content="Edit MC Scheduler,MC,MC Scheduler">

<script language="javascript">

function d(page){location.href="Edit-Scheduler.php?page="+page;}

function validateit(){
var myDate,day,month,year,i;
var flag=0;
if (myDate.length != 10) {alert("Inappropriate date format length; should be 10 characters");return false;}
if (myDate.substring(2, 3) != '-' || myDate.substring(5, 6) != '-') {alert("Inappropriate number separator; should be hyphen");return false;}
month = myDate.substring(0, 2);
day = myDate.substring(3, 5);
year = myDate.substring(6, 10);
if (month < 1 || month > 12) {alert("Inappropriate month");return false;}
if (day < 1 || day > 31) {alert("Inappropriate day");return false;}
if (year < 2012 || year > 2999) {alert("Inappropriate year");return false;}
if ((month ==9 || month ==4 || month ==6 || month ==11) && day==31) {alert("Inappropriate September's or November's or April's or June's number of days");return false;}
if(year % 400 == 0 || (year % 100 != 0 && year % 4 == 0)) {flag=1;}
if (month ==2 && day>28+flag) {alert("Inappropriate number of February days");return false;}

var h=0;
var dy=Number(myDate.substr(3,2));
var yr=Number(myDate.substr(6,4));
var mo=Number(myDate.substr(0,2))-1;
var nd=new Date(yr,mo,dy);
var datess=new Array();
for(var i = 0; i < 14; i++){
var month = nd.getMonth()+1;
var day = nd.getDate();
var year = nd.getFullYear();
datess[i]=month + "-" + day + "-" + year;
var dates = datess.join();

return true;}

background-color:#eee;overflow:hidden;white-space:nowrap;font-family:"Times New Roman", Times, serif;}
.zz{padding:7px 7px 7px 17px}
.j {position:absolute;top:40px;left:-1900px;width:10px;}

<body SCROLL="auto" BGCOLOR="#FFFFFF" onLoad="startmouse()">

<div class="d">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a HREF="http://www.thebiganswer.info/MC-Scheduler.php">Return to MC Scheduler Management</a><BR><B>This week:</b> <a HREF="#" onClick="d(1);">Sun</a> <a HREF="#" onClick="d(2);">Mon</a> <a HREF="#" onClick="d(3);">Tue</a> <a HREF="#" onClick="d(4);">Wed</a> <a HREF="#" onClick="d(5);">Thur</a> <a HREF="#" onClick="d(6);">Fri</a> <a HREF="#" onClick="d(7);">Sat</a> <B>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next week:</b> <a HREF="#" onClick="d(8);">Sun</a> <a HREF="#" onClick="d(9);">Mon</a> <a HREF="#" onClick="d(10);">Tue</a> <a HREF="#" onClick="d(11);">Wed</a> <a HREF="#" onClick="d(12);">Thur</a> <a HREF="#" onClick="d(13);">Fri</a> <a HREF="#" onClick="d(14);">Sat</a> </div>


echo '<div class="b">
<form action="#">
<select id="mySelect">
<option value="?">?</option>
<option value="X">X</option>';
$nr = mysql_query("SELECT username FROM $a") or die(mysql_error());
while ($row = mysql_fetch_array($nr)){
echo '<option value="'.$row[0].'">'.$row[0].'</option>';}
echo '</select></form></div>';


<BR><BR><BR><BR><BR><BR><button type="button" class="ddd" onclick="confirming()">Copy next<BR>week onto<BR>this week</button>


$res = mysql_query("SELECT Time FROM $a WHERE N='50' LIMIT 1") or die(mysql_error());
$row = mysql_fetch_array($res);
echo '<div style="position:absolute;left:0px;top:32px;z-index:99;width:1000px;height:60px">
<form name="myForm" id="form" method="post" onsubmit="return validateit()" action="Edit-Scheduler.php" style="background-color:#ccc;width:1000px;">
<input name="dates" type=hidden><input name="kd" type=hidden><input name="N" type=hidden><input name="topornot" type=hidden>
<center><table width="1000px" height="60" border="1" align="center">
<td>Submit the following date as MC administrator: Date of the <b>Sunday</b> the schedule begins (Use MM-DD-YYYY, like 12-25-2012):</td>
<td><input name="myDate" type="text" size="10" maxlength="10" value=""></td>
<td><input name="submit" type="submit" id="submit" value="submit"></td>

$ary = $_POST['dates'];$dates = explode(",",$ary);
if (isset($ary)){
mysql_query("UPDATE $a SET Time='$dates[0]' WHERE N='50'") or die(mysql_error());
mysql_query("UPDATE $a SET Time='$dates[1]' WHERE N='100'") or die(mysql_error());
mysql_query("UPDATE $a SET Time='$dates[2]' WHERE N='150'") or die(mysql_error());
mysql_query("UPDATE $a SET Time='$dates[3]' WHERE N='200'") or die(mysql_error());
mysql_query("UPDATE $a SET Time='$dates[4]' WHERE N='250'") or die(mysql_error());
mysql_query("UPDATE $a SET Time='$dates[5]' WHERE N='300'") or die(mysql_error());
mysql_query("UPDATE $a SET Time='$dates[6]' WHERE N='350'") or die(mysql_error());
mysql_query("UPDATE $a SET Time='$dates[7]' WHERE N='400'") or die(mysql_error());
mysql_query("UPDATE $a SET Time='$dates[8]' WHERE N='450'") or die(mysql_error());
mysql_query("UPDATE $a SET Time='$dates[9]' WHERE N='500'") or die(mysql_error());
mysql_query("UPDATE $a SET Time='$dates[10]' WHERE N='550'") or die(mysql_error());
mysql_query("UPDATE $a SET Time='$dates[11]' WHERE N='600'") or die(mysql_error());
mysql_query("UPDATE $a SET Time='$dates[12]' WHERE N='650'") or die(mysql_error());
mysql_query("UPDATE $a SET Time='$dates[13]' WHERE N='700'") or die(mysql_error());

if (!isset($p)){$p=1;}
$nm = mysql_query("SELECT username FROM $a") or die(mysql_error());
$nb = mysql_num_rows($nm);
while ($row = mysql_fetch_array($nm)) {
array_push ($ar, $row[0]);}
$res = mysql_query("SELECT * FROM $a WHERE Day='$p' LIMIT 48") or die(mysql_error());
echo "<div class='table'><table border='1'>";
echo "<tr> <th><div class='z'>Time</div></th>";
for($i = 1; $i < $n; $i++){
echo "<th><div class='z'>".$ar[$i-1]."</div></th>";}
echo "</tr>";
while($row = mysql_fetch_array($res)){
echo "<tr><td><div class='z'><div class='zz'>";
echo $row['Time'];
echo "</div></div></td>";
for($i = 1; $i < $n; $i++){
echo "<td><div class='z' id='N".$l."k".$i."'>".$row['kid'.$i]."</div></td>";}
echo "</tr>";

echo "</table></div>";

$res = mysql_query("SELECT Time FROM $a WHERE Day='$p' AND (N='50' OR N='100' OR N='150' OR N='200' OR N='250' OR N='300' OR N='350' OR N='400' OR N='450' OR N='500' OR N='550' OR N='600' OR N='650' OR N='700') LIMIT 1") or die(mysql_error());
$row = mysql_fetch_array($res);

$res = mysql_query("SELECT Time FROM $a WHERE Day='$p' AND (N='49' OR N='99' OR N='149' OR N='199' OR N='249' OR N='299' OR N='349' OR N='399' OR N='449' OR N='499' OR N='549' OR N='599' OR N='649' OR N='699') LIMIT 1") or die(mysql_error());
$row = mysql_fetch_array($res);

echo '<div class="t" align="center">Edit MC Scheduler, '.$U.', '.$dayy.' '.$datee.'</div>';



<script language="javascript">

var page = <?php echo json_encode($p); ?>;
page=new Number(page);
var numkids = <?php echo json_encode($nb); ?>;
var xb = 0;
var yb = 0;
var topornot="";
var kd=0;
var N=0;
var person='';
mactest=(navigator.userAgent.indexOf("Mac")!=-1) //My browser sniffers
Netscape=(navigator.appName.indexOf("Netscape") != -1)
msafari=(navigator.userAgent.indexOf("Safari")!= -1)
wsafari=0; if(!mactest&&msafari){wsafari=1;msafari=0}
is_opera = 0; if(window.opera){is_opera=1}
is_ie_mac = 0; is_ie=0;if(document.all){is_ie=1}


function startmouse() {if(Netscape) {document.captureEvents(Event.MOUSEMOVE);}
document.onclick = ClickinBody;

function getCoords(e){
if (!e) var e = window.event;
if (e.pageX){x = e.pageX;y = e.pageY;}
else if (e.clientX){x = e.clientX + document.body.scrollLeft;y = e.clientY + document.body.scrollTop; }

var dif=y-105;
var topbot=dif % 36;

function ClickinBody(){
var u=document.getElementById("mySelect").selectedIndex;
var s=document.getElementById("mySelect").options;
var t = new Date().getTime();
var j=document.getElementById("j");
var arrr = new Array();
if (window.XMLHttpRequest){ // code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");} // code for IE6, IE5
if (xmlhttp.readyState==4 && xmlhttp.status==200){
var abc=j.innerHTML;
var theid=arrr[0];
var contents=arrr[1];

function confirming(){
var answer = confirm ("This week's data will be gone forever! Continue or Cancel? To Continue (and copy next week onto this week), click OK. To Cancel, click Cancel.");if (answer){window.location = "replace-135W-790_________O8-6IY-Uv42ee.php";} else {alert("No changes were made.");}}


<div class='j' id='j'></div>