text:
var alertHead = document.getElementsByClassName('ajs-header');
var allUsers = [];
var activeUserIndex = 0;
var opponentIndex = -1;
//ID elements on index.html
var userLogin = document.getElementById('sign-in-form');
var createUser = document.getElementById('sign-up-form');
//ID elements on setup.html
var homeName = document.getElementById('home-name');
var setUpForm = document.getElementById('setup-form');
var opponentName = document.getElementById('opponent-name');
var opponentRecord = document.getElementById('opponent');
var endScore = document.getElementsByName('end-score');
var homeRecord = document.getElementById('home-record');
var opponentRecordList = document.getElementById('opponent-record-list');

//User Object Constructor --> index.html
function UserObject(name, password) {
  this.userName = name;
  this.password = password;
  this.opponentsArray = [];
  this.wins = 0;
  this.loss = 0;
  this.percentage = 0;
}

function userTotalWinsAndLosses() {
  var totalWins = 0;
  var totalLoss = 0;
  for (var i = 0; i < allUsers[activeUserIndex].opponentsArray.length; i++) {
    totalWins += allUsers[activeUserIndex].opponentsArray[i][2];
    totalLoss += allUsers[activeUserIndex].opponentsArray[i][1];
  }
  allUsers[activeUserIndex].wins = totalWins;
  allUsers[activeUserIndex].loss = totalLoss;
}

function userPercentageWins() {
  if ((allUsers[activeUserIndex].loss + allUsers[activeUserIndex].wins) != 0) {
    allUsers[activeUserIndex].percentage = parseInt((allUsers[activeUserIndex].wins) / (allUsers[activeUserIndex].loss + allUsers[activeUserIndex].wins) * 100);
  } else {
    allUsers[activeUserIndex].percentage = '';
  }
}

var Shawn = new UserObject('Shawn', 'coolguy');
var Sean = new UserObject('Sean', 'awesomeguy');
var Kyle = new UserObject('Kyle', 'greatguy');
var Sung = new UserObject('Sung', 'niceguy');
var opponent1 = ['Sam', 3, 4];
var opponent2 = ['Jon', 4, 5];
var opponent3 = ['Katie', 6, 0];
var opponent4 = ['Dan', 5, 2];
var opponent5 = ['Spencer', 3, 3];
var opponent6 = ['Benton', 10, 0];
Shawn.opponentsArray.push(opponent1);
Shawn.opponentsArray.push(opponent2);
Shawn.opponentsArray.push(opponent3);
Shawn.opponentsArray.push(opponent4);
Shawn.opponentsArray.push(opponent5);
Shawn.opponentsArray.push(opponent6);
allUsers.push(Shawn);
allUsers.push(Sean);
allUsers.push(Kyle);
allUsers.push(Sung);
// localStorage.setItem('storedTestingUserArray', JSON.stringify(allUsers));
// var parsedTestingUsers = JSON.parse(localStorage.storedTestingUserArray);
// allUsers = parsedTestingUsers;
//Handles Create User Event, includes validation of existing Users --> index.html
function handleCreateUserEvent(event) {
  event.preventDefault();
  if (!event.target.signUpName.value || !event.target.signUpPassword.value) {
    alertify.alert('Please enter a valid Username and Password.');
    return editAlert();
  }
  var foundUserName = false;
  var newName = event.target.signUpName.value.toString().toUpperCase();
  var newPassword = event.target.signUpPassword.value.toString();
  if (allUsers.length > 0) {
    for (var i = 0; i < allUsers.length; i++) {
      if (newName === allUsers[i].userName.toUpperCase()) {
        foundUserName = true;
      }
    }
  }
  if (foundUserName) {
    alertify.alert('Sorry!  This username already exists.  Please try again.');
    editAlert();
    event.target.signUpName.value = null;
    event.target.signUpPassword.value = null;
  }
  if (!foundUserName) {
    //store new user into local storage
    localStorage.setItem('storedActiveUser', JSON.stringify(newName));
    var CreateNewUser = new UserObject(newName, newPassword);
    allUsers.push(CreateNewUser);
    localStorage.setItem('storedUsers', JSON.stringify(allUsers));
    window.location = 'setup.html';
  }
}
//Handles User Login Event through Validation --> index.html
function handleValidateEvent(event) {
  event.preventDefault();
  var existingUserIndex = -1;
  var userExists = false;
  var logInName = event.target.signInName.value.toString().toUpperCase();
  var logInPassword = event.target.signInPassword.value.toString();
  localStorage.setItem('storedUsers', JSON.stringify(allUsers));
  localStorage.setItem('storedActiveUser', JSON.stringify(logInName));
  if (allUsers.length > 0) {
    for (var i = 0; i < allUsers.length; i++) {
      if (logInName === allUsers[i].userName.toUpperCase() && logInPassword === allUsers[i].password) {
        userExists = true;
        activeUserIndex = i;
      }
    }
    if (userExists) {
      console.log('I found an existing user at index: ' + activeUserIndex);
      localStorage.setItem('storedActiveUserIndex', JSON.stringify(activeUserIndex));
      localStorage.setItem('storedUsers', JSON.stringify(allUsers));
      localStorage.setItem('storedActiveUser', JSON.stringify(logInName));
      window.location = 'setup.html';
    } else if (!userExists) {
      console.log('I did not find an existing user');
      alertify.alert('Incorrect username or password.  Please try again.');
      editAlert();
    }
  } else {
    console.log('I did not find an existing user');
    alertify.alert('Incorrect username or password.  Please try again.');
    editAlert();
  }
  event.target.signInName.value = null;
  event.target.signInPassword.value = null;
}
//Checks for existing local storage and updates stored data to allUser array
(function checkLocal() {
  if (localStorage.storedUsers) {
    var parsedStoredUsers = JSON.parse(localStorage.storedUsers);
    allUsers = parsedStoredUsers;
  }
  if (localStorage.storedOpponentIndex) {
    var parsedStoredOpponentIndex = JSON.parse(localStorage.storedOpponentIndex);
    opponentIndex = parsedStoredOpponentIndex;
  }
  console.log(allUsers);
  // return allUsers;
})();
//Finds the index at which the active user belongs in allUsers array
if (localStorage.storedActiveUser) {
  (function findActiveUser() {
    console.log('I am looking for the active user');
    var checkForUser = JSON.parse(localStorage.storedActiveUser).toString().toUpperCase();
    var foundUser = false;
    for (var i = 0; i < allUsers.length; i++) {
      if (checkForUser == allUsers[i].userName.toUpperCase()) {
        foundUser = true;
        activeUserIndex = i;
      }
    }
    if (foundUser) {
      console.log('The active user is ' + checkForUser);
      return activeUserIndex;
    }
    if (!foundUser) {
      console.log('user does not exist');
    }
  })();
}
//Finds an opponent's index inside an active user's opponentsArray with an opponent's name passed as a parameter
function findOpponentIndex(opponentNameValue) {
  var foundOpponent = false;
  if (allUsers[activeUserIndex].opponentsArray.length > 0) {
    for (var i = 0; i < allUsers[activeUserIndex].opponentsArray.length; i++) {
      if (allUsers[activeUserIndex].opponentsArray[i][0] == opponentNameValue) {
        foundOpponent = true;
        opponentIndex = i;
      }
    }
  }
  if (foundOpponent) {
    // console.log('The opponent exists for the active user');
    return opponentIndex;
  }
  if (!foundOpponent) {
    return -1;
  }
}
//On page load, adds existing opponents in a specific User's opponentsArray into the select drop down box using appendChild --> setup.html
if (opponentName) {
  (function extendActiveOpponentsList() {
    console.log(activeUserIndex);
    var currentUser = allUsers[activeUserIndex];
    console.log(currentUser);
    if (currentUser.opponentsArray.length > 0) {
      for (var i = 0; i < currentUser.opponentsArray.length; i++) {
        var optionEl = document.createElement('option');
        optionEl.setAttribute('value', currentUser.opponentsArray[i][0]);
        optionEl.textContent = currentUser.opponentsArray[i][0];
        opponentName.appendChild(optionEl);
      }
    }
  })();
}
//Generates and appends a textbox to opponentRecord div in setup.html --> setup.html
function createTextBox() {
  var inputEl = document.createElement('input');
  inputEl.setAttribute('id', 'enter-new-opponent');
  inputEl.setAttribute('type', 'text');
  inputEl.setAttribute('name', 'enterNewOpponent');
  inputEl.setAttribute('size', '15');
  inputEl.setAttribute('name', 'newOpponent');
  opponentRecord.appendChild(inputEl);
}
//Calculates and displays total wins, total losses, and percentage for active user --> setup.html
if (homeRecord) {
  (function calculateAndDisplayWinPercentage() {
    userTotalWinsAndLosses();
    userPercentageWins();
    var winList = document.createElement('li');
    var lossList = document.createElement('li');
    // var winPercentList = document.createElement('li');

    winList.textContent = ('Wins: ' + allUsers[activeUserIndex].wins);
    lossList.textContent = ('Losses: ' + allUsers[activeUserIndex].loss);
    // winPercentList.textContent = ('Win%: ' + allUsers[activeUserIndex].percentage);
    homeRecord.appendChild(winList);
    homeRecord.appendChild(lossList);
    // homeRecord.appendChild(winPercentList);
  })();
}
//Calculates percentage for selected opponent of active user --> setup.html
function calculateOpponentPercentage(index) {
  var winValue = allUsers[activeUserIndex].opponentsArray[index][1];
  // console.log(winValue);
  var lossValue = allUsers[activeUserIndex].opponentsArray[index][2];
  // console.log(lossValue);
  var percentValue = '';
  if ((lossValue + winValue) > 0) {
    percentValue = parseInt((winValue / (winValue + lossValue)) * 100);
    return percentValue;
  } else {
    return percentValue;
  }
}
//Displays opponent statistics of wins, loss, and win percentage --> setup.html
function calculateAndDisplayOpponentWinPercentage() {
  var sumWin = allUsers[activeUserIndex].opponentsArray[opponentIndex][1];
  var sumLoss = allUsers[activeUserIndex].opponentsArray[opponentIndex][2];
  var winPercent = calculateOpponentPercentage(opponentIndex);

  var winList = document.createElement('li');
  var lossList = document.createElement('li');
  // var winPercentList = document.createElement('li');
  winList.setAttribute('id', 'win-list');
  lossList.setAttribute('id', 'loss-list');
  // winPercentList.setAttribute('id', 'win-percent-list');
  winList.textContent = ('Wins: ' + sumWin);
  lossList.textContent = ('Losses: ' + sumLoss);
  // winPercentList.textContent = ('Win%: ' + winPercent);
  opponentRecordList.appendChild(winList);
  opponentRecordList.appendChild(lossList);
  // opponentRecordList.appendChild(winPercentList);
}
//Handles the change event on the select drop down box --> setup.html
function handleOpponentChangeEvent(event) {
  event.preventDefault();
  console.log(opponentName.value);
  findOpponentIndex(opponentName.value);
  localStorage.setItem('storedActiveOpponent', JSON.stringify(opponentName.value));
  localStorage.setItem('storedOpponentIndex', JSON.stringify(opponentIndex));
  console.log('this is the opponent index: ' + opponentIndex);
  var winList = document.getElementById('win-list');
  var lossList = document.getElementById('loss-list');
  // var winPercentList = document.getElementById('win-percent-list');
  if (opponentName.value == 'new-opponent') {
    // console.log('There were previous opponents, but I want to make a new one');
    if (winList || lossList) {
      opponentRecordList.removeChild(winList);
      opponentRecordList.removeChild(lossList);
      // opponentRecordList.removeChild(winPercentList);
    }
    if (!document.getElementById('enter-new-opponent')) {
      createTextBox();
    }
  } else if (allUsers[activeUserIndex].opponentsArray[opponentIndex][0] == opponentName.value) {
    if (!document.getElementById('win-list')) {
      calculateAndDisplayOpponentWinPercentage();
    } else if (document.getElementById('win-list')) {
      opponentRecordList.removeChild(winList);
      opponentRecordList.removeChild(lossList);
      // opponentRecordList.removeChild(winPercentList);
      calculateAndDisplayOpponentWinPercentage();
    }
    // console.log('I want to remove the text box');
    var enterNewOpponent = document.getElementById('enter-new-opponent');
    if (enterNewOpponent) {
      opponentRecord.removeChild(enterNewOpponent);
    }
  }
}
//Handles the 'start game' submit button --> setup.html
function handleSetUpEvent(event) {
  event.preventDefault();
  console.log('I entered the submit event');
  for (var i = 0; i < 3; i++) {
    if (endScore[i].checked) {
      var radioValue = endScore[i].value;
      console.log('I found my score, it is ' + radioValue);
      localStorage.setItem('storedGameScore', JSON.stringify(radioValue));
    }
  }
  if (opponentName.value == 'no-opponent') {
    alertify.alert('Please select an opponent.');
    editAlert();
  }
  if (document.getElementById('enter-new-opponent')) {
    if (!event.target.newOpponent.value) {
      return alertify.alert('Please enter an opponent name.');
    }
    var newOpponent = event.target.newOpponent.value.toString().toUpperCase();
    var currentUser = allUsers[activeUserIndex];
    // console.log(currentUser);
    if (findOpponentIndex(newOpponent.toUpperCase()) > -1) {
      alertify.alert('Opponent name already exists, please enter a new name.');
      editAlert();
    } else {
      console.log('I want to enter a new opponent');
      currentUser.opponentsArray.push([newOpponent, 0, 0]);
      findOpponentIndex(newOpponent.toUpperCase());
      console.log('The new opponent index is ' + opponentIndex);
      localStorage.setItem('storedOpponentIndex', JSON.stringify(opponentIndex));
      localStorage.setItem('storedUsers', JSON.stringify(allUsers));
      localStorage.setItem('storedActiveOpponent', JSON.stringify(newOpponent));
      window.location = 'scoreboard.html';
    }
  }
  if (opponentName.value != 'new-opponent' && opponentName.value != 'no-opponent') {
    localStorage.setItem('storedActiveOpponent', JSON.stringify(opponentName.value));
    window.location = 'scoreboard.html';
  }
}
//Finds existing users and setting h3 tage in setup.html to represent User Name from local storage --> setup.html
if (homeName) {
  homeName.textContent = JSON.parse(localStorage.storedActiveUser);
}
//Event Listeners
//index.html event listeners
if (createUser) {
  createUser.addEventListener('submit', handleCreateUserEvent);
}
if (userLogin) {
  userLogin.addEventListener('submit', handleValidateEvent);
}
//setup.html event listeners
if (setUpForm) {
  setUpForm.addEventListener('submit', handleSetUpEvent);
}
if (opponentName) {
  opponentName.addEventListener('change', handleOpponentChangeEvent);
}
if (opponentName) { //This event will create a textbox with one or no options in select element
  opponentName.addEventListener('click', function() {
    var options = opponentName.querySelectorAll('option');
    var count = options.length;
    if (typeof (count) === 'undefined' || count < 2) {
      console.log('There are no previously created opponents');
      createTextBox();
    }
  });
}
//Scoreboard.html js

function playPongAudio() {
  var pongAudio = document.getElementById('pong-audio');
  pongAudio.play();
}
//Displays active user name and active opponent name on scoreboard --> scoreboard.html
if (document.getElementById('name-display-container')) {
  (function displayNamesOnScoreboard() {
    var homeTeam = document.getElementById('home-team');
    var awayTeam = document.getElementById('away-team');
    homeTeam.textContent = JSON.parse(localStorage.storedActiveUser);
    awayTeam.textContent = JSON.parse(localStorage.storedActiveOpponent);
  })();
}
//Will ensure single digit numbers will be displayed with a 0 in front --> scoreboard.html
function pad2(number) {
  return (number < 10 ? '0' : '') + number;
}
var globalCounter = 0;
var homeUp = document.getElementById('home-up');
var homeDown = document.getElementById('home-down');
var awayUp = document.getElementById('away-up');
var awayDown = document.getElementById('away-down');
var homeScore = document.getElementById('home-score');
var awayScore = document.getElementById('away-score');
var globalHomeScore = pad2(0);
var globalAwayScore = pad2(0);
var scoreboardButtonContainer = document.getElementById('scoreboard-button-container');

if (document.getElementById('main-scoreboard-container')) {
  var endGameScore = parseInt(JSON.parse(localStorage.storedGameScore));
}
if (homeUp) {
  homeUp.addEventListener('click', homePowerUp);
}
if (homeDown) {
  homeDown.addEventListener('click', homePowerDown);
}
if (awayUp) {
  awayUp.addEventListener('click', awayPowerUp);
}
if (awayDown) {
  awayDown.addEventListener('click', awayPowerDown);
}
if (scoreboardButtonContainer) {
  scoreboardButtonContainer.style.visibility = 'hidden';
}
//Score incrementor event callback function for current active user. Stops game when appropriate score value is achieved --> scoreboard.html
function homePowerUp(event){
  playPongAudio();
  globalHomeScore++;
  globalCounter++;
  homeScore.textContent = pad2(globalHomeScore);
  if (globalHomeScore === endGameScore - 1) {
    homeGamePoint();
  } else if (globalAwayScore === endGameScore - 1) {
    awayGamePoint();
  } else {
    serverChange();
  }
  if (globalHomeScore === globalAwayScore && globalHomeScore === endGameScore - 1) {
    // homeGamePoint();
    console.log('endGameScore increments');
    endGameScore++;
  }
  if (endGameScore === globalHomeScore){
    if((((globalAwayScore - globalHomeScore) >= 2) || ((globalHomeScore - globalAwayScore) >= 2))) {
      alertify.alert(allUsers[activeUserIndex].userName + ' WINS!!!');
      editAlert();
      homeUp.removeEventListener('click', homePowerUp);
      homeDown.removeEventListener('click', homePowerDown);
      awayUp.removeEventListener('click', awayPowerUp);
      awayDown.removeEventListener('click', awayPowerDown);
      scoreboardButtonContainer.style.visibility = 'visible';
      homeScore.style.color = 'grey';
      awayScore.style.color = 'grey';
      saveOpponentLossRecord();
    }
  }
}
//Score decrementor event callback function for current active user --> scoreboard.html
function homePowerDown(event){
  playPongAudio();
  globalHomeScore--;
  globalCounter--;
  if (endGameScore != JSON.parse(localStorage.storedGameScore)) {
    endGameScore--;
    awayGamePoint();
  }
  if (globalHomeScore === endGameScore - 1) {
    homeGamePoint();
  } else if (globalAwayScore === endGameScore - 1) {
    awayGamePoint();
  } else {
    serverChange();
  }
  if (globalHomeScore < 1) {
    globalHomeScore = 00;
  }
  homeScore.textContent = pad2(globalHomeScore);
  homeGamePoint();
}
//Score incrementor event callback function for current active opponent. Stops game when appropriate score value is achieved --> scoreboard.html
function awayPowerUp(event){
  playPongAudio();
  globalAwayScore++;
  globalCounter++;
  awayScore.textContent = pad2(globalAwayScore);
  if (globalHomeScore === endGameScore - 1) {
    homeGamePoint();
  } else if (globalAwayScore === endGameScore - 1) {
    awayGamePoint();
  } else {
    serverChange();
  }
  if (globalHomeScore === globalAwayScore && globalAwayScore === endGameScore - 1) {
    // awayGamePoint();
    console.log('endGameScore increments');
    endGameScore++;
  }
  if (endGameScore === globalAwayScore){
    if((((globalAwayScore - globalHomeScore) >= 2) || ((globalHomeScore - globalAwayScore) >= 2))) {
      console.log('away fucking won');
      alertify.alert(JSON.parse(localStorage.storedActiveOpponent) + ' WINS!!!');
      editAlert();
      homeUp.removeEventListener('click', homePowerUp);
      homeDown.removeEventListener('click', homePowerDown);
      awayUp.removeEventListener('click', awayPowerUp);
      awayDown.removeEventListener('click', awayPowerDown);
      scoreboardButtonContainer.style.visibility = 'visible';
      homeScore.style.color = 'grey';
      awayScore.style.color = 'grey';
      saveOpponentWinRecord();
    }
  }
}
//Score decrementor event callback function for current active opponent --> scoreboard.html
function awayPowerDown(event){
  playPongAudio();
  globalAwayScore--;
  globalCounter--;
  if (endGameScore != JSON.parse(localStorage.storedGameScore)) {
    endGameScore--;
    homeGamePoint();
  }
  if (globalHomeScore === endGameScore - 1) {
    homeGamePoint();
  } else if (globalAwayScore === endGameScore - 1) {
    awayGamePoint();
  } else {
    serverChange();
  }
  if (globalAwayScore < 1) {
    globalAwayScore = 00;
  }
  awayScore.textContent = pad2(globalAwayScore);
  awayGamePoint();
}
//Serve Light
// current-player-serve
var homeServeLight = document.getElementById('current-home-serve');
var awayServeLight = document.getElementById('current-away-serve');

if (document.getElementById('serve-container')) {
  (function coinFlip() {
    var decision = Math.floor(Math.random() * (2)) + 1;
    if (decision === 1) {
      homeServeLight.setAttribute('class', 'current-player-serve');
      alertify.alert(allUsers[activeUserIndex].userName + ' serves first!!!');
      editAlert();
    } else if (decision === 2) {
      awayServeLight.setAttribute('class', 'current-player-serve');
      alertify.alert(JSON.parse(localStorage.storedActiveOpponent) + ' serves first!!!');
      editAlert();
    }
  })();
}

function lightChange(p1,p2) {
  if (p1.className === 'current-player-serve'){
    p1.removeAttribute('class', 'current-player-serve');
    p2.setAttribute('class', 'current-player-serve');
  }
  else if (p2.className === 'current-player-serve') {
    p2.removeAttribute('class', 'current-player-serve');
    p1.setAttribute('class', 'current-player-serve');
    // console.log('working');
  }
};

function serverChange(){
  if (globalCounter % 2 === 0) {
    lightChange(homeServeLight, awayServeLight);
  }
}

function awayGamePoint(){
  if ((endGameScore - 1) === globalAwayScore){
    console.log('Away\'s gamepoint!');
    if (awayServeLight.className === 'current-player-serve'){
      awayServeLight.removeAttribute('class', 'current-player-serve');
      homeServeLight.setAttribute('class', 'current-player-serve');
    }
  }
}

function homeGamePoint(){
  if((endGameScore - 1) === globalHomeScore){
    console.log('Home\'s game point!');
    if(homeServeLight.className === 'current-player-serve'){
      homeServeLight.removeAttribute('class', 'current-player-serve');
      awayServeLight.setAttribute('class', 'current-player-serve');
    }
  }
}

function saveOpponentWinRecord() {
  allUsers[activeUserIndex].opponentsArray[opponentIndex][1]++;
  calculateOpponentPercentage(opponentIndex);
  localStorage.setItem('storedUsers', JSON.stringify(allUsers));
}
function saveOpponentLossRecord() {
  allUsers[activeUserIndex].opponentsArray[opponentIndex][2]++;
  calculateOpponentPercentage(opponentIndex);
  localStorage.setItem('storedUsers', JSON.stringify(allUsers));
}

//Results.html JS
// var userResults = document.getElementById('user-results');
// var opponentResults = document.getElementById('opponent-results');
var listResults = document.getElementById('list-record');
//Renders table on page load for current active user --> results.html
var mainTable = document.createElement('table');
var userTable = document.createElement('table');
var overallRecord = document.getElementById('overall-record');
function renderUserData() {
  userTotalWinsAndLosses();
  userPercentageWins();
  overallRecord.appendChild(userTable);
  var trEl1 = document.createElement('tr');
  userTable.appendChild(trEl1);
  var thEl1 = document.createElement('th');
  thEl1.textContent = 'CURRENT USER';
  var thEl2 = document.createElement('th');
  thEl2.textContent = 'WINS';
  var thEl3 = document.createElement('th');
  thEl3.textContent = 'LOSSES';
  var thEl4 = document.createElement('th');
  thEl4.textContent = 'WIN %';
  trEl1.appendChild(thEl1);
  trEl1.appendChild(thEl2);
  trEl1.appendChild(thEl3);
  trEl1.appendChild(thEl4);
  var trEl2 = document.createElement('tr');
  userTable.appendChild(trEl2);
  var tdEl1 = document.createElement('td');
  tdEl1.textContent = allUsers[activeUserIndex].userName;
  var tdEl2 = document.createElement('td');
  tdEl2.textContent = allUsers[activeUserIndex].wins;
  var tdEl3 = document.createElement('td');
  tdEl3.textContent = allUsers[activeUserIndex].loss;
  var tdEl4 = document.createElement('td');
  tdEl4.textContent = allUsers[activeUserIndex].percentage;
  trEl2.appendChild(tdEl1);
  trEl2.appendChild(tdEl2);
  trEl2.appendChild(tdEl3);
  trEl2.appendChild(tdEl4);
}
if (overallRecord) {
  renderUserData();
}
//Renders table on page load for all opponents of current active user --> results.html
function renderOpponentData() {
  listResults.appendChild(mainTable);
  var mainTrEl = document.createElement('tr');
  mainTable.appendChild(mainTrEl);
  var thEl1 = document.createElement('th');
  thEl1.textContent = 'OPPONENT';
  var thEl2 = document.createElement('th');
  thEl2.textContent = 'WINS';
  var thEl3 = document.createElement('th');
  thEl3.textContent = 'LOSSES';
  var thEl4 = document.createElement('th');
  thEl4.textContent = 'WIN %';
  mainTrEl.appendChild(thEl1);
  mainTrEl.appendChild(thEl2);
  mainTrEl.appendChild(thEl3);
  mainTrEl.appendChild(thEl4);

  for (var i = 0; i < allUsers[activeUserIndex].opponentsArray.length; i++) {
    var trEl = document.createElement('tr');
    trEl.setAttribute('id', 'opponent' + i);
    var tdEl1 = document.createElement('td');
    var tdEl2 = document.createElement('td');
    var tdEl3 = document.createElement('td');
    var tdEl4 = document.createElement('td');
    tdEl1.textContent = allUsers[activeUserIndex].opponentsArray[i][0];
    tdEl2.textContent = allUsers[activeUserIndex].opponentsArray[i][1];
    tdEl3.textContent = allUsers[activeUserIndex].opponentsArray[i][2];
    tdEl4.textContent = calculateOpponentPercentage(i);
    mainTable.appendChild(trEl);
    trEl.appendChild(tdEl1);
    trEl.appendChild(tdEl2);
    trEl.appendChild(tdEl3);
    trEl.appendChild(tdEl4);
    var removeButton = document.createElement('button');
    removeButton.setAttribute('class', 'remove-opponent');
    // removeButton.setAttribute('type', 'submit');
    removeButton.setAttribute('id', allUsers[activeUserIndex].opponentsArray[i][0]);
    removeButton.textContent = 'Delete';
    trEl.appendChild(removeButton);
    var hrEl = document.createElement('hr');
    mainTable.appendChild(hrEl);
  }
}
if (listResults) {
  renderOpponentData();
}

function resetTable() {
  var newMainTable = document.createElement('table');
  mainTable.parentNode.replaceChild(newMainTable, mainTable);
  mainTable = newMainTable;
}
function resetUserTable() {
  var newUserTable = document.createElement('table');
  userTable.parentNode.replaceChild(newUserTable, userTable);
  userTable = newUserTable;
}

if (listResults) {
  listResults.addEventListener('click', handleDeleteOpponent);
}
function handleDeleteOpponent(event) {
  event.preventDefault();
  console.log(event.target.id);
  var foundOpponentName = false;
  var index = 0;
  for (var i = 0; i < allUsers[activeUserIndex].opponentsArray.length; i++) {
    if (allUsers[activeUserIndex].opponentsArray[i][0] === event.target.id.toString()) {
      foundOpponentName = true;
      index = i;
    }
  }
  if (foundOpponentName) {
    // console.log(allUsers[activeUserIndex].opponentsArray[index]);
    allUsers[activeUserIndex].opponentsArray.splice(index, 1);
    localStorage.setItem('storedUsers', JSON.stringify(allUsers));
    resetUserTable();
    renderUserData();
    resetTable();
    renderOpponentData();
  }
  // console.log(allUsers[activeUserIndex].opponentsArray[index]);
}
var newOpponentButton = document.getElementById('new-opponent-button');
var rematchButton = document.getElementById('rematch-button');
var resultsButton = document.getElementById('records-button');

function newOpponentSetup() {
  window.location.href = 'setup.html';
}

function rematchSetup() {
  window.location.href = 'scoreboard.html';
}

function resultsSetup() {
  window.location.href = 'results.html';
}

// console.log(alertHead);

function editAlert(){
  var divNew = document.createElement('div');
  divNew.setAttribute('class', 'div-new');
  for (var i = 0; i < alertHead.length; i++) {
    var img = document.createElement('img');
    var firstName = document.createElement('h2');
    var lastName = document.createElement('h2');
    lastName.setAttribute('id', 'logo-last-name');
    img.setAttribute('src', 'img/pong-fellows-logo.png');
    img.setAttribute('class', 'alert-logo');
    alertHead[i].textContent = '';
    firstName.textContent = 'PONG';
    lastName.textContent = 'FELLOWS';
    alertHead[i].appendChild(img);
    alertHead[i].appendChild(divNew);
    divNew.appendChild(firstName);
    divNew.appendChild(lastName);
  }
}

redpajama_set_name: RedPajamaGithub


text:
'The Case Against Adnan Syed' premier: Sharapova's boyfriend turns out to be Jemima Khan's acquaintance
LatestEntertainment
LONDON: Alexander Gilkes, boyfriend of Russian Tennis star Maria Sharapova, is known as New York' best-connected Briton.
It recently turned out that he is also acquainted with Jemima Goldsmith also known as Jemima Khan, the former wife of Pakistan Prime Minister Imran Khan.
Jemima Khan was involved in the production of "The Case against Adnan Syed", a documentary series Directed by Academy Award nominee Amy Berg.
It explores 1999 disappearance and murder of 18-year old Korean-American student Hae Min Lee and subsequent conviction of her Pakistani-American ex-boyfriend, Adnan Syed.
As the documentary premiered on March 10, Gilkes used his Instagram story to show his excitement and told Jemima Khan that he will be tuning in to watch "The Case against Adnan Syed".
According to British media, the multimillionaire Englishman was a guest at Prince William and Kate Middleton's wedding and his ex-wife is friends with Meghan Markle.
He is understood to have become friends with Prince William when both were at Eton.
Gilkes, who has been dating Sharapova for over a year now, is also said to be close with Prince Harry who also went to same school.
Alexander Gilkes follows Jemima Goldsmith on photo sharing app Instagram and liked her recent post about premier of the "The Case against Adnan Syed" in New York.

redpajama_set_name: RedPajamaCommonCrawl


Wilbur G. Mason was born in Tuskegee, Alabama on September 28, 1924. He was educated at Tuskegee Institute High School and graduated in 1944, while working part time at the Tuskegee Army Airfield as a civilian employee.
Mr. Mason served as a civilian employee in the base supply. He served as a storekeeper, where he received and stored Air Force property, which included equipment for the pilots and ground crew. He then became an inspector in base supply to inspect and identify Air Force property according to the manuals, rules and regulations. After studying Industrial Arts and Electrical Engineering at Tuskegee Institute, Mr. Mason moved to Detroit, Michigan where he became an electrician.
In 1958, he joined IBEW (International Brotherhood of Electrical Workers) and continued his career as an electrician working with construction contractors before joining the Wayne County Government in Michigan in 1967as an electrician.
Mr. Mason retired in 1985 and now lives in Atlanta. He has three children, six grandchildren, and three great-grandchildren. He retains his Master Electricians License both in Michigan and in Georgia. He is a member of the Atlanta Senior Golfer Association, Alpha Phi Alpha Fraternity and the Atlanta Chapter of the Tuskegee Airmen. He has served as Treasurer for the National Chapter Tuskegee and the Atlanta Chapter Tuskegee Airmen.


text:
Air Pollution hits EU in the heart
Posted under What's H2appening? on 6 January, 2015
The recent update of the Global Burden of Disease study in the Lancet of December 17, 2014 explores the mechanisms and relationships between ambient air pollution and cardiovascular disease to highlight and raise awareness of the importance and wide-ranging impact of air pollution on cardiovascular disease. The study also provides guidance to society, patients, and healthcare professionals on the potential health impacts of air pollution, and make recommendations for future public health and research priorities to manage and mitigate this avoidable cause of death and disease.an increasingly worrying link of air pollution to diseases of normally healthy human beings. It also indicates the global impact of air pollution with as many as 3.1 million of 52.8 million all-cause and all-age deaths being attributable to ambient air pollution in the year 2010.1 The publication comes in the same week that the EC announced that the EU clean air directive, designed to reduce the health impacts from air pollution and a waste directive that would set states the target of recycling 70% of waste by 2030, were at risk as part of their current regulation review. The EHA signed a joint letter last year to urge the EU Commission to ensure that separate clean transport regulations would be implemented by the new EU Commission and not only as part of the EU Emission Trading System.
The EU clean air package would have set more stringent pollution emission limits than ever before, including regulation of harmful substances such as fine particulate matter (PM2.5) for the first time. EU analysts believe that the measures would save 58,000 premature deaths a year, with annual health benefits of between €40bn and €140bn. But the proposal will now be adapted and repackaged as an adjunct to the EU's 2030 climate and energy targets, in a more appetizing way for industry and EU states, Vice president of the EU Commission Timmermans said.
"We will bring forward a modified [air quality] programme that will better reflect synergies with the 2030 energy and climate package and reduce unnecessary burdens," he told the European Parliament in Strasbourg. "We are not compromising on the goals we want to attain, but looking critically at the methods we can bring to bear so that we have a measure we can implement soon."
Timmermans said the proposal had to be put on ice because of an emerging gap between what Parliament and EU states might see as an "acceptable outcome" to negotiations. EU emissions regulations now require real-world testing for vehicles, with plans to bring in further real world testing in future, including for nitrogen oxide emissions from light-duty diesel vehicles. At a hearing on December 4 in the EU Parliament on Air Quality Daimler AG's Klaus Land said that such regulation would need a legal basis to ensure the same stringency for RDE (Real Driving Emissions) tests across the board, HE emphasised that the industry is not blocking or delaying RDE but that it was proposing a RDE package that "will lead to a simultaneous air quality benefit" and it is of "comparable" stringency to the Euro VI RDE programme. He explained that due to necessary "massive" hardware changes at car manufacturing plants to bring in new RDE tests, the industry's stance is that the only way an RDE regulation can be brought in is via a gradual '2-step' approach, including an intermediate and a final step. This, Mr Land said, would lead to the ACEA's proposed RDE regulation being introduced from perhaps shortly after 2020, but he added that meeting EU NO2 limits would depend on the rate of introduction of RDE compliant vehicles on roads, which "is not in the control of the industry".
Ambient air pollution ranked ninth among the modifiable disease risk factors, being listed above other commonly recognized factors, such as low physical activity, a high-sodium diet, high cholesterol, and drug use. Finally, air pollution accounts for 3.1% of global disability-adjusted life years, an index that measures the time spent in states of reduced health.1
Historically, the 1952 Great Smog of London led to an increase in cardiovascular death as well as deaths due to respiratory disease. Subsequent studies in the 1990s, such as the Harvard Six Cities2 and American Cancer Society cohort studies,2,3 established an enduring positive association between long-term exposure to air pollution and total and cardiovascular mortality, mainly due to coronary artery disease.4 In Europe, the first study that supported this association between long-term exposure and mortality was the Netherlands Cohort Study on Diet and Cancer.5 Associations with cardiovascular morbidity and mortality are also seen with short-term (e.g. day-to-day fluctuations) pollutant exposures of residents in large urban areas worldwide, including the United States of America6 and Europe.7,8 Among multiple pathways linking air pollution to cardiovascular morbidity and mortality, the most relevant are the induction of oxidative stress, systemic inflammation, endothelial dysfunction, atherothrombosis, and arrhythmogenesis.9 (Photo: EV traffic jam in Rotterdam)


You could be driving around in a brand-new Dacia from as little as £2.60 a day! We know it sounds almost to good to be true, right? Well, we're delighted to say these offers are actually available from Hendy Dacia.
Click the images below to explore our range of unbelievable Personal Contract Hire offers available across the Dacia range. If anything catches your eye, we're ready and waiting to answer any questions you have, so don't hesitate to get in touch with one of our expert team.


text:
Tag Archives: impeachment
Permalink to Would Senate Republicans Abandon Their Baseless Arguments if There Were a Secret Ballot?
Would Senate Republicans Abandon Their Baseless Arguments if There Were a Secret Ballot?
UF Levin College of Law professor and economist Neil H. Buchanan considers whether a secret ballot is a good idea, or even permissible, in former President Trump's impeachment trial. Professor Buchanan ultimately takes no position on the question of a secret ballot, suggesting that it might simply be an easy way out for Senate Republicans; he argues that what matters most is that the trial go forward, revealing an open-and-shut case against Donald Trump.
Posted in: Politics
Permalink to Last Call at the Bar: Grading the Briefs in Trump Impeachment 2.0
Last Call at the Bar: Grading the Briefs in Trump Impeachment 2.0
Dean Falvy
Dean Falvy, a lecturer at the University of Washington School of Law in Seattle, offers thoughts on the legal tactics and briefs filed by each side in former President Trump's second impeachment trial. Mr. Falvy argues that if Trump can survive a second impeachment vote, it will show that he is still operating where he has always believed himself to be: well beyond the reach of the law.
Permalink to Who May/Should Preside Over Former President Trump's Second Impeachment Trial?
Who May/Should Preside Over Former President Trump's Second Impeachment Trial?
Vikram David Amar and Jason Mazzone
Illinois law dean Vikram David Amar and professor Jason Mazzone argue that the constitutional ambiguity over who may preside over former President Trump's second impeachment trial supports the conclusion that the Senate should ask Chief Justice John Roberts to preside. Dean Amar and Professor Mazzone explain why other people—such as Senate President Pro Tempore, the Vice President, and any other senator—are not ideal options because of real or perceived conflicts.
Posted in: Constitutional Law
Permalink to Impeaching a Former President Is Plainly Constitutional
Impeaching a Former President Is Plainly Constitutional
UF Levin College of Law professor and economist Neil H. Buchanan argues that the text of the Constitution makes clear that Congress has the power to impeach and convict Donald Trump, even though he is no longer President. Buchanan describes the unambiguous textual support for this conclusion, which Buchanan (and others) argue is also amply supported by the Constitution's purpose, structure, and other interpretive approaches.
Permalink to Double Jeopardy: Answers to Six Questions About Donald Trump's Second Impeachment Trial
Double Jeopardy: Answers to Six Questions About Donald Trump's Second Impeachment Trial
Dean Falvy, a lecturer at the University of Washington School of Law in Seattle, addresses six key questions about Donald Trump's second impeachment trial. Falvy provides clear and supported answers to frequently asked questions such as whether the Senate can act to remove Trump from the presidency, whether it can hold a trial after his term expires, who should preside, and whether he will lose his presidential perks.
Permalink to One More for the Road: Why Congress Must Impeach Donald Trump (Again)
One More for the Road: Why Congress Must Impeach Donald Trump (Again)
Dean Falvy, a lecturer at the University of Washington School of Law in Seattle, makes the case for impeaching Donald Trump again, after the failed insurrection of January 6. Falvy describes three possible ways to disempower Trump from undermining democracy in our nation and explains why immediate impeachment by the House and removal by the Senate is the most appropriate course of action.
Posted in: Government
Permalink to To Our Elected Representatives in Congress: The Framers Wouldn't Be Surprised a President Attempted a Coup, Just Disappointed You Didn't Stop It Sooner
To Our Elected Representatives in Congress: The Framers Wouldn't Be Surprised a President Attempted a Coup, Just Disappointed You Didn't Stop It Sooner
Marci A. Hamilton, a professor at the University of Pennsylvania and one of the country's leading church-state scholars, pens an open letter to members of Congress, describing Wednesday's insurrection by pro-Trump extremists as predicable (even predicted) to the Framers and calling upon Congress to impeach and convict the President. Professor Hamilton argues that Donald Trump is the embodiment of what the Framers expected from rulers: self-centered corruption, greed, and no care for the common good.
Permalink to Dead Letter Office: What's Left of the Impeachment Power After Trump's Acquittal
Dead Letter Office: What's Left of the Impeachment Power After Trump's Acquittal
Dean Falvy, a lecturer at the University of Washington School of Law in Seattle, discusses what happens now, after Senate Republicans voted to acquit President Trump. Falvy predicts that (1) President Trump will be emboldened to commit further abuses of power, (2) future presidents will be less constrained by fear of impeachment, and (3) impeachment may become more routine as political practice and significantly less effective as a constitutional remedy.
Permalink to What Else Might Senate Republicans Have Done, Given That They're Too Scared to Do the Right Thing?
What Else Might Senate Republicans Have Done, Given That They're Too Scared to Do the Right Thing?
UF Levin College of Law professor and economist Neil H. Buchanan considers whether there is anything Senate Republicans might have done, instead of outright acquitting President Trump, to maintain the role of Congress as a coequal branch with the Executive. Buchanan proposes that under the text of the impeachment clauses, those Republican senators could have voted for removal—the necessary result of finding wrongdoing—but permitted Trump to run again in the election later this year.
Permalink to The Real Insidious Part of Dershowitz's Impeachment Defense
The Real Insidious Part of Dershowitz's Impeachment Defense
Vikram David Amar and Evan Caminker
Illinois law dean Vikram David Amar and Michigan Law dean emeritus Evan Caminker discuss Harvard Law professor Alan Dershowitz's explanation of why he stands (virtually) alone in his views on impeachment—that all the scholars who disagree with him are biased partisans. Amar and Caminker explain why this claim is so insidious, with effects lasting well beyond the span of the current presidency.
Permalink to The Framers Would Want You to Know: Alan Dershowitz Is Wrong About Impeachment, and So Is the President
The Framers Would Want You to Know: Alan Dershowitz Is Wrong About Impeachment, and So Is the President
Marci A. Hamilton, a professor at the University of Pennsylvania, argues that abuse of power is a sufficient ground for presidential impeachment, notwithstanding the argument to the contrary by President Trump's impeachment defense lawyer, Alan Dershowitz. Hamilton explains that abuse of power by the President was the very fear of the Framers of the Constitution, and to reject it as an impeachable offense would subvert the spirit of the Constitution, as evidenced by the Framers' debates at the Constitutional Convention.
Permalink to Senate Secrecy: Can the Votes of Senators on President Trump's Impeachment be Withheld from the Voting Public?
Senate Secrecy: Can the Votes of Senators on President Trump's Impeachment be Withheld from the Voting Public?
Illinois law dean Vikram David Amar and professor Jason Mazzone evaluate the suggestion made by some that the votes of senators on President Trump's impeachment can and should be private. Amar and Mazzone argue that while the text of the Constitution alone does not foreclose secrecy, structural, prudential, and logistical considerations strongly disfavor a secret vote on the matter.
Permalink to Impeachment of the President Normally Requires a Crime
Impeachment of the President Normally Requires a Crime
Samuel Estreicher and Christopher Owens
NYU law professor Samuel Estreicher and 3L Christopher S. Owens discuss the unique situation of the impeachment of a U.S. President for conduct not alleged to be a crime. Looking to both text and history, Estreicher and Owens argue that commission of a particular, defined crime should be necessary for presidential impeachment for the preservation of the legitimacy and original purpose of that political device, particularly in polarized times such as these.
Permalink to Can a President Who Is Reelected After Being Acquitted in One Impeachment Case be Retried by a Subsequent Senate?
Can a President Who Is Reelected After Being Acquitted in One Impeachment Case be Retried by a Subsequent Senate?
Illinois law dean and professor Vikram David Amar considers whether a President who has been impeached and acquitted may, if reelected, be retried by a subsequent Senate. Amar acknowledges that it is unclear whether the Fifth and Sixth Amendments' criminal procedural protections apply to impeachment proceedings, but he offers two key reasons that re-litigation of impeachment allegations after presidential reelection would be improper.
Permalink to Did President Trump Commit the Federal Crime of Bribery?
Did President Trump Commit the Federal Crime of Bribery?
NYU law professor Samuel Estreicher and 3L Christopher S. Owens analyze, based on the facts presently known to the public, whether President Trump committed the federal crime of battery. After describing the elements required for the offense of bribery, Estreicher and Owens conclude that Trump's conduct would support a finding of an exchange of official acts (by Trump) for things of value (the public statement sought from Zelensky), as well as the corrupt intent necessary to maintain a bribery charge.
Posted in: Criminal Law
Permalink to What Does John Bolton Know, and When Will We Know It? Why the Former National Security Advisor May Hold Trump's Fate in His Hands
What Does John Bolton Know, and When Will We Know It? Why the Former National Security Advisor May Hold Trump's Fate in His Hands
Dean Falvy, a lecturer at the University of Washington School of Law in Seattle, explains why former National Security Advisor John Bolton may hold the key to what happens with the impeachment proceedings of President Trump. Falvy describes Bolton's background and shows why he may play such a critical and unique role in what happens to the President.
Permalink to Go Big, Democrats: Attempts to Rig Elections Are Not the Only Impeachable Offenses
Go Big, Democrats: Attempts to Rig Elections Are Not the Only Impeachable Offenses
University of Florida Levin College of Law professor and economist Neil H. Buchanan argues that Democrats should draft broad articles of impeachment. As Buchanan points out, if the Democrats do not lay out the full case against Trump, everything that is left out will have been validated and will become a precedent for future misdeeds by this or any other President.
Permalink to The Battle of Kiev: How Bill Taylor's Testimony Blew a Hole in Trump's 'No Quid Pro Quo' Defense
The Battle of Kiev: How Bill Taylor's Testimony Blew a Hole in Trump's 'No Quid Pro Quo' Defense
Dean Falvy, a lecturer at the University of Washington School of Law in Seattle, discusses the private testimony of U.S. diplomat Bill Taylor regarding President Trump's interactions with Ukraine. Falvy argues that by meticulously tracking his digital and verbal conservations with other high-level players, Taylor is forcing the implicated officials to engage at a similar level of detail and precluding them from asserting blanket "I do not recall" defenses.
Permalink to The Voters' One True Power and Impeachment
The Voters' One True Power and Impeachment
Marci A. Hamilton, a professor at the University of Pennsylvania, argues that the present allegations against President Trump require representatives and senators to act in the interest of the voters and seek the truth. Hamilton explains that the checks and balances our Constitution's framers put in place were designed for this very type of situation, and the power to impeach serves a vital role of protecting the people.
Permalink to A Tale of Two Nixons: Executive Branch Officials Must Comply with House Subpoenas
A Tale of Two Nixons: Executive Branch Officials Must Comply with House Subpoenas
Cornell law professor Michael C. Dorf explains why U.S. Supreme Court cases—confusingly, Nixon v. United States and United States v. Nixon—together should foreclose any legal arguments that might have supported President Trump's strategy to fight impeachment. Dorf explains each of the precedents and their bearing on today's situation.


text:
Joined Battery in 1998
Focus Areas: Application Software, Consumer, Infrastructure Software
"I have the utmost respect for entrepreneurs who risk everything to pursue the next big idea—and their dreams. After more than two decades in venture, it's still exciting for me to help innovative companies grow and become market leaders."
Michael, former chair of the National Venture Capital Association, is a seasoned investor with experience scaling software companies–including in financial technology–on both sides of the Atlantic.
Since joining Battery Ventures in 1998, Michael has made, or managed, multiple investments spanning the enterprise software, financial-services and technology-enabled business-services markets. Currently, Michael serves on the boards of AuditBoard, CarNow, Cube Software, Diametric Capital, Hummingbird, Istra Research, Joor, KeyMe, Kojo, Mews, MX, Newforma, Nitro Software (ASX: NTO), Obie, Quinyx, ServiceTitan, Shippeo and Vidyard. Michael is also a board observer for GetYourGuide, NorthOne, Next Insurance and Xenex. Michael has also made seed investments in Check Technologies since 2021.
Michael was previously involved with Battery's investments in Bonfire (merged into GTY Technology, NASDAQ: GTYH); Digby (NASDAQ: PHUN); ExactTarget (NYSE: ET, acquired by Salesforce.com); IDI Direct Insurance (TASE: IDIN); J. Hilburn; JAMF (acquired by Vista Equity Partners); Mendix (acquired by Siemens); MRU Holdings (NASDAQ: UNCL); Neolane (acquired by Adobe); Panjiva (acquired by S&P); Precidian Investments; Q2 Holdings, or Q2ebanking (NYSE: QTWO); RiskIQ (acquired by Microsoft), TradeKing (acquired by Ally Financial) and VNDLY (acquired by Workday).
From 1996 to 1998, Michael was a member of the high-technology group at Goldman, Sachs & Co., where he worked on debt and equity financings as well as mergers and acquisitions. Previously, he was a financial analyst within Goldman's financial-institutions group. There, he focused on mergers and acquisitions within asset management, insurance, specialty finance and retail/mortgage banking. Michael graduated magna cum laude from Georgetown University with a dual BS in finance and international business. Michael also served as the chair of the National Venture Capital Association for the 2021-2022 term.
5 Policies Washington Should Enact to End the Climate Crisis and Joblessness
VIEW ALL INSIGHTS BY Michael Brown
Michael, as chair of the NVCA, highlights on CNBC the chilling effect new tech antitrust laws could have on the startup M&A landscape.
As the U.S. moves toward a period of post-pandemic national recovery, the National Venture Capital Association highlights 5 policy recommendations Washington should consider to keep the U.S. positioned as a global innovation leader—from NVCA President Bobby Franklin and Chairman Michael Brown in TechCrunch.
Michael chats with Fortune about the U.S. Innovation and Competition Act–and other tech-industry priorities in Washington–as he takes the helm as chair of the National Venture Capital Association.
The National Venture Capital Association appoints Battery's Michael Brown as the new board chair for the 2021-2022 term.
Michael discusses Battery XIII and Battery XIII Side Fund, capitalized at a combined $2 billion, in Bloomberg and Reuters.
Michael discusses financial-technology IPOs in Bloomberg and Forbes.
Michael is profiled in the Boston Business Journal.


UIIC Assistant Mains Admit card 2017 – Phase II Call Letter Out Check Here: United India Insurance Co. Ltd. is Public Sector General insurance division. UIIC had released the notification to fill up the 696 vacant positions for Assistant Posts. UIIC is going to conduct the Tier II exam for the Assistant post on 23rd October 2017. The Selection Commission had conducted the Tier-I – Online Examination (Preliminary) on 22nd September 2017 online at various allotted places.
Latest Update – The United Insurance India Corporation Limited (UIICL) Organization has released the result of UIIC Assistant exam 2017 on the official website. You can check your scorecard and results through this website.
Aspirants are now sitting tight for UIIC Assistant Mains Admit card 2017 – Phase II Call Letter Out Check Here Applicants are suggested to download the admit card from the official website of the UIIC i.e. https://uiic.co.in/ by using the Registration Number/Roll Number, and Password/Date of Birth from the official web portal. UIIC Assistant Phase-II Online Exam Commencement of Call letter Download date is 5th October 2017 and applicants can Closure of Call letter Download date is 23rd October 2017.
According to recent notification which has been sent by the UIIC official to the candidates through SMS and email that UIIC Phase II admit card has been uploaded to official website and candidates need to approach the official website of UIIC i.e. https://uiic.co.in/ by using the Registration Number/Roll Number, and Password/Date of Birth in proper format.
As the Hall Ticket is now available online so applicants have to download the hall ticket right now from there. Authority is going to hold the written exam for Tier II on 23rd October 2017.
Applicants are informed that don't forget to carry the admit card with one photo identity proof during the exam session. If any candidate will not hold the valid downloaded/printed hall ticket then he/she will not be permitted to get enter in the exam hall to attend the exam.
Aspirants will have to unlock the UIIC website for downloading the Admit Card/ Call Letters for online UIIC Assistant Mains Exam which has been scheduled to be done on 23rd October 2017. Applicants have to download the admit card very early and intimate the concerned authority if any wrong information mentioned in the admit card as the exam holding authority will not be answerable for any kind of difficulty if aspirants do not intimate the same problem prior to due date.
Candidates are now searching for the UIIC Assistant Mains Admit card 2017 download. Aspirants have to stick fresh identifiable photograph on the Admit Card if possible, the same as given at the time of online registration.
If Aspirants fail to show the call letter asked by the examiner during the examination period the candidates will not be permitted to attend the particular exam. So don't get the delay, just approach the UIIC website and download the admit card by using their required information.
Step 1: Aspirants have to move toward the UIIC official website at https://uiic.co.in/.
Step 2: Now applicants need to click on the link "ASST. RECRT. 2017 – Phase 2 Exam Call Letter Download Link Click Here".
Step 3: Thereafter the Login through Registration Number/Roll Number, and Password/Date of Birth and click on Login button.
Step 4: Now click on download button and download the ASST. RECRT. 2017 Phase 2 Exam Call Letter and print the same and hold call letter for attending the examination.


Members of Bupa UK were delighted to attend the British Medical Association (BMA) Patient Information Awards this week, where Bupa's online dementia information was commended.
The judging panel said of the Bupa UK Dementia Hub: "This is a well-constructed web resource which is easy to navigate and informative. It is suitable for those wanting to find out more about dementia. This is a good resource."
The ceremony was held at BMA House in London, with a keynote address from Professor Dinesh Bhugra CBE, Emeritus Professor of Mental Health and Cultural Diversity at King's College London.


Enhance your living space with our NEW Intone Painted Bedroom Collection. You can create a warm and comfortable feel to your room, knowing each piece is individually crafted. Choose from metal or oak knobs supplied with every piece.


The U.S. Copyright Office recently published new rules on regarding the legality of jailbreaking smartphones, tablets and gaming consoles. The guidelines also outline the rules on DVD copying.
It has been ruled that jailbreaking all of the aforementioned devices is now illegal with smartphones being the only exception. Smartphone jailbreaking is ruled to be lawful only for the purpose of enabling interoperability of non-vendor-approved software that is lawfully acquired. It is stated in the document that "one engaged in jailbreaking need only modify the functional aspects of the firmware, which may or may not be subject to copyright protection".
The Digital Millennium Copyright Act prohibits hacking DVDs for watching on different devices and platforms; it is however, legal to copy DVDs for use in documentary films. The regulator body stated that DVD copying is permissible in order to make use of short portions of the motion pictures for the purpose of criticism or comment in the instances of noncommercial videos, documentary films, nonfiction multimedia e-books offering film analysis, and for educational purposes in film studies or other courses requiring close analysis of film and media excerpts.
The regulation "Exemption to Prohibition on Circumvention of Copyright Protection Systems for Access Control Technologies" is effective starting October 28th, 2012.


text:
Q: Why are lines in JS executing upside down I am super confused why Line 2 is executing before Line 1.
I have a function base64 to convert uploaded files into base64. Then I am calling the function base64, and then trying to put the base 64 into a variable. However, the flow is going upside down and not working. Why is the line 2 executing before line 1
  function base64(file, callback) {
    var coolFile = {};

    function readerOnload(e) {
      var base64 = btoa(e.target.result);
      coolFile.base64 = base64;
      callback(coolFile);
    }

    ;
    var reader = new FileReader();
    reader.onload = readerOnload;
    var file = file[0].files[0];
    coolFile.filetype = file.type;
    coolFile.size = file.size;
    coolFile.filename = file.name;
    reader.readAsBinaryString(file);
  }

        var fileToSend;

        base64($('input[type="file"]'), function (filedata) {
          var convertedFile = filedata.base64;
          console.log('\n file SB1 \t' + convertedFile);
          fileToSend = convertedFile;
          console.log ('Line 1 \t' + fileToSend);
        });

        console.log('\n Line 2 \t' + fileToSend);

A: Your 'Line 1' statement is part of a callback passed to base64 function. Inside that function you put that callback into another function readerOnload(), which is called after FileReader load event fires (reader.onload = readerOnload;).
Your file needs some time to get loaded into FileReader, and this process is asynchronous, so the Task Queue moves to 'Line 2' before that happens.
To understand better what's happening here check out this video: https://www.youtube.com/watch?v=8aGhZQkoFbQ

A: Here is a fixed version of your code
Your original code was incomplete and had the async issue mentioned in the comments

function base64(file, callback) {
  var coolFile = {};

  function readerOnload(e) { console.log(e.target.result)
    var base64 = btoa(e.target.result);
    coolFile.base64 = base64;
    callback(coolFile);
  }

  ;
  var reader = new FileReader();
  reader.onload = readerOnload;
  var file = file[0].files[0];
  coolFile.filetype = file.type;
  coolFile.size = file.size;
  coolFile.filename = file.name;
  reader.readAsBinaryString(file);
}

$('input[type="file"]').on("change", function() {
  base64([this],
    function(filedata) {
      var convertedFile = filedata.base64; // file to send
      console.log('\n file SB1 \t' + convertedFile);
    });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="file" />

redpajama_set_name: RedPajamaStackExchange


text:
Global Analysis from the European Perspective. Preparing for the world of tomorrow
and Finance
Buy Bulletin
History teaches us that migration is a ticking time bomb
A fairy-tale attitude makes us believe that we are one extended human family. Facts teach us that quite the contrary is true. Human national, religious or cultural groups compete and combat each other. This is determined by our biological constitution and history is a long record confirming that such is the case. Only those who live in cloud cuckoo land will set down to bend the natural forces to make them conform to their I-have-a-dream fantasy.
1938 saw the so called Sudetenland crisis which was resolved by means of the Munich Agreement. Czechoslovakia had to cede huge chunks of its territory to Germany. Why did it have to do it? Because those huge chunks were inhabited by Germans. Why were they inhabited by Germans? Did Czechoslovakia conquer though em from Germany? Nay, these territories were parts of ancient, medieval Czech principality, then kingdom. So how did it come about that Germans began to inhabit those provinces? Oh, the answer is simple. They settled them. They kept coming from Germany in search of a better life, fleeing civil war or epidemics; they were invited by Czech princes and kings who thus wanted to have more workforce and raise their income. Before long the land along the northern, western and southern borderline became German for all practical purposes. They naturally wanted to be a part a greater Germany rather than Czechoslovakia. It's the right of nations to determine where they want to belong, or is it?
Kosovo: the cradle of the Serbian state, the place where the fateful battle took place, the battle that determined Serbian later history and the nation's identity. Seemingly all of a sudden, Kosovo became a hot spot of political and then military activities. Albanians wanted to have their rights, to have autonomy, then to separate themselves and join the province to Albania, Greater Albania. How did Albanians come to live in Kosovo? Did they conquer the land? No. They infiltrated it, they kept streaming in and settling down; they were invited by some of the Serbian governments, and slowly their numbers outdid those of the indigenous Serbs. When their numbers were large enough and the circumstances favourable to their plans, they started demanding limited autonomy, greater autonomy, independence and ultimately unity with Albania.
The Second World War started over the Gdańsk (Danzig) corridor. A small eastern part of then Germany (East Prussia) was separated from the rest of the country by Polish territory. How did it come about that Germans lived in a country that was separated from the rest of their nation? How did they come to live in Prussia? Did they conquer it? Yes, they did. But then how was it possible that they conquered a country that they did not border on? Well, Poland bordered on Prussia and wanted to defend itself against the raids launched from that territory. Poland was too weak to defend itself, so its rulers decided to invite defenders. They invited the German Teutonic Knights who duly applied themselves to the task and within half a century did away with the indigenous inhabitants of Prussia. They replaced them and from then on started to threaten the existence of Poland itself. Just like that.
Wasn't it the Celtic tribes of Britain which, unable to stop the raids of Picts and Scots, invited Anglo-Saxons and asked them to defend their land? The Anglo-Saxons came, beat the hell out of the Scots and out of gratitude stayed in Britain for good, pushing the Celtic tribes into the fringes of the island. The usual story.
In 1943 Poles were massacred en masse in Volhynia. Why? They lived in isolated colonies among Ukrainians who did not like it at all. Why did they live among Ukrainians? Oh, they either moved here from Poland proper or they were the descendants of Ruthenian nobility that underwent a process of Polonization, thus alienating themselves from their roots, from their nation. The rank and file of that Ruthenian nation (today known as Ukrainians) only waited for an opportunity and when the Second World War was in full swing, they took advantage of the hostilities and started to make their score with the Poles even.
Why did the Germans start to remove Jews from the public offices? They started doing it when they realized that the Jewish tiny minority turned out to be occupying many lucrative positions in the finances, academia, mass media and the arts which, taking the disproportionate over-representation of them, was redolent of in-group scheming of this tiny minority against their hosts. Hence the later Nuremberg laws and the resultant persecution. How did it come about that the Jews appropriated to themselves numerous socially important positions? They were invited by German princes and kings and given privileges, charters and the like. The rulers did not ask their subjects whether they liked it or not. The subjects rioted from time to time, and then eventually they voted for such representatives who spoke their mind and those in turn made short shrift of the minority that was neither tolerated or assimilated.
History is full of such and similar stories. They have one common denominator: two nations, races, creeds mixed means eventual and inescapable trouble which can only be solved in a bloodbath. We may like it or not, we may deplore the human condition, but such are facts. There wouldn't have been the Sudetenland, the Danzig Corridor, the Volhynia, the Kosovo problems if the nations, races or creeds had not been mixed. It doesn't matter whether the newcomers were invited, forcibly resettled or moved in on their own. Two nations, creeds or races are like two substances put together to create inflammable stuff. The explosion is only a spark away.
Share + Tweet +
April 6, 2018 by The Board
Prev: A fight for freedom: the Dutch parliament against the EU's Ministry of Truth
Next: In 2020, German society will start collapsing
3 comments on "History teaches us that migration is a ticking time bomb"
Koenraad Peeters says:
The decades of muslim migration in Europe creates indeed an unsustainable situation. The sustained migration is about to bring major European cities under muslim control. Only yesterday a new party "Islam" was founded. Their goals are simple: Introduction of sharia law in Brussels. They hope to gain 10% in the next local elections; followed by islamic majority in Brussels by 2030.
For native Europeans the situation looks very grim. The major cities seem already lost. Civil war between native Europeans and muslims is almost unavoidable. Continued immigration will make the extinction of the native Europeans a certainty and Gefira has been showing that even a migration stop is insufficient.
So which solutions are still left ?
Is mass deportations of muslims from Europe still a option to avoid civil war? Or is it already to late and are Germany, Italy, the Netherlands, Belgium and France no longer defendable? Is the bloodbad only a few years ahead? Is the only option left for native Europeans to regroup in Poland and Hungary? The richer Europeans are already buying their spot in those countries. Better be safe then sorry.
Ben Richards says:
Is it safe to say we are being forcibly overrun? You put two vicious animals in a cage and they will fight, we humans are the most vicious of them all. Who will benefit from the destruction? Who is engineering the collapse?
Kora says:
The Albanians are the old Illyrian people that from earliest time populated the peninsola. Were known by qeen Teuta, becose of wars with Roman empire. So the Serbs come match, match ater. I recomand you to look at the decions of Berlin Congress 1878 when Serbia first has been recognized as a state. L
ook at the narrow borders Serbia had in the moment when she has been confirmed as a state. All other story about Serbs in Kosovo, Croatia, Montenegro itc. are serbian imperialistic projection of a small country that came late in the history, 1812 after liberated itself from Ottoman empire.
GEFIRA BULLETIN
GET ACCESS TO CONFIDENTIAL INFORMATION
€225/$250 FOR 10 ISSUES
GEFIRA provides in-depth and comprehensive analysis of and valuable insight into current events that investors, financial planners and politicians need to know to anticipate the world of tomorrow; it is intended for professional and non-professional readers.
BUY SINGLE ITEM
Yearly subscription: 10 issues for €225/$250
Renewal: €160/$175
The Gefira bulletin is available in ENGLISH, GERMAN and SPANISH.
ENGLISH SUBSCRIPTION
DEUTSCHES ABONNEMENT
ESPAÑOL SUSCRIPCIÓN
Enter your email address for free newsletter:
Gefira tracks the global players in Europe, the USA, Russia and China and anticipates the consequences of their policies
Gefira No. 9 is now available at a discount. 160 euros for 10 issues a year plus access to our archives.
Europe's geopolitical situation resembles that of 1913.
The enlargement of the European Union to the east, Germany's Ostpolitik, economic power and its reluctance to align its policy with France's and Italy's make the break-up of the Union unavoidable. While Germany is gaining a status of a financial superstar, German society is starting to disintegrate.
Nobody dares to ask, but the ECB board is bracing itself for the upcoming break-up of the euro. The Gefira team explains why France or Italy will leave the euro and we investigate how the ECB is preparing for the looming euro collapse.
SUBSCRIBE NO THANKS do not show again
© 2021 Gefira, Inc. All rights reserved
The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.AcceptRead more


Let us define racism as an ideology of superiority in which a person, due to a biological or physiological or cultural condition, which are tagged as inherent to the person, is systemically considered inferior, leading both to ideas and policies of exclusion. Thus, as is found in Emerson and Smith's influential book, Divided by Faith, "a racialized society is a society wherein race matters profoundly for differences in life experiences, life opportunities, and social relationships" (7). In the USA, they demonstrate, this means low intermarriage rates, de facto segregation, socioeconomic inequality, and personal identities and social networks that are racially distinctive (154).
Now let us posit that there are at least four salient New Testament themes that undercut so radically such an ideology that it ought to bring the Church shame even to participate in such things indirectly, and it ought to cause the Church intense remorse and repentance not to end such an ideology from its midst.
First, the kingdom vision of Jesus that begins with Zechariah's brilliant song, The Benedictus, moves on to Mary's song, The Magnificat, and finds brilliant exposition in Jesus' own inaugural sermon at Nazareth in Luke 4 and the Beatitudes in Luke 6 and the comments to John (Matthew 11).
Second, the fundamental role Pentecost plays (or is supposed to play) in recreating humans into the people of God through the dynamic power of the Spirit as seen at Pentecost, Acts 2, and in the egalitarian and reconstituted community of Acts 2–4.
Third, the theme of justification, which while being a fictive relationship with God in that there is a verdict given by God that is not fully manifest in human life, is also clearly and importantly (brought to light in the New Perspective of Jimmy Dunn and Tom Wright) the act of God in which he simply "makes things right," including racial relations. That's right, in the New Perspective justification has a racial component (a social axis, if you will).
Fourth, the Spirit-inspired dynamic found in Pauls' magna carta of Galatians 3:28: in Christ (and this, my friends, is not just a spiritual thing) there is neither Jew nor Greek — a clear and unambiguous assault on ethnic pride and division.
With Anthony Smith, I will ask, are we practicing Pentecost? Are we performing Kingdom? Are we "making things right"? Are we living "in Christ"? Are we, as he says, denying Eucharist in racial divisions that foster tapas ecclesiology, or melting pot ecclesiology or jambalaya ecclesiology?
Now let us ask, will it be tapas, a crock pot soup, a salad bowl, or a jambalaya?
A purple ecclesiology is a salad bowl ecclesiology.


With the latest equipment and up-to-date technical capabilities, AAAF Media supports the Holding in all spheres of activity in Azerbaijan and abroad, including Marketing, Advertising and PR. The work carried out with the extensive staff, professional experts, and the most modern equipments meet the highest standards.
AAAF Media is a structure based on quality assurance and is a resource that suits its standards and superior to its standards and innovates. You will find all the services here that a Media Molding can provide.
Besides, AAAF Holding also manages the AAAF TV channel operating in the Internet and social media accounts that intensify communication with its customers.


text:
require "hprose/service"
require "uri"
require "socket"

module Hprose
  class SocketServer < Service
    protected
    def create_server_sockets
      raise NotImplementedError.new("#{self.class.name}#create_server_sockets is an abstract method")
    end
    public
    def initialize(uri = nil)
      super()
      @uri = nil
      unless uri.nil? then
        @uri = URI.parse(uri)
      end
      @sockets = nil
    end
    def start
      begin
        create_server_sockets
        Socket.accept_loop(@sockets) do |sock, client_addrinfo|
          Thread.start do
            begin
              loop do
                buf = sock.recv(4, 0)
                n = buf[0].ord << 24 | buf[1].ord << 16 | buf[2].ord << 8 | buf[3].ord
                data = handle(sock.recv(n, 0), client_addrinfo)
                n = data.bytesize
                sock.send("" << (n >> 24 & 0xff) << (n >> 16 & 0xff) << (n >> 8 & 0xff) << (n & 0xff) << data, 0)
              end
            ensure
              sock.close
            end
          end
        end
      rescue ::Interrupt => e
      ensure
        stop
      end
    end
    def stop
      unless @sockets.nil? then
         @sockets.each {|s| s.close if !s.closed? }
         @sockets = nil
      end
    end
  end # class SocketServer
end # module Hprose


text:
Q: How to ignore font-size setting changes for Cordova App when runs on Android 4.4+? I've developed Cordova App with Cordova Version 3.6.3 and JQuery. The only one problem that i still can't get the best solutions is when i test my app on Android 4.4+ and there are users who love to change font size in setting > display > font-size of their device to be larger than normal. It causes my app layout displays ugly (the best display is when the font-size setting is normal only). But there is no effect of font-size setting for Android older than 4.4 (4.3,4.2...) So the app displays perfectly on older version.
The solutions that I've applied to my app is creating the custom plugin to detect configuration changed and it will detects if user uses Android 4.4+ and if they set font-size setting to anything that is not normal, I'll use JQuery to force font-size to the specified size.
Example is....
if (font_scale == huge)
{
    $("div").css("font-size","20px !important");
}

This works fine but sometimes after the page loaded, the css doesn't changes as I want. And suppose if there are 30 divs+ on that page so i must insert the statement like above 30 times and it takes too much time needlessly.
I just want to know, are there another ways to solve this problem that is easier than using this plugin?  Maybe using some XML configuration or CSS3 properties that can makes my app displays properly without side effect from font-size setting of Android 4.4?
Another ways I also tried and it doesn't works are

*

*inserting fontScale on Androidmanifest.xml > activity tag

*inserting webkit-text-size-adjust:none; in css

I'd love to hear any ideas that help to solve this.

A: Try to remove this one from your index.html:
target-densitydpi=device-dpi
Good luck.

A: So you just want to ignore the system font preferences.
Here is the solution,I use MobileAccessibilty Plugin to ignore the system font preferences.
You just have to write following code in your onDeviceReady function in index.js
if(window.MobileAccessibility){
    window.MobileAccessibility.usePreferredTextZoom(false);
}

usePreferredTextZoom(false) will just ignore the system font preferences. :) :) :)

A: I hope this helps!
In Cordova 8.0:
Edit MainActivity.java
Add references in the file header:
import android.webkit.WebView;
import android.webkit.WebSettings;

Add the code after loadUrl method:
loadUrl(launchUrl);

WebView webView = (WebView)appView.getEngine().getView();
WebSettings settings = webView.getSettings();

settings.setTextSize(WebSettings.TextSize.NORMAL);

Only this way worked for me.

A: Here is an new solution,hope it can help you. Solution
 //in base activity add this code.
public  void adjustFontScale( Configuration configuration) {

    configuration.fontScale = (float) 1.0;
    DisplayMetrics metrics = getResources().getDisplayMetrics();
    WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
    wm.getDefaultDisplay().getMetrics(metrics);
    metrics.scaledDensity = configuration.fontScale * metrics.density;
    getBaseContext().getResources().updateConfiguration(configuration, metrics);

}

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    adjustFontScale( getResources().getConfiguration());
}

A: *

*If your plugin allows you to know the font scale, change all your font sizes to em and use
$(document.body).css("font-size","70%");
just once.

*Do you mind sharing your plugin?

A: This is quite old but since I still needed it in 2019 someone else might need it as well.
In case for some reason you do not want (or can't) integrate a whole plugin for a single functionality, here is the usePreferredTextZoom(false) functionality extracted (it's from a MobileFirst 7.1 app, based on Cordova). All credit goes to the guys developing the plugin, of course.
Within the main Java file of your Cordova Android app change the onInitWebFrameworkComplete method by adding the preventDeviceZoomChange() method call:
public void onInitWebFrameworkComplete(WLInitWebFrameworkResult result){
    if (result.getStatusCode() == WLInitWebFrameworkResult.SUCCESS) {
        super.loadUrl(WL.getInstance().getMainHtmlFilePath());
        preventDeviceZoomChange();
    } else {
        handleWebFrameworkInitFailure(result);
    }
}

In the same class, define the preventDeviceZoomChange() method:
private void preventDeviceZoomChange() {
    try {
        Method getSettings = (this.appView).getClass().getMethod("getSettings");
        Object wSettings = getSettings.invoke(this.appView);
        Method setTextSize = wSettings.getClass().getMethod("setTextSize", WebSettings.TextSize.class);
        setTextSize.invoke(wSettings, WebSettings.TextSize.NORMAL);
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch(Exception e) {
        e.printStackTrace();
    }
}


text:
Q: How is AR(1) autocorrelation defined in a glmmTMB generalised linear model? How is AR(1) autocorrelation defined / parameterised when using a R {glmmTMB} GLM? I have read through Kristensen and McGillycuddy's vignette (https://cran.r-project.org/web/packages/glmmTMB/vignettes/covstruct.html) and understand the Gaussian case, but I don't understand how it's implemented within a generalised linear model structure. In particular, I want to be able to understand it when implemented in a logistic regression, but more general theory is fine (I'd also be interested in being able to apply it to Poisson etc.).
If I could have a link to a reference paper, that would be greatly appreciated. Or, some equations describing how it's done. Thank you!


The experienced attorneys at Harvatin Law Offices focus solely on Illinois driver's license issues. We are dedicated to helping you restore your driver's license and get back on the road. Our firm provides the highest quality representation to local and out-of-state clients facing suspension or revocation of their driving privileges.
These cases demand the finesse of a local attorney who is knowledgeable in this area of law. Like driving, you need someone to get you from A to B; an experienced advocate who knows the directions is worth more than a flashy name. This does not mean you can "go it alone" or intimidate officers by hiring "big guns;" both tactics will deplete your resources and complicate your case. Instead, consult the experienced driver's license restoration attorneys at Harvatin Law Offices. After 15 years of evaluating cases as a hearing officer, Mr. Harvatin has an insider's knowledge of the process and can best prepare you for the hearing. Our firm has a stellar success record and provides dedicated representation to both out-of-state residents and drivers in Illinois. Call (217) 525-0520 today for a confidential consultation, or contact us online.


Female….. A desire to get married and raise a family.
Female…. An embarrassing by-product of indigestion.
Male….. Call it whatever you want, just as long as we do it.
Female… A device for changing from one TV channel to another.
He said… I don't know why you wear a bra; you've got nothing to put in it.
She said….You wear pants don't you?
He said….Shall we try swapping positions tonight?
She said… That's a good idea – you stand by the ironing board while I sit on the sofa and fart!
He said….. What have you been doing with all the grocery money I gave you?
She said ….Turn sideways and look in the mirror!
He said…. Why are married women heavier than single women?
She said…..Single women come home, see what's in the fridge and go to bed.
It had been a difficult decision to put his Mother in an assisted-care facility. She valued her freedom and independence so much. She couldn't take care of herself any longer, and she couldn't be trusted to try. He still remembered the scream of the smoke detector when he came to visit, and found her cooking hamburger.
She still loved the outdoors, and every evening they helped her down to the lake-shore. She enjoyed watching the sunset, the wheeling and cries of the gulls, and the thrum and ribbit of the frogs. She was 92 – they wouldn't enjoy this much longer.
I have heard it said many times that America should support a certain principle (usually conservative) because America was founded as a Christian Nation. When I hear this, I immediately wonder where this notion came from. We know that America is clearly not a "Christian" nation, considering the fact that the Constitution never mentions Christianity or Jesus, and the only mention of religion in the text is in the First Amendment where it seeks to respect the free exercise of any particular religion, I find it interesting where this thought came from.
The answer actually resides in the way America was set up. Contrary to what many Christians today believe, the goal of the Constitution was not to proclaim Christianity as the official religion of America, but actually to disorient any notion of that particular thought. The goal of the founding fathers was to establish a country in which a particular religious system was not collectively in cahoots with the established state.
This was one of the main problems in Europe at the time. The Church and the State were linked, causing a whole array of problems to exist. While there were several founding fathers who were in fact Christian, the reality is that their goal was to keep Christianity, or any other religion, from becoming a functioning part of the state.
Ever since the reign of Roman emperor Constantine the Great in the early 4th Century, Christianity has become an institutionalized religion. Let me rephrase that. Christianity has become (in the western world) the institutionalized religion.
Before Constantine, Christianity was far different than we see it now. In fact, it would be difficult to associate it with the modern title of Christianity, considering the differences between it and today's established, institutionalized religion. Think of the church of Acts. It was a message of beauty. It was a desire to proclaim the beauty of the gospel to all. Many were persecuted, and it consisted of a small following.
The terror of the Roman Empire created little willingness to follow an outlawed religion. But when Constantine converted to Christianity, and it became a part of the state, it was reformulated. It became the dominant religion, and with this, it became the ordering sheriff of its world.
Christianity was no longer about the beautiful gospel message. It became about getting people to behave. It became about attacking those who didn't agree. It became about war. It became about nationalism and patriotism. It became law and order. It became about God's chosen people. It became about how to do all the right things to get to heaven and what everyone else should be doing so they won't go to hell. It was no longer about bringing heaven to earth. No longer was it about the beauty of the gospel.
To see the attempts of Christians to force their religion into the religion of America, is really not a shock. This is what Christianity has been doing for 17 centuries. And sadly, it is largely what Christianity has become.
Back in April, as prompts for the letter I, I only put down 'idle worship', and 'ineffectual.' Well….I've got ineffectual taken care of – four months, and nothing written. For idle worship, I was going to try for a pun-ny twist on 'idol worship,' about the upcoming trip to DC, to visit my favorite blogger, and his favorite blogger wife.
But I've already published a couple of 'Going To Rants' posts, and, in two weeks, the J For Journey there one will go up. It will be far better than this excuse, as will the K submission two weeks later, when I do a double-header.
So, here I sit, at a quarter to the appointed time, desperately trying to pound something out. I can't even ask the Governor for a stay of execution, because I'm the governor of my publishing schedule. Perhaps idle worship is an apt prompt, after all. I certainly have been idle about deciding.
Perhaps the loss and blurring of memories from old age isn't entirely a bad thing. We can look back on our lives through the filter of contentment for a life well lived.
We can remember the happy birthdays, the important anniversaries, the great grandkids, and forget the nosy, incompetent co-workers, the uncaring, slave-driver bosses, the crazy neighbors, and the arrogant politicians.
They say that ignorance is bliss, and it can be – in a way. Just remember that living well is the best revenge. Accentuate the positive. Eliminate the negative. Don't worry. Be happy!
Click above to hear the great Ella Fitzgerald tell you how to do it.
I tried to be bored, but the voices inside my head wouldn't let me.
Actually, I really didn't try, because there was only one voice inside my head – and it was mine. I gave it a shot, but quickly found that any time I stopped thinking about everything/anything, I wound up back at my Gravatar description, researching something else that would do me no good at all, except as blog-fodder.
I tried some of that mindless Yoga contemplation – didn't work! As soon as I stopped thinking about blog-posts, and useless trivia, into my head popped Spring Byington. She was a C-grade actress who only had one television series, called December Bride. It ran from 1954 to 1959.
She played a middle-aged, divorced woman, living with her grown daughter, and everybody was trying to fix her up with another husband. A (relatively) young Harry Morgan played the intrusive neighbor. The gimmick was that, like Howard Wolowitz's mother on The Big Bang Theory, his acerbic wife was often heard, but never seen.
How much would 500 gallons of white lightning weigh? Hmmm – almost 4400 pounds! Certainly not something to be carried in a stripped-down, hopped-up sedan, or even a pickup truck, and definitely not while trying to out-speed or out-maneuver State Police vehicles.
Almost as soon as electric rice cookers became available, the wife had to have one. Six months later, they "New and Improved" them, by adding a tray in which you could steam things like the frozen dumplings that she likes to add to her homemade chicken soup. Recently, on Facebitch, someone offered a new Black and Decker unit with the steamer tray, for $15.
There may be more than one of me inside, what I thought was, my empty head. Almost immediately, the same/different voice said, 'I'll see you the taffeta, and raise you organdy and sateen.' They're all thin, bright, shiny fabrics, often used as decoration on women's clothing. Why would I even know that they exist, much less bring them up to myself during a car ride??!
the ants are not harmful and there would be no need to bring her daughter into the hospital. She calmed down, and at the end of the conversation happened to mention that she gave her daughter some ant poison to eat in order to kill the ants. I told her that she better bring her daughter into the Emergency room right away.
Seems that a year ago, some Boeing employees on the airfield decided to steal a life raft from one of the 747s. They were successful in getting it out of the plane and home. When they took it for a float on the river, a Coast Guard helicopter coming towards them surprised them. It turned out that the chopper was homing in on the emergency locator beacon that activated when the raft was inflated. They are no longer employed at Boeing.
A man, wanting to rob a downtown Bank of America, walked into the branch and wrote "this iz a stikkup. Put all your muny in this bag." While standing in line, waiting to give his note to the teller, he began to worry that someone had seen him write the note and might call the police before he reached the teller's window. So he left the Bank of America and crossed the street to Wells Fargo.
After waiting a few minutes in line, he handed his note to the Wells Fargo teller. She read it and, surmising from his spelling errors that he wasn't the brightest light in the harbor, told him that she could not accept his stickup note because it was written on a Bank of America deposit slip and that he would either have to fill out a Wells Fargo deposit slip or go back to Bank of America.
Looking somewhat defeated, the man said, "OK" and left. He was arrested a few minutes later, as he was waiting in line back at Bank of America.
A motorist was unknowingly caught in an automated speed trap that measured his speed using radar and photographed his car. He later received in the mail a ticket for $40 and a photo of his car. Instead of payment, he sent the police department a photograph of $40. Several days later, he received a letter from the police that contained another picture, this time of handcuffs. He immediately mailed in his $40.
Guy walked into a little corner store with a shotgun and demanded all the cash from the cash drawer. After the cashier put the cash in a bag, the robber saw a bottle of scotch that he wanted behind the counter on the shelf. He told the cashier to put it in the bag as well, but the cashier refused and said, "Because I don't believe you are over 21." The robber said he was, but the clerk still refused to give it to him because he didn't believe him.
At this point the robber took his driver's license out of his wallet and gave it to the clerk. The clerk looked it over, agreed that the man was in fact over 21 and he put the scotch in the bag. The robber then ran from the store with his loot. The cashier promptly called the police and gave the name and address of the robber that he got off the license. They arrested the robber two hours later.
A pair of Michigan robbers entered a record shop nervously waving revolvers. The first one shouted, "Nobody move!" When his partner moved, the startled first bandit shot him.
Seems this guy wanted some beer pretty badly. He decided that he'd just throw a cinder block through a liquor store window, grab some booze, and run. So he lifted the cinder block and heaved it over his head at the window. The cinder block bounced back and hit the would-be thief on the head, knocking him unconscious. Seems the liquor store window was made of Plexi-Glass. The whole event was caught on videotape.
The Ann Arbor News crime column reported that a man walked into a Burger King in Ypsilanti, Michigan at 12:50 A.M., flashed a gun and demanded cash. The clerk turned him down because he said he couldn't open the cash register without a food order. When the man ordered onion rings, the clerk said they weren't available for breakfast. The man, frustrated, walked away.


text:
Sony must learn to integrate
Apr 18, 2012 5:22am
Sony's stature in the consumer electronics market has waned since its glory days of the 1980s and 1990s, and the recent announcement of 10,000 layoffs is a clear indication of the scale of the issues facing the company. New CEO Kazuo Hirai has moved to address the lack of unity within the company through restructuring.
With the buyout of Sony Ericsson and the introduction of the Sony Entertainment Network, the company is at last moving in the right direction. Ovum's latest report – Sony (Smart Device Vendor Profile) – reviews Sony's smart devices strategy and assesses the company's best options for re-establishing itself in the consumer electronics market.
Sony's best opportunity to regain relevance is to focus on becoming the premier multi-screen vendor. Multi-screen integration is becoming a key component of connected digital consumer services and Sony is now one of the select set of companies that has the assets required to compete at this level. However, integration has never been a strength for Sony, so building a successful and compelling multi-screen experience is going to be a challenge for the company, especially as its competition lines up to do the same.
Sony's assets are not as valuable as they seem
On paper, Sony is in an enviable position; it has arguably the widest range of connected consumer electronics devices, an established global brand, and an extensive range of content services. However, the reality of the situation is somewhat different. Both Sony and Sony Mobile are struggling and losing money. While part of this is down to internal organizational and operational issues, a large part of this is down to outward-facing products and brand perception.
While Sony has a heritage as a consumer electronics powerhouse, its heyday is in the past and Sony is no longer the brand it used to be in the minds of consumers. At the same time, Sony Ericsson has struggled to establish itself in the smartphone market by not effectively differentiating itself and giving users a reason to purchase its devices over its competitors. It currently sits as a tier-two Android manufacturer behind the likes of Samsung and HTC.
Even its content services are not as strong an asset as they might appear. While Sony does own its own media content, it will be hard for the company to use this to add a competitive advantage to its devices beyond reducing its own costs.
Relying on exclusive content as a differentiator, without also appreciating the need for multi-screen, integrated experiences presents a major risk in the extended home. Sony would be unable to offer its content on an exclusive basis to Sony devices without impacting its content business by dramatically limiting its market .However, pricing is still a useful tool and one which Sony is willing to use – for example, in bundling six months' free access to its Music Unlimited service with the purchase of its Tablet P or Tablet S devices.
Multi-screen integration is Sony's best opportunity
Despite these shortcomings, Sony is potentially in a strong position if is it able to leverage its wide base of assets and build an integrated multi-screen offering. With the acquisition of Sony Ericsson, Sony has finally become a multi-screen vendor.
This could not come at a more critical time for Sony. With the explosion of connected devices and digital media services, being able to provide a compelling multi-screen experience will be a key differentiator in the consumer electronics world as consumers become more confident with and demanding of the services and experiences they expect.
To its credit, Sony has acknowledged this need to offer a strong multi-screen experience and is heading in the right direction with its vision of offering "connected entertainment experiences". However, it is one thing to have a vision and quite another to execute on this. Sony's desire to integrate both its business and products is nothing new; it has been talking about this for at least the last five years – and the fact that the company is still trying to achieve this aim goes to show that it has not excelled at the task.
However, with Kazuo Hirai taking over as CEO and immediately bringing about changes to the structure of the company, this could mark a new period for the company and one in which it may finally deliver on the promise of integration.
Nick Dillon is an analyst in Ovum's Devices and Platforms team. For more information visit www.ovum.com/