<!--

function MSSopener(){
window.status = "MusicArtAcademy.com - the Home of Rock Art on the World Wide Web."
}

function add2fav() {
 window.AddFavorite("http://www.musicartacademy.com", "Music Art Academy - the Home of Rock Art on the World Wide Web.")
}

var maaimages = new Array()
maaimages[1] = "images/text_availablenow.jpg"
maaimages[2] = "artists/aubreypowell_1s.jpg"
maaimages[3] = "artists/aubreypowell_2s.jpg"
maaimages[4] = "artists/aubreypowell_3s.jpg"
maaimages[5] = "artists/aubreypowell_4s.jpg"
maaimages[6] = "artists/petercorriston_1s.jpg"
maaimages[7] = "artists/sirpeterblake_1s.jpg"
maaimages[8] = "artists/stormthorgerson_1s.jpg"
maaimages[9] = "artists/stormthorgerson_2s.jpg"
maaimages[10] = "artists/stormthorgerson_3s.jpg"
maaimages[11] = "artists/stormthorgerson_4s.jpg"
maaimages[12] = "artists/stormthorgerson_5s.jpg"
maaimages[13] = "artists/stormthorgerson_6s.jpg"
maaimages[14] = "artists/stormthorgerson_7s.jpg"
maaimages[15] = "artists/stormthorgerson_8s.jpg"
maaimages[16] = "artists/zacron_1s.jpg"

thisimage = 1
totalimages = maaimages.length - 1

function rotate() {
   if (document.images) {
     document.maascroller.src=maaimages[thisimage]
     if (thisimage == totalimages) {
       thisimage = 1
     }
     else {
       thisimage++
     }
     setTimeout("rotate()", 7 * 1000)
   }
}

function code_email(){
maa_email1=new Array(60,97,32,104,114,101,102,61,34,109,97,105,108,116,111,58,108,101,101,64,109,117,115,105,99,97,114,116,97,99,97,100,101,109,121,46,99,111,109,34,62,101,109,97,105,108,60,47,97,62);
var the_code;
dum="";
maa_email2=new Array();
for (i=0; i < maa_email1.length; i++){
maa_email2[i]=String.fromCharCode(maa_email1[i]);
the_code=dum+=maa_email2[i];
}
document.write(the_code);
}

function code_nousdire(){
maa_nousdire1=new Array(60,97,32,104,114,101,102,61,34,109,97,105,108,116,111,58,119,101,98,109,97,115,116,101,114,64,109,117,115,105,99,97,114,116,97,99,97,100,101,109,121,46,99,111,109,34,62,110,111,117,115,32,100,105,114,101,60,47,97,62);
var the_code;
dum="";
maa_nousdire2=new Array();
for (i=0; i < maa_nousdire1.length; i++){
maa_nousdire2[i]=String.fromCharCode(maa_nousdire1[i]);
the_code=dum+=maa_nousdire2[i];
}
document.write(the_code);
}

function code_letusknow(){
maa_letusknow1=new Array(60,97,32,104,114,101,102,61,34,109,97,105,108,116,111,58,119,101,98,109,97,115,116,101,114,64,109,117,115,105,99,97,114,116,97,99,97,100,101,109,121,46,99,111,109,34,62,108,101,116,32,117,115,32,107,110,111,119,60,47,97,62);
var the_code;
dum="";
maa_letusknow2=new Array();
for (i=0; i < maa_letusknow1.length; i++){
maa_letusknow2[i]=String.fromCharCode(maa_letusknow1[i]);
the_code=dum+=maa_letusknow2[i];
}
document.write(the_code);
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) xx.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v3.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

// STANDARD FUNCTIONS
//checks if field is empty
function isEmpty( str ){
    strRE = new RegExp( );
    strRE.compile( '^[\s ]*$', 'gi' );
    return strRE.test( str.value );
}

//checks if email is valid
function notValidEmail( str ){
    mailRE = new RegExp( );
    mailRE.compile( '^[\._a-z0-9-]+@[\.a-z0-9-]+[\.]{1}[a-z]{2,4}$', 'gi' );
    return !(mailRE.test( str.value ));
}

//checks if box is ticked
function notChecked( box ){
    if( box.checked ){
        return false;
    }
    else{
        return true;
    }
}

//checks content is only letters
function isLetters( str ) {
	var myregexp = new RegExp("[^a-zA-Z]");
	if (str.match(myregexp)) {
		return true;
	}
	return false;
}

//checks content is only numbers
function isNumbers( str ) {
	if (str.match(/[^0-9]/)) {
		return true;
	}
	return false;
}

//checks content is only numbers and letters
function isNumbersAndLetters( str ) {
	if (str.match(/[^0-9a-zA-Z]/)) {
		return true;
	}
	return false;
}

<!-- Original:  Simon Tneoh (tneohcb@pc.jaring.my) -->
<!-- This script and many more are available free online at -->
<!-- The JavaScript Source!! http://javascript.internet.com -->
<!-- Begin

/*************************************************************************\
CHECK CREDIT CARD FORMAT
Does not ensure card is real, but at least ensures format is correct
Rules:
Visa: Must have a prefix of 4, and must be either 13 or 16 digits in length.
Mastercard: Must have a prefix of 51 to 55, and must be 16 digits in length.
American Express: Must have a prefix of 34 or 37, and must be 15 digits in length.

OTHER EXCLUDED CARDS (add to next block if required and change Cards value)
Cards[3] = new CardType("DinersClubCard", "30,36,38", "14");
var DinersClubCard = Cards[3];
Cards[4] = new CardType("DiscoverCard", "6011", "16");
var DiscoverCard = Cards[4];
Cards[5] = new CardType("enRouteCard", "2014,2149", "15");
var enRouteCard = Cards[5];
Cards[6] = new CardType("JCBCard", "3088,3096,3112,3158,3337,3528", "16");
var JCBCard = Cards[6];
\*************************************************************************/
var Cards = new makeArray(8);
Cards[0] = new CardType("Mastercard", "51,52,53,54,55", "16");
var Mastercard = Cards[0];
Cards[1] = new CardType("Visa", "4", "13,16");
var Visa = Cards[1];
Cards[2] = new CardType("American_Express", "34,37", "15");
var American_Express = Cards[2];
var LuhnCheckSum = Cards[3] = new CardType();

/*************************************************************************\
maa_checkPayment(form)
function called when users click the "check" button.
Mastercard: Must have a prefix of 51 to 55, and must be 16 digits in length.
Visa: Must have a prefix of 4, and must be either 13 or 16 digits in length.
American Express: Must have a prefix of 34 or 37, and must be 15 digits in length.
\*************************************************************************/
function maa_checkPayment(form) {
	var tmpyear;
    if( isEmpty( form.maa_first_name ) ){
        alert( 'Sorry, but First Name is a required field.\nPlease try again.' );
		form.maa_first_name.focus();
		return false;
    }
    if( isEmpty( form.maa_last_name ) ){
        alert( 'Sorry, but Last Name is a required field.\nPlease try again.' );
		form.maa_last_name.focus();
		return false;
    }
    if( isEmpty( form.maa_address1 ) ){
        alert( 'Sorry, but Address line 1 is a required field.\nPlease try again.' );
		form.maa_address1.focus();
		return false;
    }
    if( isEmpty( form.maa_address2 ) ){
        alert( 'Sorry, but Address line 2 is a required field.\nPlease try again.' );
		form.maa_address2.focus();
		return false;
    }
    if( isEmpty( form.maa_postcode ) ){
        alert( 'Sorry, but Postcode is a required field.\nPlease try again.' );
		form.maa_postcode.focus();
		return false;
    }
    if( isEmpty( form.maa_country ) ){
        alert( 'Sorry, but Country is a required field.\nPlease try again.' );
		form.maa_country.focus();
		return false;
    }
    if( isEmpty( form.maa_telephone ) ){
        alert( 'Sorry, but you need to give us a telephone number (including full dialling code) where we can\ncontact you in case we have a query concerning your order.\nPlease try again.' );
		form.maa_telephone.focus();
		return false;
    }
	if (form.maa_cctype.value.length == 0) {
		alert("Sorry, but you need to specify the Card Type.");
		form.maa_cctype.focus();
		return false;
	}
    if( isEmpty( form.maa_ccname ) ){
        alert( 'Sorry, but Cardholder Name is a required field and should be\nentered exactly as displayed on your card.\nPlease try again.' );
		form.maa_ccname.focus();
		return false;
    }
	if (form.maa_ccno.value.length == 0) {
		alert("Please enter a Card Number.");
		form.maa_ccno.focus();
		return false;
	}
    if (form.maa_ccseccode.value.length == 0) {
        alert( 'Sorry, but the Card Security Code is a required field.\nPlease try again.' );
		form.maa_ccseccode.focus();
		return false;
    }
    if ((form.maa_ccseccode.value.length < 3) || (form.maa_ccseccode.value.length > 5)){
        alert( 'Sorry, but the Security Code should be between 3 and 5 numbers, no spaces.\nPlease try again.' );
		form.maa_ccseccode.focus();
		return false;
    }
	if (form.maa_ccexpm.value.length == 0) {
		alert( 'Sorry, but the card Expiry Month is a required field.\nPlease try again.' );
		form.maa_ccexpm.focus();
		return false;
	}
	if (form.maa_ccexpy.value.length == 0) {
		alert( 'Sorry, but the card Expiry Year is a required field.\nPlease try again.' );
		form.maa_ccexpy.focus();
		return false;
	}
	if ( notChecked ( form.maa_accept ) ) {
        alert( 'Sorry, but you need to tick the box confirming your agreement to our Terms and Conditions.\nPlease try again.' );
		form.maa_accept.focus();
		return false;
	}
	if (form.maa_ccexpy.value > 96) {
		tmpyear = "19" + form.maa_ccexpy.value;
	}
	else if (form.maa_ccexpy.value < 21) {
			tmpyear = "20" + form.maa_ccexpy.value;
		}
		else {
			alert("The Expiration Year is not valid.");
			return false;
		}
		tmpmonth = form.maa_ccexpm.options[form.maa_ccexpm.selectedIndex].value;
		// The following line doesn't work in IE3, you need to change it
		// to something like "(new CardType())...".
		// if (!CardType().isExpiryDate(tmpyear, tmpmonth)) {
		if (!(new CardType()).isExpiryDate(tmpyear, tmpmonth)) {
			alert("Sorry, but the date you have entered means that your card has expired.");
			return false;
		}
		card = form.maa_cctype.options[form.maa_cctype.selectedIndex].value;
		var retval = eval(card + ".checkCardNumber(\"" + form.maa_ccno.value + "\", " + tmpyear + ", " + tmpmonth + ");");
		cardname = "";
		if (retval) {
			//alert("This card number appears to be valid.");
			return true;
		}
		else {
			// The cardnumber has the valid luhn checksum, but we want to know which
			// cardtype it belongs to.
			for (var n = 0; n < Cards.size; n++) {
				if (Cards[n].checkCardNumber(form.maa_ccno.value, tmpyear, tmpmonth)) {
				cardname = Cards[n].getCardType();
				break;
			   }
			}
			if (cardname.length > 0) {
				//alert("This looks like a " + cardname + " number, not a " + card + " number.");
				alert("Sorry, but that is not a valid " + card + " number.");
				return false;
			}
			else {
				alert("Sorry, but that is not a valid " + card + " number.");
				return false;
		}
	}
}
/*************************************************************************\
Object CardType([String cardtype, String rules, String len, int year, int month])
cardtype    : type of card, eg: MasterCard, Visa, etc.
rules       : rules of the cardnumber, eg: "4", "6011", "34,37".
len         : valid length of cardnumber, eg: "16,19", "13,16".
year        : year of expiry date.
month       : month of expiry date.
eg:
var Visa = new CardType("Visa", "4", "16");
var Mastercard = new CardType("Mastercard", "5", "16");
var American_Express = new CardType("American_Express", "34,37", "15");
\*************************************************************************/
function CardType() {
	var n;
	var argv = CardType.arguments;
	var argc = CardType.arguments.length;

	this.objname = "object CardType";

	var tmpcardtype = (argc > 0) ? argv[0] : "CardObject";
	var tmprules = (argc > 1) ? argv[1] : "0,1,2,3,4,5,6,7,8,9";
	var tmplen = (argc > 2) ? argv[2] : "13,14,15,16,19";

	this.setCardNumber = setCardNumber;  // set CardNumber method.
	this.setCardType = setCardType;  // setCardType method.
	this.setLen = setLen;  // setLen method.
	this.setRules = setRules;  // setRules method.
	this.setExpiryDate = setExpiryDate;  // setExpiryDate method.

	this.setCardType(tmpcardtype);
	this.setLen(tmplen);
	this.setRules(tmprules);
	if (argc > 4) {
		this.setExpiryDate(argv[3], argv[4]);
	}

	this.checkCardNumber = checkCardNumber;  // checkCardNumber method.
	this.getExpiryDate = getExpiryDate;  // getExpiryDate method.
	this.getCardType = getCardType;  // getCardType method.
	this.isCardNumber = isCardNumber;  // isCardNumber method.
	this.isExpiryDate = isExpiryDate;  // isExpiryDate method.
	this.luhnCheck = luhnCheck;// luhnCheck method.
	return this;
}

/*************************************************************************\
boolean checkCardNumber([String cardnumber, int year, int month])
return true if cardnumber pass the luhncheck and the expiry date is
valid, else return false.
\*************************************************************************/
function checkCardNumber() {
	var argv = checkCardNumber.arguments;
	var argc = checkCardNumber.arguments.length;
	var cardnumber = (argc > 0) ? argv[0] : this.cardnumber;
	var year = (argc > 1) ? argv[1] : this.year;
	var month = (argc > 2) ? argv[2] : this.month;

	this.setCardNumber(cardnumber);
	this.setExpiryDate(year, month);

	if (!this.isCardNumber()) {
		return false;
	}
	if (!this.isExpiryDate()) {
		return false;
	}
	return true;
}
/*************************************************************************\
String getCardType()
return the cardtype.
\*************************************************************************/
function getCardType() {
	return this.cardtype;
}
/*************************************************************************\
String getExpiryDate()
return the expiry date.
\*************************************************************************/
function getExpiryDate() {
	return this.month + "/" + this.year;
}
/*************************************************************************\
boolean isCardNumber([String cardnumber])
return true if cardnumber pass the luhncheck and the rules, else return
false.
\*************************************************************************/
function isCardNumber() {
	var argv = isCardNumber.arguments;
	var argc = isCardNumber.arguments.length;
	var cardnumber = (argc > 0) ? argv[0] : this.cardnumber;
	if (!this.luhnCheck()) {
		return false;
	}
	for (var n = 0; n < this.len.size; n++)
		if (cardnumber.toString().length == this.len[n]) {
			for (var m = 0; m < this.rules.size; m++) {
			var headdigit = cardnumber.substring(0, this.rules[m].toString().length);
			if (headdigit == this.rules[m])
			return true;
		}
		return false;
	}
	return false;
}

/*************************************************************************\
boolean isExpiryDate([int year, int month])
return true if the date is a valid expiry date,
else return false.
\*************************************************************************/
function isExpiryDate() {
	var argv = isExpiryDate.arguments;
	var argc = isExpiryDate.arguments.length;

	year = argc > 0 ? argv[0] : this.year;
	month = argc > 1 ? argv[1] : this.month;

	if (!isNum(year+"")) {
		return false;
	}
	if (!isNum(month+"")) {
	return false;
	}
	today = new Date();
	expiry = new Date(year, month);
	if (today.getTime() > expiry.getTime()) {
		return false;
	}
	else {
		return true;
	}
}

/*************************************************************************\
boolean isNum(String argvalue)
return true if argvalue contains only numeric characters,
else return false.
\*************************************************************************/
function isNum(argvalue) {
argvalue = argvalue.toString();

if (argvalue.length == 0)
return false;

for (var n = 0; n < argvalue.length; n++)
if (argvalue.substring(n, n+1) < "0" || argvalue.substring(n, n+1) > "9")
return false;

return true;
}

/*************************************************************************\
boolean luhnCheck([String CardNumber])
return true if CardNumber pass the luhn check else return false.
Reference: http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl
\*************************************************************************/
function luhnCheck() {
	var argv = luhnCheck.arguments;
	var argc = luhnCheck.arguments.length;

	var CardNumber = argc > 0 ? argv[0] : this.cardnumber;

	if (! isNum(CardNumber)) {
		return false;
	 }

	var no_digit = CardNumber.length;
	var oddoeven = no_digit & 1;
	var sum = 0;

	for (var count = 0; count < no_digit; count++) {
		var digit = parseInt(CardNumber.charAt(count));
		if (!((count & 1) ^ oddoeven)) {
			digit *= 2;
			if (digit > 9)
			digit -= 9;
		}
		sum += digit;
	}
	if (sum % 10 == 0)
	return true;
	else
	return false;
}

/*************************************************************************\
ArrayObject makeArray(int size)
return the array object in the size specified.
\*************************************************************************/
function makeArray(size) {
this.size = size;
return this;
}

/*************************************************************************\
CardType setCardNumber(cardnumber)
return the CardType object.
\*************************************************************************/
function setCardNumber(cardnumber) {
	this.cardnumber = cardnumber;
	return this;
}
/*************************************************************************\
CardType setCardType(cardtype)
return the CardType object.
\*************************************************************************/
function setCardType(cardtype) {
	this.cardtype = cardtype;
	return this;
}
/*************************************************************************\
CardType setExpiryDate(year, month)
return the CardType object.
\*************************************************************************/
function setExpiryDate(year, month) {
	this.year = year;
	this.month = month;
	return this;
}
/*************************************************************************\
CardType setLen(len)
return the CardType object.
\*************************************************************************/
function setLen(len) {
	// Create the len array.
	if (len.length == 0 || len == null)
	len = "13,14,15,16,19";

	var tmplen = len;
	n = 1;
	while (tmplen.indexOf(",") != -1) {
		tmplen = tmplen.substring(tmplen.indexOf(",") + 1, tmplen.length);
		n++;
	}
	this.len = new makeArray(n);
	n = 0;
	while (len.indexOf(",") != -1) {
		var tmpstr = len.substring(0, len.indexOf(","));
		this.len[n] = tmpstr;
		len = len.substring(len.indexOf(",") + 1, len.length);
		n++;
	}
	this.len[n] = len;
	return this;
}

/*************************************************************************\
CardType setRules()
return the CardType object.
\*************************************************************************/
function setRules(rules) {
// Create the rules array.
if (rules.length == 0 || rules == null)
rules = "0,1,2,3,4,5,6,7,8,9";

var tmprules = rules;
n = 1;
while (tmprules.indexOf(",") != -1) {
tmprules = tmprules.substring(tmprules.indexOf(",") + 1, tmprules.length);
n++;
}
this.rules = new makeArray(n);
n = 0;
while (rules.indexOf(",") != -1) {
var tmpstr = rules.substring(0, rules.indexOf(","));
this.rules[n] = tmpstr;
rules = rules.substring(rules.indexOf(",") + 1, rules.length);
n++;
}
this.rules[n] = rules;
return this;
}

function maa_checkChangePassword( form ){
    if ((form.maa_oldpw.value.length < 4) || (form.maa_oldpw.value.length > 8)){
        alert('(error - password length)\n\nYour old password (field 1) is between 4 and 8 characters long.\nPlease try again.' );
        return false;
    }
    if ((form.maa_newpw.value.length < 4) || (form.maa_newpw.value.length > 8)){
        alert('(error - password length)\n\nYour new password (field 2) should be between 4 and 8 characters long.\nPlease try again.' );
        return false;
    }
    if ((form.maa_newpw.value) != (form.maa_newpw2.value)) {
        alert('(error - password length)\n\nYour new password (field 2) doesn\'t match the confirmation (field 3).\nPlease try again.' );
        return false;
    }
}

function maa_checkRegistration( form ){
    if( notValidEmail( form.maa_em ) ){
        alert('(error - email invalid)\n\nYou need to enter a valid email address.\nPlease try again.' );
        return false;
    }
}

function maa_checkReminder( form ){
    if( notValidEmail( form.maa_emreminder ) ){
        alert('(error - email invalid)\n\nYou need to enter a valid email address.\nPlease try again.' );
        return false;
    }
}

function maa_checkLogin( form ){
    if( notValidEmail( form.maa_loginem ) ){
        alert('(error - email invalid)\n\nYou need to enter your email address.\nPlease try again.' );
        return false;
    }
    if ((form.maa_loginpw.value.length < 4) || (form.maa_loginpw.value.length > 8)){
        alert('(error - password length)\n\nYour password should be between 4 and 8 characters long.\nPlease try again.' );
        return false;
    }
//	if( isNumbersAndLetters( form.maa_loginpw ) ){
//        alert('(error - illegal characters)\n\nYour password should be composed of numbers and letters, with no special characters.\nPlease try again.' );
//        return false;
//    }
}

function maa_securestatbar()
{
window.status = "Music Art Academy - Secure Mode";
}

// Set the input argument to true to enable the window feature
function maa_winOpen(URL, windowName, width, height, resizable, location, menubar, scrollbars, status, toolbar){
	var windowFeatures;
	windowFeatures = '';
	if (width != '' && width != null){
		windowFeatures = windowFeatures+'width='+width+',';
	}
	if (height != '' && height != null){
		windowFeatures = windowFeatures+'height='+height+',';
	}
	if (resizable){
		windowFeatures = windowFeatures+'resizable,';
	}
	if (location){
		windowFeatures = windowFeatures+'location,';
	}
	if (menubar){
		windowFeatures = windowFeatures+'menubar,';
	}
	if (scrollbars){
		windowFeatures = windowFeatures+'scrollbars,';
	}
	if (status){
		windowFeatures = windowFeatures+'status,';
	}
	if (toolbar){
		windowFeatures = windowFeatures+'toolbar,';
	}
	window.open(URL, windowName, windowFeatures);
}

var message

function clickIE() {
  if (document.all) {
    (message);
    return false;
  }
}

function clickNS(e) {
  if (document.layers||(document.getElementById&&!document.all)) {
    if (e.which==2||e.which==3) {
      (message);
      return false;
    }
  }
}

if (document.layers) {
  document.captureEvents(Event.MOUSEDOWN);
  document.onmousedown=clickNS;
} else {
  document.onmouseup=clickNS;
  document.oncontextmenu=clickIE;
}

document.oncontextmenu=new Function("return false")

//-->