/**
* This code is property of Apple Inc.
* This code is intended for informational use only.
* Apple has granted no license for distribution or use.
**/
var controller = {};
controller.showInterface = function() {
if (1 == dataController.showVersionNumber) {
controller.setUpCacheLogging()
}
window.applicationCache.addEventListener("updateready", controller.cacheUpdateReady, false);
var a = parseInt(document.body.style.height);
if (!a) {
a = window.innerHeight
}
if (dataController.singleViewMode) {
this.leftNavigationController = null;
this.rightNavigationController = new ADNavigationController(null, this.viewControllerForAPDID("TOP_LEVEL_ITEM"))
} else {
var c = 300;
this.leftNavigationController = new ADNavigationController(null, this.viewControllerForAPDID("TOP_LEVEL_ITEM"));
this.leftNavigationController.view.size = new ADSize(c, a);
this.leftNavigationController.delegate = this;
this.leftNavigationController.view.delegate = this;
this.leftNavigationController.view.zIndex = 2;
this.leftNavigationController.view.autoresizingMask = ADViewAutoresizingFlexibleHeight;
ADRootView.sharedRoot.addSubview(this.leftNavigationController.view);
this.leftNavigationController.view.layer.id = "chaptersTable";
this.rightNavigationController = new ADNavigationController(null, this.viewControllerForAPDID(null));
this.rightNavigationController.view.size = new ADSize(window.innerWidth - c, a)
}
this.rightNavigationController.delegate = this;
this.rightNavigationController.view.position = new ADPoint(c, 0);
this.rightNavigationController.view.delegate = this;
this.rightNavigationController.view.zIndex = 1;
this.rightNavigationController.autoresizingMask = ADViewAutoresizingFlexibleWidth | ADViewAutoresizingFlexibleHeight;
ADRootView.sharedRoot.addSubview(this.rightNavigationController.view);
if (!dataController.singleViewMode) {
var h = 0;
if (window.location.hash) {
var f = window.location.hash.replace("#", "");
var e = dataController.getChildrenAPDIDsForItemWithAPDID("TOP_LEVEL_ITEM");
h = e.indexOf(f)
}
if ( - 1 == h) {
h = 0
}
var d = dataController.getChildrenAPDIDsForItemWithAPDID("TOP_LEVEL_ITEM")[h];
setTimeout(function() {
controller.navigateToElement(d, true)
},
1)
}
this.updateOrientation();
if (dataController.webclipIcon) {
var b = document.createElement("link");
b.setAttribute("rel", "apple-touch-icon");
b.setAttribute("href", dataController.dataFolder + dataController.webclipIcon);
var g = document.getElementsByTagName("head")[0];
g.appendChild(b)
}
setTimeout(function() {
controller.addVoiceOverButton()
},
1)
};
controller.numberOfSectionsInTableView = function(a) {
if (a._apdid == "TOP_LEVEL_ITEM") {
return 1
} else {
if (a.style == ADTableViewStylePlain) {
return 1
} else {
var d = dataController.getChildrenAPDIDsForItemWithAPDID(a._apdid);
var c = false;
for (var b = 0; child = d[b++];) {
if (dataController.getChildrenAPDIDsForItemWithAPDID(child).length) {
c = true;
break
}
}
var e = 0;
if (!c) {
e = 1
} else {
e = d.length
}
var f = dataController.getBodyForItemWithAPDID(a._apdid);
if (f) {
e++
}
return e
}
}
};
controller.tableViewNumberOfRowsInSection = function(e, h) {
var b = dataController.getChildrenAPDIDsForItemWithAPDID(e._apdid);
if (e._apdid == "TOP_LEVEL_ITEM") {
var a = b.length;
a += 1;
if (localizationController.supportedLanguagesCount > 1) {
a += 1
}
if (1 == dataController.showVersionNumber) {
a += 4
}
return a
} else {
if (e.style == ADTableViewStylePlain) {
return b.length
} else {
var j = dataController.getBodyForItemWithAPDID(e._apdid);
if (j && h == 0) {
return 0
}
var b = dataController.getChildrenAPDIDsForItemWithAPDID(e._apdid);
var f = false;
for (var d = 0; child = b[d++];) {
if (dataController.getChildrenAPDIDsForItemWithAPDID(child).length) {
f = true;
break
}
}
if (!f) {
return b.length
} else {
var g = controller.tableViewTitleForHeaderInSection(e, h);
if (g == "") {
return 1
}
for (var d in b) {
var c = b[d];
if (g == dataController.getTitleForItemWithAPDID(c)) {
return dataController.getChildrenAPDIDsForItemWithAPDID(c).length
}
}
}
return 0
}
}
};
controller.tableViewCellForRowAtPath = function(e, g) {
var n = new ADTableViewCell();
n.selectionStyle = ADTableViewCellSelectionStyleNone;
n.text = "";
n.accessoryType = ADTableViewCellAccessoryDisclosureIndicator;
n.selectionStyle = ADTableViewCellSelectionStyleBlue;
rowIndex = g.row;
if (e._apdid == "TOP_LEVEL_ITEM") {
n.accessoryType = null;
var j = dataController.getChildrenAPDIDsForItemWithAPDID("TOP_LEVEL_ITEM");
var b = j[rowIndex];
var m = dataController.getTitleForItemWithAPDID(b);
var l = dataController.getIconForItemWithAPDID(b);
if (l) {
n.image = n.layer.appendChild(document.createElement("img"));
n.image.setAttribute("src", l);
n.image.setAttribute("class", "icon");
n.layer.addClassName("topLevelCellWithImage")
}
if (localizationController.supportedLanguagesCount > 1 && rowIndex == j.length) {
b = "LOCALIZATION_CONTENT";
m = "";
n.layer.children[1].innerHTML = '
' + localizationController.localizedUIString("Change Language");
n.layer.children[1].setAttribute("id", "localizationText")
}
if (((localizationController.supportedLanguagesCount > 1 && rowIndex == j.length + 1) || (localizationController.supportedLanguagesCount <= 1 && rowIndex == j.length))) {
b = "COPYRIGHT_PAGE_CONTENT";
m = "";
var h = dataController.getBodyForItemWithAPDID("COPYRIGHT_TAGLINE");
h = h.replace(/<\/p>/g, "
");
h = h.replace(/
/g, "");
n.layer.children[1].innerHTML = h;
n.layer.children[1].setAttribute("id", "trademarkText")
}
if (1 == dataController.showVersionNumber) {
var k = controller.tableViewNumberOfRowsInSection(e, g.section);
if (rowIndex == k - 4) {
b = "";
m = ""
}
if (rowIndex == k - 3) {
if (typeof(window.buildVersion) == "undefined") {
buildVersion = "(unavailable)"
}
b = "";
m = "ipad guide version '" + buildVersion + "'";
n.layer.children[1].style.fontSize = "12px";
n.layer.children[1].style.fontWeight = "normal";
n.layer.children[1].style.paddingTop = "3px";
n.layer.style.textAlign = "center"
}
if (rowIndex == k - 2) {
b = "";
m = "content version '" + dataController.databaseVersion + "'";
n.layer.children[1].style.fontSize = "12px";
n.layer.children[1].style.fontWeight = "normal";
n.layer.children[1].style.paddingTop = "3px";
n.layer.style.textAlign = "center"
}
if (rowIndex == k - 1) {
b = "";
m = "";
n.layer.children[1].innerHTML = 'view build info file...';
n.layer.children[1].children[0].style.color = "black";
n.layer.children[1].style.fontSize = "12px";
n.layer.children[1].style.fontWeight = "normal";
n.layer.children[1].style.paddingTop = "3px";
n.layer.style.textAlign = "center"
}
}
} else {
if (e.style == ADTableViewStylePlain) {
var a = dataController.getChildrenAPDIDsForItemWithAPDID(e._apdid);
var b = a[rowIndex];
var m = dataController.getTitleForItemWithAPDID(b);
var l = dataController.getIconForItemWithAPDID(b)
} else {
var a = dataController.getChildrenAPDIDsForItemWithAPDID(e._apdid);
var f = false;
for (var d = 0; child = a[d++];) {
if (dataController.getChildrenAPDIDsForItemWithAPDID(child).length) {
f = true;
break
}
}
if (!f) {
var b = a[rowIndex];
var m = dataController.getTitleForItemWithAPDID(b)
} else {
sectionIndex = g.section;
sectionIndexWithIntro = sectionIndex;
var o = dataController.getBodyForItemWithAPDID(e._apdid);
if (o) {
sectionIndexWithIntro--
}
var b = a[sectionIndexWithIntro];
var p = controller.tableViewTitleForHeaderInSection(e, sectionIndex);
if ("" == p) {
var m = dataController.getTitleForItemWithAPDID(b)
} else {
var c = dataController.getChildrenAPDIDsForItemWithAPDID(b);
var m = dataController.getTitleForItemWithAPDID(c[rowIndex])
}
}
}
}
n.id = b;
if (m != "") {
n.text = m
}
return n
};
controller.tableViewTitleForHeaderInSection = function(a, g) {
if (a._apdid == "TOP_LEVEL_ITEM") {
return null
} else {
if (a.style == ADTableViewStylePlain) {
return null
} else {
var d = new Array();
var f = g;
var c = dataController.getChildrenAPDIDsForItemWithAPDID(a._apdid);
var e = dataController.getBodyForItemWithAPDID(a._apdid);
if (e && g == 0) {
return null
}
if (e) {
f--
}
for (var b in c) {
var h = c[b];
if (1 == dataController.getFlattenStateForItemWithAPDID(h)) {
d.push(dataController.getTitleForItemWithAPDID(h))
} else {
d.push("")
}
}
return d[f]
}
}
};
controller.tableViewTitleForFooterInSection = function(a, c) {
if (a._apdid == "TOP_LEVEL_ITEM") {
return null
} else {
if (a.style == ADTableViewStylePlain) {
return null
} else {
var b = dataController.getBodyForItemWithAPDID(a._apdid);
if (b && c == 0) {
b = b.replace(/(<([^>]+)>)/ig, "");
return b
}
return null
}
}
};
controller.tableViewDidSelectAccessoryForRowAtPath = function(a, b) {
controller.tableViewDidSelectRowAtPath(a, b)
};
controller.tableViewDidSelectRowAtPath = function(g, o) {
if (g._apdid == "TOP_LEVEL_ITEM") {
rowIndex = o.row;
var k = dataController.getChildrenAPDIDsForItemWithAPDID("TOP_LEVEL_ITEM");
var c = k[rowIndex];
if (!c) {
var m = this.tableViewCellForRowAtPath(g, o);
c = m.id
}
if (!c || c == "undefined") {
return
}
var a = this.rightNavigationController.topViewController._apdid;
var d = dataController.getChapterAPDIDForItemWithAPDID(a);
if (d == c) {
return
}
this.navigateToElement(c, true);
if (dataController.singleViewMode) {
setTimeout(function() {
g.deselectRowAtPathAnimated(o, true)
},
ADTransitionDefaults.duration * 1000)
}
} else {
if (g.style == ADTableViewStylePlain) {
rowIndex = o.row;
var b = dataController.getChildrenAPDIDsForItemWithAPDID(g._apdid);
var c = b[rowIndex];
if (!c) {
var j = g.delegate.tableViewCellForRowAtPath(g, o).id;
if (j != "") {
c = j
}
}
} else {
var b = dataController.getChildrenAPDIDsForItemWithAPDID(g._apdid);
var h = false;
for (var f = 0; child = b[f++];) {
if (dataController.getChildrenAPDIDsForItemWithAPDID(child).length) {
h = true;
break
}
}
rowIndex = o.row;
if (!h) {
var c = b[rowIndex]
} else {
sectionIndex = o.section;
sectionIndexWithIntro = sectionIndex;
var l = dataController.getBodyForItemWithAPDID(g._apdid);
if (l) {
sectionIndexWithIntro--
}
var n = controller.tableViewTitleForHeaderInSection(g, sectionIndex);
var c = b[sectionIndexWithIntro];
if ("" != n) {
var e = dataController.getChildrenAPDIDsForItemWithAPDID(c);
c = e[rowIndex]
}
}
}
if (c) {
this.navigateToElement(c, false)
}
setTimeout(function() {
g.deselectRowAtPathAnimated(o, true)
},
ADTransitionDefaults.duration * 1000)
}
};
controller.navigationControllerDidShowViewControllerAnimated = function(a, f, e) {
var g = f._apdid;
var d = dataController.getChapterAPDIDForItemWithAPDID(g);
var c = dataController.getChildrenAPDIDsForItemWithAPDID("TOP_LEVEL_ITEM");
var b = c.indexOf(d);
if (b < 0) {
return
}
this.leftNavigationController.topViewController.view._listView.selectRowAtPath(new ADCellPath(0, b))
};
openCrossReference = function(a) {
controller.navigateToElement(a, false)
};
controller.navigateToElement = function(e, c) {
var b = this.viewControllerForAPDID(e);
var a = null;
if (e == "TOP_LEVEL_ITEM") {
a = controller.leftNavigationController
} else {
a = controller.rightNavigationController
}
var d = dataController.getParentAPDIDForItemWithAPDID(e);
if (!dataController.singleViewMode && c == true) {
a.setViewControllersAnimated([b], false)
} else {
a.pushViewControllerAnimated(b, true)
}
};
controller.addVoiceOverButton = function() {
var b = new XMLHttpRequest();
var e = window.location.toString();
var f = e.lastIndexOf("/");
if (f != -1) {
e = e.substring(0, f + 1)
}
e += "../voiceover/" + localizationController.language + "/index.html";
b.open("GET", e, false);
try {
b.send(null)
} catch(d) {
b = null
}
if (!b || !(b.status == 0 || b.status == 200)) {
console.log("No VoiceOver guide index available.");
return
}
if ("" == b.responseText) {
console.log("No VoiceOver content available.");
return
}
var a = document.createElement("div");
a.style.width = "0px";
a.style.height = "0px";
a.style.overflow = "hidden";
a.id = "voiceOverButton";
document.body.appendChild(a);
document.body.insertBefore(a, document.body.firstChild);
var c = document.createElement("a");
c.setAttribute("onClick", "window.location = '" + e + "'");
c.style.position = "absolute";
c.style.zIndex = "1000";
c.style.background = "transparent";
c.style.display = "block";
c.style.width = "5px";
c.style.height = "5px";
c.style.fontSize = "2px";
c.style.overflow = "hidden";
c.style.color = "transparent";
c.appendChild(document.createTextNode("Voice Over users click here."));
a.appendChild(c)
};
controller.showSearchResultsView = function(a) {
this.rightNavigationController.pushViewControllerAnimated(a, true)
};
controller.viewControllerForAPDID = function(f) {
var e = new ADViewController();
e.view = new ADView();
e._apdid = f;
var c = dataController.getChildrenAPDIDsForItemWithAPDID(f);
if (!f) {
e.view.layer.className = "initializingViewController"
} else {
if (f == "LOCALIZATION_CONTENT") {
var b = localizationController.getLanguagesView();
e.view.addSubview(b);
e.title = ""
} else {
if (c.length != 0) {
var a = controller.createListWithAPDID(f);
e.view.addSubview(a);
e.view._listView = a;
e.title = dataController.getTitleForItemWithAPDID(f)
} else {
var d = controller.createContentViewWithAPDID(f);
e.view.addSubview(d);
e.view._contentView = d;
e.title = dataController.getTitleForItemWithAPDID(f)
}
}
}
if (!dataController.singleViewMode && f == "TOP_LEVEL_ITEM") {
controller.chapterListView = a;
e.becomesBackItemTransition = null;
e.wasBackItemTransition = null
} else {
e.navigationItem.rightBarButtonItem = searchController.getSearchItem()
}
if (f == "TOP_LEVEL_ITEM" && "" != dataController.mainTOCBackButtonURL && "" != dataController.mainTOCBackButtonTitle) {
if (!controller.mainTOCBackButton) {
controller.mainTOCBackButton = new ADBarButtonItem(ADBarButtonItemTypeBack);
controller.mainTOCBackButton.title = dataController.mainTOCBackButtonTitle;
controller.mainTOCBackButton.addEventListener("controlTouchUpInside",
function() {
window.location = dataController.mainTOCBackButtonURL
},
false)
}
if (controller.mainTOCBackButton) {
e.navigationItem.leftBarButtonItem = controller.mainTOCBackButton
}
}
return e
};
controller.createListWithAPDID = function(b) {
var a = new ADTableView();
a.autoresizingMask = ADViewAutoresizingFlexibleWidth | ADViewAutoresizingFlexibleHeight;
a.separatorStyle = ADTableViewCellSeparatorStyleSingleLineEtched;
a._apdid = b;
a.scrollIndicatorsColor = "#333";
if (dataController.shouldFlatten && b != "TOP_LEVEL_ITEM") {
a.style = ADTableViewStyleGrouped
} else {
a.style = ADTableViewStylePlain
}
a.dataSource = this;
a.delegate = this;
a.reloadData();
return a
};
controller.createContentViewWithAPDID = function(f) {
var j = new ADScrollView();
j.autoresizingMask = ADViewAutoresizingFlexibleWidth | ADViewAutoresizingFlexibleHeight;
j.horizontalScrollEnabled = false;
j.scrollIndicatorsColor = "#333";
j._isContent = true;
j.layer.id = "contentScrollView";
var a = document.createElement("div");
a.className = "content";
j.addSubview(new ADContentView(a));
a.innerHTML = '' + dataController.getTitleForItemWithAPDID(f) + "
";
a.innerHTML += dataController.getBodyForItemWithAPDID(f);
var g = a.getElementsByTagName("img");
for (var d = 0; d < g.length; d++) {
var b = g[d];
var l = b.src;
l = l.substring(l.indexOf("Art/"), l.length);
var e = dataController.getBase64ForImageAtPath(l);
if (e != undefined) {
b.setAttribute("src", "data:image/png;base64," + e)
}
b.setAttribute("onLoad", "javascript:controller.refreshContentViewSize();");
b.setAttribute("onError", "javascript:controller.errorLoadingGraphic(this);")
}
var k = a.getElementsByTagName("a");
for (var d = 0; d < k.length; d++) {
var h = k[d];
var c = h.href;
if ("#" == c) {
continue
}
h.target = "_new"
}
setTimeout(function() {
controller.refreshContentViewSize()
},
1);
return j
};
controller.errorLoadingGraphic = function(b) {
var a = document.createElement("span");
a.appendChild(document.createTextNode(" [ Missing image: " + b.alt));
a.appendChild(document.createComment(b.src));
a.appendChild(document.createTextNode(" ] "));
b.parentNode.replaceChild(a, b)
};
controller.updateOrientation = function() {
document.body.removeClassName("portrait");
document.body.removeClassName("landscape");
switch (window.orientation) {
case 0:
case 180:
document.body.addClassName("portrait");
break;
case 90:
case - 90: document.body.addClassName("landscape");
break
}
searchController.resizeSearchField();
setTimeout(function() {
controller.refreshContentViewSize()
},
100)
};
window.onorientationchange = controller.updateOrientation;
controller.refreshContentViewSize = function() {
var d = this.rightNavigationController.topViewController._view._contentView;
if (d) {
var b = d.subviews[0];
var f = d.contentOffset.y;
var a = d.contentSize.height;
var c = (f) / a;
b.refreshSize();
b._size = new ADSize(b._size.width, b._size.height + 50);
var e = (c * d.contentSize.height);
d.setContentOffsetWithAnimation(new ADPoint(0, e), false)
}
};
controller.cacheUpdateReady = function() {
window.applicationCache.swapCache()
};
controller.setUpCacheLogging = function() {
console.log("CACHING: setting up logging...");
b = window.applicationCache;
function a(h) {
var c = [];
c[0] = "uncached";
c[1] = "idle";
c[2] = "checking";
c[3] = "downloading";
c[4] = "updateready";
c[5] = "obsolete";
var e = (navigator.onLine) ? "yes": "no";
var d = c[b.status];
var f = h.type;
var g = "CACHING: online: " + e + " ----- ";
g += "event: " + f + " ----- ";
g += "status: " + d + " ----- ";
if (f == "error" && navigator.onLine) {
g += "(probably a syntax error in manifest)"
}
console.log(g)
}
var b = window.applicationCache;
b.addEventListener("cached", a, false);
b.addEventListener("checking", a, false);
b.addEventListener("downloading", a, false);
b.addEventListener("error", a, false);
b.addEventListener("noupdate", a, false);
b.addEventListener("obsolete", a, false);
b.addEventListener("updateready", a, false)
};
var dataController = {
database: null,
table: new Array(),
titleTable: new Object(),
childrenTable: new Object(),
parentTable: new Object(),
graphics: new Array(),
graphicCacheFromJSON: null,
databaseVersion: 0,
configurationSettings: new Object(),
shouldFlatten: 0,
shouldHideSearchButton: 0,
mainTOCBackButtonURL: "",
mainTOCBackButtonTitle: "",
title: "",
alternativeTitle: "",
showVersionNumber: 0,
webclipIcon: 0,
singleViewMode: 0,
};
dataController.init = function() {
localizationController.localize();
var a = localizationController.language;
var b = window.location.href;
this.dataFolder = b;
this.dataFolder = this.dataFolder.substring(0, this.dataFolder.lastIndexOf("/"));
this.dataFolder = this.dataFolder.substring(0, this.dataFolder.lastIndexOf("/"));
this.dataFolder += "/Contents/" + a + "/";
this.dataFolder = this.dataFolder.replace(" ", "%20");
dataController.initDatabase()
};
dataController.fixNestedSingularChildren = function() {
for (var b in dataController.childrenTable) {
var f = dataController.childrenTable[b];
if (1 != f.length) {
continue
}
if ("TOP_LEVEL_ITEM" == b) {
continue
}
var c = f[0];
delete dataController.childrenTable[b];
for (var d in dataController.childrenTable) {
var e = dataController.childrenTable[d];
for (var a = 0; a < e.length; a++) {
if (e[a] == b) {
e[a] = c
}
}
}
}
};
dataController.getChildrenAPDIDsForItemWithAPDID = function(b) {
if (b == undefined) {
b = ""
}
var a = this.childrenTable[b];
if (!a) {
a = new Array()
}
return a
};
dataController.getTitleForItemWithAPDID = function(c) {
if (c == "TOP_LEVEL_ITEM") {
var a = dataController.title;
if (dataController.alternativeTitle) {
a = dataController.alternativeTitle
}
if (!a || a.length == 0) {
a = " "
}
return a
}
if (c == "COPYRIGHT_PAGE_CONTENT") {
return "Copyright"
}
if (c == "") {
return "ERROR! item missing apdid"
}
var b = this.titleTable[c];
if (b) {
b = this.removeEntities(b)
}
return b
};
dataController.getIconForItemWithAPDID = function(d) {
if (d == "") {
return "ERROR! item missing apdid"
}
for (var b in this.table) {
var c = this.table[b];
if (c.apdid == d) {
var a = c.icon;
a = a.replace("Art/", "../Contents/" + localizationController.language + "/Art/");
return a
}
}
};
dataController.getFlattenStateForItemWithAPDID = function(c) {
if (c == "" || c == undefined) {
return ""
}
for (var a in this.table) {
var b = this.table[a];
if (b.apdid == c) {
return b.flatten
}
}
};
dataController.getBodyForItemWithAPDID = function(d) {
for (var a in this.table) {
var c = this.table[a];
if (c.apdid == d) {
var b = c.content;
b = b.replace(/Art\//g, "../Contents/" + localizationController.language + "/Art/");
return b
}
}
return ""
};
dataController.getBase64ForImageAtPath = function(b) {
for (var a in this.graphics) {
var c = this.graphics[a];
if (c.artPath == b) {
return c.base64
}
}
};
dataController.getParentAPDIDForItemWithAPDID = function(a) {
if (a == "" || a == undefined) {
return ""
}
return this.parentTable[a]
};
dataController.getChapterAPDIDForItemWithAPDID = function(b) {
var a = b;
while (a && this.getParentAPDIDForItemWithAPDID(a) != "TOP_LEVEL_ITEM") {
a = this.getParentAPDIDForItemWithAPDID(a)
}
return a
};
dataController.getBreadcrumbsForItemWithAPDID = function(c) {
var b = "";
var a = this.getParentAPDIDForItemWithAPDID(c);
while (a != "TOP_LEVEL_ITEM") {
b = this.getTitleForItemWithAPDID(a) + " > " + b;
a = this.getParentAPDIDForItemWithAPDID(a)
}
b = b.substring(0, b.length - 2);
return b
};
dataController.removeEntities = function(a) {
a = a.replace(/&/g, "&");
a = a.replace(/</g, "<");
a = a.replace(/>/g, ">");
return a
};
function dataControllerInit() {
dataController.init()
}
window.addEventListener("load", dataControllerInit, false);
dataController.initDatabase = function() {
try {
if (!window.openDatabase) {
alert("not supported")
} else {
var g = window.location.toString();
var d = g.lastIndexOf("/");
if (d != -1) {
g = g.substring(0, d + 1)
}
var a = "User Guide - " + g;
var c = "1.0";
var b = "User Guide";
var h = 65536;
this.database = openDatabase(a, c, b, h)
}
} catch(f) {
alert("Unknown error " + f + ".");
return
}
this.checkDatabaseVersion()
};
dataController.checkDatabaseVersion = function() {
this.database.transaction(function(e) {
var a = new XMLHttpRequest();
var c = dataController.dataFolder + "contentjson-version.txt";
a.open("GET", c, false);
try {
a.send(null)
} catch(b) {
a = null
}
if (!a || !(a.status == 0 || a.status == 200)) {
console.log("Error retrieving JSON Version file.");
var d = ""
} else {
var d = a.responseText
}
e.executeSql("SELECT * FROM " + localizationController.language + 'Config WHERE key="version"', [],
function(h, f) {
var g = f.rows.item(0).value;
dataController.databaseVersion = g;
if (g == d || d == "") {
dataController.createDataStructure();
dataController.createGraphicsDataStructure();
return
}
h.executeSql("DROP TABLE IF EXISTS " + localizationController.language + "Content;", [], null, dataController.errorHandler);
h.executeSql("DROP TABLE IF EXISTS " + localizationController.language + "Config;", [], null, dataController.errorHandler);
h.executeSql("DROP TABLE IF EXISTS " + localizationController.language + "Graphics;", [], null, dataController.errorHandler);
dataController.updateDatabaseVersion(d)
},
function(g, f) {
dataController.updateDatabaseVersion(d)
})
})
};
dataController.updateDatabaseVersion = function(a) {
this.database.transaction(function(b) {
dataController.databaseVersion = a;
b.executeSql("CREATE TABLE " + localizationController.language + "Config (key TEXT NOT NULL, value TEXT NOT NULL);", [], null, dataController.errorHandler);
b.executeSql("insert into " + localizationController.language + "Config (key, value) VALUES (?, ?);", ["version", a], null, dataController.errorHandler);
dataController.createTable();
dataController.createGraphicsTable()
})
};
dataController.createTable = function() {
this.database.transaction(function(transaction) {
console.log("Loaded new JSON data into the Database.");
var jsonRequest = new XMLHttpRequest();
var jsonURL = dataController.dataFolder + "content.json";
jsonRequest.open("GET", jsonURL, false);
try {
jsonRequest.send(null)
} catch(err) {
jsonRequest = null
}
if (!jsonRequest || !(jsonRequest.status == 0 || jsonRequest.status == 200)) {
console.log("Error retrieving JSON file.");
return
}
try {
var jsonObject = jsonRequest.responseText;
eval(jsonObject);
dataController.graphicCacheFromJSON = graphicCache
} catch(err) {
if (localizationController.language != "en") {
document.location = "?lang=en"
} else {
alert("English content.json could not be parsed.")
}
return
}
transaction.executeSql("CREATE TABLE " + localizationController.language + "Content (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, apdid TEXT NOT NULL, parentapdid TEXT NOT NULL, flatten TEXT NOT NULL, title TEXT NOT NULL, icon TEXT NOT NULL, keywords TEXT NOT NULL, content TEXT NOT NULL);", [], null, dataController.errorHandler);
addItemsInArrayWithParentAPDID(jsonArray, "TOP_LEVEL_ITEM");
function addItemsInArrayWithParentAPDID(array, parentAPDID) {
for (var i in array) {
var item = array[i];
var flatten = 0;
if (item.flatten && item.children && item.children.length != 0) {
flatten = 1
}
var name = item.name;
var icon = item.icon;
var keywords = item.keywords;
var content = item.content;
if (typeof(name) == "undefined") {
name = ""
}
if (typeof(icon) == "undefined") {
icon = ""
}
if (typeof(keywords) == "undefined") {
keywords = ""
}
if (typeof(content) == "undefined") {
content = ""
}
if (content == "" && item.intro) {
content = item.intro
}
addEntryToContentDatabase(item.apdid, parentAPDID, flatten, name, icon, keywords, content);
if (item.children && item.children.length != 0) {
addItemsInArrayWithParentAPDID(item.children, item.apdid)
}
}
}
function addEntryToContentDatabase(apdid, parentapdid, flatten, title, icon, keywords, content) {
transaction.executeSql("insert into " + localizationController.language + "Content (apdid, parentapdid, flatten, title, icon, keywords, content) VALUES (?, ?, ?, ?, ?, ?, ?);", [apdid, parentapdid, flatten, title, icon, keywords, content], null, dataController.errorHandler)
}
for (var key in configurationSettings) {
var value = configurationSettings[key];
transaction.executeSql("insert into " + localizationController.language + "Config (key, value) VALUES (?, ?);", [key, value], null, dataController.errorHandler)
}
dataController.createDataStructure()
})
};
dataController.createGraphicsTable = function() {
this.database.transaction(function(d) {
console.log("Loaded new Graphics data into the Database.");
d.executeSql("CREATE TABLE " + localizationController.language + "Graphics (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, artPath TEXT NOT NULL, base64 TEXT NOT NULL);", [], null, dataController.errorHandler);
var b = dataController.graphicCacheFromJSON;
if (typeof(b) != "undefined") {
for (var a in b) {
var c = b[a];
e(a, c)
}
}
function e(g, f) {
d.executeSql("insert into " + localizationController.language + "Graphics (artPath, base64) VALUES (?, ?);", [g, f], null, dataController.errorHandler)
}
dataController.createGraphicsDataStructure()
})
};
dataController.createDataStructure = function() {
this.database.transaction(function(a) {
a.executeSql("select * from " + localizationController.language + "Content;", [],
function(e, b) {
for (var c = 0; c < b.rows.length; c++) {
var d = b.rows.item(c);
dataController.table.push(d);
dataController.titleTable[d.apdid] = d.title;
dataController.parentTable[d.apdid] = d.parentapdid;
if (!dataController.childrenTable[d.parentapdid]) {
dataController.childrenTable[d.parentapdid] = new Array()
}
if (d.apdid != "COPYRIGHT_PAGE_CONTENT" && d.apdid != "COPYRIGHT_TAGLINE") {
dataController.childrenTable[d.parentapdid].push(d.apdid)
}
}
dataController.fixNestedSingularChildren();
dataController.database.transaction(function(f) {
f.executeSql("select * from " + localizationController.language + "Config;", [],
function(k, g) {
for (var h = 0; h < g.rows.length; h++) {
var j = g.rows.item(h);
dataController.configurationSettings[j.key] = j.value;
if (j.key == "MenuStructure" && j.value == "Type=grouped,") {
dataController.shouldFlatten = 1
}
if (j.key == "Search" && j.value == "disabled=true,") {
dataController.shouldHideSearchButton = 1
}
if (j.key == "BackButtonURL" && j.value != "" && j.value != "BackButtonURL") {
dataController.mainTOCBackButtonURL = j.value
}
if (j.key == "BackButtonTitle" && j.value != "" && j.value != "BackButtonTitle") {
dataController.mainTOCBackButtonTitle = j.value
}
if (j.key == "Title" && j.value != "") {
dataController.title = j.value;
document.title = dataController.title
}
if (j.key == "AlternativeTitle" && j.value != "") {
dataController.alternativeTitle = j.value
}
if (j.key == "ShowVersionNumber" && j.value == "1") {
dataController.showVersionNumber = 1
}
if (j.key == "WebclipIcon") {
dataController.webclipIcon = j.value
}
if (j.key == "View" && j.value == "Type=single-view,") {
dataController.singleViewMode = 1
}
}
controller.showInterface()
},
dataController.errorHandler)
})
},
dataController.errorHandler)
})
};
dataController.createGraphicsDataStructure = function() {
this.database.transaction(function(a) {
a.executeSql("select * from " + localizationController.language + "Graphics;", [],
function(d, b) {
for (var c = 0; c < b.rows.length; c++) {
dataController.graphics.push(b.rows.item(c))
}
},
dataController.errorHandler)
})
};
dataController.performSearchWithQuery = function(b, a) {
if (b == "" || b.length < 2) {
a(new Array());
return
}
b = b.replace(/^\s\s*/, "").replace(/\s\s*$/, "");
searchQueryArray = b.split(" ");
searchQueryContentLikeClause = '( content LIKE "%' + searchQueryArray.join('%" AND content LIKE "%') + '%" )';
searchQueryTitleLikeClause = '( title LIKE "%' + searchQueryArray.join('%" AND title LIKE "%') + '%" )';
searchQueryKeywordsLikeClause = '( keywords LIKE "%' + searchQueryArray.join('%" AND keywords LIKE "%') + '%" )';
this.database.transaction(function(d) {
var c = "SELECT * FROM " + localizationController.language + "Content WHERE " + searchQueryContentLikeClause + " OR " + searchQueryTitleLikeClause + " OR " + searchQueryKeywordsLikeClause + " LIMIT 25";
d.executeSql(c, [],
function(j, e) {
var h = new Array();
for (var g = 0; g < e.rows.length; g++) {
var f = e.rows.item(g).apdid;
if (0 == dataController.getChildrenAPDIDsForItemWithAPDID(f).length) {
h.push(f)
}
}
a(h)
},
dataController.errorHandler)
})
};
dataController.errorHandler = function(b, a) {
console.log("Error Handler: " + a.message + " (" + a.code + ")");
if ( - 1 != a.message.indexOf("no such table")) {
dataController.database.transaction(function(c) {
c.executeSql("DROP TABLE IF EXISTS " + localizationController.language + "Content;", [], null, dataController.errorHandler);
c.executeSql("DROP TABLE IF EXISTS " + localizationController.language + "Config;", [], null, dataController.errorHandler);
c.executeSql("DROP TABLE IF EXISTS " + localizationController.language + "Graphics;", [], null, dataController.errorHandler);
window.location.reload()
})
}
return true
};
var localizationController = {
didLoadJSON: 0,
language: null
};
localizationController.init = function() {
if (this.didLoadJSON) {
return
}
var currentURL = window.location.href;
dataFolder = currentURL;
dataFolder = dataFolder.substring(0, dataFolder.lastIndexOf("/"));
dataFolder = dataFolder.substring(0, dataFolder.lastIndexOf("/"));
dataFolder += "/Contents/";
var infoJsonRequest = new XMLHttpRequest();
var infoJsonURL = dataFolder + "Info.json";
infoJsonRequest.open("GET", infoJsonURL, false);
try {
infoJsonRequest.send(null)
} catch(err) {
infoJsonRequest = null
}
if (!infoJsonRequest || !(infoJsonRequest.status == 0 || infoJsonRequest.status == 200)) {
console.log("Error retrieving Info.json file.");
this.supportedLanguages = new Array;
return
}
this.didLoadJSON = 1;
var infoJsonContents = eval(infoJsonRequest.responseText);
infoJsonContents = infoJsonContents[0];
this.supportedLanguages = infoJsonContents;
this.supportedLanguagesCount = 0;
for (var key in this.supportedLanguages) {
this.supportedLanguagesCount += 1
}
localizationController.initializeUIElements()
};
localizationController.localize = function() {
localizationController.init();
var e = window.location.search;
if (e.length > 0) {
e = e.substring(1, e.length)
} else {
e = null
}
var d = new Object();
if (e) {
for (var c = 0; c < e.split("&").length; c++) {
var b = e.split("&")[c];
d[b.split("=")[0]] = b.split("=")[1]
}
}
var f = d.lang;
if (f) {
this.language = f
} else {
var a = navigator.language.substring(0, 2);
if ("zh" == a) {
if ("zh-cn" == navigator.language) {
a = "zh_CN"
} else {
if ("zh-tw" == navigator.language) {
a = "zn_TW"
}
}
} else {
if ("pt" == a) {
if ("pt-br" == navigator.language) {
a = "pt_BR"
} else {
if ("pt-pt" == navigator.language) {
a = "pt"
}
}
}
}
if (a && this.supportedLanguages[a]) {
this.language = a
} else {
this.language = "en"
}
}
if (this.language == "he") {
document.getElementsByTagName("html")[0].setAttribute("dir", "rtl")
}
};
localizationController.localizedUIString = function(c) {
var b = localizationController.uiElements[localizationController.language];
if (!b) {
return c
}
var a = b[c];
if (!a) {
return c
}
return a
};
localizationController.getLanguagesView = function() {
localizationController.languages = new Array();
localizationController.languageView = new ADContentView(document.createElement("div"));
localizationController.languageView.autoresizingMask = ADViewAutoresizingFlexibleWidth | ADViewAutoresizingFlexibleHeight;
localizationController.languageView.layer.style.backgroundColor = "white";
localizationController.languageListView = new ADTableView();
localizationController.languageListView.style = ADTableViewStylePlain;
localizationController.languageListView.autoresizingMask = ADViewAutoresizingFlexibleWidth | ADViewAutoresizingFlexibleHeight;
localizationController.languageListView.position = new ADPoint(0, 0);
localizationController.languageView.addSubview(localizationController.languageListView);
localizationController.languageListView.dataSource = localizationController;
localizationController.languageListView.delegate = localizationController;
localizationController.languageListView.reloadData();
return localizationController.languageView
};
localizationController.numberOfSectionsInTableView = function(a) {
return 1
};
localizationController.tableViewNumberOfRowsInSection = function(a, b) {
return this.supportedLanguagesCount
};
localizationController.tableViewCellForRowAtPath = function(b, c) {
var a = new ADTableViewCell();
var e = 0;
for (var d in this.supportedLanguages) {
if (e == c.row) {
a.text = this.supportedLanguages[d];
break
}
e++
}
return a
};
localizationController.tableViewDidSelectRowAtPath = function(a, d) {
var c = 0;
for (var b in this.supportedLanguages) {
if (c == d.row) {
var e = b;
break
}
c++
}
document.location = "?lang=" + e
};
localizationController.initializeUIElements = function() {
localizationController.uiElements = eval({
bg: {
Search: "Търси",
Cancel: "Откажи",
"Change Language": "Промени език",
"Loading...": "Зареждане...",
},
cs: {
Search: "Hledat",
Cancel: "Zrušit",
"Change Language": "Změnit jazyk",
"Loading...": "Načítání…",
},
da: {
Search: "Søg",
Cancel: "Annuller",
"Change Language": "Skift sprog",
"Loading...": "Indlæser...",
},
de: {
Search: "Suchen",
Cancel: "Abbrechen",
"Change Language": "Sprache wechseln",
"Loading...": "Laden ...",
},
el: {
Search: "Αναζήτηση",
Cancel: "Ακύρωση",
"Change Language": "Αλλαγή γλώσσας",
"Loading...": "Φόρτωση...",
},
en: {
Search: "Search",
Cancel: "Cancel",
"Change Language": "Change Language",
"Loading...": "Loading..."
},
es: {
Search: "Buscar",
Cancel: "Cancelar",
"Change Language": "Cambiar idioma",
"Loading...": "Cargando...",
},
et: {
Search: "Otsi",
Cancel: "Tühista",
"Change Language": "Muuda keelt",
"Loading...": "Laadimine...",
},
fi: {
Search: "Etsi",
Cancel: "Kumoa",
"Change Language": "Vaihda kieli",
"Loading...": "Ladataan...",
},
fr: {
Search: "Rechercher",
Cancel: "Annuler",
"Change Language": "Changer de langue",
"Loading...": "Chargement...",
},
hr: {
Search: "Traži",
Cancel: "Poništi",
"Change Language": "Promijeni jezik",
"Loading...": "Učitavanje...",
},
hu: {
Search: "Keresd",
Cancel: "Mégsem",
"Change Language": "Válts nyelvet",
"Loading...": "Betöltés...",
},
id: {
Search: "Cari",
Cancel: "Batalkan",
"Change Language": "Ganti Bahasa",
"Loading...": "Memuat...",
},
it: {
Search: "Cerca",
Cancel: "Annulla",
"Change Language": "Cambia lingua",
"Loading...": "Carico...",
},
ja: {
Search: "検索",
Cancel: "キャンセル",
"Change Language": "言語を変更",
"Loading...": "読み込み中...",
},
ko: {
Search: "검색",
Cancel: "취소",
"Change Language": "언어 변경",
"Loading...": "로드 중...",
},
lt: {
Search: "Ieškoti",
Cancel: "Atšaukti",
"Change Language": "Pakeisti kalbą",
"Loading...": "Įkeliama...",
},
lv: {
Search: "Meklēt",
Cancel: "Atcelt",
"Change Language": "Mainīt valodu",
"Loading...": "Notiek ielāde...",
},
me: {
Search: "Traži",
Cancel: "Odustani",
"Change Language": "Promjena jezika",
"Loading...": "Učitavanje...",
},
mk: {
Search: "Пребарај",
Cancel: "Откажи",
"Change Language": "Промени јазик",
"Loading...": "Вчитување...",
},
my: {
Search: "Cari",
Cancel: "Batal",
"Change Language": "Tukar Bahasa",
"Loading...": "Memuat...",
},
nl: {
Search: "Zoek",
Cancel: "Annuleer",
"Change Language": "Wijzig taal",
"Loading...": "Laden...",
},
no: {
Search: "Søk",
Cancel: "Avbryt",
"Change Language": "Endre språk",
"Loading...": "Laster inn...",
},
pl: {
Search: "Szukaj",
Cancel: "Anuluj",
"Change Language": "Zmień język",
"Loading...": "Wczytuję...",
},
pt: {
Search: "Pesquisar",
Cancel: "Cancelar",
"Change Language": "Alterar idioma",
"Loading...": "A carregar...",
},
pt_BR: {
Search: "Pesquisar",
Cancel: "Cancelar",
"Change Language": "Alterar idioma",
"Loading...": "A carregar...",
},
ro: {
Search: "Căutare",
Cancel: "Anulare",
"Change Language": "Schimbare limbă",
"Loading...": "Încărcare...",
},
ru: {
Search: "Искать",
Cancel: "Отменить",
"Change Language": "Изменить язык",
"Loading...": "Загрузка...",
},
sk: {
Search: "Vyhľadať",
Cancel: "Zrušiť",
"Change Language": "Zmeniť jazyk",
"Loading...": "Načítava sa…",
},
sv: {
Search: "Sök",
Cancel: "Avbryt",
"Change Language": "Byt språk",
"Loading...": "Läser in...",
},
th: {
Search: "ค้นหา",
Cancel: "ยกเลิก",
"Change Language": "เปลี่ยนภาษา",
"Loading...": "กำลังโหลด...",
},
tr: {
Search: "Ara",
Cancel: "Vazgeç",
"Change Language": "Dili Değiştir",
"Loading...": "Yükleniyor...",
},
vi: {
Search: "Tìm kiếm",
Cancel: "Hủy",
"Change Language": "Thay đổi Ngôn ngữ",
"Loading...": "Đang tải...",
},
zh_CN: {
Search: "搜索",
Cancel: "取消",
"Change Language": "更改语言",
"Loading...": "正在载入…",
},
zn_TW: {
Search: "搜尋",
Cancel: "取消",
"Change Language": "更改語言",
"Loading...": "正在載入⋯",
},
})
};
var searchController = {
searchDelay: null,
};
searchController.getSearchItem = function() {
if (dataController.shouldHideSearchButton) {
return null
}
if (!this.searchItem) {
this.searchBar = new ADSearchBar();
this.searchBar.text = "";
this.searchBar.delegate = searchController;
this.searchItem = new ADBarButtonItem(ADBarButtonItemTypePlain);
this.searchItem.customView = this.searchBar;
this.resizeSearchField()
}
return this.searchItem
};
searchController.resizeSearchField = function() {
if (!this.searchItem) {
return
}
switch (window.orientation) {
case 0:
case 180:
this.searchItem.width = 116;
break;
case 90:
case - 90: this.searchItem.width = 180;
break;
default:
this.searchItem.width = 200;
break
}
};
searchController.numberOfSectionsInTableView = function(a) {
return 1
};
searchController.tableViewNumberOfRowsInSection = function(a, b) {
return a._searchResultsArray.length
};
searchController.tableViewCellForRowAtPath = function(b, c) {
var e = b._searchResultsArray[c.row];
var d = dataController.getTitleForItemWithAPDID(e);
var a = new ADTableViewCell(ADTableViewCellStyleSubtitle);
a.text = d;
a.detailedText = dataController.getBreadcrumbsForItemWithAPDID(e);
a.accessoryType = ADTableViewCellAccessoryDisclosureIndicator;
return a
};
searchController.tableViewDidSelectAccessoryForRowAtPath = function(a, b) {
searchController.tableViewDidSelectRowAtPath(a, b)
};
searchController.tableViewDidSelectRowAtPath = function(a, b) {
var c = a._searchResultsArray[b.row];
if (!c) {
return
}
this.searchBar.editing = false;
this.searchBar.text = "";
setTimeout(function() {
a.deselectRowAtPathAnimated(b, false)
},
ADTransitionDefaults.duration * 1000);
controller.navigateToElement(c, false)
};
searchController.searchBarTextDidChange = function(e, d) {
if ("" == d) {
return
}
var b = controller.rightNavigationController.topViewController;
var c = null;
if (true == b._isSearchResults) {
c = b
} else {
c = new ADViewController();
c.view = new ADView();
c._isSearchResults = true;
c.title = localizationController.localizedUIString("Search");
var a = new ADTableView();
a.autoresizingMask = ADViewAutoresizingFlexibleWidth | ADViewAutoresizingFlexibleHeight;
a.style = ADTableViewStylePlain;
a.dataSource = this;
a.delegate = this;
c.view.addSubview(a);
c._searchResultsList = a;
c._searchResultsList._searchResultsArray = [];
a.reloadData();
c.navigationItem.rightBarButtonItem = searchController.getSearchItem();
controller.showSearchResultsView(c)
}
clearTimeout(this.searchDelay);
this.searchDelay = setTimeout(function() {
dataController.performSearchWithQuery(d, searchController.didPerformSearch)
},
1000)
};
searchController.didPerformSearch = function(b) {
var a = controller.rightNavigationController.topViewController;
if (true == a._isSearchResults) {
a._searchResultsList._searchResultsArray = b;
a._searchResultsList.reloadData();
a._searchResultsList.setContentOffsetWithAnimation(new ADPoint(0, 0), false)
}
};
searchController.searchBarTextDidBeginEditing = function(a) {
scrollTo(0, 0)
};
var buildVersion = "1387";