TODO add more init settings/variables here */
/* post xml parsing vars i.e. get(startscene);*/
var vars = {};
vars.idletime = 2;
vars.currScene = "cradock-peak";
vars.projectId = "5cd2c975200ec873bc0e97d9";
vars.fancamId = "5cd2c975200ec873bc0e97d9"; // backwards compatable
vars.APIPATH = "https://travel.in3sixty.com/api";
vars.THEMEPATH = "";
vars.PUBLICPATH = "https://s3.amazonaws.com/in3sixty-project-media/in3sixty/public";
vars.PROJECTPATH = "https://s3.amazonaws.com/in3sixty-project-media/in3sixty/5cd2c975200ec873bc0e97d9";
vars.STARTSCENE = "cradock-peak";
vars.NOCACHE = "8427";
vars.RAND = "6199";
vars.visibility = "public";
vars.event = {"keywords":"","featuring":"","country":"","city":"","venue":"","category":"Landscape","date":null,"shortname":"","name":"","dateSearchable":"Invalid date"};
vars.query = {};
vars.query.ath = "-130.000";
vars.query.atv = "";
vars.query.fov = "80.000";
vars.query.s = "cradock-peak";
vars.initialPos = "view.hlookat=-130.000&view.vlookat=&view.fov=80.000";
/* ---> TODO add more startup settings/variables here */
/* stored options */
vars.options = {};
/* in an application browser (Facebook/Twitter) */
/*
* i18n (international) strings for krpano.
*/
vars.i18n = {};
vars.languages = [];
vars.lang = 'en';
/* LANGUAGE SWITCHER */
i18next
.init({
resources: {'en' : { 'translation' : vars.i18n['en'] }},
lng: 'en',
fallbackLng: 'en'
}, function(err, t) {
console.log('localising');
localize = locI18next.init(i18next);
localize('[data-i18n]');
});
/* language switching */
function fc_changelang(lang, oncompleteaction){
console.log('changing language to ', lang);
if ((lang === undefined )){
console.log('fc_changelang: undefined language "'+ lang + '"');
return;
}
function _updateCurrentOptions(opts){
}
function _replaceQueryParam (param, newval, search) {
var regex = new RegExp( '([?;&])' + param + '=[^&;]*([;&]?)');
var query = search.replace(regex, '$1' + param + '=' + newval + '$2');
if (!regex.test(query)){
query = (query.length > 2 ? (query + '&') : '?') + (newval ? param + '=' + newval : '');
}
return query;
}
function _fetchOptionsForLang(lng, callback){
try {
var x = new (XMLHttpRequest || ActiveXObject)('MSXML2.XMLHTTP.3.0');
x.open('GET', '/cradock-peak/options.json' + '?lang=' + lng, 1);
x.withCredentials = true;
x.onreadystatechange = function () {
if(this.readyState > 3){
if (this.status == 200 && this.responseText){
// console.log('resources loaded for "%s"', lng );
callback(JSON.parse(this.responseText));
}
else{
console.log('error loading options for lang');
callback({});
}
}
};
x.send();
}
catch (e) {
console.log(e);
}
}
function _applyOptions(lang, opts){
//console.log('_applyOptions for lang', lang, opts );
i18next.changeLanguage(lang);
localize('[data-i18n]');
for(var key in opts){ // just override/store on top.
if (opts.hasOwnProperty(key)) {
//console.log(key, opts[key]);
// convert any colors from hash to hex format 0x000
vars.options[key] = (typeof opts[key] === 'string') ? opts[key].replace(/^#([0-9a-f]{6}|[0-9a-f]{3})$/i, '0x\$1') : opts[key];
}
}
if (pano()){ // and update krpano
pano().set('options', vars.options);
pano().set('lang', lang);
if (oncompleteaction !== undefined){
pano().call(oncompleteaction);
}
}
if (vars.languages && vars.languages.length > 1){
window.history.replaceState({}, // update the main url
/* don't change site title */null ,
window.location.pathname + _replaceQueryParam('lng',lang, window.location.search));
}
}
if (vars.i18n[lang] !== undefined){
//console.log('already have resources cached for', lang);
_applyOptions(lang, vars.i18n[lang]);
}
else{
// console.log('caching new resources for', lang);
_fetchOptionsForLang(lang, function(opts){
vars.i18n[lang] = opts; // cache
i18next.addResources(lang, 'translation'/* TODO set the ns somewhere else*/, opts); //add to i18next
_applyOptions(lang, opts);
});
}
}
fc_changelang('en');
/* END LANGUAGE SWTICHER */
/* viewer */
embedpano({
html5:"prefer+webgl",
id:"panoSWFObject",
target:"panoDIV",
xml: "/cradock-peak/pano.xml",
mobilescale:0.5,
initVars:initVars,
vars:vars,
onready:_onPanoReady,
onerror:_onPanoError
});
// for backwards compatibility
function fc_updateUrlQuery(atv, ath, fov, scene){
fc.updateUrlQuery(atv, ath, fov, scene);
}
/* TODO workaround, snapshot server not always receiving the events before 5 seconds,
send many */
var loaded_evt_count = 0;
var loaded_evt_max = 20;
var loaded_timer_interval = 1500;//ms
function _sendPanoLoadedEvt(){ // for the snapshot server..
var evt = document.createEvent("Event");
evt.initEvent("pano-loaded",true,true);
document.dispatchEvent(evt);
//console.log('sent pano loaded event');
loaded_evt_count++;
if (loaded_evt_count < loaded_evt_max){
setTimeout(_sendPanoLoadedEvt,loaded_timer_interval);
}
}
function fc_hideLoadingScreen(){
document.getElementById("panoDIV").style.visibility = 'visible';
document.body.style.background = 'none';
setTimeout(_sendPanoLoadedEvt,loaded_timer_interval);
}
function _onPanoError(message){
console.log('pano error');
_sendPanoLoadedEvt(); // nothing more to do..
}
function _onPanoReady(krpano){
console.log('pano ready');
}
/*
TODO move these functions out to the js library. - END
*/