Tiramisu = {
resBasePath: 'res/',
ver: 'sh',
fontSize: 2,
initialTextPaneWidth: '25%'
};
(function(tiramisu)
{
var m_runtimeReady = false,
m_dragImage = null,
m_emptyDragImage = null,
m_selectedObject = null;
function hideLoadOverlay()
{
$('#activity-indicator').fadeOut(800, 'swing', function()
{
$('#minute-of-ads-in-blog').fadeIn(800, 'swing');
setTimeout(function() {$('#minute-of-ads-in-blog').fadeOut(800, 'swing');}, 7000);
});
window.setTimeout(function()
{
var overlay = document.getElementById('tiramisu-load-overlay');
overlay.className = '';
window.setTimeout(function()
{ VideoBannerDiv.style.display='block';
overlay.parentNode.removeChild(overlay);
$('#contentFrame').removeClass("blurred");
}, 300);
}, 200);
}
function setupNavigationBar(navigationItem)
{
var navigationBar = document.getElementById('navigationbar');
navigationBar.innerHTML = navigationItem;
navigationBar.style.display = 'block';
$('#content').addClass('with-navigationbar');
}
function setupPopovers(popovers)
{
var div = document.createElement('div'),
body = document.body;
div.id = 'tiramisu-popovers';
div.innerHTML = popovers;
body.insertBefore(div, body.firstChild);
}
function setupTextPane()
{
var kSplitterWidth = '5px',
left = document.getElementById('left-component').style,
splitter = document.getElementById('splitter').style,
width = tiramisu.initialTextPaneWidth;
left.right = width;
left.marginRight = kSplitterWidth;
splitter.right = width;
splitter.minWidth = kSplitterWidth;
document.getElementById('right-component').style.width = width;
$('div.split-pane').splitPane();
}
tiramisu.didInitializeRuntime = function()
{
m_runtimeReady = true;
if (typeof tiramisu.didChangeLayout === 'function')
window.setTimeout(tiramisu.didChangeLayout, 0);
}
tiramisu.isRuntimeReady = function()
{
return m_runtimeReady;
}
function dragStart(event)
{
var objectURL = this.getAttribute('data-outline-object'),
dragImage = document.createElement('img');
dragImage.src = this.firstChild.src;
event.dataTransfer.effectAllowed = 'copy';
event.dataTransfer.setData('Text', objectURL);
try {
event.dataTransfer.setDragImage(dragImage, 0, 0);
}
catch(e) {}
Module.ccall('outline_dragStart', 'null', ['string'], [objectURL]);
}
function dragEnd(event)
{
Module.ccall('outline_dragEnd', 'null', ['string'], [this.getAttribute('data-outline-object')]);
}
function didChangeLayout()
{
if (tiramisu.isRuntimeReady())
{
var pane = document.getElementById('content');
Module.ccall('tiramisu_resize', 'null', ['number', 'number'], [pane.clientWidth, pane.clientHeight]);
}
}
tiramisu.updateGalleryPanel = function(cls_id,item_id)
{
var request = new XMLHttpRequest();
CatalogCats[cCatalogCat]=cls_id;
var urlStr='https://planner3d.shatura.com/gallery_new/menu_new_pure.php?ver='+tiramisu.ver+'&fontSize='+tiramisu.fontSize;
if (cls_id && (cls_id>0))
urlStr+='&cid='+cls_id;
else if (item_id)
urlStr+='&artcode='+item_id;
request.open('GET', urlStr, true);
request.onreadystatechange = function()
{
if (request.readyState == 4 && request.status == 200)
{
var group = document.getElementById('outline3d-items');
var div = document.createElement('div');
div.innerHTML = request.responseText;
group.replaceChild(div, group.firstChild);
for(var imgSize=64;imgSize<=110;imgSize+=46)
{
var draggables = document.getElementsByClassName('tiramisu-draggable-item'+imgSize);
Array.prototype.forEach.call(draggables, function(draggable)
{
draggable.setAttribute('draggable', 'true');
draggable.addEventListener('dragstart', dragStart, false);
draggable.addEventListener('dragend', dragEnd, false);
});
}
}
};
request.send(null);
}
var cCatalogCat=0;
var CatalogCats=[0,8190];
tiramisu.SwitchCatalog = function()
{
var Zakl = document.getElementById('ZaklButt');
if (Zakl.src.substring(Zakl.src.length-5)=='1.png')
{
Zakl.src=Zakl.src.substring(0,Zakl.src.length-5)+'0.png';
cCatalogCat=1;
Tiramisu.updateGalleryPanel(CatalogCats[cCatalogCat]);
}
else
{
Zakl.src=Zakl.src.substring(0,Zakl.src.length-5)+'1.png';
cCatalogCat=0;
Tiramisu.updateGalleryPanel(CatalogCats[cCatalogCat]);
}
event.preventDefault();
}
tiramisu.RefreshCatalog = function()
{
Tiramisu.updateGalleryPanel(CatalogCats[cCatalogCat]);
}
tiramisu.didFinishLoadDocument = function(doc)
{
setTimeout("Tiramisu.action('ShouldUpdateHeaderSum')",5000);
var canvas = document.getElementById('canvas');
document.getElementById('canvas').style.display = 'block';
PanelService.showPanels(true);
tiramisu.ui.setupTextPane();
tiramisu.didChangeLayout = didChangeLayout;
window.addEventListener('resize', didChangeLayout, false);
hideLoadOverlay();
didChangeLayout();
tiramisu.util.livingOnTheEdge(); // Adapting to survive in Microsoft's neighbourhood. Thug life.
tiramisu.updateGalleryPanel(CatalogCats[cCatalogCat]);
canvas.addEventListener('dragover', function(event)
{
event.preventDefault();
event.dataTransfer.dropEffect = 'copy';
Module.ccall('outline_dragContinue', 'null', ['number', 'number'], [event.clientX, event.clientY]);
return false;
}, false);
canvas.addEventListener('dragenter', function(event)
{
Module.ccall('outline_dragEnter', 'null', ['number', 'number'], [event.clientX, event.clientY]);
return false;
}, false);
canvas.addEventListener('dragleave', function (event)
{
Module.ccall('outline_dragLeave');
}, false);
canvas.addEventListener('drop', function(event)
{
event.stopPropagation();
event.preventDefault();
// var objectURL = event.dataTransfer.getData('Text');
Module.ccall('outline_drop', 'null', ['number', 'number'], [event.clientX, event.clientY]);
return false;
});
var group = document.getElementById('outline-object-properties');
var groupOper = document.getElementById('outline-object-oper');
group.style.visibility = 'hidden';
groupOper.style.display = 'none';
}
tiramisu.saveScene = function(save_data)
{
var request = new XMLHttpRequest();
request.open('POST', 'scenes/save_scene.php?ver='+tiramisu.ver+'&project='+tiramisu.project+'&is_esc=%22', true);
request.onreadystatechange = function()
{
if (request.readyState == 4 && request.status == 200)
{
var group = document.getElementById('outline-object-spec');
if (request.responseText.length && (request.responseText.substr(0,3)=='ok:'))
{
var div = document.createElement('div');
div.style.padding='10px';
var groupWidth=Math.min(400,document.documentElement.clientWidth-60);
var html_code='
';
div.innerHTML = html_code+'
';
$("#outline-object-spec").scrollTop();
group.replaceChild(div, group.firstChild);
group.style.visibility = 'visible';
group.style.width=groupWidth+'px';
group.style.height=Math.min(200,document.documentElement.clientHeight-210)+'px';
group.style.top='75px';
group.style.left=(document.documentElement.clientWidth-groupWidth)/2+'px';
}
else
group.style.visibility = 'hidden';
}
};
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
request.send(save_data);
}
tiramisu.objectUrlLoaded = function()
{
}
tiramisu.updateObjectsLoadProgress= function(iObj,ObjCount)
{
}
tiramisu.didFailLoadDocument = function(message)
{
AlertService.presentWithText(
'An error occurred while loading document.
' + message,
'Error Loading Document',
AlertService.CAUTION | AlertService.HIDE_CLOSE_BUTTON);
hideLoadOverlay();
}
tiramisu.didClickHyperlink = function(urls)
{
if (tiramisu.openDocument)
{
for (var i = 0; i < urls.length; ++i)
{
if (urls[i].lastIndexOf('urn:cortona3d:item-by-name:', 0) == 0)
{
tiramisu.openDocument(urls[i].slice(27));
break;
}
}
}
}
tiramisu.processAnchorURL = function(url)
{
return null;
}
tiramisu.didSelectObject = function(object, x, y)
{
if (!object)
{
if (m_selectedObject)
{
var group = document.getElementById('outline-object-properties');
var groupOper = document.getElementById('outline-object-oper');
group.style.visibility = 'hidden';
groupOper.style.display = 'none';
m_selectedObject = null;
}
return;
}
console.log('didSelectObject: ', object ? object.id : '[null]', ' @(', x, ',', y, ')');
if (m_selectedObject && object.id == m_selectedObject.id)
return;
m_selectedObject = object;
SetSensorType(0);
var request = new XMLHttpRequest();
request.open('GET', 'https://planner3d.shatura.com/gallery_new/param_page_pure.php?ver='+tiramisu.ver+'&ourl0='+object.id+'&is_esc=%22', true);
request.onreadystatechange = function()
{
if (request.readyState == 4 && request.status == 200)
{
var group = document.getElementById('outline-object-properties');
var groupOper = document.getElementById('outline-object-oper');
if (request.responseText.length)
{
var div = document.createElement('div');
div.style.cursor='move';
div.innerHTML = request.responseText;
group.replaceChild(div, group.firstChild);
group.style.visibility = 'visible';
groupOper.style.display = 'block';
groupOper.style.left=group.style.left;
groupOper.style.bottom=(parseInt(group.style.bottom)-50)+'px';
}
else
{
groupOper.style.display = 'block';
group.style.visibility = 'hidden';
}
}
};
request.send(null);
}
tiramisu.CreateTemplate1 = function()
{
var Wcm=parseInt(document.getElementById('Template1_W').value);
var W=isNaN(Wcm)?15:Wcm*0.01;
var Hcm=parseInt(document.getElementById('Template1_H').value);
var H=isNaN(Hcm)?12:Hcm*0.01;
Tiramisu.action('loadScene','scenes/template1.wrl.php?W='+W+'&H='+H+'|scenes/template1.o3d');
document.getElementById('outline-object-spec').style.visibility = 'hidden';
}
tiramisu.CreateTemplate2 = function()
{
var Wcm=parseInt(document.getElementById('Template2_W').value);
var W=isNaN(Wcm)?15:Wcm*0.01;
var Hcm=parseInt(document.getElementById('Template2_H').value);
var H=isNaN(Hcm)?12:Hcm*0.01;
var WMcm=parseInt(document.getElementById('Template2_WM').value);
var WM=isNaN(WMcm)?8:WMcm*0.01;
var HMcm=parseInt(document.getElementById('Template2_HM').value);
var HM=isNaN(HMcm)?7:HMcm*0.01;
Tiramisu.action('loadScene','scenes/template2.wrl.php?W='+W+'&HM='+HM+'&WM='+WM+'&HM='+HM+'|scenes/template2.o3d');
document.getElementById('outline-object-spec').style.visibility = 'hidden';
}
tiramisu.showNewScene = function()
{
closeVideoBanner();
var group = document.getElementById('outline-object-spec');
var div = document.createElement('div');
var groupWidth=Math.min(800,document.documentElement.clientWidth-60);
div.innerHTML = ' | |
 |  |
'+'
';
$("#outline-object-spec").scrollTop();
group.replaceChild(div, group.firstChild);
group.style.visibility = 'visible';
group.style.width=groupWidth+'px';
group.style.height=(document.documentElement.clientHeight-210)+'px';
group.style.top='75px';
group.style.left=(document.documentElement.clientWidth-groupWidth)/2+'px';
}
tiramisu.showStatistic = function(ourls)
{
var request = new XMLHttpRequest();
request.open('POST', 'https://planner3d.shatura.com/main/oi_page_pure.php?ver='+tiramisu.ver+'&is_esc=%22', true);
request.onreadystatechange = function()
{
if (request.readyState == 4 && request.status == 200)
{
var group = document.getElementById('outline-object-spec');
if (request.responseText.length)
{
closeVideoBanner();
var div = document.createElement('div');
var groupWidth=Math.min(700,document.documentElement.clientWidth-60);
div.innerHTML = request.responseText+'
';
$("#outline-object-spec").scrollTop();
group.replaceChild(div, group.firstChild);
group.style.visibility = 'visible';
group.style.width=groupWidth+'px';
group.style.height=(document.documentElement.clientHeight-210)+'px';
group.style.top='75px';
group.style.left=(document.documentElement.clientWidth-groupWidth)/2+'px';
}
else
group.style.visibility = 'hidden';
}
};
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
request.send(ourls);
}
tiramisu.updateHeaderSum = function(ourls)
{
var request = new XMLHttpRequest();
request.open('POST', 'https://planner3d.shatura.com/main/oi_page_pure.php?ver='+tiramisu.ver+'&is_esc=%22&GetPriceMode=1', true);
request.onreadystatechange = function()
{
if (request.readyState == 4 && request.status == 200)
{
if (request.responseText.length)
{
var ii=request.responseText.indexOf('\n');
cPriceInProject=parseInt((ii>0)?request.responseText.substring(0,ii):request.responseText);
document.getElementById('BasketFormQuick').GoodEncoded.value=(ii>0)?request.responseText.substring(ii+1):'';
if (isNaN(cPriceInProject))
cPriceInProject=0;
if (!moneyTimeInterval)
CheckUpdateHeaderSum();
}
}
};
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
request.send(ourls);
}
tiramisu.onCamChanged = function(camName)
{
var Cams=['CamDown','CamIso','CamUp'];
for(var k=0;k0)
out+=n3+' ';
if (n2>0)
{
if (n3>0)
{ for(var k=n2.toString().length;k<3;k++) out+='0'; }
out+=n2+' ';
}
if ((n3>0)||(n2>0))
for(var k=n1.toString().length;k<3;k++) out+='0';
out+=n1;
return out;
}
var cPriceInHeader=0;
var cPriceInProject=0;
var moneyTimeInterval = null;
function CheckUpdateHeaderSum()
{
if ((cPriceInHeader==0) && (cPriceInProject>0))
{
cPriceInHeader=cPriceInProject;
document.getElementById('outPriceDiv').innerHTML=''+SeparatePrice(cPriceInProject)+' руб.';
}
else
{
if (cPriceInProjectcPriceInHeader)
cPriceInHeader=Math.min(cPriceInProject,cPriceInHeader+1234);
document.getElementById('outPriceDiv').innerHTML=''+SeparatePrice(cPriceInHeader)+' руб.';
if (cPriceInHeader!=cPriceInProject)
moneyTimeInterval = setTimeout(CheckUpdateHeaderSum, 30);
}
moneyTimeInterval=null;
}
tiramisu.setCurrentCam = function(camName)
{
Module.ccall('outline_setCurrentCam', 'null', ['string'], [camName.toString()]);
}
tiramisu.action = function(paramName,paramValue)
{
Module.ccall('outline_action', 'null', ['string','string'], [paramName.toString(),(paramValue===undefined)?'':paramValue.toString()]);
}
tiramisu.applyObjectParameters = function(params)
{
var count = params.length,
carray = Module._malloc(count * 4),
i, item;
for (i = 0; i < count; ++i)
{
item = allocate(intArrayFromString(params[i].toString()), 'i8', ALLOC_STACK);
Module.setValue(carray + i * 4, item, 'i32');
}
Module.ccall('outline_applyObjectParameters', 'null', ['number', 'number', 'number'], [m_selectedObject.handle, carray, count]);
Module._free(carray);
}
tiramisu.util =
{
wrapStringArray: function(data, size)
{
var strings = new Array(size),
i;
for (i = 0; i < size; ++i)
strings[i] = Pointer_stringify(getValue(data + i * 4, 'i32'));
return strings;
},
wrapSheetArray: function(data, size)
{
if (!size) return [];
var sheets = new Array(size),
i;
for (i = 0; i < size; ++i, data += 12)
{
sheets[i] = {
id: Pointer_stringify(getValue(data, 'i32')),
description: Pointer_stringify(getValue(data + 4, 'i32')),
indentationLevel: getValue(data + 8, 'i32')
}
}
return sheets;
},
loadScript: function(fileName, async)
{
var scriptElement = document.createElement('script');
scriptElement.setAttribute('type', 'text/javascript');
scriptElement.setAttribute('src', tiramisu.resBasePath + fileName);
if (async)
scriptElement.setAttribute('async', 'async');
document.getElementsByTagName('head')[0].appendChild(scriptElement);
},
loadStyleSheet: function(fileName)
{
var linkElement = document.createElement('link');
linkElement.href = tiramisu.resBasePath + fileName;
linkElement.rel = 'stylesheet';
linkElement.type = 'text/css';
document.getElementsByTagName('head')[0].appendChild(linkElement);
},
livingOnTheEdge: function()
{
if (typeof window.MSGesture !== 'function')
return;
console.log("Adapting to survive in Microsoft's neighbourhood. Thug life.");
var popovers = document.getElementById('tiramisu-popovers'),
popover,
canvas = document.getElementById('canvas'),
recognizer = new MSGesture(),
i;
if (popovers)
{
function eventStopper(event) {event.stopPropagation();}
popovers = popovers.childNodes;
for (i = 0; i < popovers.length; ++i)
{
popover = popovers[i];
popover.addEventListener('pointerdown', eventStopper, false);
popover.addEventListener('pointerup', eventStopper, false);
}
}
recognizer.target = canvas;
function gestureHandler(event)
{
Module.ccall('tiramisu_microsoftGesture', 'null', ['number', 'number', 'number', 'number', 'number'], [event.translationX, event.translationY, event.scale, event.rotation, event.detail]);
}
canvas.addEventListener('MSHoldVisual', function(event) {event.preventDefault();}, false);
canvas.addEventListener('MSGestureStart', gestureHandler, false);
canvas.addEventListener('MSGestureEnd', gestureHandler, false);
canvas.addEventListener('MSGestureChange', gestureHandler, false);
canvas.addEventListener('MSInertiaStart', gestureHandler, false);
canvas.addEventListener('MSGestureTap', gestureHandler, false);
canvas.addEventListener('MSGestureHold', gestureHandler, false);
canvas.addEventListener('pointerdown', function(event)
{
if (event.pointerType == 'mouse') {canvas.setPointerCapture(event.pointerId); return;}
if (Module.ccall('tiramisu_microsoftPointerDown', 'number', ['number', 'number', 'number'], [event.pointerId, event.offsetX, event.offsetY]))
{
canvas.setPointerCapture(event.pointerId);
recognizer.addPointer(event.pointerId);
}
}, false);
canvas.addEventListener('pointerup', function(event)
{
if (event.pointerType == 'mouse') return;
event.stopPropagation();
Module.ccall('tiramisu_microsoftPointerUp', 'number', ['number'], [event.pointerId, event.offsetX, event.offsetY]);
}, false);
window.addEventListener('pointerup', function(event)
{
if (event.pointerType == 'mouse') return;
var box = canvas.getBoundingClientRect(),
left = box.left + window.pageXOffset - document.body.clientLeft,
top = box.top + window.pageYOffset - document.body.clientTop;
Module.ccall('tiramisu_microsoftPointerUp', 'number', ['number'], [event.pointerId, event.pageX - left, event.pageY - top]);
}, false);
}
}
tiramisu.ui = {
hideLoadOverlay: hideLoadOverlay,
setupNavigationBar: setupNavigationBar,
setupPopovers: setupPopovers,
setupTextPane: setupTextPane
}
}(Tiramisu));