text:
Q: Running multiple launch configurations at once I have several launch configurations in Eclipse each launching the same Java program but with different parameters.
Now is it possible to run all of these at once (with one mouse click) instead of selecting each of it separately and launching it?

A: EDIT: According to this answer since Eclipse Oxygen (4.7.0) you can use a run configuration of the type Launch Group for that.

Just install "C/C++ Development Tools" from the CDT (see eclipse.org/cdt/downloads.php ) - this single package is enough, no other CDT packages are needed. This won't disturb your Java environment ;-) Then you have "Launch Groups", for any kind of project, including Java projects. See the following screenshot:

You can run or debug the projects (also mixed mode), define delay times and so on. Have fun!

A: I found this post on the Eclipse trackers: Start multiple debug configurations at once
While it talks about multi-launching debug configurations, I think it is just as applicable to run configurations.

You may want to right click a run configuration in group launch and configure it.

A: Since Eclipse Oxygen (4.7.0) you can use a run configuration of the type Launch Group for that.
This short video shows how to use a Launch Group.

A: There are two more options listed in Launch an Eclipse Run Configuration from ANT.
You could group them in Ant and then call them using Ant4Eclipse. Or call multiple launch configs from a command script using eclipse remote control.

A: You don't need any plugin:

*

*Create all Run Configurations in eclipse

*Select Organize Favorites...

*Add you favorites, done

A: You can create a separate class that calls your program with different arguments, and run it instead.
public class YourClass {
    public static void main(String arg){
        System.out.println(arg);
    }
}

public class YourClassTester {
    public static void main(String[] args){
        YourClass.main("SomeArg1");
        YourClass.main("SomeArg2");
        YourClass.main("SomeArg3");
    }
}

redpajama_set_name: RedPajamaStackExchange


text:
2009 Dodge Charger / Charger SRT8
What's new, highlights, and safety info for the 2009 Dodge Charger.
Dodge dusted off the Charger name in 2006 and slapped it on a full-size, rear-wheel-drive (all-wheel drive is an option) sedan closely related to the Chrysler 300. Although the 300 will appeal to those seeking luxury, the Charger is intended to attract buyers looking for performance in the family-sedan segment. Larger than some of the run-of-the-mill front-drive family sedans such as the Toyota Camry and Honda Accord, the Charger sports aggressive and polarizing styling.
Four engines are offered in the Charger. Basic SE versions are powered by a 2.7-liter V-6 with 178 hp coupled to a four-speed automatic. Acceleration with the 2.7-liter is tepid, as the engine works hard to move the Charger. Fuel economy for the base engine is an estimated 18 mpg in the city and 26 mpg on the highway.
Moving up to the SXT yields a 3.5-liter V-6 with 250 hp and a four-speed automatic. SXT models are available with optional all-wheel drive that comes standard with a five-speed automatic transmission. The larger V-6 moves the Charger with much more spirit than the base engine, but it will seem a bit slow if one samples the 5.7-liter Hemi V-8. The 3.5's larger displacement hurts fuel economy slightly; the rear-drive SXT returns an estimated 17 mpg city and 25 highway. All-wheel-drive versions achieve an estimated 17/23 mpg.
Two V-8s are offered in the Charger. R/T models get a 368-hp, 5.7-liter V-8 and a five-speed automatic transmission, a combo that really wakes up the Charger. Like the SXT, the R/T is available with rear- or all-wheel drive. To improve fuel economy, the 5.7-liter features cylinder deactivation, which allows the V-8 to run on just four cylinders when cruising or coasting. Fuel mileage comes in at 16 city and 25 highway for rear-drive models. All-wheel-drive R/Ts achieve the same city number and fall to 23 mpg on the highway.
For the few who aren't satisfied by the pull of 368 horses, Dodge offers the 425-hp Charger SRT8, which has a number of chassis tweaks, larger brakes, and unique trim in addition to its 6.1-liter V-8. The SRT8 is a big-time blast to drive and will run with far more expensive and exotic machinery. The downside of its horsepower hysteria is seen in the fuel-economy numbers, which come in at 13 city/19 highway.
Inside, the Charger features a roomy interior but suffers from having plastics that don't look or feel particularly rich. The Charger makes up for it by driving with a solid refinement that is often missing in most of the front-wheel-drive competition.
In a recent comparison test, we pitted a Charger R/T against Pontiac's new G8. The Charger finished second to the newer Pontiac but drew raves for its handsome exterior styling, supportive front seats, and easy-to-use controls. The Charger fell behind the G8 in steering feel and long stopping distances. The 2008 Charger R/T in the comparo was slower to accelerate to 60 mph than the G8, but a power upgrade for the 5.7-liter Hemi (up 28 hp for 2009) should help close the gap.
In all its guises, the Charger offers a refined driving experience and a commodious interior. Available all-wheel drive can allay any rear-drive reservations, and the Charger returns respectable fuel economy for a car this size. The R/T offers incredible acceleration; the SRT8 is likely overkill for most buyers, but it will put a stupid grin on the face of any enthusiast.
Click here to read our full review of the Dodge Charger.
Click here to read our latest comparison test involving the Dodge Charger.
The Charger sees only a few minor changes for 2009, including a new taillight design, cup-holder lighting, a rear-window-mounted antenna, and newly standard aluminum wheels. The SE gets interior upgrades; 5.7-liter models get 28 additional hp, an ECO light that illuminates when in cylinder-deactivation mode, and a taller rear-axle ratio to aid fuel economy.
All-wheel-drive models now alert the driver when the car is powering all four wheels and also receive a taller axle ratio to boost fuel economy. SRT8 Chargers get two-zone automatic climate control, one-touch power windows, heated front seats, remote start, a retuned suspension, and automatic headlights.
Highlights and Recommendations
The 2.7-liter V-6 lacks the punch to move the Charger around with any semblance of speed. Most buyers would be wise to consider the 250-hp, 3.5-liter V-6 or the 5.7-liter Hemi V-8. Although 368 hp is likely overkill, the 5.7-liter V-8 brings the spirit of the Charger alive, and the fuel costs over the 3.5-liter aren't unreasonable. The SRT8 is for those interested in a high-performance sports sedan.
Dual front airbags and tire-pressure monitors are standard on all models. Disappointingly, curtain airbags and front-seat-mounted side-impact airbags aren't standard; they're options on all trim levels except the SE, on which they're not available at all. Anti-lock brakes, traction control, and electronic stability control are optional on the SE but standard throughout the rest of the lineup.
More From Instrumented Tests
Our Comprehensive Car Testing Explained
Tested: 2022 Subaru BRZ Goes after the Kid in You
Tested: 2022 Porsche 911 GTS Gets More Hardcore
Tested: GR86 Reminds Us Affordable Fun Exists
Tested: 2022 Ford Maverick Is Just Enough Truck

redpajama_set_name: RedPajamaCommonCrawl


text:
Q: Bughunt in Calendar Function I wrote a Calendar Script that worked pretty well until i wanted to add navigation for last/next month/year. When i called that function with printmonth($m,$y); it worked and showed current month, when i called printmonth($m+1,$y); it showed next month. Now that i added navigation to NOT call function manually it doesn't work, it shows december of current year. Always. It even tries to navigate to 13th month althogh i added if statements to check if it is the last month of the year or first month of the year. Please comment if you see something suspicious, i know its terrible structure and variable names are not pretty, but i'm doing my first steps in PHP.
Thanks for your time and feedback, here is my function:
function printmonth($month,$year) {

// abort if invalid values

if($month>=13) { die("No month >=13 please");   };
if(($year<=1970) || ($year>=3000)) {die("No year <=1970 or >=3000 please");};

// an array of names

$mnames = array(
    1 => "Januar",
    2 => "Februar",
    3 => "März",
    4 => "April",
    5 => "Mai",
    6 => "Juni",
    7 => "Juli",
    8 => "August",
    9 => "September",
    10 => "Oktober",
    11 => "November",
    12 => "Dezember"
);

// more vars

$month     = intval($month);
$year      = intval($year);
$thisday   = intval(date('j'));
$thismonth = intval(date('m'));
$thisyear  = intval(date('Y'));

$weekday        = date("N", mktime(0,0,0,$month,"01",$year));
$lastdayofmonth = date('t', mktime(0,0,0,$month,2,$year));
$oneless        = $weekday-1;

/* calculate end of last month */

$lastdayoflastmonth = date('t', mktime(0,0,0,$month-1,2,$year));
$pp=$lastdayoflastmonth-$oneless+1;

$seven = 0+$weekday;

// next year/month... problem must be somewhere in this section

$prevyear = $year-1;
$nextyear = $year+1;
if ($month=1)  { $prevmonth=12;         $nextmonth=$month+1; };
if ($month=12) { $prevmonth=$month-1;   $nextmonth=1;  };
if (($month>=2) || ($month<=11)) {$prevmonth=$month-1; $nextmonth=$month+1;};

// print table head and navigation and day names

echo('
'."\n");

echo('
'."\n");
echo('    |<	'."\n");
echo('    <	'."\n");
echo('    '.$mnames[$month].' '.$year.'	'."\n");
echo('    >	'."\n");
echo('    >|	'."\n");
echo('
'."\n");

echo('
'."\n");
echo('   Mo	'."\n");
echo('   Di	'."\n");
echo('   Mi	'."\n");
echo('   Do	'."\n");
echo('   Fr	'."\n");
echo('   Sa	'."\n");
echo('   So	'."\n");
echo('
'."\n");

echo('
'."\n");

//print end of last month

for ($l=1;$l<=$oneless;$l++) {
    echo(''.$pp.'	'."\n");
    $pp++;
};

// print each day until last day of month

for ($x=1;$x<=$lastdayofmonth;$x++)
    {
        if (($x==$thisday) && ($thismonth==$month) && ($thisyear==$year))
            {$bold = 1;}
                else {$bold = 0;};

        if ($seven<=7) {
            if ($bold = 1)
                {      echo(''.$x.'	'."\n"); }
                else { echo('  '.$x.'	'."\n");};

            $seven++;

      } else {
          echo('

');
          $seven = 1;
          $x--;
      };

    };

// print numbers until row is complete

$p = 1;
for ($e=$seven;$e<=7;$e++) { echo(''.$p.'	'); $p++; };

// complete table
echo ('
 ');
echo ('
');

//done

};

//function ends here, the call and some vars:

if (isset($_GET['y']) && (!empty($_GET['y'])))
{
$y=intval($_GET['y']);
}
    else
        {
        $y = intval(date('Y'));
        };

if (isset($_GET['m']) && (!empty($_GET['m'])))
{
$m=intval($_GET['m']);
}
    else
        {
        $m = intval(date('n'));
        };

// call function

printmonth($m, $y);

A: Shouldn't you use
if($month == 1)//condition

instead of
if($month = 1)//assignment

as well as the second if.
The third if must use an && instead of ||, thus replace
if (($month>=2) || ($month<=11))

by
if (($month>=2) && ($month<=11))

An assignment succeeds and (if I recall correctly if the variable you assign is set after the operation). Thus $month = 1 succeeds. As as a result, the $prevmonth is set to 12, thus december...
When I run your function myself, it works... Although one gets a lot of warnings...

Warning:  date() [function.date]: It is not safe to rely on the system's timezone settings. You are required to use
  the date.timezone setting or the date_default_timezone_set() function.
  In case you used any of those methods and you are still getting this
  warning, you most likely misspelled the timezone identifier. We
  selected 'America/New_York' for 'EDT/-4.0/DST' instead on line 29
Warning:  date() [function.date]: It is not safe to rely on the system's timezone settings. You are required to use
  the date.timezone setting or the date_default_timezone_set() function.
  In case you used any of those methods and you are still getting this
  warning, you most likely misspelled the timezone identifier. We
  selected 'America/New_York' for 'EDT/-4.0/DST' instead on line 30
Warning:  date() [function.date]: It is not safe to rely on the system's timezone settings. You are required to use
  the date.timezone setting or the date_default_timezone_set() function.
  In case you used any of those methods and you are still getting this
  warning, you most likely misspelled the timezone identifier. We
  selected 'America/New_York' for 'EDT/-4.0/DST' instead on line 31
Warning:  mktime() [function.mktime]: It is not safe to rely on the system's timezone settings. You are required to
  use the date.timezone setting or the date_default_timezone_set()
  function. In case you used any of those methods and you are still
  getting this warning, you most likely misspelled the timezone
  identifier. We selected 'America/New_York' for 'EDT/-4.0/DST' instead
  on line 33
Warning:  date() [function.date]: It is not safe to rely on the system's timezone settings. You are required to use
  the date.timezone setting or the date_default_timezone_set() function.
  In case you used any of those methods and you are still getting this
  warning, you most likely misspelled the timezone identifier. We
  selected 'America/New_York' for 'EDT/-4.0/DST' instead on line 33
Warning:  mktime() [function.mktime]: It is not safe to rely on the system's timezone settings. You are required to
  use the date.timezone setting or the date_default_timezone_set()
  function. In case you used any of those methods and you are still
  getting this warning, you most likely misspelled the timezone
  identifier. We selected 'America/New_York' for 'EDT/-4.0/DST' instead
  on line 34
Warning:  date() [function.date]: It is not safe to rely on the system's timezone settings. You are required to use
  the date.timezone setting or the date_default_timezone_set() function.
  In case you used any of those methods and you are still getting this
  warning, you most likely misspelled the timezone identifier. We
  selected 'America/New_York' for 'EDT/-4.0/DST' instead on line 34
Warning:  mktime() [function.mktime]: It is not safe to rely on the system's timezone settings. You are required to
  use the date.timezone setting or the date_default_timezone_set()
  function. In case you used any of those methods and you are still
  getting this warning, you most likely misspelled the timezone
  identifier. We selected 'America/New_York' for 'EDT/-4.0/DST' instead
  on line 39
Warning:  date() [function.date]: It is not safe to rely on the system's timezone settings. You are required to use
  the date.timezone setting or the date_default_timezone_set() function.
  In case you used any of those methods and you are still getting this
  warning, you most likely misspelled the timezone identifier. We
  selected 'America/New_York' for 'EDT/-4.0/DST' instead on line 39


text:
Primary Arms News & Press Releases
PRIMARY ARMS ANNOUNCES BRETT STEWART AS ITS NEW DIRECTOR OF BUSINESS DEVELOPMENT
October 26, 2021 November 8, 2021 Primary Arms
Brett Stewart as Primary Arms new Director of Business Development
HOUSTON, TEXAS – Primary Arms has named accomplished industry specialist Brett Stewart as its new Director of Business Development.
Originally from the United Kingdom, Brett served 13 years as a police officer before relocating to the United States in 2013. Over the past years, Brett has worked in a senior executive role with many of the industry's leading tactical brands. His driven attitude and strong work ethic have contributed to his exceptional reputation, and with relationships spanning the industry, he was the perfect candidate to spearhead Primary Arms' business development.
As Director of Business Development, Brett will seek improvements and growth opportunities for Primary Arms' core business units, which now include Optics, Retail, Wholesale, and Government. With the business still showing record growth, this position will be critical in establishing both short-term and long-term business strategies.
"We are very pleased to have Brett Stewart on our team," says Ozge Cumberland, Primary Arms' Senior Vice President of Sales, Marketing, and Business Development. "We believe he will be a great addition to our culture and our beloved Primary Arms family."
For other news and announcements, follow Primary Arms Online on social media, including Instagram, Facebook, and Twitter.
About Primary Arms Optics
Founded in 2008, Primary Arms Optics® is a leading innovator in tactical optics, offering a comprehensive selection of rifle scopes, prism scopes, red dot sights, optic mounts, and accessories. Their Advanced Combined Sighting System (ACSS®) is a high-performance reticle solution to the challenges of modern marksmanship, distilling complex mathematics into intuitive holdovers that enhance your speed and precision. Each ACSS reticle is specially designed to outperform in real-world applications, incorporating a mix of tools to deliver instant firing solutions. These tools may include ballistic drop compensation, auto-ranging stadia, wind holds, moving target leads, or an infinitely-precise center chevron. Primary Arms Optics produces several tiers of products to meet the needs of any budget. The premier PLx® optics line prioritizes clarity and craftsmanship with first-class materials. The mid-tier GLx optics incorporate premium technologies with approachable pricing, while the popular SLx® optics offer both proven reliability and value. Every Primary Arms Optics product is hand-inspected at their Houston-based headquarters, and all their products come with a Primary Arms lifetime warranty.
Dina Sanders | Brand Marketing Manager
For more information on Primary Arms Online, visit the company website at www.primaryarms.com or contact:
New Hires, News, PA Optics
Theme Designed by IndiThemes	| Copyright © 2022 Primary Arms News & Press Releases. All Rights Reserved.


text:
/*
 * Created by Angel Leon (@gubatron), Alden Torres (aldenml)
 *
 * Licensed under the MIT License.
 */

package com.frostwire.jlibtorrent;

import com.frostwire.jlibtorrent.swig.*;

import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * @author gubatron
 * @author aldenml
 */
public final class EnumNet {

    private EnumNet() {
    }

    public static List<IpInterface> enumInterfaces(SessionManager session) {
        if (session.swig() == null) {
            return Collections.emptyList();
        }

        ip_interface_vector v = libtorrent.enum_net_interfaces(session.swig());
        int size = (int) v.size();
        ArrayList<IpInterface> l = new ArrayList<>(size);

        for (int i = 0; i < size; i++) {
            l.add(new IpInterface(v.get(i)));
        }

        return l;
    }

    public static List<IpRoute> enumRoutes(SessionManager session) {
        if (session.swig() == null) {
            return Collections.emptyList();
        }

        ip_route_vector v = libtorrent.enum_routes(session.swig());
        int size = (int) v.size();
        ArrayList<IpRoute> l = new ArrayList<>(size);

        for (int i = 0; i < size; i++) {
            l.add(new IpRoute(v.get(i)));
        }

        return l;
    }

    public static Address defaultGateway(SessionManager session, String device,
                                         boolean v6) {
        if (session.swig() == null) {
            return new Address();
        }

        if (device == null) {
            device = "";
        }

        byte[] device_arr;
        try {
            device_arr = device.getBytes("ASCII");
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }

        return new Address(libtorrent.get_default_gateway(session.swig(),
                Vectors.bytes2byte_vector(device_arr), v6));
    }

    public static final class IpInterface {

        private final Address interfaceAddress;
        private final Address netmask;
        private final String name;
        private final String friendlyName;
        private final String description;
        private final boolean preferred;

        IpInterface(ip_interface iface) {
            this.interfaceAddress = new Address(iface.getInterface_address());
            this.netmask = new Address(iface.getNetmask());
            this.name = Vectors.byte_vector2ascii(iface.getName());
            this.friendlyName = Vectors.byte_vector2ascii(iface.getFriendly_name());
            this.description = Vectors.byte_vector2ascii(iface.getDescription());
            this.preferred = iface.getPreferred();
        }

        public Address interfaceAddress() {
            return interfaceAddress;
        }

        public Address netmask() {
            return netmask;
        }

        public String name() {
            return name;
        }

        public String friendlyName() {
            return friendlyName;
        }

        public String description() {
            return description;
        }

        public boolean preferred() {
            return preferred;
        }

        @Override
        public String toString() {
            StringBuilder sb = new StringBuilder();

            sb.append("address: ").append(interfaceAddress);
            sb.append(", netmask: ").append(netmask);
            sb.append(", name: ").append(name);
            sb.append(", friendlyName: ").append(friendlyName);
            sb.append(", description: ").append(description);
            sb.append(", preferred: ").append(preferred);

            return sb.toString();
        }
    }

    public static final class IpRoute {

        private final Address destination;
        private final Address netmask;
        private final Address gateway;
        private final String name;
        private final int mtu;

        IpRoute(ip_route route) {
            this.destination = new Address(route.getDestination());
            this.netmask = new Address(route.getNetmask());
            this.gateway = new Address(route.getGateway());
            this.name = Vectors.byte_vector2ascii(route.getName());
            this.mtu = route.getMtu();
        }

        public Address destination() {
            return destination;
        }

        public Address netmask() {
            return netmask;
        }

        public Address gateway() {
            return gateway;
        }

        public String name() {
            return name;
        }

        public int mtu() {
            return mtu;
        }

        @Override
        public String toString() {
            StringBuilder sb = new StringBuilder();

            sb.append("destination: ").append(destination);
            sb.append(", netmask: ").append(netmask);
            sb.append(", gateway: ").append(gateway);
            sb.append(", name: ").append(name);
            sb.append(", mtu: ").append(mtu);

            return sb.toString();
        }
    }
}

redpajama_set_name: RedPajamaGithub


Bruce L. Rothschild, DDS & Associates, P.L.L.C. is known for providing cosmetic dentistry and dental care which is unparalleled, utilizing state of the art technology to achieve the best results and patient comfort as a local dentist in Pearl River NY. Patients in the local Rockland County NY and Bergen County NJ region have been turning to us for first rate services for more than 25 years. His services are relied on by such a significant number of local residents because ensuring you put the health and wellbeing of your teeth in good hands is important. Whether you're in need of a simple cleaning, tooth whitening, or more involved cosmetic dentistry procedures, you can rely on his experience with a broad variety kinds of dental procedures. If you're able to receive all these forms of oral care from a single practitioner it's going to definitely work to your benefit. To make certain that you are able to prevent possibly major issues down the line, we place a strong focus on preventive care. Our staff is known to be both compassionate and knowledgeable, and one of the reasons patients keep returning to us time and time again, along with referring us to others they care about. In the event you are interested in services for cosmetic dentistry in Pearl River NY or any other dentistry services, all you need to do is get in touch with us right away to learn more and make an appointment.
If you're searching for a family dentist in Pearl River NY that cares strongly about making certain you have access to a wide variety of preventive dentistry services, you're capable of relying on Bruce L. Rothschild, DDS & Associates, P.L.L.C. Throughout each phase of your life, your teeth require the absolute best care possible, and this is the most effective way of making sure this happens. Neglecting to take advantage of preventive services is capable of meaning that later on you'll find yourself in significant pain and forced to deal with major dental procedures. Don't let this happen to you. Regular visits to your local dentist are essential when it comes to making certain your smile gets the required attention. When it comes to routine dental examinations, periodic dental imaging and thorough cleanings are some of the tools we employ to make certain your teeth are both healthy and bright. We'll review both your medical and dental history to come up with a schedule for periodic appointments that will be ideal for your precise needs. We are going to conduct an exceptionally thorough assessment that will bring to light any significant issues which might be developing with your teeth. This assessment will provide us with the information we require to ascertain exactly what the most effective method of dealing with these issues to ensure your maximum well-being and comfort is going to be. The very best methods for home dental care is something else we focus on ensuring our patients are well educated regarding as part of our approach to preventive dentistry. The next time you're trying to find a trusted local dentist in Sparkill NY or the rest of the local region, all you need to do to take advantage of first class services in preventive dentistry, is get in touch with Bruce L. Rothschild, DDS & Associates, P.L.L.C.
When you are looking for a family dentist in Pearl River NY or the rest of the Bergen County NJ and Rockland County NY area that you can count on to take best care possible of your smile, Bruce L. Rothschild, DDS & Associates, P.L.L.C. is the only name you've got to remember. The value of a beautiful smile cannot be underestimated. It is valuable to creating a good first impression as it's among the very first things people notice when they meet you. If you are self-conscious about your teeth, it could impact multiple aspects of your life including your business along with your love life. Among the biggest contributing factors to attractiveness has been demonstrated to be your smile. The better your teeth appear, the better you're going to feel. By providing top quality services as a cosmetic dentist in Sparkill NY, Bruce L. Rothschild, DDS & Associates, P.L.L.C. is able to provide patients with a smile that will provide them with the confidence they're looking for.
Cosmetic dentistry is the perfect approach to achieve the smile that you've always wanted. At Bruce L. Rothschild, DDS & Associates, P.L.L.C., our emphasis as a leading cosmetic dentist in Pearl River NY is bringing out the beauty of your smile. A few examples of the effective and safe processes we utilize are dental crowns, veneers, and implants. You can rely on Bruce L. Rothschild, DDS & Associates, P.L.L.C. to serve all your dentistry requirements professionally, compassionately, honestly and safely. We strive to make your experience as painless and stress free as possible knowing that many people experience nervousness regarding their dental appointments. Thousands have turned to Bruce L. Rothschild, DDS & Associates, P.L.L.C. when they have been in need of a local dentist in Sparkill NY because of our unparalleled commitment to serving our patients.
Bruce L. Rothschild, DDS & Associates, P.L.L.C., as a leading cosmetic dentist in Pearl River NY practices techniques for tooth whitening which are both safe and effective. Chemicals in your food, beverages, and smoking products have the ability to change the color of your teeth from pearly-white to a hideous shade of yellow. Brushing and flossing alone won't bring back their color, and even genetics and medications may play a role in the discoloration process. Living with less than white teeth is luckily a thing of the past now. We will be able to discover the most effective way of restoring the natural beautiful color of your teeth after conducting an extensive examination. You are able to rest assured knowing your teeth are in safe hands understanding that we've been patients' top pick for a tooth whitening dentist in Sparkill NY for more than twenty five years.
There's a vast array of options for tooth whitening that we provide. An in office protective gel treatment is one example. After applying it to the soft tissues of your mouth we then spread a bleaching agent over your teeth that is light activated. Or in some cases, the dentist is going to use a special laser to enhance the effects of the whitening agent. We also provide alternatives for teeth whitening in Sparkill NY in your own home. At home treatment may be effective against specific and light stains, and all the gels and toothpastes used are American Dental Association approved. In addition, we supply veneers, which are colored porcelain coverings which are utilized to brighten the smiles of patients if bleaching agents are not an option. In the event that you are in need of a top rated cosmetic dentist in Pearl River NY for tooth whitening, give us a call today at Bruce L. Rothschild, DDS & Associates, P.L.L.C.


At some point along the way, you have probably heard about probate attorneys. However, most people have no idea what it is that these individuals so or who even needs one. That is until that point in time when you have no other option than to hire a probate attorney in Los Angeles to help you through your difficult situation.
A probate attorney is the one who handles filing the last will and testament for those who have passed away. Because many family members find themselves in a heated battle over who is going to get what asset, it is more important than ever to get this document filed right away. Essentially, probate lawyers are the same as that of an estate lawyer.
Oftentimes, many people wait until someone they love passes away to turn to a probate attorney in Los Angeles. At that point in time, you will often find yourself in a rush to hire someone quickly. You won't have the time to shop around and figure out which lawyer is going to work the best for your specific needs. The last thing you want is to end up being rushed into making a decision during this pivotal point in time. This type of law can either be pretty simple or it can be extremely confusing. It all boils down to the amount of estate planning done by the person who passed away while they were still alive.
If the individual who passed away didn't do anything to plan for things ahead of time, this can make it more convoluted and stressful after they are gone. That's why it is so important to have a will made out ahead of time. The more information that can be filled out and detailed, the better it is going to be for all parties involved. Not only will this ensure that everyone gets the items you want them to have, but it will also eliminate some of the stress and tension among your family members after you are gone. While no one wants to think about the day that they are no longer around, making a will is one of the best things that you can do to make sure your loved ones are set.
Probate occurs once you are no longer here. It is designed to aid in distributing your assets. Regardless of whether you had a will in place or not, this process is inevitable. With the help of a probate attorney in Los Angeles, you can have a will drawn up ahead of time to provide your family members with the security they need for when you are no longer here. A probate lawyer can also help with things like living trusts and medical power of attorney to name a few.
Spend some time talking with the team at the Law Offices of Shahin Motallebi to determine how to best proceed with your case. The team will walk you through the process and make sure you have everything in order beforehand. Not only does this protect you, but it protects your loved ones as well.
Probate Attorney serving Los Angeles, Beverly Hills, Studio City, North Hollywood, Santa Monica, West Hollywood, Culver City, Playa Del Rey, Venice, Pacific Palisades, Marina Del Rey, Sherman Oaks, Van Nuys, Encino, Universal City, Valley Village, Inglewood, Burbank, Tarzana, Toluca Lake, Panorama City, Pacoima, Topanga, El Segundo, North Hills, Reseda, Northridge, Glendale, Woodland Hills, Canoga Park, West Hills, and Winnetka areas.


The track was busy from the green light onwards with everyone piling out the pit lane, to ensure they secure a good lap before the bonkers British summer weather decided to turn. With only 4 minutes remaining the heavens opened once more across the Northamptonshire circuit, and Toro Rosso couldn't do anything about Buemi and Alguersuari, who finished in 18th and 19th.
Another mini celebration for Team Lotus with Heikki grabbing a place in round 2.
Round 2 – Wet or dry?
With the rain clearing before Q2 got underway, the remaining cars piled out once more and the track quickly dried causing drivers to switch from intermediates to slick tyres. Adrian Sutil was beaten and by his team mate once again and knocked out with his best time only being 11th. Schumacher's performance will have disappointed Mercedes GP – while Rosberg went through to Q3, Michael could only manage 13th.
After a promising start to qualifying, Rubens bowed out in 15th along with Petrov and Heidfeld in 14th and 16th respectively for Renault. Team Lotus' may have made it through to Q2, which is great for them, but 17th was all Heikki could manage beyond Q1.
Qualifying in 2011 has been a little uneventful with the new tyre regulations changing the tactics of the teams and drivers to focus more on Sunday and fresh rubber, than going all out for pole. At Silverstone though, the aforementioned bonkers weather became even more annoying when a down pour arrived across the circuit and effectively rained off the session.
Lewis Hamilton will be one of the unhappiest men in the paddock with his dismal home GP performance, while Mark Webber will be chuffed to have got one over on his usually-dominating team mate.
Was Felipe Right to Stay Put?


text:
Why has McDonald's removed the chicken legend from its menu - and when will it be back?
Universal Credit housing payments are changing - here's when and why
Monday, 13th July 2020, 3:29 pm
Updated Monday, 13th July 2020, 3:29 pm
Universal Credit can include a payment specifically designated for certain housing costs, which can help with rent payments to a private landlord, housing association or interest payments on a mortgage (Photo: Shutterstock)
Universal Credit can include a payment specifically designated for certain housing costs, which can help with rent payments to a private landlord, housing association or interest payments on a mortgage.
However, the rules for this are set to change in August 2020.
Why are housing payments changing?
Universal Credit claimants will, in some cases, be able to agree to have their housing costs paid directly to their landlords instead of to them personally. This is done under the 'alternative payment arrangement' system.
However, as the housing payments are paid on a four-weekly basis and the remaining Universal Credit payments are paid monthly, some people have said that this difference in payment dates can lead to difficulties for both parties.
Changes coming in August
In order to solve this problem, Neil Couling, the Universal Credit Director General, recently announced that payment changes would be coming in August.
Mr Couling wrote to colleagues on 9 July in order to give them an update on Universal Credit housing costs, stating, "When I last wrote to you in late December, I set out our plans to start a small scale test with a group of Social Landlords to align the way that we pay Managed Payments to Landlords (MPtL) with a claimant's Assessment Period.
"We will begin rolling this feature out to all Portal landlords, commencing next month."
This means that landlords will receive the housing cost element at the same time as their tenant receives their Universal Credit payment. They will also be able to access payment information via the Landlord Portal, where a managed payment is in place.
Mr Couling added, "This should greatly improve your ability to manage payments and reconcile UC housing costs, helping you to support your tenants during this period."
The letter also explained that the roll-out approach is currently being finalised, and that those it applies to will be contacted two weeks before their go-live date. They will also then be issued with detailed guidance to help them use the new feature and obtain support, if needed.
How to apply for housing payments
In order to apply for housing payments, you can make a claim through your online Universal Credit account.
Housing support can be received even if the claimant does not have a permanent address, as the claimant can use the address of:
A hostel where they are staying
A family member or friend
You can use your local Jobcentre Plus address if you do not have any other address you can use.


This is why some people ask ahead of time if there are any upsells.
They've had too many experiences where the product seller held something back from the first product in order to make more money by selling a second product.
Your upsell needs a REASON to exist beyond you making more money – a reason your seller understands and appreciates.
Your product provides the benefit, but only with a lot of work. Your upgrade is something that makes the entire process easier.
For example, the initial product teaches how to do something by hand, the upsell is software that automates the process.
Your product provides one method of achieving the benefit, and your upgrade provides more (different) methods of achieving the same result.
For example, your initial product teaches one traffic generation method, and your upsell is a monthly membership in which they get a new traffic generation method each week.
Your product provides a benefit and your upsell is something that complements that benefit.
For example, your initial product is how to convince blog owners to let you guest blog post, and your upsell is how to convert the traffic from guest blog posts into paying customers.
Be careful with this last one. If you go on and on in your initial offer about how you can convert this traffic to sales, then your customers might expect that information to be in the initial product.
Now then, I'd like to propose a slightly different, calmer and more gentle method of upselling.
And I say "this week," because you'll want to offer them a special price that is only good for the first few days after their initial purchase.
I know of one marketer who uses ONLY this method of upsell. Yes, he does not make as much money on his initial sales, but he does sell a boatload of upsells.
And perhaps more importantly, his customers never get angry at him for ramming upsells down their throats. They love him, trust him, and a surprising number do get the upsell before the discount expires.
This is something you might test.
Remember, your upsell needs a reason to exist – a reason beyond you making a profit.


text:
<!DOCTYPE html>

    <meta charset="UTF-8">
    <title>Inicio - UAO</title>
    <link rel="stylesheet" href="../css/styleLogin.css">

            <form ng-submit="clickLogin()">

Usuario

                    <input type="text" name="email" id="email" class="form-style" autocomplete="off" ng-model="login.username" />

Contraseña

                    <input type="password" name="password" id="password" class="form-style" ng-model="login.UserPassword" />

                        ¿Olvido su contraseña?

                    Registrarse
                    <input type="submit" class="login pull-right" value="Iniciar sesion">
                    {{login.error}}

            </form>


OceanBlue Energy & Industrial Services Company LLC provides access to a broad range of products and services to many international companies operating in the Sub sahara Africa and the Gulf region. We pride ourselves on being able to undertake projects with unique client requirements in diverse sectors such as Oil & Gas, Water & Electricity, and Industry.
Minimum of B.Sc/HND in any field.
Responsible for handling front office reception and administration duties, including; greeting guests and offering them a beverage, answering phones, handling company inquiries, and sorting and distributing mail.
Must have 1-3 year(s) work experience.
To act as the first point of contact for customers, dealing effectively with requests, answering queries, taking responsibility for each enquiry through to a satisfactory conclusion.
To contact customers in accordance with agreed procedures.
Maintain accurate, up to date and appropriate records.
Provide clerical and administrative duties as required.
To react accordingly with tact diplomacy and empathy to diffuse potentially tense confrontations in a positive and calm manner.
Directing requests for unresolved issues to other departments as necessary.
Min. B.Sc./HND in Business Management, Social Sciences or related discipline.
The Operations Manager will play the strategic role of ensuring that the day-to-day operations and administration of the organisation runs smoothly.
Provides direction and supervision for all the team leads including skill and competency development, so that each team member is continually growing into higher responsibility in the organisation.
Negotiates SLA between Finance Operations and other groups/units within the business in accordance to the set business objectives.


The key to rejuvenating a living room often lies in exactly how the place is furnished. By adding certain select designer items across the lounge area, it is possible to create a new look and feel without doing too much work. The skill comes in when choosing products that can bring an elegance and homely feel to the space, while also fitting in with the residents' requirements. Thankfully, here at Dotmaison there are a variety of excellent available items that can do just that.
Coffee and side tables are a great start when attempting to add something new to a living room. The Elle Table from XL Boom brings a retro styled glamour and elegance ideal for a lounge room. Combining aluminium legs primed in a strong copper colour with a crisp white enamel top, the table provides a distinctive cool to the home. Acting as a perfect accessory, the table is a beautiful way to re-energise a living room.
XL Boom has also produced the XLBXL table available in low or high versions. The XLBXL High Table (above) provides the height, while the XLBXL Low Table is able to fit under it making the ideal large coffee table. The tables arrive in black or white and are perfect for mixing and matching. Produced in durable wood with a sleek and smart appearance, these tables are a great solution for anyone looking for a new look for their living areas.
A fun and comfortable option for living room seating is offered by The Original Beanbag from Fatboy. The supremely cosy beanbag features state of the art elements to make premium comfort its main aim. It also looks strikingly cool with a wide variety of colours. The huge bag is easily mouldable allowing you to create whatever seating position works best for you. The bag certainly makes for a talking point when introduced into any living room, with its promise of premium relaxation a lovely option at any time.
A slightly more traditional form of comfort is possible with a designer cushion. Every sofa and chair always benefits from a comfortable and well made cushion, and the above Trevor 159 Cushion from Missoni Home might well be the one for you. The famous Missoni zig zag pattern is instantly recognisable, while the luxurious materials and production of the piece only add to its overall prestige. This is another item to add to the overall comfort and atmosphere of a living space.


9 out of 10 based on 592 ratings. 3,653 user reviews.
Marshall DSL50 Main Circuit Board. This is the replacement main PC board for the Marshall DSL50. Does not fit any other Marshall model. Replacing this board fixes the common problem of drifting bias on the power tubes in these amplifiers.


text:
Official: 30 Nigerian students released after 7 months
A government official said the gunman released 30 Nigerian students who had been imprisoned for nearly seven months
go through CHINEDU ASADU Associated Press
Abuja, Nigeria – A government official said that the gunman had released 30 Nigerian students who had been imprisoned for nearly seven months. This is the latest release of dozens of Kebbi State students kidnapped in June.
A spokesperson for Governor Kebbi said they arrived in Kebbi State Capital with a teacher on Saturday, but did not provide more details on their release. Blackmailing for the release of hundreds of kidnapped students is common in West African countries.
On June 17, gunmen attacked the Birnin-Yauri school about 220 kilometers (136 miles) from the state capital, and students from the Kebbi Federal Government College were abducted.
So far, the authorities have not announced the arrest of any kidnappers. They killed a policeman before driving into the nearby forest with the students-similar to the abduction of more than 1,400 schoolchildren in Africa's most populous country since 2017 . According to the UN Children's Agency, 2021.
Local officials remained silent on the exact number of people missing from Kebbi School after the attack, but residents said there were more than 70 people.
Kebbi Governor's spokesperson Yahaya Sarki said that the released students "will receive medical examinations and support while reuniting with their families".
This is the third group of Kebbi students since they were kidnapped 7 months ago. The first group of 30 people took home in October. Local authorities and the released hostages told the Associated Press that students are usually released in batches rather than all at once, because each release will bring a new ransom.
The pastor of Bethel Baptist High School, Bethel Baptist High School, had kidnapped at least 120 students there. The gunman told the Associated Press: "Every number you've heard is exchanged for currency. It seems that they want to release all the numbers, but they will release some numbers." Last year.
The kidnapping was carried out by armed groups that killed and kidnapped thousands of people in exchange for ransom in the northwest and central regions of Nigeria.
The first large-scale school kidnapping in Nigeria was carried out by the Boko Haram extremist organization in 2014. But this West African country has witnessed more than 10 other attacks on schools in the past year. The authorities blamed the sudden increase in attacks on the overnumber of security personnel. Most of the schools were located in remote communities.
Categories Health Tips Tags Africa, crime, General news, Government and politics, Hostage situation, Kidnapping, months, Nigeria, Nigerian, official, released, School shooting, shooting, Students, Violent crime, West Africa (Western Africa Post navigation
Kazakhstan says it detained 5,800 people during a week of protests
Some North Korean fugitives finally returned in despair


text:
The New Civics Education: An Integrated Approach for Australian Schools
Murray Print
The past three years have witnessed a dramatic revitalization of civics education for use in Australian schools. In this brief period, Australian educators have participated in a major national inquiry into civics education, initiated a national curriculum materials project, commenced research to create a substantive teacher knowledge base, developed centers of civics education, and constructed programs for teacher preparation. While this revitalization is not yet well grounded in Australian schools, the situation should change dramatically in the very near future.
These developments in Australia should be seen as part of a renewed worldwide interest in civics education. The disintegration of the former communist bloc in Eastern Europe has stimulated the need for citizenship education within new democratic contexts. Domestic problems within many Asian and African nations have also highlighted issues of citizenship and spurred renewal of civics education. Meanwhile, successful democracies such as the United States, Canada, Britain and Australia are reflecting upon the nature of citizenship and the role of civics education within the new world order. As people in these countries seek to answer the question, What does it mean to be an American? a Canadian? an Australian?, fundamental issues of civics education are coming to the forefront.
The New Civics Education
Despite its recency, the new civics education in Australia has already taken a clearly definable shape. It is broader and more comprehensive than earlier efforts. While knowledge of government, the constitution, citizen rights, civic responsibility, and Australian political history remain pivotal components, they are only a part of the total learning in which students will partcipate.
A central plank of the new civics education is learning about environmental issues and the need for ecological sustainability. Australia's, and the world's, fragile environment poses many problems and requires protection by an informed and active populace. All Australians, and particularly the young, need to address these issues both locally and globally.
To become effective citizens of their democracy, Australians need to be informed and critically active participants. Currently, little opportunity exists for young Australians to learn to be participating citizens through the school curriculum. Yet Australian society expects all adult citizens to fulfill their civic duties, and voting is compulsory.
In learning the role of citizen, Australian students need to look beyond the confining strictures of nationalism. The new civics education argues for multiple perspectives of citizenship, meaning that people may play civic roles at local, national, regional, and international levels. Thus, while the legal concept of citizenship is confined to a single country, Australians may perceive citizenship as being national (for elections and sporting events), regional (for defence and trade), and global (for environment and economic stability) without feeling uncomfortable or unpatriotic about their views.
The new civics education takes an inclusive position within the school curriculum. It seeks to involve all groups living in Australia, including indigenous and ethnically diverse peoples, in living together in a harmonious manner. To consider alternative options is untenable. For Australians to continue to co-exist peacefully amongst themselves, ethnic and cultural tolerance is paramount.
An essential feature of the new civics education is the deliberate treatment of values education. The curriculum emphasizes the responsibilities as well as the rights of citizens, and encourages political participation-in a liberal democratic context-both nationally and internationally. The new civics examines issues of social justice, tolerance of others, the common good, majority rule, and other value positions essential to an effective democracy.
In our modern society, many aspects of civic life valued in the past seem to have faltered. One such vital aspect is the relationship of individuals to the community. The new civics education is grounded in the principles of a civil society, the essence of which is to provide opportunity for individual interests to flourish within the constraints of societal demands. The new civics seeks to promote civility between peoples, and to enhance the effectiveness of the community as a cohesive support vehicle for its members.
Finally the new civics education will play an integrative role within the school curriculum. The Civics Expert Group, which was instrumental in creating the new civics, argued against making citizenship education a special school subject (CEG, 1994). Rather, the group saw greater value in integrating it with history, social studies, economics, and other subjects within the learning area known as Studies of Society and the Environment (SOSE).
The new civics education is conceptualized as functioning across many learning areas, across many school years, and even across the entire school. A school-based environment project, for example, could encompass all classes within a school. To help achieve the goal of integration, the Civics and Citizenship Education Schools Curriculum Materials Project (CCESCMP) will provide teachers with opportunities to integrate civics education.
In sum, the new civics education won't be the traditional civics, that is, a study of government institutions and political processes liberally laced with adages about being a good citizen. The old approach is insufficient for educating people to become effective citizens in a modern democracy. Similarly the new civics education is not designed to be taught in a rote, pedantic, and expository manner, with heavy dependence on a conservative textbook. The new civics education provides an opportunity for a revitalization of pedagogy as well as curriculum in Australian schools. This will be the challenge for Australian teachers, if it is to succeed.
Reaching Critical Mass
To understand why the new civics education has evolved in Australia, two questions need to be posed. Why has a critical mass of interest and support for civics education been achieved? And, second, why now? Although some researchers have been aware of a lack of opportunity to study civics-and a resulting "civics deficit" among Australian youth-for some time (Phillips, 1989; SSCEET, 1989), little was done to amend this situation in an already overcrowded curriculum. However, a critical mass of factors has led to the point where citizenship is perceived as a crucial educational issue, one demanding immediate resolution and one already receiving support from significant politicians, pressure groups and educational administrators. What factors contributed to achieving this critical mass of support?
Changing international political conditions have produced profound concern with issues of democracy, citizenship and civic roles in Australia and elsewhere. The democratization process in the former communist states of Eastern Europe; the emergence of powerful trading blocs such as the European Community and the North American Free Trade Association; the reunification of the German peoples; the active role of the United Nations as an international peace and policing agency; the bloody dismembering of the former Yugoslavia; the globalization of the world economy; the potential of communications technology to break down barriers of space and time; and the unprecedented movement of peoples across traditional national boundaries: all have affected the way Australians and their government officials have come to see themselves.
As part of this process, Australians have begun to reflect upon their own national identity. Fundamental issues have been raised about the relationship between European and indigenous Australians, particularly over the issues of reconciliation and land. The relationships between European-descended and more recent immigrants to Australia-particularly those from Asia-also demand consideration.
Australia is no longer a country where the great majority of people claim some form of Anglo-Celtic heritage. Official government policy, reflecting the profoundly changed demographic structure of our people, now proclaims Australia to be a highly multicultural society. Yet many recent immigrants have little experience with an effective, working democracy, a situation which has been identified as in need of attention (Kennedy, et al, 1993; CEG, 1994). This recognition has produced further reflective questioning of who we are, where we wish to go, and how we wish to get there.
Traditional loyalties and values that forged the development of our country and our self-image are also being rigorously questioned. Australians are increasingly looking away from Great Britain and Europe, and toward Asia and the United States, for our economic, political and cultural future. Nowhere has this been more powerfully expressed than in our relations with the British monarchy. The rise of republican sentiment, fueled by an aggressive Prime Minister, has focused national attention on civic matters and is challenging traditional ties. Should Australia continue to support constitutional monarchy or become a republic? This debate has some distance to travel, despite inexorably growing republican support that reflects our demographic changes.
Without doubt, the most influential factor in galvanizing a critical mass of interest in civics education has been the work of the Civics Expert Group. Their widely accepted report, Whereas the people .... Civics and Citizenship Education (CEG, 1994), has become the cornerstone of the new civics education. In analyzing the conditions of citizenship and civic education in Australia, the report found a major civics deficit to exist amongst Australia's young people. As mentioned earlier, the report did not advocate making civics a separate school subject. Nor did it recommend injecting more citizenship education into the final years of schooling, which are dominated by powerful external examinations (CEG, 1994; Print, 1995; Kennedy, 1996).
However, the report did recommend substantial support for civics education to be concentrated in Years 5-10 within the K12 curriculum. Support for the new civics education includes the preparation of specifically-developed and technologically-current curriculum materials, as well as substantial professional development for Australia's civics teachers. These projects are now underway with widespread educational support to ensure their continuance. After three decades of neglect, Australia now stands poised to participate in the new civics education.
Issues for Civics Educators
Implementing the new civics education will be problematic for civics educators. Recognition of the new civics education in Australian schools and classrooms is likely to be somewhat contentious due to the recency of its development. Furthermore, as the major thrust is coming from the government and educational systems, Australian schools will soon experience a typical center-periphery curriculum issue. Major curriculum innovations, such as the CCESCMP, will be implemented to address the widely perceived need for more adequate civic understanding. Whether or not they succeed, and become institutionalized within the Australian school curriculum, will largely reflect teacher support over the next few years.
For teachers of civics, the deliberate addressing of values education in the new civics education will be a major issue. Traditionally, teachers have eschewed purposeful values education, and now they must face teaching such values as individual rights, social justice, tolerance for others, appreciation of diversity, and majority rules and participation within a democracy (CEG, 1994; Boston, 1996).
A significant issue for teachers is their level of preparedness for teaching the new civics education. Given the critical role teachers will play (CEG, 1994; Print, 1995b, 1996; Boston, 1996), professional development has been acknowledged as a vital component in the new civics education and funded appropriately. Whether it will be sufficient is problematical, as teacher knowledge and pedagogical skills for implementing the new civics are a matter of major concern (Print, 1995b; Boston, 1996; Kennedy, 1996).
Like educators in other countries, Australian civics educators are concerned that student assessment should be appropriate. We need to devise authentic assessment techniques for the new civics education, so that the measures of performance reflect the nature of the programs. Through an integrated approach to the new civics education, we can expect graduates of Australian schools to be able to:
understand the system of government and civic institutions in Australia, and the processes by which democratic government occurs, in order to participate actively in Australian democracy.
appreciate the essential and fundamental contemporary democratic values that sustain our system of government, including individual rights, the common good, justice, equality of opportunity, diversity, truth, and individual responsibilities.
understand what it means to be a citizen in Australian society, and to exercise a citizen's rights and responsibilities. This is essential to understanding how participation, decision-making and power operate in contemporary Australian society.
understand and appreciate the concept of community with its implications of membership, shared values, and concern for citizens and the common good.
demonstrate the ability to think critically and make informed decisions as a citizen in a democracy, particularly as related to the influence of the mass media in modern society.
understand and critically appreciate the historical antecedents by which our nation has evolved.
appreciate the rich cultural and ethnic diversity of Australian society, and the way different peoples live together with tolerance and acceptance.
comprehend what it means to be a citizen within regional and international contexts, with mutually shared regional and global rights and responsibilities.
appreciate the interdependence of citizens and the environment and our stewardship over a global environment/ecological sustainability.
recognize the legal processes necessary for our democratic system to work effectively (Print, 1996).
An exciting future awaits Australian educators as they address the development and implementation of the new civics education. This will be a civics curriculum that none have taught before, and which-given current contexts-will prove extremely challenging. Many hurdles must be overcome before the new civics education is an accepted component of the school curriculum. Yet this will be a rewarding experience.
Boston, K. "Civics and Citizenship: Priorities and Directions." Unicorn 22,1 (1966): 84-88.Civics Education Group (S.Macintyre, chair). Whereas the people ... Civics and Citizenship Education. Canberra: Australian Government Printing Service, 1994.Kennedy, K, O. Watts and G. Macdonald. Citizenship Education for a New Age. Toowoomba, Queensland: University of Southern Queensland, 1993.Kennedy, K. (ed). New Challenges for Citizenship Education. Canberra: Australian Curriculum Studies Association, 1996.Phillips, H. "Political Education in Australia: Well-being for Youth." Australian Journal of Teacher Education 14, 2 (1989): 21-34.Print, M. Political Understanding and Attitudes of Secondary Students. Canberra: Commonwealth of Australia, 1995a.Print, M (ed). Civics Education: Issues from Research and Practice. Canberra: ACSA, 1995b. Print, M. Conceptual Design for the Civics and Citizenship Education Schools Curriculum Materials Project. Melbourne: Curriculum Corporation, 1996.Senate Select Committee on Employment, Education and Training. Active Participation in Citizenship Education. Canberra: AGPS, 1989.Senate Select Committee on Employment, Education and Training. Active Participation in Citizenship Education Revisited. Canberra: AGPS, 1991.
Murray Print is Director of the Curriculum Research and Development Center in the Faculty of Education at the University of Sydney, New South Wales, Australia.


text:
/**
 * The heart of the game
 * @return {object} Public functions
 */
var core = function(document, window){

	var localStorageActive = storageAvailable('localStorage');

	/**
	 * General initialization
	 */
	function init(){
		loading(GameJam.loadingPercentage);

		window.onload = function(){
			// Initialize game if all ressources are loaded
			resources.load([
				'img/mouse.png',
				'img/fog.png',
				'img/loading.png',
				'img/background.png',
				'img/ui.png',
				'img/window.png',
				'img/window-bg.jpg',
				'img/window-vert.png',
				'img/icons.png',
				'img/level.png',
				'img/obstacles.png',
				'img/explosion.png'
			]);
			resources.onReady(initMenu);
		};
   	}

   	/**
   	 * Initialize the main menu
   	 */
   	function initMenu(){
   		var musicStorage = "",
   			soundStorage = "";
   		loading(100);
   		console.log('-- Loading done');

		if(localStorageActive){
			musicStorage = localStorage.getItem('music') || "";
			soundStorage = localStorage.getItem('sound') || "";
	 	}

		// if we have localStorage and this is save as false, we dont want to play the music
	 	if (!(musicStorage.length > 0 && musicStorage == 'false') ){
			initMusic();
		} else{
			document.getElementById('musicbtn').setAttribute('data-checked','false');
			document.getElementById('musicbtn').className = "checkbox";
		}

		initSound();

		if (!(soundStorage.length > 0 && soundStorage == 'false') ){

		} else{
			document.getElementById('soundbtn').setAttribute('data-checked','false');
			document.getElementById('soundbtn').className = "checkbox";
			GameJam.sound.unload();
		}

   		requestTimeout(function(){
			changeView('menu');
			document.getElementById('fog').className = 'show';
			console.log('-- Menu initialized');
		}, 700);

		interaction.GeneralEvents();
		console.log('-- Events initialized');

		if (localStorageActive) {
			if (!localStorage.getItem('level1')) {
				populateStorage();
			} else {
				useStorage();
			}
		} else {
			if (!docCookies.hasItem('levels')) {
				populateCookie();
			} else {
				useCookie();
			}
		}

		var musicbtn = document.getElementById('musicbtn');

		musicbtn.addEventListener('click', function() {
		    var musicOn = document.getElementById('musicbtn').getAttribute("data-checked") == 'true';
		    musicOn ? (GameJam.music ? GameJam.music.play() : initMusic()) : GameJam.music.pause();
		    localStorage.setItem("music", musicOn);
		}, false);

		var soundbtn = document.getElementById('soundbtn');

		soundbtn.addEventListener('click', function() {
		    var soundOn = document.getElementById('soundbtn').getAttribute("data-checked") == 'true';
		    soundOn ? initSound() : GameJam.sound.unload();
		    localStorage.setItem("sound", soundOn);
		}, false);

		getLevels();
		interaction.LevelButtonEvents();
   	}

   	/**
   	 * Initialize music
   	 */
   	function initMusic(){
   		GameJam.music = new Howl({
			urls: ['sound/music.ogg', 'sound/music.mp3'],
			autoplay: true,
			loop: true,
			volume: 0.5
		});
   	}

   	/**
   	 * Initialize sound
   	 */
   	function initSound(){
   		GameJam.sound = new Howl({
			urls: ['sound/effects.ogg', 'sound/effects.mp3'],
			sprite: {
				click: [0, 100],
			    plop: [200, 100],
			    end: [400, 2600],
			    start: [3500, 3000],
			    move: [7000, 1000],
			    run: [8500, 6200],
			    explode: [15000, 3000]
			}
		});
   	}

   	/**
   	 * Populate the local storage for the first time
   	 */
   	function populateStorage(){
   		console.log('-- Populate local storage');

   		for (var level in GameJam.levels) {
   			localStorage.setItem(level, GameJam.levels[level].time);
   		}
   	}

   	/**
   	 * Update the levels with data from storage
   	 */
   	function useStorage(){
   		console.log('-- Use local storage');

   		for (var level in GameJam.levels) {
   			GameJam.levels[level].time = localStorage.getItem(level);
   			if (GameJam.levels[level].time >= GameJam.levels[level].stars[0]) {
   				GameJam.levels[level].unlocked = true;
   				var nextLevel = 'level' + (parseInt(level.replace(/level/g, '')) + 1);
   				GameJam.levels[nextLevel].unlocked = true;
   			}
   		}
   	}

   	/**
   	 * Populate the cookie for the first time
   	 */
   	function populateCookie(){
   		console.log('-- Populate cookie');

   		var cookieObject = {};
   		for (var level in GameJam.levels) {
   			cookieObject[level] = GameJam.levels[level].time;
   		}
   		docCookies.setItem('levels', JSON.stringify(cookieObject));
   	}

   	/**
   	 * Update the levels with data from cookie
   	 */
   	function useCookie(){
   		console.log('-- Use cookie');

   		var cookie = JSON.parse(docCookies.getItem('levels'));
   		for (var level in GameJam.levels) {
   			GameJam.levels[level].time = cookie[level];
   			if (GameJam.levels[level].time >= GameJam.levels[level].stars[0]) {
   				GameJam.levels[level].unlocked = true;
   				var nextLevel = 'level' + (parseInt(level.replace(/level/g, '')) + 1);
   				GameJam.levels[nextLevel].unlocked = true;
   			}
   		}
   	}

	/**
	 * Game initialization
	 */
   	function initGame(){
		GameJam.lastTime = Date.now();

		// Static canvas
		GameJam.canvass = document.createElement('canvas');
		GameJam.ctxs = GameJam.canvass.getContext('2d');
		document.getElementsByTagName('main')[0].appendChild(GameJam.canvass);
		GameJam.canvass.width = GameJam.worldWidth * GameJam.tileWidth;
		GameJam.canvass.height = GameJam.worldHeight * GameJam.tileHeight;
		GameJam.canvass.id = 'static-canvas';

		// Animated canvas
		GameJam.canvasa = document.createElement('canvas');
		GameJam.ctxa = GameJam.canvasa.getContext('2d');
		document.getElementsByTagName('main')[0].appendChild(GameJam.canvasa);
		GameJam.canvasa.width = GameJam.worldWidth * GameJam.tileWidth;
		GameJam.canvasa.height = GameJam.worldHeight * GameJam.tileHeight;
		GameJam.canvasa.id = 'animation-canvas';

		// Set map tileset
		GameJam.tilesetLevel = resources.get('img/level.png');
		GameJam.tilesetObstacles = resources.get('img/obstacles.png');

		// Create the priosoner object
		GameJam.prisoner.push({
			attacking: false,
			steps: 20,			// The speed of the walk animation
			currentStep: 20,	// Current position in the way from one tile to another
			nextTile: [],
			pos: [Math.floor((GameJam.worldWidth-1) / 2) * GameJam.tileWidth, (GameJam.worldHeight-1) * GameJam.tileHeight - 32],
			sprite: new Sprite({
				url: 'img/mouse.png',
				pos: [0, 0],
				size: [32, 32],
				speed: 5,
				frames: [0, 1],
				dir: 'horizontal',
				once: false,
				inProgress: false,
				stay: false
			})
		});

		// Main game loop
		main();

		// Hide menu
		GameJam.body.className = 'in-game';
		document.getElementById('levels').className = 'window hide';
		document.getElementById('fog').className = '';

		console.log('-- Game initialized');
   	}

   	/**
   	 * Create level tiles
   	 */
   	function getLevels(){
		var levelHtml = '
',
			counter = 1;
		for (var level in GameJam.levels) {
			var unlocked = GameJam.levels[level]['unlocked'],
				time = GameJam.levels[level]['time'],
				stars = GameJam.levels[level]['stars'],
				star = 0;

			for (var i in stars) {
				if (time >= stars[i]) {
					star++;
				}
			}

			levelHtml += '
' +
							(unlocked ? '
' + counter + '
' : '

') +
							(unlocked ? '

' : '') +
						  '
';
			counter++;
		}
		levelHtml += '
';

		document.querySelectorAll('#levels .inner-content')[0].innerHTML = levelHtml;
   	}

	/**
	 * Update loading bar
	 * @param {integer} percentage Loading percentage
	 */
	function loading(percentage){
		GameJam.loadingInner.style.width = percentage + '%';
		GameJam.loadingPercentage = percentage;

		if (percentage === 100) {
			window.setTimeout(function(){
				GameJam.loadingWrapper.className = 'hide';
			}, 600);
		}
	}

	/**
	 * Change the view
	 * @param {string} newView The new view that should be shown
	 */
	function changeView(newView){
		if (document.querySelectorAll('.window.show').length) {
			GameJam.body.className = '';
			var current = document.querySelectorAll('.window.show')[0];
			current.className = 'window';

			requestTimeout(function(){
				current.className = 'window hide';
			}, 300);
		}
		requestTimeout(function(){
			GameJam.body.className = 'view-' + newView;
			document.querySelectorAll('#' + newView)[0].className = 'window show';
		}, 300);
	}

	/**
	 * Hide obstacles list
	 */
	function hideObstacles(){
		if (!document.getElementById('slider').className.match(/hide/g)) {
	    	document.getElementById('slider').className = 'show minimized';
			document.getElementById('obstacles').className = 'show minimized';
			document.getElementById('start-button-wrapper').className = 'show minimized';
			document.getElementById('start-game').className = 'button disabled';
		}
	}

	/**
	 * Show obstacles list
	 */
	function showObstacles(){
    	document.getElementById('slider').className = 'show expanded';
		document.getElementById('obstacles').className = 'show expanded';
		document.getElementById('start-button-wrapper').className = 'show expanded';
		document.getElementById('start-game').className = 'button';
	}

   	/**
   	 * Main game loop
   	 */
   	function main(){
		var now = Date.now();
		var dt = (now - GameJam.lastTime) / 1000.0;

		// Render if not paused
		if (!GameJam.paused) {
			update(dt);
			render();
		}

		GameJam.lastTime = now;
		requestAnimFrame(main);
	}

	/**
	 * Update sprite positions
	 * @param {integer} dt The time that has changed since the last update
	 */
	function update(dt){
		// Only move if a path exists and no pan is in progress
		if (!GameJam.panning) {
			if (GameJam.currentPath.length > 0) {
				// Vertical movement
				if (GameJam.prisoner[0].nextTile[0] === GameJam.currentPath[0][0]) {
					// Move top if next tile is above current
					if (GameJam.prisoner[0].nextTile[1] > GameJam.currentPath[0][1]) {
						GameJam.prisoner[0].pos[1] = GameJam.currentPath[0][1] * GameJam.tileHeight + ((GameJam.tileHeight / GameJam.prisoner[0].steps) * GameJam.prisoner[0].currentStep);
						GameJam.prisoner[0].sprite.pos[1] = 0;
					// Move bottom if next tile is below current
					} else if (GameJam.prisoner[0].nextTile[1] < GameJam.currentPath[0][1]){
						GameJam.prisoner[0].pos[1] = GameJam.currentPath[0][1] * GameJam.tileHeight - ((GameJam.tileHeight / GameJam.prisoner[0].steps) * GameJam.prisoner[0].currentStep);
						GameJam.prisoner[0].sprite.pos[1] = 32;
					}

				// Horizontal movement
				} else{
					// Move left if next tile is on the left side of the current
					if (GameJam.prisoner[0].nextTile[0] > GameJam.currentPath[0][0]) {
						GameJam.prisoner[0].pos[0] = GameJam.currentPath[0][0] * GameJam.tileWidth + ((GameJam.tileWidth / GameJam.prisoner[0].steps) * GameJam.prisoner[0].currentStep);
						GameJam.prisoner[0].sprite.pos[1] = 64;
					// Move right if next tile is on the right side of the current
					} else if (GameJam.prisoner[0].nextTile[0] < GameJam.currentPath[0][0]) {
						GameJam.prisoner[0].pos[0] = GameJam.currentPath[0][0] * GameJam.tileWidth - ((GameJam.tileWidth / GameJam.prisoner[0].steps) * GameJam.prisoner[0].currentStep);
						GameJam.prisoner[0].sprite.pos[1] = 96;
					}
				}

				// End of an animation from tile to tile
				if (GameJam.prisoner[0].currentStep === 1) {
					GameJam.prisoner[0].nextTile = GameJam.currentPath[0];

					// Remove the first tile in the array
					GameJam.currentPath.splice(0,1);

					// Reset to start animation for next tile
					GameJam.prisoner[0].currentStep = GameJam.prisoner[0].steps;

					GameJam.tileCounter++;
				}

				GameJam.prisoner[0].currentStep--;
			} else{
				GameJam.prisoner[0].sprite.pos[1] = 0;
				GameJam.prisoner[0].sprite.speed = 0;

				if (GameJam.gameStarted && !GameJam.gameEnded) {
					endLevel();
				}
			}

			// Update tile counter
			if (GameJam.gameStarted && !GameJam.gameEnded) {
				GameJam.timer.innerHTML = Math.round(GameJam.tileCounter);
			}
		}

		updateEntities(dt);
	}

	/**
	 * Update entities
	 * @param {integer} dt The time that has changed since the last update
	 */
	function updateEntities(dt){
	    // Update the prisoner sprite animation
	    if (!GameJam.panning) {
		    for (var i in GameJam.prisoner) {
				GameJam.prisoner[i].sprite.update(dt);
			}
		}

	    for (var i in GameJam.items) {
			GameJam.items[i].sprite.update(dt);
		}

		for (var i in GameJam.explosion) {
			GameJam.explosion[i].sprite.update(dt);
		}
	}

	/**
	 * Draw everything
	 */
	function render(){
		GameJam.canvasa.width = GameJam.canvasa.width;
	    renderEntities(GameJam.prisoner);
	    renderEntities(GameJam.items);
	    renderEntities(GameJam.explosion);
	}

	/**
	 * Render entities
	 * @param {array} list A list of entities
	 */
	function renderEntities(list){
		if (!list.pos) {
			//return false;
		}
		for(var i=0; i<list.length; i++) {
			renderEntity(list[i]);
		}
	}

	/**
	 * Render a single entity
	 * @param {object} entity An object in the game
	 */
	function renderEntity(entity){
		if (entity.pos) {
			GameJam.ctxa.save();
			GameJam.ctxa.translate(entity.pos[0], entity.pos[1]);
			entity.sprite.render(GameJam.ctxa);
			GameJam.ctxa.restore();
		}
	}

	function itemsToObstacles(insertItems){
		// Put the items to the world map
		var list = GameJam.items;
		for (var i=0; i<list.length; i++) {
			var item = GameJam.items[i],
				itemPos = item.sprite.pos,
				obstacleX = itemPos[0]/32,
				obstacleY = itemPos[1]/32,
				rows = item.height/32,
				cols = item.width/32,
				offset = obstacleY;

			if (cols >= rows) {
				for (var c=0; c<cols; c++) {
					GameJam.obstacles[GameJam.items[i].pos[0]/32 + c][GameJam.items[i].pos[1]/32] = insertItems? obstacleX + c : 0;
				}
			} else {
				for (var r=0; r<rows; r++) {
					GameJam.obstacles[GameJam.items[i].pos[0]/32][GameJam.items[i].pos[1]/32 + r] = insertItems? obstacleX + offset : 0;
					offset = offset + GameJam.imageNumTiles;
				}
			}
		}
	}

   	/**
   	 * Start the second stage of the game
   	 */
   	function startGame(){
   		GameJam.sound.play('start');
   		GameJam.sound.play('run');

		// Put items in the map
		itemsToObstacles(true);

		// Create the prisoner path
		GameJam.movePrisoner();

		// Reset items, we dont want the user to be able to drag and drop them
 		GameJam.items = [];

 		for (var item in GameJam.levels[GameJam.currentLevel].items) {
 			GameJam.levels[GameJam.currentLevel].items[item].count = GameJam.levels[GameJam.currentLevel].items[item].countStart;
 		}

		// Reset prisoner speed
		GameJam.prisoner[0].sprite.speed = 5;

		// Reset game time
		GameJam.tileCounter = 0;
		GameJam.timer.className = 'show';
		document.getElementById('obstacles').className = 'hide';
		document.getElementById('slider').className = 'hide';
		document.getElementById('start-button-wrapper').className = 'hide';

		// Game has started
		GameJam.gameStarted = true;

		GameJam.gameEnded = false;

		document.getElementById('static-canvas').className = 'started';

		console.log('-- Game started');
	}

	/**
	 * End of the level
	 */
	function endLevel(){
		GameJam.sound.play('end');

		GameJam.gameEnded = true;
		GameJam.paused = true;

		// Reset
		var starsElmts = document.querySelectorAll('.stars-big .star');
		for (var star in starsElmts) {
			starsElmts[star].className = 'star';
		}

		var nextLevelBtn = document.querySelectorAll('#complete .next-btn')[0];
		if (nextLevelBtn) {
			nextLevelBtn.remove();
		}

		var stars = GameJam.levels[GameJam.currentLevel].stars,
			steps = Math.round(GameJam.tileCounter);

		for (var i in stars) {
			document.querySelectorAll('#steps' + i)[0].innerHTML = stars[i];

			if (GameJam.levels[GameJam.currentLevel].time >= stars[i]) {
				document.querySelectorAll('#star-big' + i)[0].className = 'star visible';
			}

			// Current playthrough
			if (steps >= stars[i]) {
				showStar(i);
				var nextLevel = 'level' + (parseInt(GameJam.currentLevel.replace(/level/g, '')) + 1);
				if (GameJam.levels[nextLevel]) {
					GameJam.levels[nextLevel].unlocked = true;
				}
			}
		}

		function showStar(star){
			requestTimeout(function(){
				var starElm = document.querySelectorAll('#star-big' + star)[0];
				console.log(starElm.className);
				if (starElm.className != 'star visible') {
					GameJam.sound.play('plop');
					starElm.className = 'star show';
				}
			}, star*500 + 500);
		}

		if (steps > GameJam.levels[GameJam.currentLevel].time) {
			GameJam.levels[GameJam.currentLevel].time = steps;
			if (localStorageActive) {
				localStorage.setItem(GameJam.currentLevel, steps);
			} else {
				var cookieObject = JSON.parse(docCookies.getItem('levels'));
				cookieObject[GameJam.currentLevel] = steps;
				docCookies.setItem('levels', JSON.stringify(cookieObject));
			}
		}
		document.querySelectorAll('#complete .steps')[0].innerHTML = steps;

		if (GameJam.levels[GameJam.currentLevel].time >= GameJam.levels[GameJam.currentLevel].stars[0]) {
			var buttonsElm = document.querySelectorAll('#complete .buttons')[0];
			buttonsElm.insertAdjacentHTML('beforeend', '

');
			interaction.NextLevelBtnEvent();
		}

		GameJam.canvasa.style.display = 'none';
		GameJam.canvass.style.display = 'none';
		GameJam.timer.className = '';

		document.getElementById('fog').className = 'show';

		document.getElementById('static-canvas').className = '';

		getLevels();
		interaction.LevelButtonEvents();

		changeView('complete');

		console.log('-- Level done!');
	}

	/**
	 * Load a new level
	 */
	function loadLevel(newLevel){
		console.log('-- Load new level:', newLevel);
		GameJam.currentLevel = newLevel;

		GameJam.timer.className = '';

		if( !GameJam.firstLevel ){
			core.InitGame();
		} else {
			GameJam.prisoner[0].pos = [Math.floor((GameJam.worldWidth-1) / 2) * GameJam.tileWidth, (GameJam.worldHeight-1) * GameJam.tileHeight - 32];

			// Hide menu
			GameJam.body.className = 'in-game';
			document.getElementById('levels').className = 'window hide';
			document.getElementById('fog').className = '';
		}
		GameJam.createWorld();

		// Create obstacle icons
		var iconsHtml = '',
			counter = 1;
		for (var i in GameJam.levels[GameJam.currentLevel].items) {
			var item = GameJam.levels[GameJam.currentLevel].items[i];
			iconsHtml += '
' +
							'
' + item.width/32 + 'x' + item.height/32 + '
' +
							'

' +
							'
' + item.count + '
' +
						 '
';
			counter++;
		}
		document.getElementById('obstacles-list').innerHTML = iconsHtml;

		// Register game event handlers
		if( !GameJam.firstLevel ){
			interaction.GameEvents();
		}
		interaction.ObstacleEvents();
		console.log('-- Game events initialized');

		GameJam.canvasa.style.display = 'block';
		GameJam.canvass.style.display = 'block';

		GameJam.paused = false;

		requestTimeout(function(){
			document.getElementById('obstacles').className = 'show';
			document.getElementById('start-button-wrapper').className = 'show';
			document.getElementById('slider').className = 'show';
		}, 300);

		if( !GameJam.firstLevel ){
			GameJam.firstLevel = true;
		}
	}

	/**
	 * Check for local storage availability
	 */
	function storageAvailable(type){
		try {
			var storage = window[type],
				x = '__storage_test__';
			storage.setItem(x, x);
			storage.removeItem(x);
			return true;
		}
		catch(e) {
			return false;
		}
	}

	/**
	 * Cookie helper
	 */
	var docCookies = {
		getItem: function (sKey) {
			if (!sKey) { return null; }
			return decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*" + encodeURIComponent(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*([^;]*).*$)|^.*$"), "$1")) || null;
		},
		setItem: function (sKey, sValue, vEnd, sPath, sDomain, bSecure) {
			if (!sKey || /^(?:expires|max\-age|path|domain|secure)$/i.test(sKey)) { return false; }
			var sExpires = "";
			if (vEnd) {
				switch (vEnd.constructor) {
					case Number:
						sExpires = vEnd === Infinity ? "; expires=Fri, 31 Dec 9999 23:59:59 GMT" : "; max-age=" + vEnd;
						break;
					case String:
						sExpires = "; expires=" + vEnd;
						break;
					case Date:
						sExpires = "; expires=" + vEnd.toUTCString();
					break;
				}
			}
			document.cookie = encodeURIComponent(sKey) + "=" + encodeURIComponent(sValue) + sExpires + (sDomain ? "; domain=" + sDomain : "") + (sPath ? "; path=" + sPath : "") + (bSecure ? "; secure" : "");
			return true;
		},
		removeItem: function (sKey, sPath, sDomain) {
			if (!this.hasItem(sKey)) { return false; }
			document.cookie = encodeURIComponent(sKey) + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT" + (sDomain ? "; domain=" + sDomain : "") + (sPath ? "; path=" + sPath : "");
			return true;
		},
		hasItem: function (sKey) {
			if (!sKey) { return false; }
			return (new RegExp("(?:^|;\\s*)" + encodeURIComponent(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=")).test(document.cookie);
		},
		keys: function () {
			var aKeys = document.cookie.replace(/((?:^|\s*;)[^\=]+)(?=;|$)|^\s*|\s*(?:\=[^;]*)?(?:\1|$)/g, "").split(/\s*(?:\=[^;]*)?;\s*/);
			for (var nLen = aKeys.length, nIdx = 0; nIdx < nLen; nIdx++) { aKeys[nIdx] = decodeURIComponent(aKeys[nIdx]); }
			return aKeys;
		}
	};

	/**
	 * A cross-browser requestAnimationFrame
	 */
	var requestAnimFrame = (function(){
		return window.requestAnimationFrame    ||
			window.webkitRequestAnimationFrame ||
			window.mozRequestAnimationFrame    ||
			window.oRequestAnimationFrame      ||
			window.msRequestAnimationFrame     ||
			function(callback){
				window.setTimeout(callback, 1000 / 60);
			};
	})();

	/**
	 * Behaves the same as setTimeout except uses requestAnimationFrame() where possible for better performance
	 * @param {function} 	fn 		The callback function
	 * @param {int} 		delay 	The delay in milliseconds
	 */
	window.requestTimeout = function(fn, delay){
	    if( !window.requestAnimationFrame       &&
	        !window.webkitRequestAnimationFrame &&
	        !(window.mozRequestAnimationFrame && window.mozCancelRequestAnimationFrame) && // Firefox 5 ships without cancel support
	        !window.oRequestAnimationFrame      &&
	        !window.msRequestAnimationFrame)
	            return window.setTimeout(fn, delay);

	    var start = new Date().getTime(),
	        handle = new Object();

	    function loop(){
	        var current = new Date().getTime(),
	            delta = current - start;

	        delta >= delay ? fn.call() : handle.value = requestAnimFrame(loop);
	    };

	    handle.value = requestAnimFrame(loop);
	    return handle;
	};

	/**
	 * Return public function
	 */
	return {
		Init: init,
		InitGame: initGame,
		StartGame: startGame,
		ChangeView: changeView,
		Loading: loading,
		HideObstacles: hideObstacles,
		ShowObstacles: showObstacles,
		itemsToObstacles: itemsToObstacles,
		LoadLevel: loadLevel,
		DocCookies: docCookies,
		LocalStorageActive: localStorageActive,
		renderEntities: renderEntities
	};

}(document, window);

core.Init();


A sneak peek between the covers of this month's issue.
The December issue is currently on shelf and it's one you won't want to miss.
Looking to get ripped? We've got the ultimate 12-week training programme and eating plan for you. And this month, we're offering readers a R150 discount! Find the coupon code on page 40.
9. Our Gift To You: Flying Disc Or Phone Charger!
Free with this issue is your choice of yellow or back throwing disc, or white or black phone charger. Tag us on social media of you have fun with your freebies.
Get This Issue Now Or Subscribe!
Get the digital version now, or subscribe and never miss an issue. Click here.