<!--
var timerID = null;
var timerCount = 0;
var timerRunning = false;
var waitStr = null;
var theiframe = null;
var URL = null;
var gsxError = timeOut;

//var checkURL = 'http://checker.info.apple.com/gsx_ws30/check.html';
var checkURL = 'http://support.apple.com/eligibility/gsx_ws30/check.html';

// Decoding functions from http://ostermiller.org/calc/encode.html
var END_OF_INPUT = -1;
var base64Chars = new Array(
	'A','B','C','D','E','F','G','H',
	'I','J','K','L','M','N','O','P',
	'Q','R','S','T','U','V','W','X',
	'Y','Z','a','b','c','d','e','f',
	'g','h','i','j','k','l','m','n',
	'o','p','q','r','s','t','u','v',
	'w','x','y','z','0','1','2','3',
	'4','5','6','7','8','9','+','/'
);

var reverseBase64Chars = new Array();
for (var i=0; i < base64Chars.length; i++){
	reverseBase64Chars[base64Chars[i]] = i;
}

var base64Str;
var base64Count;
function setBase64Str(str){
	base64Str = str;
	base64Count = 0;
}

function ntos(n){
	n=n.toString(16);
	if (n.length == 1) n="0"+n;
	n="%"+n;
	return unescape(n);
}

function decodeBase64(str){
	setBase64Str(str);
	var result = "";
	var inBuffer = new Array(4);
	var done = false;
	while (!done && (inBuffer[0] = readReverseBase64()) != END_OF_INPUT
		&& (inBuffer[1] = readReverseBase64()) != END_OF_INPUT){
		inBuffer[2] = readReverseBase64();
		inBuffer[3] = readReverseBase64();
		result += ntos((((inBuffer[0] << 2) & 0xff)| inBuffer[1] >> 4));
		if (inBuffer[2] != END_OF_INPUT){
			result +=  ntos((((inBuffer[1] << 4) & 0xff)| inBuffer[2] >> 2));
			if (inBuffer[3] != END_OF_INPUT){
				result +=  ntos((((inBuffer[2] << 6)  & 0xff) | inBuffer[3]));
			} 
			else {
			done = true;
			}
		}
		else {
			done = true;
		}
	}
	return result;
}

function readReverseBase64(){   
	if (!base64Str) return END_OF_INPUT;
	while (true){      
		if (base64Count >= base64Str.length) return END_OF_INPUT;
		var nextCharacter = base64Str.charAt(base64Count);
		base64Count++;
		if (reverseBase64Chars[nextCharacter]){
			return reverseBase64Chars[nextCharacter];
		}
		if (nextCharacter == 'A') return 0;
	} 
}

function checkForReturn() {
	return !((window.event && window.event.keyCode == 3) || (window.event && window.event.keyCode == 13));
}

function getObj(name) {
	if (document.getElementById) {
		this.obj = document.getElementById(name);
        this.style = document.getElementById(name).style;
	}
	else if (document.all) {
		this.obj = document.all[name];
        this.style = document.all[name].style;
	}
	else if (document.layers) {
		this.obj = document.layers[name];
        this.style = document.layers[name];
	}
}

function tryAgain(){
	writeDiv('checkwarranty', null, writeForm('',''));
	waitStr = null;
	return false;
}

function checkForData() {
	// This function checks for the warranty info cookie, looping every second until it appears.

	// Just in case check first
	if (timerRunning) {
		clearTimeout(timerID);
		timerRunning = false;
	}
	if (getCookie('gsx_error')) {
		//var err = getCookie('gsx_error');
		writeDiv('checkwarranty', null, writeForm('',sn));
		writeDiv('checkserial', null, gsxError);
		timerCount = 0;
		return false;
	}
	// Don't wait forever, we'll time out at 30 seconds
	if (timerCount > 30) {
		writeDiv('checkwarranty', null, writeForm('',sn));
		writeDiv('checkserial', null, timeOut);
		timerCount = 0;
		return false;
	}
	if (!getCookie('warranty_status_encode')) {
		timerID = setTimeout("checkForData()",1000); // 1 second wait
		timerCount++;
		timerRunning = true;
	}
	else {
		processResults();
	}
}
function writeForm(status,sn) {
	//introMsg = '<span style="color:#800">This feature is temporarily unavailable due to system maintenance.<br></span>';
	//introMsg = 'Enter your computer&#145;s serial number to check your service coverage.';
	str ='\
	<div class="checkwarrantytop">\
		<div class="title">' + titleMsg + '</div>' + '\
	</div>\
	<div class="bodytext">' + introMsg + '\
	<div class="theform">\
		<form name="snCheck" id="snCheck" action="'+ checkURL + '" onkeypress="return checkForReturn()" onSubmit="return callToServer();" method="GET">\
		<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">\
			<tr>\
				<td align="left">\
					<input ' + status + ' type="text" name="SerialNumber" class="searchfield" value="' + sn + '" size="14">\
				</td>\
				<td align="right"><div align="right">\
					<input type="submit" class="searchbutton" value="' + checkButton + '"></div>\
				</td>\
			</tr>\
		</table>\
		</form>\
	</div>\
	<div id="checkserial"><a href="' + whereSnUrl + '">' + whereSnMsg + '</a></div>' +legaldisclaimer + '\
	</div>';
	return str;
}
//setCookie( 'test', 'it works', '', '/', '', '' );
// this function gets the cookie, if it exists
function getCookie2( name ) {
        var start = document.cookie.indexOf( name + "=" );
        var len = start + name.length + 1;
        if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ) {
                return null;
        }
        if ( start == -1 ) return null;
        var end = document.cookie.indexOf( ";", len );
        if ( end == -1 ) end = document.cookie.length;
		  val = unescape( document.cookie.substring( len, end ) );
		  //val = replaceChars(val,'+',' ');
        return val;
}
// this deletes the cookie when called
function deleteCookie( name, path, domain ) {
        if ( getCookie( name ) ) document.cookie = name + "=" +
                        ( ( path ) ? ";path=" + path : "") +
                        ( ( domain ) ? ";domain=" + domain : "" ) +
                        ";expires=Thu, 01-Jan-1970 00:00:01 GMT";
}

function processResults() {
	var e = getCookie('warranty_status_encode');
	var ue = decodeBase64(e);

	var dataArr = ue.split('~');
	found            = dataArr[0];

	if (found == 0) {
		writeDiv('checkwarranty', null, writeForm('',sn));
		writeDiv('checkserial', null, noInfo);
		return;
	}
    if (dataArr.length == 1) {
		writeDiv('checkwarranty', null, writeForm('',sn));
		writeDiv('checkserial', null, timeOut);
        return;
    }
	else {
		serialNumber     = dataArr[1];
		productName      = dataArr[2];
		productConfig    = dataArr[3];
		img              = dataArr[4];
			productImage  = img.substring(img.lastIndexOf('/')+1, img.length);
			if (productImage == 'na.gif') { productImage = 'image_not_available.gif'; }
		warrantyStatus   = dataArr[5];
		sellAppFlag      = parseInt(dataArr[6]); // 0/1
		legacy           = parseInt(dataArr[7]); // Older than 5 yrs 0/1
		coverageEnd      = dataArr[8];
		coverageStart    = dataArr[9];
		daysRemaining    = parseInt(dataArr[10]);
		datePurchased    = dataArr[11];
		globalWarranty   = dataArr[12];
		onsiteStartDate  = dataArr[13];
		onsiteEndDate    = dataArr[14];
		purchaseCountry  = dataArr[15];
		dateRegistered   = dataArr[16];
		warrantyCoverage = dataArr[17];
		
		// convert date format
		var dateValArray = datePurchased.split("/");
		datePurchased = (dateValArray[1] + "-" + monthNames[dateValArray[0]] + "-" + dateValArray[2]);


		// clear coverage type if days remaining = 0
		if  (!daysRemaining || daysRemaining == 0) {
			warrantyCoverage = null;
		}

		if (warrantyCoverage == 'CC') {
			coverage = ccMsg;
		}
		else if (warrantyCoverage == 'CS') {
			coverage = csMsg;
		}
		else if (warrantyCoverage == 'LI' || (!warrantyCoverage && warrantyStatus == 'Apple Limited Warranty')) {
			warrantyCoverage = 'LI';
			coverage = liMsg;
		}
		else if (warrantyCoverage == 'PA') {
			coverage = paMsg;
		}
		else if ((warrantyCoverage == 'PP') && (productName.indexOf('Xserve') != -1)) {
			coverage = ppxMsg;
		}
		else if (warrantyCoverage == 'PP') {
			coverage = ppMsg;
		}
		else if (warrantyCoverage == 'RA') {
			coverage = raMsg;
		}
		else if (warrantyCoverage == 'RE') {
			coverage = reMsg;
		}
		else {
			coverage = '';
		}

		if (!dateRegistered) {
			estimated = estMsg;
		}
		else {
			estimated = estMsg; // Currently the same
		}

		if (datePurchased && warrantyCoverage) {
			purchaseStr = purchaseStr_1_1 + coverage + purchaseStr_1_2 + estimated + purchaseStr_1_3 + datePurchased + purchaseStr_1_4;
		}
		else if (datePurchased == 'undefined-undefined-undefined') {
			purchaseStr = purchaseStr_4_1;
		}
		else if (datePurchased) {
			purchaseStr = purchaseStr_2_1 + estimated + purchaseStr_2_2 + datePurchased + purchaseStr_2_3;
		}
		else {
			purchaseStr = purchaseStr_3_1 + coverage + purchaseStr_3_2;
		}
		if (!dateRegistered) {
		registerStr = regMsg;
		}
		else {
			registerStr = '';
		}
		
		// Identifies which product support page to point to
		
		if (productName.substring(0,7) == 'iMac G5') {
			shortProdTitle = 'iMac G5';
			shortProdURL = 'imac';
		}
		else if (productName.substring(0,10) == 'iMac (Flat') {
			shortProdTitle = 'iMac G4';
			shortProdURL = 'imac/g4';
		}
		else if (productName.substring(0,8) == 'iMac (17') {
			shortProdTitle = 'iMac G4';
			shortProdURL = 'imac/g4';
		}
		else if (productName.substring(0,9) == 'iMac (USB') {
			shortProdTitle = 'iMac G4';
			shortProdURL = 'imac/g4';
		}
		else if (productName.substring(0,4) == 'iMac') {
			shortProdTitle = 'iMac';
			shortProdURL = 'imac/g3';
		}
		else if (productName.substring(0,4) == 'eMac') {
			shortProdTitle = 'eMac';
			shortProdURL = 'emac';
		}
		else if (productName.substring(0,8) == 'Mac Mini') {
			shortProdTitle = 'Mac Mini';
			shortProdURL = 'macmini';
		}
		else if (productName.substring(0,12) == 'iPod shuffle') {
			shortProdTitle = 'iPod shuffle';
			shortProdURL = 'ipodshuffle';
		}
		else if (productName.substring(0,4) == 'iPod') {
			shortProdTitle = 'iPod';
			shortProdURL = 'ipod';
		}
		else if (productName.substring(0,6) == 'iSight') {
			shortProdTitle = 'iSight';
			shortProdURL = 'isight';
		}
		else if (productName.substring(0,5) == 'iBook') {
			shortProdTitle = 'iBook';
			shortProdURL = 'ibook';
		}
		else if (productName.substring(0,12) == 'PowerBook G4') {
			shortProdTitle = 'PowerBook G4';
			shortProdURL = 'powerbook';
		}
		else if (productName.substring(5,16) == 'PowerBook G3') {
			shortProdTitle = 'PowerBook G3';
			shortProdURL = 'powerbookg3';
		}
		else if (productName.substring(0,7) == 'AirPort') {
			shortProdTitle = 'Airport';
			shortProdURL = 'airport';
		}
		else if (productName.substring(0,12) == 'Power Mac G5') {
			shortProdTitle = 'Power Mac G5';
			shortProdURL = 'powermac';
		}
		else if (productName.substring(0,12) == 'Power Mac G4') {
			shortProdTitle = 'Power Mac G4';
			shortProdURL = 'powermac/g4';
		}
		else if (productName.substring(0,12) == 'Power Mac G3') {
			shortProdTitle = 'Power Mac G3';
			shortProdURL = 'powermac/g3';
		}
		else if (productName.substring(0,12) == 'Apple Cinema') {
			shortProdTitle = 'Apple Cinema Display';
			shortProdURL = 'display';
		}
		else if (productName.substring(0,12) == 'Apple Studio') {
			shortProdTitle = 'Apple Studio Display';
			shortProdURL = 'display';
		}
		else if (productName.substring(0,11) == 'Xserve RAID') {
			shortProdTitle = 'Xserve RAID';
			shortProdURL = 'xserve/raid';
		}
		else if (productName.substring(0,6) == 'Xserve') {
			shortProdTitle = 'Xserve';
			shortProdURL = 'xserve';
		}

		else {
			shortProdTitle = '';
			shortProdURL = '';
		}
		
        var supportRef = '';
		if (!shortProdTitle == '') {
            try {
                if (supportRef_1_2) {
                  supportRef = supportRef_1_1 + shortProdURL.toLowerCase() + '/">' + shortProdTitle + supportRef_1_2 + shortProdTitle + '</div>';
               }
            }
            catch(err) {}
		}
		else {
			supportRef = '';
		}
	}

	// Need Xserve special case code here
	// QP3380G0NP2 is under APSS
	// XB2280ADLZD is under APSS with the limited warranty expired

	str = '<div class="checkwarrantytop">';
    try {
       if (!titleMsg2) { titleMsg2 = titleMsg; }
    }
    catch(err) { titleMsg2 = titleMsg; }
	str+= '<div class="title">' + titleMsg2 +'</div>';
	// str+= helpMsg;
	str+= '</div>';
	str+= '<div class="bodytext">';
	str+= '<div class="description"><img src="http://images.apple.com/support/main/products/' + productImage + '" align="left" alt="">';
	str+= '<br>' + productName + '<br>';
	str+= ' ' + serialNumber + '</div>';
	if (!daysRemaining && warrantyStatus == 'Repeat Service') {
		str+= '<div>' + purchaseStr + returnMsg1 + registerStr + '</div>';
	}
	else if (datePurchased == 'undefined-undefined-undefined') {
	str+= '<div class="bodytext">' + purchaseStr + registerStr + '</div>';
	}
	else if (!daysRemaining) {
	str+= '<div class="bodytext">' + purchaseStr + returnMsg2 + registerStr + '</div>';
	}
	else {
	str+= '<div class="bodytext">' + purchaseStr + returnMsg3a + daysRemaining + returnMsg3b + registerStr + '</div>';
		if (sellAppFlag == 0) {
			if (productName.substring(0,6) == 'Xserve') {
				str+= returnMsg3d;
			}
			else {
				str+= returnMsg3c;
			}
		//str+= learnMsg;
		}
	}
	if (legacy) {
		str+= legacyMsg;
	}

	str += supportRef;
	str += anotherSnMsg + legaldisclaimer;

	str+= '</div>';
	
	//str_test = '<div class="checkwarrantytop">' + ' : ' + serialNumber + ' : ' + productName + ' : ' + productConfig + ' : ' + warrantyStatus + ' : ' + sellAppFlag + ' : ' + legacy + ' : ' + coverageEnd + ' : ' + coverageStart + ' : ' + daysRemaining + ' : ' + datePurchased + ' : ' + globalWarranty + ' : ' + onsiteStartDate + ' : ' + onsiteEndDate + ' : ' + purchaseCountry + ' : ' + dateRegistered + ' : ' + warrantyCoverage +'</div>';

	writeDiv('checkwarranty', null, str);
	deleteCookie('warranty_status_encode','/','.apple.com');
}

function writeDiv(ID,parentID,sText) {
	// http://www.sitepoint.com/examples/jscripttips/example_rewrite.htm
	if (document.layers) {
		var oLayer = (parentID)? eval('document.' + parentID + '.document.' + ID + '.document') : document.layers[ID].document;
		oLayer.open();
		oLayer.write(sText);
		oLayer.close();
	}
	else if (document.all) document.all[ID].innerHTML = sText
	else if (parseInt(navigator.appVersion)>=5&&navigator.appName=="Netscape") {
		document.getElementById(ID).innerHTML = sText;
	}
}

function callToServer() {
	sn = document.snCheck.SerialNumber.value;

	// remove spaces here
	sn = replaceChars(sn,' ','');
	document.snCheck.SerialNumber.value = sn;

	if (!validateSerialNumber(sn)) {
		return false;
	}
	sn = replaceAndAlert(sn);

	d = new Date();
	t = d.getTime().toString();

  URL = checkURL + '?SerialNumber=' + sn + '&time=' + t;

  try {
	  deleteCookie('warranty_status_encode','/','.apple.com');
  }
  catch(err) {}

  if (!theiframe) {
	  theiframe = new getObj('warrantyCheck').obj; 
  }
  theiframe.src = URL;
  writeDiv('checkwarranty', null, writeForm('disabled',sn));
  writeDiv('checkserial', null, waitMsg);
  checkForData(); // we've called for the warranty info, move to checking for arrival
  return false;
}

function resetIframe() {
	theiframe = new getObj('warrantyCheck').obj; 
	theiframe.src = './blank.html';
}

function isSerialNumberValid(serialNumber) {
	if (serialNumber.length == 0 ) {
         return true;
    }

    if( serialNumber.length != 11 && serialNumber.length != 12){
        return false;
    }


    yrWkStr = serialNumber.substr(2, 3)
    if(isNaN(yrWkStr) == true){
        return false;
    }

    else {
        wkStr = yrWkStr.substr(1, 2)
        wk = parseInt(wkStr, 10)
        if(wk < 1 || wk > 53){
            return false;
        }
        else {
            return true;
        }
    }

}

function validateSerialNumber(sn) {
	if (!sn) {
		alert(noSerialAlert);
		return false;
	}
	if (sn.indexOf(' ') != -1) {
		alert(spacesSerialAlert);
		return false;
	}
	if(isSerialNumberValid(sn) != true ) {
		alert(validSerialAlert);
		tryAgain()
		return false;
	}
	// Looks like a valid serial number
	return true;
}

function removeSpace(serialNumber) {
	if(serialNumber.length == 0) {
		return serialNumber;
	}
	var s = serialNumber;
	var newSerialNo = '';

	for(var i = 0 ; i < s.length ; ++i) {
		var c = s.charAt(i);
		if(c != ' ')
			newSerialNo = newSerialNo + c;
	}

	serialNumber = newSerialNo;
	return serialNumber;
}
function productJump(targ,selObj){
	var loc=selObj.options[selObj.selectedIndex].value;
	if (loc){
		eval(targ+".location='"+loc+"'");
 	}
 	else{
		selObj.selectedIndex=0;
	}
}
function replaceChars(str,out,add) {
	// out = replace this
	// add = with this
	temp = "" + str; // temporary holder

	while (temp.indexOf(out)>-1) {
		pos= temp.indexOf(out);
		temp = "" + (temp.substring(0, pos) + add + 
		temp.substring((pos + out.length), temp.length));
	}
	return temp;
}

function replaceAndAlert(str) {
// Replace O and o with zero's
	var chk = 0;
	for (i in c = new Array('O','o')) {
		var letter = c[i];
		if (str.indexOf(letter) > 0) {
			str = replaceChars(str,letter,'0');
			chk = 1;
		}
	}
	if (chk) {
		document.snCheck.SerialNumber.value = str;
		alert (replaceOsAlert);
	}
	return str;
}

//-->
