self.getNumChildren() -1) throw Error("##getChildAt()## Index out of bounds!");
self.screen.insertBefore(e.screen, self.children_ar[index].screen);
if(self.contains(e)){
self.children_ar.splice(FWDS3DCUtils.indexOfArray(self.children_ar, e), 1, e);
}else{
self.children_ar.splice(FWDS3DCUtils.indexOfArray(self.children_ar, e), 0, e);
}
}
};
self.getChildAt = function(index){
if(index < 0 || index > self.getNumChildren() -1) throw Error("##getChildAt()## Index out of bounds!");
if(self.getNumChildren() == 0) throw Errror("##getChildAt## Child dose not exist!");
return self.children_ar[index];
};
self.removeChildAtZero = function(){
self.screen.removeChild(self.children_ar[0].screen);
self.children_ar.shift();
};
self.getNumChildren = function(){
return self.children_ar.length;
};
//################################//
/* event dispatcher */
//#################################//
self.addListener = function (type, listener){
if(type == undefined) throw Error("type is required.");
if(typeof type === "object") throw Error("type must be of type String.");
if(typeof listener != "function") throw Error("listener must be of type Function.");
var event = {};
event.type = type;
event.listener = listener;
event.target = this;
this.listeners.events_ar.push(event);
};
self.dispatchEvent = function(type, props){
if(this.listeners == null) return;
if(type == undefined) throw Error("type is required.");
if(typeof type === "object") throw Error("type must be of type String.");
for (var i=0, len=this.listeners.events_ar.length; i < len; i++){
if(this.listeners.events_ar[i].target === this && this.listeners.events_ar[i].type === type){
if(props){
for(var prop in props){
this.listeners.events_ar[i][prop] = props[prop];
}
}
this.listeners.events_ar[i].listener.call(this, this.listeners.events_ar[i]);
}
}
};
self.removeListener = function(type, listener){
if(type == undefined) throw Error("type is required.");
if(typeof type === "object") throw Error("type must be of type String.");
if(typeof listener != "function") throw Error("listener must be of type Function." + type);
for (var i=0, len=this.listeners.events_ar.length; i < len; i++){
if(this.listeners.events_ar[i].target === this
&& this.listeners.events_ar[i].type === type
&& this.listeners.events_ar[i].listener === listener
){
this.listeners.events_ar.splice(i,1);
break;
}
}
};
//###########################################//
/* destroy methods*/
//###########################################//
self.disposeImage = function(){
if(self.type == "img") self.screen.src = null;
};
self.destroy = function(){
try{self.screen.parentNode.removeChild(self.screen);}catch(e){};
if(self.hasBeenSetSelectable_bl){
self.screen.ondragstart = null;
self.screen.onselectstart = null;
self.screen.ontouchstart = null;
};
self.screen.removeAttribute("style");
//destroy properties
self.listeners = [];
self.listeners = null;
self.children_ar = [];
self.children_ar = null;
self.style = null;
self.screen = null;
self.transform = null;
self.position = null;
self.overflow = null;
self.display = null;
self.visible = null;
self.buttonMode = null;
self.x = null;
self.y = null;
self.w = null;
self.h = null;
self.rect = null;
self.alpha = null;
self.innerHTML = null;
self.opacityType = null;
self.isHtml5_bl = null;
self.hasTransform3d_bl = null;
self.hasTransform2d_bl = null;
self = null;
};
/* init */
self.init();
};
window.FWDS3DCDisplayObject = FWDS3DCDisplayObject;
}(window));/* Display object */
(function (window){
/*
* @ type values: div, img.
* @ positon values: relative, absolute.
* @ positon values: hidden.
* @ display values: block, inline-block, this applies only if the position is relative.
*/
var FWDS3DCDisplayObject3D = function(type, position, overflow, display){
this.listeners = {events_ar:[]};
var self = this;
if(type == "div" || type == "img" || type == "canvas"){
this.type = type;
}else{
throw Error("Type is not valid! " + type);
}
this.children_ar = [];
this.style;
this.screen;
this.numChildren;
this.transform;
this.position = position || "absolute";
this.overflow = overflow || "hidden";
this.display = display || "block";
this.visible = true;
this.buttonMode;
this.x = 0;
this.y = 0;
this.z = 0;
this.angleX = 0;
this.angleY = 0;
this.angleZ = 0;
this.perspective = 0;
this.zIndex = 0;
this.scale = 1;
this.w = 0;
this.h = 0;
this.rect;
this.alpha = 1;
this.innerHTML = "";
this.opacityType = "";
this.isHtml5_bl = false;
this.hasTransform3d_bl = FWDS3DCUtils.hasTransform3d;
this.hasTransform2d_bl = FWDS3DCUtils.hasTransform2d;
//##############################//
/* init */
//#############################//
this.init = function(){
this.setScreen();
};
//######################################//
/* check if it supports transforms. */
//######################################//
this.getTransform = function() {
var properties = ['transform', 'msTransform', 'WebkitTransform', 'MozTransform', 'OTransform'];
var p;
while (p = properties.shift()) {
if (typeof this.screen.style[p] !== 'undefined') {
return p;
}
}
return false;
};
//######################################//
/* set opacity type */
//######################################//
this.getOpacityType = function(){
var opacityType;
if (typeof this.screen.style.opacity != "undefined") {//ie9+
opacityType = "opacity";
}else{ //ie8
opacityType = "filter";
}
return opacityType;
};
//######################################//
/* setup main screen */
//######################################//
this.setScreen = function(element){
if(this.type == "img" && element){
this.screen = element;
this.setMainProperties();
}else{
this.screen = document.createElement(this.type);
this.setMainProperties();
}
};
//########################################//
/* set main properties */
//########################################//
this.setMainProperties = function(){
this.transform = this.getTransform();
this.setPosition(this.position);
this.setDisplay(this.display);
this.setOverflow(this.overflow);
this.opacityType = this.getOpacityType();
if(this.opacityType == "opacity") this.isHtml5_bl = true;
if(self.opacityType == "filter") self.screen.style.filter = "inherit";
this.screen.style.left = "0px";
this.screen.style.top = "0px";
this.screen.style.margin = "0px";
this.screen.style.padding = "0px";
this.screen.style.maxWidth = "none";
this.screen.style.maxHeight = "none";
this.screen.style.border = "none";
this.screen.style.lineHeight = "1";
this.screen.style.backgroundColor = "transparent";
//this.screen.style.backfaceVisibility = "hidden";
//this.screen.style.webkitBackfaceVisibility = "hidden";
//this.screen.style.MozBackfaceVisibility = "hidden";
this.screen.style.MozImageRendering = "optimizeSpeed";
this.screen.style.WebkitImageRendering = "optimizeSpeed";
if(type == "img"){
this.setWidth(this.screen.width);
this.setHeight(this.screen.height);
this.screen.onmousedown = function(e){return false;};
}
};
self.setBackfaceVisibility = function(){
self.screen.style.backfaceVisibility = "visible";
self.screen.style.webkitBackfaceVisibility = "visible";
self.screen.style.MozBackfaceVisibility = "visible";
};
self.removeBackfaceVisibility = function(){
self.screen.style.backfaceVisibility = "hidden";
self.screen.style.webkitBackfaceVisibility = "hidden";
self.screen.style.MozBackfaceVisibility = "hidden";
};
//###################################################//
/* set / get various peoperties.*/
//###################################################//
this.setSelectable = function(val){
if(!val){
try{this.screen.style.userSelect = "none";}catch(e){};
try{this.screen.style.MozUserSelect = "none";}catch(e){};
try{this.screen.style.webkitUserSelect = "none";}catch(e){};
try{this.screen.style.khtmlUserSelect = "none";}catch(e){};
try{this.screen.style.oUserSelect = "none";}catch(e){};
try{this.screen.style.msUserSelect = "none";}catch(e){};
try{this.screen.msUserSelect = "none";}catch(e){};
this.screen.ondragstart = function(e){return false;};
this.screen.onselectstart = function(){return false;};
this.screen.style.webkitTouchCallout='none';
}
};
this.getScreen = function(){
return self.screen;
};
this.setVisible = function(val){
this.visible = val;
if(this.visible == true){
this.screen.style.visibility = "visible";
}else{
this.screen.style.visibility = "hidden";
}
};
this.getVisible = function(){
return this.visible;
};
this.setResizableSizeAfterParent = function(){
this.screen.style.width = "100%";
this.screen.style.height = "100%";
};
this.getStyle = function(){
return this.screen.style;
};
this.setOverflow = function(val){
self.overflow = val;
self.screen.style.overflow = self.overflow;
};
this.setPosition = function(val){
self.position = val;
self.screen.style.position = self.position;
};
this.setDisplay = function(val){
this.display = val;
this.screen.style.display = this.display;
};
this.setButtonMode = function(val){
this.buttonMode = val;
if(this.buttonMode == true){
this.screen.style.cursor = "pointer";
}else{
this.screen.style.cursor = "default";
}
};
this.setBkColor = function(val){
self.screen.style.backgroundColor = val;
};
this.setInnerHTML = function(val){
self.innerHTML = val;
self.screen.innerHTML = self.innerHTML;
};
this.getInnerHTML = function(){
return self.innerHTML;
};
this.getRect = function(){
return self.screen.getBoundingClientRect();
};
this.setAlpha = function(val){
self.alpha = val;
if(self.opacityType == "opacity"){
self.screen.style.opacity = self.alpha;
}else if(self.opacityType == "filter"){
self.screen.style.filter = "alpha(opacity=" + self.alpha * 100 + ")";
self.screen.style.filter = "progid:DXImageTransform.Microsoft.Alpha(Opacity=" + Math.round(self.alpha * 100) + ")";
}
};
this.getAlpha = function(){
return self.alpha;
};
this.getRect = function(){
return this.screen.getBoundingClientRect();
};
this.getGlobalX = function(){
return this.getRect().left;
};
this.getGlobalY = function(){
return this.getRect().top;
};
this.setX = function(val){
self.x = val;
if(self.hasTransform3d_bl){
self.screen.style[self.transform] = "translate3d(" + self.x + "px," + self.y + "px," + self.z + "px) rotateX(" + self.angleX + "deg) rotateY(" + self.angleY + "deg) rotateZ(" + self.angleZ + "deg) scale3d(" + self.scale + ", " + self.scale + ", " + self.scale + ")";
}else if(self.hasTransform2d_bl){
self.screen.style[self.transform] = "translate(" + self.x + "px," + self.y + "px) scale(" + self.scale + ", " + self.scale + ")";
}else{
self.screen.style.left = self.x + "px";
}
};
this.getX = function(){
return self.x;
};
this.setY = function(val){
self.y = val;
if(self.hasTransform3d_bl){
self.screen.style[self.transform] = "translate3d(" + self.x + "px," + self.y + "px," + self.z + "px) rotateX(" + self.angleX + "deg) rotateY(" + self.angleY + "deg) rotateZ(" + self.angleZ + "deg) scale3d(" + self.scale + ", " + self.scale + ", " + self.scale + ")";
}else if(self.hasTransform2d_bl){
self.screen.style[self.transform] = "translate(" + self.x + "px," + self.y + "px) scale(" + self.scale + ", " + self.scale + ")";
}else{
self.screen.style.top = self.y + "px";
}
};
this.getY = function(){
return self.y;
};
this.setZ = function(val){
self.z = val;
if(self.hasTransform3d_bl){
self.screen.style[self.transform] = "translate3d(" + self.x + "px," + self.y + "px," + self.z + "px) rotateX(" + self.angleX + "deg) rotateY(" + self.angleY + "deg) rotateZ(" + self.angleZ + "deg) scale3d(" + self.scale + ", " + self.scale + ", " + self.scale + ")";
}
};
this.getZ = function(){
return self.z;
};
this.setAngleX = function(val){
self.angleX = val;
if(self.hasTransform3d_bl){
self.screen.style[self.transform] = "translate3d(" + self.x + "px," + self.y + "px," + self.z + "px) rotateX(" + self.angleX + "deg) rotateY(" + self.angleY + "deg) rotateZ(" + self.angleZ + "deg) scale3d(" + self.scale + ", " + self.scale + ", " + self.scale + ")";
}
};
this.getAngleX = function(){
return self.angleX;
};
this.setAngleY = function(val){
self.angleY = val;
if(self.hasTransform3d_bl){
self.screen.style[self.transform] = "translate3d(" + self.x + "px," + self.y + "px," + self.z + "px) rotateX(" + self.angleX + "deg) rotateY(" + self.angleY + "deg) rotateZ(" + self.angleZ + "deg) scale3d(" + self.scale + ", " + self.scale + ", " + self.scale + ")";
}
};
this.getAngleY = function(){
return self.angleY;
};
this.setAngleZ = function(val){
self.angleZ = val;
if(self.hasTransform3d_bl){
self.screen.style[self.transform] = "translate3d(" + self.x + "px," + self.y + "px," + self.z + "px) rotateX(" + self.angleX + "deg) rotateY(" + self.angleY + "deg) rotateZ(" + self.angleZ + "deg) scale3d(" + self.scale + ", " + self.scale + ", " + self.scale + ")";
}
};
this.getAngleZ = function(){
return self.angleZ;
};
this.setScale2 = function(val){
self.scale = val;
if(self.hasTransform2d_bl){
self.screen.style[self.transform] = "translate(" + self.x + "px," + self.y + "px) scale(" + self.scale + ", " + self.scale + ")";
}
};
this.setScale3D = function(val){
self.scale = val;
if(self.hasTransform3d_bl){
self.screen.style[self.transform] = "translate3d(" + self.x + "px," + self.y + "px," + self.z + "px) rotateX(" + self.angleX + "deg) rotateY(" + self.angleY + "deg) rotateZ(" + self.angleZ + "deg) scale3d(" + self.scale + ", " + self.scale + ", " + self.scale + ")";
}else if(self.hasTransform2d_bl){
self.screen.style[self.transform] = "translate(" + self.x + "px," + self.y + "px) scale(" + self.scale + ", " + self.scale + ")";
}
};
this.getScale = function(){
return self.scale;
};
this.setPerspective = function(val){
self.perspective = val;
self.screen.style.perspective = self.perspective + "px";
self.screen.style.WebkitPerspective = self.perspective + "px";
self.screen.style.MozPerspective = self.perspective + "px";
self.screen.style.msPerspective = self.perspective + "px";
self.screen.style.OPerspective = self.perspective + "px";
};
this.setPreserve3D = function(){
this.screen.style.transformStyle = "preserve-3d";
this.screen.style.WebkitTransformStyle = "preserve-3d";
this.screen.style.MozTransformStyle = "preserve-3d";
this.screen.style.msTransformStyle = "preserve-3d";
this.screen.style.OTransformStyle = "preserve-3d";
};
this.setZIndex = function(val)
{
self.zIndex = val;
self.screen.style.zIndex = self.zIndex;
};
this.getZIndex = function()
{
return self.zIndex;
};
this.setWidth = function(val){
self.w = val;
if(self.type == "img"){
self.screen.width = self.w;
}
self.screen.style.width = self.w + "px";
};
this.getWidth = function(){
if(self.type == "div"){
if(self.screen.offsetWidth != 0) return self.screen.offsetWidth;
return self.w;
}else if(self.type == "img"){
if(self.screen.offsetWidth != 0) return self.screen.offsetWidth;
if(self.screen.width != 0) return self.screen.width;
return self._w;
}else if( self.type == "canvas"){
if(self.screen.offsetWidth != 0) return self.screen.offsetWidth;
return self.w;
}
};
this.setHeight = function(val){
self.h = val;
if(self.type == "img"){
self.screen.height = self.h;
}
self.screen.style.height = self.h + "px";
};
this.getHeight = function(){
if(self.type == "div"){
if(self.screen.offsetHeight != 0) return self.screen.offsetHeight;
return self.h;
}else if(self.type == "img"){
if(self.screen.offsetHeight != 0) return self.screen.offsetHeight;
if(self.screen.height != 0) return self.screen.height;
return self.h;
}else if(self.type == "canvas"){
if(self.screen.offsetHeight != 0) return self.screen.offsetHeight;
return self.h;
}
};
this.getNumChildren = function(){
return self.children_ar.length;
};
this.setCSSGradient = function(color1, color2)
{
if (FWDS3DCUtils.isIEAndLessThen10)
{
self.setBkColor(color1);
}
else
{
self.screen.style.backgroundImage = "-webkit-linear-gradient(top, " + color1 + ", " + color2 + ")";
self.screen.style.backgroundImage = "-moz-linear-gradient(top, " + color1 + ", " + color2 + ")";
self.screen.style.backgroundImage = "-ms-linear-gradient(top, " + color1 + ", " + color2 + ")";
self.screen.style.backgroundImage = "-o-linear-gradient(top, " + color1 + ", " + color2 + ")";
}
};
//#####################################//
/* DOM list */
//#####################################//
this.addChild = function(e){
if(this.contains(e)){
this.children_ar.splice(FWDS3DCUtils.indexOfArray(this.children_ar, e), 1);
this.children_ar.push(e);
this.screen.appendChild(e.screen);
}else{
this.children_ar.push(e);
this.screen.appendChild(e.screen);
}
};
this.removeChild = function(e){
if(this.contains(e)){
this.children_ar.splice(FWDS3DCUtils.indexOfArray(this.children_ar, e), 1);
this.screen.removeChild(e.screen);
}else{
throw Error("##removeChild()## Child doesn't exist, it can't be removed!");
};
};
this.contains = function(e){
if(FWDS3DCUtils.indexOfArray(this.children_ar, e) == -1){
return false;
}else{
return true;
}
};
this.addChildAtZero = function(e){
if(this.numChildren == 0){
this.children_ar.push(e);
this.screen.appendChild(e.screen);
}else{
this.screen.insertBefore(e.screen, this.children_ar[0].screen);
if(this.contains(e)){this.children_ar.splice(FWDS3DCUtils.indexOfArray(this.children_ar, e), 1);}
this.children_ar.unshift(e);
}
};
this.getChildAt = function(index){
if(index < 0 || index > this.numChildren -1) throw Error("##getChildAt()## Index out of bounds!");
if(this.numChildren == 0) throw Errror("##getChildAt## Child dose not exist!");
return this.children_ar[index];
};
this.removeChildAtZero = function(){
this.screen.removeChild(this.children_ar[0].screen);
this.children_ar.shift();
};
//################################//
/* event dispatcher */
//#################################//
this.addListener = function (type, listener){
if(type == undefined) throw Error("type is required.");
if(typeof type === "object") throw Error("type must be of type String.");
if(typeof listener != "function") throw Error("listener must be of type Function.");
var event = {};
event.type = type;
event.listener = listener;
event.target = this;
this.listeners.events_ar.push(event);
};
this.dispatchEvent = function(type, props){
if(type == undefined) throw Error("type is required.");
if(typeof type === "object") throw Error("type must be of type String.");
for (var i=0, len=this.listeners.events_ar.length; i < len; i++){
if(this.listeners.events_ar[i].target === this && this.listeners.events_ar[i].type === type){
if(props){
for(var prop in props){
this.listeners.events_ar[i][prop] = props[prop];
}
}
this.listeners.events_ar[i].listener.call(this, this.listeners.events_ar[i]);
break;
}
}
};
this.removeListener = function(type, listener){
if(type == undefined) throw Error("type is required.");
if(typeof type === "object") throw Error("type must be of type String.");
if(typeof listener != "function") throw Error("listener must be of type Function." + type);
for (var i=0, len=this.listeners.events_ar.length; i < len; i++){
if(this.listeners.events_ar[i].target === this
&& this.listeners.events_ar[i].type === type
&& this.listeners.events_ar[i].listener === listener
){
this.listeners.events_ar.splice(i,1);
break;
}
}
};
//###########################################//
/* destroy methods*/
//###########################################//
this.disposeImage = function(){
if(this.type == "img") this.screen.src = "";
};
this.destroy = function(){
try{this.screen.parentNode.removeChild(this.screen);}catch(e){};
this.screen.onselectstart = null;
this.screen.ondragstart = null;
this.screen.ontouchstart = null;
this.screen.ontouchmove = null;
this.screen.ontouchend = null;
this.screen.onmouseover = null;
this.screen.onmouseout = null;
this.screen.onmouseup = null;
this.screen.onmousedown = null;
this.screen.onmousemove = null;
this.screen.onclick = null;
delete this.screen;
delete this.style;
delete this.rect;
delete this.selectable;
delete this.buttonMode;
delete this.position;
delete this.overflow;
delete this.visible;
delete this.innerHTML;
delete this.numChildren;
delete this.x;
delete this.y;
delete this.w;
delete this.h;
delete this.opacityType;
delete this.isHtml5_bl;
delete this.hasTransform3d_bl;
delete this.hasTransform2d_bl;
this.children_ar = null;
this.style = null;
this.screen = null;
this.numChildren = null;
this.transform = null;
this.position = null;
this.overflow = null;
this.display= null;
this.visible= null;
this.buttonMode = null;
this.globalX = null;
this.globalY = null;
this.x = null;
this.y = null;
this.w = null;;
this.h = null;;
this.rect = null;
this.alpha = null;
this.innerHTML = null;
this.opacityType = null;
this.isHtml5_bl = null;
this.hasTransform3d_bl = null;
this.hasTransform2d_bl = null;
self = null;
};
/* init */
this.init();
};
window.FWDS3DCDisplayObject3D = FWDS3DCDisplayObject3D;
}(window));(function (){
var FWDS3DCEventDispatcher = function (){
this.listeners = {events_ar:[]};
this.addListener = function (type, listener){
if(type == undefined) throw Error("type is required.");
if(typeof type === "object") throw Error("type must be of type String.");
if(typeof listener != "function") throw Error("listener must be of type Function.");
var event = {};
event.type = type;
event.listener = listener;
event.target = this;
this.listeners.events_ar.push(event);
};
this.dispatchEvent = function(type, props){
if(this.listeners == null) return;
if(type == undefined) throw Error("type is required.");
if(typeof type === "object") throw Error("type must be of type String.");
for (var i=0, len=this.listeners.events_ar.length; i < len; i++){
if(this.listeners.events_ar[i].target === this && this.listeners.events_ar[i].type === type){
if(props){
for(var prop in props){
this.listeners.events_ar[i][prop] = props[prop];
}
}
this.listeners.events_ar[i].listener.call(this, this.listeners.events_ar[i]);
}
}
};
this.removeListener = function(type, listener){
if(type == undefined) throw Error("type is required.");
if(typeof type === "object") throw Error("type must be of type String.");
if(typeof listener != "function") throw Error("listener must be of type Function." + type);
for (var i=0, len=this.listeners.events_ar.length; i < len; i++){
if(this.listeners.events_ar[i].target === this
&& this.listeners.events_ar[i].type === type
&& this.listeners.events_ar[i].listener === listener
){
this.listeners.events_ar.splice(i,1);
break;
}
}
};
/* destroy */
this.destroy = function(){
this.listeners = null;
this.addListener = null;
this.dispatchEvent = null;
this.removeListener = null;
};
};
window.FWDS3DCEventDispatcher = FWDS3DCEventDispatcher;
}(window));/* Info screen */
(function (window){
var FWDS3DCInfoWindow = function(parent, warningIconPath){
var self = this;
var prototype = FWDS3DCInfoWindow.prototype;
this.textHolder_do = null;
this.img_do;
this.warningIconPath_str = warningIconPath;
this.show_to = null;
this.isShowed_bl = false;
this.isShowedOnce_bl = false;
this.allowToRemove_bl = true;
//#################################//
/* init */
//#################################//
this.init = function(){
self.setResizableSizeAfterParent();
self.getStyle().width = "80%";
self.textHolder_do = new FWDS3DCDisplayObject("div");
if(!FWDS3DCUtils.isIEAndLessThen9) self.textHolder_do.getStyle().font = "Arial";
self.textHolder_do.getStyle().wordWrap = "break-word";
self.textHolder_do.getStyle().padding = "10px";
self.textHolder_do.getStyle().paddingLeft = "42px";
self.textHolder_do.getStyle().lineHeight = "18px";
self.textHolder_do.getStyle().color = "#000000";
self.textHolder_do.setBkColor("#EEEEEE");
var img_img = new Image();
img_img.src = this.warningIconPath_str;
this.img_do = new FWDS3DCDisplayObject("img");
this.img_do.setScreen(img_img);
this.img_do.setWidth(28);
this.img_do.setHeight(28);
self.addChild(self.textHolder_do);
self.addChild(self.img_do);
};
this.showText = function(txt){
if(!self.isShowedOnce_bl){
if(self.screen.addEventListener){
self.screen.addEventListener("click", self.closeWindow);
}else if(self.screen.attachEvent){
self.screen.attachEvent("onclick", self.closeWindow);
}
self.isShowedOnce_bl = true;
}
//self.setX(-800);
//if(self.allowToRemove_bl){
// self.textHolder_do.setInnerHTML(txt + "Click or tap to close this window.");
// }else{
self.textHolder_do.setInnerHTML(txt);
//}
clearTimeout(self.show_to);
self.show();
};
this.show = function(){
self.isShowed_bl = true;
self.setVisible(true);
setTimeout(function(){
self.positionAndResize();
}, 60);
};
this.positionAndResize = function(){
self.setHeight(self.textHolder_do.getHeight());
self.img_do.setX(6);
self.img_do.setY(parseInt((self.h - self.img_do.h)/2));
};
this.closeWindow = function(){
if(!self.allowToRemove_bl) return;
self.isShowed_bl = false;
clearTimeout(self.show_to);
try{parent.main_do.removeChild(self);}catch(e){}
};
this.init();
};
/* set prototype */
FWDS3DCInfoWindow.setPrototype = function(){
FWDS3DCInfoWindow.prototype = new FWDS3DCDisplayObject("div", "relative");
};
FWDS3DCInfoWindow.prototype = null;
window.FWDS3DCInfoWindow = FWDS3DCInfoWindow;
}(window));/* FWDS3DCSimpleButton */
(function (window){
var FWDS3DCSimpleButton = function(nImg, sImg){
var self = this;
var prototype = FWDS3DCSimpleButton.prototype;
this.nImg = nImg;
this.sImg = sImg;
this.n_do;
this.s_do;
this.isMobile_bl = FWDS3DCUtils.isMobile;
this.hasPointerEvent_bl = FWDS3DCUtils.hasPointerEvent;
//##########################################//
/* initialize this */
//##########################################//
this.init = function(){
this.setupMainContainers();
};
//##########################################//
/* setup main containers */
//##########################################//
this.setupMainContainers = function(){
this.n_do = new FWDS3DCSimpleDisplayObject("img");
this.n_do.setScreen(this.nImg);
this.s_do = new FWDS3DCSimpleDisplayObject("img");
this.s_do.setScreen(this.sImg);
this.addChild(this.s_do);
this.addChild(this.n_do);
this.setWidth(this.nImg.width);
this.setHeight(this.nImg.height);
this.setButtonMode(true);
if(self.isMobile_bl){
if(self.hasPointerEvent_bl){
self.screen.addEventListener("MSPointerOver", self.onMouseOver);
self.screen.addEventListener("MSPointerOut", self.onMouseOut);
self.screen.addEventListener("MSPointerUp", self.onClick);
}else{
self.screen.addEventListener("touchstart", self.onClick);
}
}else if(self.screen.addEventListener){
self.screen.addEventListener("mouseover", self.onMouseOver);
self.screen.addEventListener("mouseout", self.onMouseOut);
self.screen.addEventListener("mouseup", self.onClick);
}else if(self.screen.attachEvent){
self.screen.attachEvent("onmouseover", self.onMouseOver);
self.screen.attachEvent("onmouseout", self.onMouseOut);
self.screen.attachEvent("onmouseup", self.onClick);
}
};
this.onMouseOver = function(e){
if(!e.pointerType || e.pointerType == e.MSPOINTER_TYPE_MOUSE){
FWDAnimation.to(self.n_do, .9, {alpha:0, ease:Expo.easeOut});
}
};
this.onMouseOut = function(e){
if(!e.pointerType || e.pointerType == e.MSPOINTER_TYPE_MOUSE){
FWDAnimation.to(self.n_do, .9, {alpha:1, ease:Expo.easeOu});
}
};
this.onClick = function(e){
self.dispatchEvent(FWDS3DCSimpleButton.CLICK);
};
//##############################//
/* destroy */
//##############################//
this.destroy = function(){
if(self.isMobile_bl){
if(self.hasPointerEvent_bl){
self.screen.removeEventListener("MSPointerOver", self.onMouseOver);
self.screen.removeEventListener("MSPointerOut", self.onMouseOut);
self.screen.removeEventListener("MSPointerUp", self.onClick);
}else{
self.screen.removeEventListener("touchstart", self.onClick);
}
}else if(self.screen.removeEventListener){
self.screen.removeEventListener("mouseover", self.onMouseOver);
self.screen.removeEventListener("mouseout", self.onMouseOut);
self.screen.removeEventListener("mouseup", self.onClick);
}else if(self.screen.detachEvent){
self.screen.detachEvent("onmouseover", self.onMouseOver);
self.screen.detachEvent("onmouseout", self.onMouseOut);
self.screen.detachEvent("onmouseup", self.onClick);
}
FWDAnimation.killTweensOf(self.n_do);
self.n_do.destroy();
self.s_do.destroy();
self.nImg = null;
self.sImg = null;
self.n_do = null;
self.s_do = null;
nImg = null;
sImg = null;
self.setInnerHTML("");
prototype.destroy();
self = null;
prototype = null;
FWDS3DCSimpleButton.prototype = null;
};
this.init();
};
/* set prototype */
FWDS3DCSimpleButton.setPrototype = function(){
FWDS3DCSimpleButton.prototype = new FWDS3DCDisplayObject("div");
};
FWDS3DCSimpleButton.CLICK = "onClick";
FWDS3DCSimpleButton.prototype = null;
window.FWDS3DCSimpleButton = FWDS3DCSimpleButton;
}(window));/* Simple Display object */
(function (window){
/*
* @ type values: div, img.
* @ positon values: relative, absolute.
* @ positon values: hidden.
* @ display values: block, inline-block, self applies only if the position is relative.
*/
var FWDS3DCSimpleDisplayObject = function(type, position, overflow, display){
var self = this;
if(type == "div" || type == "img" || type == "canvas"){
self.type = type;
}else{
throw Error("Type is not valid! " + type);
}
this.style;
this.screen;
this.transform;
this.position = position || "absolute";
this.overflow = overflow || "hidden";
this.display = display || "block";
this.visible = true;
this.buttonMode;
this.x = 0;
this.y = 0;
this.w = 0;
this.h = 0;
this.rect;
this.alpha = 1;
this.innerHTML = "";
this.opacityType = "";
this.isHtml5_bl = false;
this.isMobile_bl = FWDS3DCUtils.isMobile;
this.hasTransform3d_bl = FWDS3DCUtils.hasTransform3d;
this.hasTransform2d_bl = FWDS3DCUtils.hasTransform2d;
if(FWDS3DCUtils.isFirefox) self.hasTransform3d_bl = false;
if(FWDS3DCUtils.isFirefox) self.hasTransform2d_bl = false;
this.hasBeenSetSelectable_bl = false;
//##############################//
/* init */
//#############################//
self.init = function(){
self.setScreen();
};
//######################################//
/* check if it supports transforms. */
//######################################//
self.getTransform = function() {
var properties = ['transform', 'msTransform', 'WebkitTransform', 'MozTransform', 'OTransform'];
var p;
while (p = properties.shift()) {
if (typeof self.screen.style[p] !== 'undefined') {
return p;
}
}
return false;
};
//######################################//
/* set opacity type */
//######################################//
self.getOpacityType = function(){
var opacityType;
if (typeof self.screen.style.opacity != "undefined") {//ie9+
opacityType = "opacity";
}else{ //ie8
opacityType = "filter";
}
return opacityType;
};
//######################################//
/* setup main screen */
//######################################//
self.setScreen = function(element){
if(self.type == "img" && element){
self.screen = element;
self.setMainProperties();
}else{
self.screen = document.createElement(self.type);
self.setMainProperties();
}
};
//########################################//
/* set main properties */
//########################################//
self.setMainProperties = function(){
self.transform = self.getTransform();
self.setPosition(self.position);
self.setDisplay(self.display);
self.setOverflow(self.overflow);
self.opacityType = self.getOpacityType();
if(self.opacityType == "opacity") self.isHtml5_bl = true;
if(self.opacityType == "filter") self.screen.style.filter = "inherit";
self.screen.style.left = "0px";
self.screen.style.top = "0px";
self.screen.style.margin = "0px";
self.screen.style.padding = "0px";
self.screen.style.maxWidth = "none";
self.screen.style.maxHeight = "none";
self.screen.style.border = "none";
self.screen.style.lineHeight = "1";
self.screen.style.backgroundColor = "transparent";
self.screen.style.backfaceVisibility = "hidden";
self.screen.style.webkitBackfaceVisibility = "hidden";
self.screen.style.MozBackfaceVisibility = "hidden";
if(type == "img"){
self.setWidth(self.screen.width);
self.setHeight(self.screen.height);
self.setSelectable(false);
}
};
//###################################################//
/* set / get various peoperties.*/
//###################################################//
self.setSelectable = function(val){
if(!val){
self.screen.style.userSelect = "none";
self.screen.style.MozUserSelect = "none";
self.screen.style.webkitUserSelect = "none";
self.screen.style.khtmlUserSelect = "none";
self.screen.style.oUserSelect = "none";
self.screen.style.msUserSelect = "none";
self.screen.msUserSelect = "none";
self.screen.ondragstart = function(e){return false;};
self.screen.onselectstart = function(){return false;};
self.screen.ontouchstart = function(e){return false;};
self.screen.style.webkitTouchCallout='none';
self.hasBeenSetSelectable_bl = true;
}
};
self.setBackfaceVisibility = function(){
self.screen.style.backfaceVisibility = "visible";
self.screen.style.webkitBackfaceVisibility = "visible";
self.screen.style.MozBackfaceVisibility = "visible";
};
self.removeBackfaceVisibility = function(){
self.screen.style.backfaceVisibility = "hidden";
self.screen.style.webkitBackfaceVisibility = "hidden";
self.screen.style.MozBackfaceVisibility = "hidden";
};
self.getScreen = function(){
return self.screen;
};
self.setVisible = function(val){
self.visible = val;
if(self.visible == true){
self.screen.style.visibility = "visible";
}else{
self.screen.style.visibility = "hidden";
}
};
self.getVisible = function(){
return self.visible;
};
self.setResizableSizeAfterParent = function(){
self.screen.style.width = "100%";
self.screen.style.height = "100%";
};
self.getStyle = function(){
return self.screen.style;
};
self.setOverflow = function(val){
self.overflow = val;
self.screen.style.overflow = self.overflow;
};
self.setPosition = function(val){
self.position = val;
self.screen.style.position = self.position;
};
self.setDisplay = function(val){
self.display = val;
self.screen.style.display = self.display;
};
self.setButtonMode = function(val){
self.buttonMode = val;
if(self.buttonMode == true){
self.screen.style.cursor = "pointer";
}else{
self.screen.style.cursor = "default";
}
};
self.setBkColor = function(val){
self.screen.style.backgroundColor = val;
};
self.setInnerHTML = function(val){
self.innerHTML = val;
self.screen.innerHTML = self.innerHTML;
};
self.getInnerHTML = function(){
return self.innerHTML;
};
self.getRect = function(){
return self.screen.getBoundingClientRect();
};
self.setAlpha = function(val){
self.alpha = val;
if(self.opacityType == "opacity"){
self.screen.style.opacity = self.alpha;
}else if(self.opacityType == "filter"){
self.screen.style.filter = "alpha(opacity=" + self.alpha * 100 + ")";
self.screen.style.filter = "progid:DXImageTransform.Microsoft.Alpha(Opacity=" + Math.round(self.alpha * 100) + ")";
}
};
self.getAlpha = function(){
return self.alpha;
};
self.getRect = function(){
return self.screen.getBoundingClientRect();
};
self.getGlobalX = function(){
return self.getRect().left;
};
self.getGlobalY = function(){
return self.getRect().top;
};
self.setX = function(val){
self.x = val;
if(self.isMobile_bl){
self.screen.style[self.transform] = 'translate(' + self.x + 'px,' + self.y + 'px)';
}else if(self.hasTransform3d_bl){
self.screen.style[self.transform] = 'translate3d(' + self.x + 'px,' + self.y + 'px,0)';
}else if(self.hasTransform2d_bl){
self.screen.style[self.transform] = 'translate(' + self.x + 'px,' + self.y + 'px)';
}else{
self.screen.style.left = self.x + "px";
}
};
self.getX = function(){
return self.x;
};
self.setY = function(val){
self.y = val;
if(self.isMobile_bl){
self.screen.style[self.transform] = 'translate(' + self.x + 'px,' + self.y + 'px)';
}else if(self.hasTransform3d_bl && !FWDS3DCUtils.isAndroid){
self.screen.style[self.transform] = 'translate3d(' + self.x + 'px,' + self.y + 'px,0)';
}else if(self.hasTransform2d_bl){
self.screen.style[self.transform] = 'translate(' + self.x + 'px,' + self.y + 'px)';
}else{
self.screen.style.top = self.y + "px";
}
};
self.getY = function(){
return self.y;
};
self.setWidth = function(val){
self.w = val;
if (self.w < 0)
{
return;
}
if(self.type == "img"){
self.screen.width = self.w;
}
self.screen.style.width = self.w + "px";
};
self.getWidth = function(){
if(self.type == "div"){
if(self.screen.offsetWidth != 0) return self.screen.offsetWidth;
return self.w;
}else if(self.type == "img"){
if(self.screen.offsetWidth != 0) return self.screen.offsetWidth;
if(self.screen.width != 0) return self.screen.width;
return self._w;
}else if( self.type == "canvas"){
if(self.screen.offsetWidth != 0) return self.screen.offsetWidth;
return self.w;
}
};
self.setHeight = function(val){
self.h = val;
if(self.type == "img"){
self.screen.height = self.h;
}
self.screen.style.height = self.h + "px";
};
self.getHeight = function(){
if(self.type == "div"){
if(self.screen.offsetHeight != 0) return self.screen.offsetHeight;
return self.h;
}else if(self.type == "img"){
if(self.screen.offsetHeight != 0) return self.screen.offsetHeight;
if(self.screen.height != 0) return self.screen.height;
return self.h;
}else if(self.type == "canvas"){
if(self.screen.offsetHeight != 0) return self.screen.offsetHeight;
return self.h;
}
};
this.setCSSGradient = function(color1, color2){
if (FWDS3DCUtils.isIEAndLessThen10)
{
self.setBkColor(color1);
}
else
{
self.screen.style.backgroundImage = "-webkit-linear-gradient(top, " + color1 + ", " + color2 + ")";
self.screen.style.backgroundImage = "-moz-linear-gradient(top, " + color1 + ", " + color2 + ")";
self.screen.style.backgroundImage = "-ms-linear-gradient(top, " + color1 + ", " + color2 + ")";
self.screen.style.backgroundImage = "-o-linear-gradient(top, " + color1 + ", " + color2 + ")";
}
};
//###########################################//
/* destroy methods*/
//###########################################//
self.disposeImage = function()
{
if (self.type == "img")
{
self.screen.onload = null;
self.screen.onerror = null;
self.screen.src = "";
}
};
self.destroy = function(){
//try{self.screen.parentNode.removeChild(self.screen);}catch(e){};
if(self.hasBeenSetSelectable_bl){
self.screen.ondragstart = null;
self.screen.onselectstart = null;
self.screen.ontouchstart = null;
};
self.screen.removeAttribute("style");
//destroy properties
self.style = null;
self.screen = null;
self.transform = null;
self.position = null;
self.overflow = null;
self.display = null;
self.visible = null;
self.buttonMode = null;
self.x = null;
self.y = null;
self.w = null;
self.h = null;
self.rect = null;
self.alpha = null;
self.innerHTML = null;
self.opacityType = null;
self.isHtml5_bl = null;
type = null;
position = null;
overflow = null;
display = null;
self.hasTransform3d_bl = null;
self.hasTransform2d_bl = null;
self = null;
};
/* init */
self.init();
};
window.FWDS3DCSimpleDisplayObject = FWDS3DCSimpleDisplayObject;
}(window));/* thumb */
(function(window)
{
var FWDS3DCThumb = function(id, data, parent, link, target)
{
var self = this;
var prototype = FWDS3DCThumb.prototype;
this.id = id;
this.borderSize = data.thumbBorderSize;
this.backgroundColor = data.thumbBackgroundColor;
this.borderColor1 = data.thumbBorderColor1;
this.borderColor2 = data.thumbBorderColor2;
this.mainDO = null;
this.borderDO = null;
this.bgDO = null;
this.imageHolderDO = null;
this.imageDO = null;
this.htmlContentDO = null;
this.reflCanvasDO = null;
this.textHolderDO = null;
this.textGradientDO = null;
this.textDO = null;
this.thumbWidth = data.thumbWidth;
this.thumbHeight = data.thumbHeight;
this.mouseX = 0;
this.mouseY = 0;
this.link = link;
this.target = target;
this.pos;
this.thumbScale = 1;
this.showBoxShadow = data.showBoxShadow;
this.curDataListAr;
this.isOver = false;
this.hasText = false;
this.isMobile = FWDS3DCUtils.isMobile;
this.hasPointerEvent = FWDS3DCUtils.hasPointerEvent;
/* init */
this.init = function()
{
self.setupScreen();
};
/* setup screen */
this.setupScreen = function()
{
if (FWDS3DCUtils.isIOS)
{
self.mainDO = new FWDS3DCDisplayObject3D("div", "absolute", "visible");
self.addChild(self.mainDO);
self.mainDO.setZ(1);
}
else
{
self.mainDO = new FWDS3DCDisplayObject("div", "absolute", "visible");
self.addChild(self.mainDO);
}
self.mainDO.setWidth(self.thumbWidth);
self.mainDO.setHeight(self.thumbHeight);
self.setWidth(self.thumbWidth);
self.setHeight(self.thumbHeight);
if (data.showThumbnailsHtmlContent || !data.transparentImages)
{
self.borderDO = new FWDS3DCSimpleDisplayObject("div");
self.bgDO = new FWDS3DCSimpleDisplayObject("div");
self.mainDO.addChild(self.borderDO);
self.mainDO.addChild(self.bgDO);
self.borderDO.setWidth(self.thumbWidth);
self.borderDO.setHeight(self.thumbHeight);
self.bgDO.setWidth(self.thumbWidth - self.borderSize * 2);
self.bgDO.setHeight(self.thumbHeight - self.borderSize * 2);
self.bgDO.setX(self.borderSize);
self.bgDO.setY(self.borderSize);
self.borderDO.setCSSGradient(self.borderColor1, self.borderColor2);
self.bgDO.setBkColor(self.backgroundColor);
if (FWDS3DCUtils.isAndroid)
{
self.borderDO.setBackfaceVisibility();
self.bgDO.setBackfaceVisibility();
}
}
else
{
self.borderSize = 0;
}
self.imageHolderDO = new FWDS3DCDisplayObject("div");
self.mainDO.addChild(self.imageHolderDO);
self.curDataListAr = parent.curDataListAr;
self.updateButtonMode();
if (FWDS3DCUtils.isAndroid)
{
self.setBackfaceVisibility();
self.mainDO.setBackfaceVisibility();
self.imageHolderDO.setBackfaceVisibility();
}
if (self.showBoxShadow)
{
self.mainDO.screen.style.boxShadow = data.thumbBoxShadowCss;
}
if (self.isMobile)
{
if (self.hasPointerEvent)
{
self.mainDO.screen.addEventListener("MSPointerUp", self.onMouseTouchHandler);
}
else
{
self.mainDO.screen.addEventListener("touchend", self.onMouseTouchHandler);
}
}
else
{
if (self.screen.addEventListener)
{
self.mainDO.screen.addEventListener("click", self.onMouseClickHandler);
}
else
{
self.mainDO.screen.attachEvent("onclick", self.onMouseClickHandler);
}
}
};
this.updateButtonMode = function(){
if (self.isMobile || (self.curDataListAr[self.id].type_str != "none") && !parent.useDrag)
{
self.mainDO.setButtonMode(true);
}else{
self.mainDO.getStyle().cursor = null;
}
};
this.addReflection = function()
{
if (!self.imageDO || self.isMobile || FWDS3DCUtils.isIEAndLessThen9)
return;
var imgW = self.thumbWidth - self.borderSize * 2;
var imgH = self.thumbHeight - self.borderSize * 2;
self.reflCanvasDO = new FWDS3DCSimpleDisplayObject("canvas");
self.addChild(self.reflCanvasDO);
self.reflCanvasDO.screen.width = parent.thumbWidth;
self.reflCanvasDO.screen.height = parent.reflHeight;
var context = self.reflCanvasDO.screen.getContext("2d");
context.save();
context.translate(0, self.thumbHeight);
context.scale(1, -1);
if (data.showThumbnailsHtmlContent || !data.transparentImages)
{
context.fillStyle = self.borderColor1;
context.fillRect(0, 0, self.thumbWidth, self.thumbHeight);
}
context.drawImage(self.imageDO.screen, self.borderSize, self.borderSize, imgW, imgH);
context.restore();
context.globalCompositeOperation = "destination-out";
var gradient = context.createLinearGradient(0, 0, 0, parent.reflHeight);
gradient.addColorStop(0, "rgba(255, 255, 255, " + (1-parent.reflAlpha) + ")");
gradient.addColorStop(1, "rgba(255, 255, 255, 1.0)");
context.fillStyle = gradient;
context.fillRect(0, 0, self.thumbWidth, parent.reflHeight + 2);
self.setWidth(self.thumbWidth);
self.reflCanvasDO.setY(self.thumbHeight + parent.reflDist);
};
this.addImage = function(image)
{
self.imageDO = new FWDS3DCSimpleDisplayObject("img");
self.imageDO.setScreen(image);
self.imageHolderDO.addChild(self.imageDO);
self.imageDO.screen.ontouchstart = null;
if (FWDS3DCUtils.isAndroid)
{
self.imageDO.setBackfaceVisibility();
}
self.imageDO.setWidth(self.thumbWidth - self.borderSize * 2);
self.imageDO.setHeight(self.thumbHeight - self.borderSize * 2);
self.imageHolderDO.setX(self.borderSize);
self.imageHolderDO.setY(self.borderSize);
self.imageHolderDO.setWidth(self.thumbWidth - self.borderSize * 2);
self.imageHolderDO.setHeight(self.thumbHeight - self.borderSize * 2);
if (parent.showRefl)
{
self.addReflection();
}
};
this.addHtmlContent = function()
{
self.htmlContentDO = new FWDS3DCSimpleDisplayObject("div");
self.htmlContentDO.setInnerHTML(self.curDataListAr[self.id].htmlContent);
self.imageHolderDO.addChild(self.htmlContentDO);
if (FWDS3DCUtils.isAndroid)
{
self.htmlContentDO.setBackfaceVisibility();
}
self.htmlContentDO.setWidth(self.thumbWidth - self.borderSize * 2);
self.htmlContentDO.setHeight(self.thumbHeight - self.borderSize * 2);
self.imageHolderDO.setX(self.borderSize);
self.imageHolderDO.setY(self.borderSize);
self.imageHolderDO.setWidth(self.thumbWidth - self.borderSize * 2);
self.imageHolderDO.setHeight(self.thumbHeight - self.borderSize * 2);
};
this.addText = function(textHolderDO, textGradientDO, textDO)
{
if (self.curDataListAr[self.id].emptyText)
return;
self.textHolderDO = textHolderDO;
self.textGradientDO = textGradientDO;
self.textDO = textDO;
self.positionText();
self.textDO.setInnerHTML(self.curDataListAr[self.id].thumbText);
self.textTitleOffset = self.curDataListAr[self.id].textTitleOffset;
self.textDescriptionOffsetTop = self.curDataListAr[self.id].textDescriptionOffsetTop;
self.textDescriptionOffsetBottom = self.curDataListAr[self.id].textDescriptionOffsetBottom;
if (!data.showTextBackgroundImage || parent.showTextUnderThumbnail_bl)
{
self.textGradientDO.setBkColor("transparent");
}
self.textHolderDO.setAlpha(0);
self.setTextHeightId = setTimeout(self.setTextHeight, 10);
};
this.positionText = function(){
if(!self.textHolderDO) return;
if(parent.showTextUnderThumbnail_bl){
if(!parent.contains(self.textHolderDO)) parent.addChild(self.textHolderDO);
var offset = Math.round(parent.stageHeight - (parent.stageHeight * parent.parent.scale))/2;
self.textHolderDO.setX(Math.round(parent.stageWidth/2 -(self.thumbWidth)/2));
self.textHolderDO.setY(Math.round(parent.stageHeight/2 + self.getHeight()/2 + parent.carRadiusY + parent.carYOffset) - offset );
}else{
self.mainDO.addChild(self.textHolderDO);
self.textHolderDO.setX(self.borderSize);
self.textHolderDO.setY(self.borderSize);
}
}
this.setTextHeight = function()
{
if (!self.textHolderDO)
return;
self.textHeight = self.textDO.getHeight();
if (data.showFullTextWithoutHover)
{
if(!parent.showTextUnderThumbnail_bl){
self.textGradientDO.setY(self.thumbHeight - self.borderSize * 2 - self.textDescriptionOffsetTop - self.textHeight - self.textDescriptionOffsetBottom);
self.textDO.setY(self.thumbHeight - self.borderSize * 2 - self.textHeight - self.textDescriptionOffsetBottom);
}
}
else
{
if(!parent.showTextUnderThumbnail_bl){
self.textGradientDO.setY(self.thumbHeight - self.borderSize * 2 - self.textTitleOffset);
self.textDO.setY(self.thumbHeight - self.borderSize * 2 - self.textTitleOffset + self.textDescriptionOffsetTop);
}
}
FWDAnimation.to(self.textHolderDO, .8, {alpha:1, ease:Expo.easeOut});
if (!data.showTextBackgroundImage && !parent.showTextUnderThumbnail_bl)
{
FWDAnimation.to(self.textGradientDO.screen, .8, {css:{backgroundColor:data.textBackgroundColor}, ease:Expo.easeOut});
}
self.hasText = true;
self.checkThumbOver();
};
this.removeText = function()
{
if (self.textHolderDO)
{
FWDAnimation.to(self.textHolderDO, .6, {alpha:0, ease:Expo.easeOut, onComplete:self.removeTextFinish});
}
};
this.removeTextFinish = function()
{
FWDAnimation.killTweensOf(self.textHolderDO);
FWDAnimation.killTweensOf(self.textGradientDO);
FWDAnimation.killTweensOf(self.textDO);
if(parent.showTextUnderThumbnail_bl){
parent.removeChild(self.textHolderDO);
}else{
self.mainDO.removeChild(self.textHolderDO);
}
self.textHolderDO = null;
self.textGradientDO = null;
self.textDO = null;
self.isOver = false;
self.hasText = false;
};
this.checkThumbOver = function()
{
if (!self.hasText || data.showFullTextWithoutHover)
return;
if ((parent.thumbMouseX >= 0) && (parent.thumbMouseX <= self.thumbWidth) && (parent.thumbMouseY >= 0) && (parent.thumbMouseY <= self.thumbHeight))
{
self.onThumbOverHandler();
}
else
{
self.onThumbOutHandler();
}
};
this.onThumbOverHandler = function()
{
if (!self.isOver)
{
self.isOver = true;
if(!parent.showTextUnderThumbnail_bl){
FWDAnimation.to(self.textGradientDO, .8, {y:self.thumbHeight - self.borderSize * 2 - self.textDescriptionOffsetTop - self.textHeight - self.textDescriptionOffsetBottom, ease:Expo.easeOut});
FWDAnimation.to(self.textDO, .8, {y:self.thumbHeight - self.borderSize * 2 - self.textHeight - self.textDescriptionOffsetBottom, ease:Expo.easeOut});
}
}
};
this.onThumbOutHandler = function()
{
if (self.isOver)
{
self.isOver = false;
if(!parent.showTextUnderThumbnail_bl){
FWDAnimation.to(self.textGradientDO, .8, {y:self.thumbHeight - self.borderSize * 2 - self.textTitleOffset, ease:Expo.easeOut});
FWDAnimation.to(self.textDO, .8, {y:self.thumbHeight - self.borderSize * 2 - self.textTitleOffset + self.textDescriptionOffsetTop, ease:Expo.easeOut});
}
}
};
this.showThumb3D = function()
{
var imgW = self.thumbWidth - self.borderSize * 2;
var imgH = self.thumbHeight - self.borderSize * 2;
self.imageHolderDO.setWidth(imgW);
self.imageHolderDO.setHeight(imgH);
self.imageDO.setWidth(imgW);
self.imageDO.setHeight(imgH);
FWDAnimation.to(self.imageDO, .8, {alpha:1, ease:Expo.easeInOut});
if (self.reflCanvasDO)
{
self.reflCanvasDO.setAlpha(0);
FWDAnimation.to(self.reflCanvasDO, .8, {alpha:1, delya:.2});
}
};
this.showThumb2D = function(){
if (!FWDS3DCUtils.hasTransform2d)
{
var scaleW = Math.floor(self.thumbWidth * self.thumbScale);
var scaleH = Math.floor(self.thumbHeight * self.thumbScale);
var borderScale = Math.floor(self.borderSize * self.thumbScale);
if ((self.borderSize > 0) && (borderScale < 1))
{
borderScale = 1;
}
var imgW = scaleW - borderScale * 2;
var imgH = scaleH - borderScale * 2;
self.imageHolderDO.setX(parseInt(scaleW/2));
self.imageHolderDO.setY(parseInt(scaleH/2));
self.imageHolderDO.setWidth(0);
self.imageHolderDO.setHeight(0);
FWDAnimation.to(self.imageHolderDO, .8, {x:borderScale, y:borderScale, w:imgW, h:imgH, ease:Expo.easeInOut});
if (data.showThumbnailsHtmlContent)
{
if (self.htmlContentDO)
{
self.htmlContentDO.setWidth(imgW);
self.htmlContentDO.setHeight(imgH);
self.htmlContentDO.setX(-parseInt(imgW/2));
self.htmlContentDO.setY(-parseInt(imgH/2));
FWDAnimation.to(self.htmlContentDO, .8, {x:0, y:0, ease:Expo.easeInOut});
}
}
else
{
if (self.imageDO)
{
self.imageDO.setWidth(imgW);
self.imageDO.setHeight(imgH);
self.imageDO.setX(-parseInt(imgW/2));
self.imageDO.setY(-parseInt(imgH/2));
FWDAnimation.to(self.imageDO, .8, {x:0, y:0, ease:Expo.easeInOut});
if (self.reflCanvasDO)
{
self.reflCanvasDO.setAlpha(0);
FWDAnimation.to(self.reflCanvasDO, .8, {alpha:1, ease:Expo.easeInOut});
}
}
}
}
else
{
self.setScale2(self.thumbScale);
var imgW = self.thumbWidth - self.borderSize * 2;
var imgH = self.thumbHeight - self.borderSize * 2;
self.imageHolderDO.setX(parseInt(self.thumbWidth/2));
self.imageHolderDO.setY(parseInt(self.thumbHeight/2));
self.imageHolderDO.setWidth(0);
self.imageHolderDO.setHeight(0);
FWDAnimation.to(self.imageHolderDO, .8, {x:self.borderSize, y:self.borderSize, w:imgW, h:imgH, ease:Expo.easeInOut});
if (data.showThumbnailsHtmlContent)
{
if (self.htmlContentDO)
{
self.htmlContentDO.setWidth(imgW);
self.htmlContentDO.setHeight(imgH);
self.htmlContentDO.setX(-parseInt(imgW/2));
self.htmlContentDO.setY(-parseInt(imgH/2));
FWDAnimation.to(self.htmlContentDO, .8, {x:0, y:0, ease:Expo.easeInOut});
}
}
else
{
if (self.imageDO)
{
self.imageDO.setWidth(imgW);
self.imageDO.setHeight(imgH);
self.imageDO.setX(-parseInt(imgW/2));
self.imageDO.setY(-parseInt(imgH/2));
FWDAnimation.to(self.imageDO, .8, {x:0, y:0, ease:Expo.easeInOut});
if (self.reflCanvasDO)
{
self.reflCanvasDO.setAlpha(0);
FWDAnimation.to(self.reflCanvasDO, .8, {alpha:1, ease:Expo.easeInOut});
}
}
}
}
};
this.showThumbIntro2D = function(scale, del)
{
self.thumbScale = scale;
if (!FWDS3DCUtils.hasTransform2d)
{
var scaleW = Math.floor(self.thumbWidth * scale);
var scaleH = Math.floor(self.thumbHeight * scale);
var borderScale = Math.floor(self.borderSize * scale);
if ((self.borderSize > 0) && (borderScale < 1))
{
borderScale = 1;
}
var imgW = scaleW - borderScale * 2;
var imgH = scaleH - borderScale * 2;
self.setWidth(scaleW);
self.setHeight(scaleH);
self.mainDO.setWidth(scaleW);
self.mainDO.setHeight(scaleH);
if (self.borderDO)
{
self.borderDO.setWidth(scaleW);
self.borderDO.setHeight(scaleH);
}
if (self.bgDO)
{
self.bgDO.setX(borderScale);
self.bgDO.setY(borderScale);
self.bgDO.setWidth(imgW);
self.bgDO.setHeight(imgH);
}
self.setX(-self.thumbWidth/2);
self.setY(-self.thumbHeight/2);
FWDAnimation.to(self, .8, {x:Math.floor(self.newX + (self.thumbWidth - scaleW)/2), y:Math.floor(self.newY + (self.thumbHeight - scaleH)/2), alpha:self.newAlpha, delay:del, ease:Expo.easeOut});
}
else
{
self.setScale2(self.thumbScale);
self.setX(-self.thumbWidth/2);
self.setY(-self.thumbHeight/2);
FWDAnimation.to(self, .8, {x:self.newX, y:self.newY, z:self.newZ, scale:self.thumbScale, alpha:self.newAlpha, delay:del, ease:Quart.easeOut});
}
};
this.setScale = function(scale, alpha)
{
self.thumbScale = scale;
self.setVisible(true);
if (!FWDS3DCUtils.hasTransform2d)
{
var scaleW = Math.floor(self.thumbWidth * scale);
var scaleH = Math.floor(self.thumbHeight * scale);
var borderScale = Math.floor(self.borderSize * scale);
if ((self.borderSize > 0) && (borderScale < 1))
{
borderScale = 1;
}
if (self.borderDO)
{
self.borderDO.setWidth(scaleW);
self.borderDO.setHeight(scaleH);
}
if (self.bgDO)
{
self.bgDO.setX(borderScale);
self.bgDO.setY(borderScale);
self.bgDO.setWidth(scaleW - borderScale * 2);
self.bgDO.setHeight(scaleH - borderScale * 2);
}
self.mainDO.setWidth(scaleW);
self.mainDO.setHeight(scaleH);
self.imageHolderDO.setX(borderScale);
self.imageHolderDO.setY(borderScale);
self.imageHolderDO.setWidth(scaleW - borderScale * 2);
self.imageHolderDO.setHeight(scaleH - borderScale * 2);
self.setX(Math.floor(self.newX + (self.thumbWidth - scaleW)/2));
self.setY(Math.floor(self.newY + (self.thumbHeight - scaleH)/2));
self.setWidth(scaleW);
self.setHeight(scaleH);
self.setAlpha(alpha);
if (data.showThumbnailsHtmlContent)
{
if (self.htmlContentDO)
{
self.htmlContentDO.setWidth(scaleW - borderScale * 2);
self.htmlContentDO.setHeight(scaleH - borderScale * 2);
}
}
else
{
if (self.imageDO)
{
self.imageDO.setWidth(scaleW - borderScale * 2);
self.imageDO.setHeight(scaleH - borderScale * 2);
}
}
}
else
{
thumb.setX(Math.floor(self.newX));
thumb.setY(Math.floor(self.newY));
self.setScale2(self.thumbScale);
self.setAlpha(alpha);
}
};
this.update = function()
{
if (parent.showRefl)
{
if (!self.reflCanvasDO)
{
self.addReflection();
}
else
{
self.reflCanvasDO.setAlpha(1);
self.reflCanvasDO.setY(self.thumbHeight + parent.reflDist);
}
}
else
{
if (self.reflCanvasDO)
{
self.reflCanvasDO.setAlpha(0);
}
}
};
this.hide = function(del){
var imgW = self.thumbWidth - self.borderSize * 2;
var imgH = self.thumbHeight - self.borderSize * 2;
if (self.imageDO){
FWDAnimation.to(self.imageDO, .8, {alpha:0, delay:del, ease:Expo.easeInOut});
if(self.textHolderDO) FWDAnimation.to(self.textHolderDO, .8, {alpha:0, delay:del, ease:Expo.easeInOut});
if (self.reflCanvasDO){
FWDAnimation.to(self.reflCanvasDO, .8, {alpha:0, delay:del, ease:Expo.easeInOut});
}
}
};
this.onMouseClickHandler = function()
{
self.dispatchEvent(FWDS3DCThumb.CLICK, {id:self.id});
};
this.onMouseTouchHandler = function(e)
{
if(e.preventDefault) e.preventDefault();
self.dispatchEvent(FWDS3DCThumb.CLICK, {id:self.id});
};
/* destroy */
this.destroy = function()
{
FWDAnimation.killTweensOf(self);
FWDAnimation.killTweensOf(self.mainDO);
FWDAnimation.killTweensOf(self.imageHolderDO);
if (self.isMobile)
{
if (self.hasPointerEvent)
{
self.mainDO.screen.removeEventListener("MSPointerUp", self.onMouseTouchHandler);
}
else
{
self.mainDO.screen.removeEventListener("touchend", self.onMouseTouchHandler);
}
}
else
{
if (self.screen.addEventListener)
{
self.mainDO.screen.removeEventListener("click", self.onMouseClickHandler);
}
else
{
self.mainDO.screen.detachEvent("onclick", self.onMouseClickHandler);
}
}
clearTimeout(self.setTextHeightId);
if (self.imageDO)
{
FWDAnimation.killTweensOf(self.imageDO);
self.imageDO.disposeImage();
self.imageDO.destroy();
}
if (self.htmlContentDO)
{
FWDAnimation.killTweensOf(self.htmlContentDO);
self.htmlContentDO.destroy();
self.htmlContentDO = null;
}
if (self.bgDO)
{
FWDAnimation.killTweensOf(self.bgDO);
self.bgDO.destroy();
self.bgDO = null;
}
if (self.borderDO)
{
FWDAnimation.killTweensOf(self.borderDO);
self.borderDO.destroy();
self.borderDO = null;
}
if (self.htmlContentDO)
{
FWDAnimation.killTweensOf(self.htmlContentDO);
self.htmlContentDO.destroy();
}
if (self.textGradientDO)
{
FWDAnimation.killTweensOf(self.textGradientDO);
self.textGradientDO = null;
}
if (self.textDO)
{
FWDAnimation.killTweensOf(self.textDO);
self.textDO = null;
}
if (self.textHolderDO)
{
FWDAnimation.killTweensOf(self.textHolderDO);
self.textHolderDO = null
}
self.imageHolderDO.destroy();
self.mainDO.destroy();
self.imageHolderDO = null;
self.imageDO = null;
self.htmlContentDO = null;
self.mainDO = null;
self.borderDO = null;
self.bgDO = null;
self.imageHolderDO = null;
self.imageDO = null;
self.htmlContentDO = null;
self.textHolderDO = null;
self.textGradientDO = null;
self.textDO = null;
self.id = null;
self.data = null;
self.parent = null;
self.backgroundColor = null;
self.borderColor = null;
self.screen.innerHTML = "";
prototype.destroy();
prototype = null;
self = null;
FWDS3DCThumb.prototype = null;
};
this.init();
};
/* set prototype */
FWDS3DCThumb.setPrototype = function()
{
FWDS3DCThumb.prototype = new FWDS3DCDisplayObject3D("div", "absolute", "visible");
};
FWDS3DCThumb.CLICK = "click";
FWDS3DCThumb.prototype = null;
window.FWDS3DCThumb = FWDS3DCThumb;
}(window));/* thumbs manager */
(function(window)
{
var FWDS3DCThumbsManager = function(data, parent)
{
var self = this;
var prototype = FWDS3DCThumbsManager.prototype;
this.data = data;
this.parent = parent;
this.stageWidth = parent.stageWidth;
this.stageHeight = parent.stageHeight;
this.scale = 1;
this.thumbsHolderDO;
this.totalThumbs;
this.thumbsAr = [];
this.dataListId = data.startAtCategory;
this.topologiesAr = ["normal", "ring", "star"];
this.curDataListAr;
this.dragCurId;
this.prevCurId;
this.curId;
this.startPos = data.carouselStartPosition;
this.thumbWidth = data.thumbWidth;
this.thumbHeight = data.thumbHeight;
this.borderSize = data.thumbBorderSize;
this.perspective = self.thumbWidth * 4;
this.carRadiusX = data.carRadiusX;
this.carRadiusY = data.carRadiusY;
this.carouselXRot = data.carouselXRotation;
this.carYOffset = data.carouselYOffset;
this.focalLength = 250;
this.thumbMinAlpha = data.thumbMinAlpha;
this.countLoadedThumbsLeft;
this.countLoadedThumbsRight;
this.controlsDO;
this.prevButtonDO;
this.nextButtonDO;
this.timer;
this.controlsHeight = self.data.controlsHeight;
this.showText = self.data.showText;
this.thumbXSpace3D = self.data.thumbXSpace3D;
this.thumbXOffset3D = self.data.thumbXOffset3D;
this.thumbZSpace3D = self.data.thumbZSpace3D;
this.thumbZOffset3D = self.data.thumbZOffset3D;
this.thumbYAngle3D = self.data.thumbYAngle3D;
this.thumbXSpace2D = self.data.thumbXSpace2D;
this.thumbXOffset2D = self.data.thumbXOffset2D;
this.bulletsOffset = data.bulletsOffset;
this.useDrag = data.useDragAndSwipe_bl;
this.largeNextAndPrevButtonsOffest = data.largeNextAndPrevButtonsOffest;
this.topology = data.carouselTopology;
this.textDO;
this.textHolderDO;
this.textGradientDO;
this.thumbOverDO;
this.showRefl = data.showRefl;
this.reflHeight = data.reflHeight;
this.reflDist = data.reflDist;
this.reflAlpha = data.reflAlpha;
this.showCenterImg = data.showCenterImg;
this.centerImgPath = data.centerImgPath;
this.centerImgYOffset = data.centerImgYOffset;
this.centerImgDO;
this.isThumbOver = false;
this.hasThumbText = false;
this.grabIconPath_str = data.grabIconPath_str;
this.handIconPath_str = data.handIconPath_str;
this.introFinished = false;
this.isPlaying = false;
this.disableThumbClick = false;
this.isTextSet = false;
this.allowToSwitchCat = false;
this.showSlideshowButton = data.showSlideshowButton;
this.hasPointerEvent = FWDS3DCUtils.hasPointerEvent;
this.isMobile = FWDS3DCUtils.isMobile;
this.showTextUnderThumbnail_bl = data.showTextUnderThumbnail_bl;
this.loadWithDelayIdLeft;
this.loadWithDelayIdRight;
this.slideshowTimeoutId;
this.textTimeoutId;
this.zSortingId;
this.hideThumbsFinishedId;
this.loadHtmlContentsId;
this.loadImagesId;
this.setTextHeightId;
this.setIntroFinishedId;
this.showControlsId;
this.showLargeNextAndPrevButtons_bl = data.showLargeNextAndPrevButtons;
this.areLargeNextAndPrevButtonsShowed = true;
/* init */
this.init = function()
{
self.holderDO = new FWDS3DCDisplayObject3D("div");
self.addChild(self.holderDO);
self.holderDO.setWidth(self.stageWidth);
self.holderDO.setHeight(self.stageHeight - self.controlsHeight);
self.thumbsHolderDO = new FWDS3DCDisplayObject3D("div", "absolute", "visible");
self.holderDO.addChild(self.thumbsHolderDO);
self.thumbsHolderDO.setZ(100000);
if (FWDS3DCUtils.isIEAndLessThen10)
{
self.carRadiusX /= 1.5;
}
self.thumbsHolderDO.setPerspective(self.perspective);
self.thumbsHolderDO.setX(Math.floor(self.stageWidth/2));
self.thumbsHolderDO.setY(Math.floor(self.stageHeight/2) + self.carYOffset);
if ((!self.isMobile && !FWDS3DCUtils.isSafari) || FWDS3DCUtils.isAndroidAndWebkit)
{
self.thumbsHolderDO.setPreserve3D();
}
self.thumbsHolderDO.setAngleX(-self.carouselXRot);
if (!self.isMobile)
{
if (self.screen.addEventListener)
{
window.addEventListener("mousemove", self.onThumbMove);
}
else
{
document.attachEvent("onmousemove", self.onThumbMove);
}
}
if (self.hasPointerEvent)
{
window.addEventListener("MSPointerMove", self.onThumbMove);
}
if (self.showText)
{
self.setupText();
}
self.showCurrentCat(-1);
self.setupSlideshow();
if(!self.isMobile){
self.addDragScreen();
self.setupDisableDragScreen();
}
if(self.data.addKeyboardSupport) self.addKeyboardSupport();
if(self.data.enableMouseWheelScroll) self.addMouseWheelSupport();
};
this.addDragScreen = function(){
if(self.useDrag){
self.getStyle().cursor = 'url(' + self.handIconPath_str + '), default';
parent.mainDO.getStyle().cursor = 'url(' + self.handIconPath_str + '), default';
}
};
this.removeDragScreen = function(){
//if(self.useDrag){
self.getStyle().cursor = null;
parent.mainDO.getStyle().cursor = null;
//}
};
//#####################################//
/* Setup disable drag screen */
//#####################################//
this.setupDisableDragScreen = function(){
if(!this.dsb_do){
this.dsb_do = new FWDS3DCDisplayObject("div");
if(FWDS3DCUtils.isIE){
this.dsb_do.setBkColor("#00FF00");
this.dsb_do.setAlpha(.000001);
}
//setTimeout(function(){
parent.mainDO.addChild(self.dsb_do);
//}, 100);
self.dsb_do.getStyle().cursor = 'url(' + self.grabIconPath_str + '), default';
}
this.hideDsb();
};
this.positionControls = function(){
}
this.showDsb = function(){
if(self.isDsbShowed_bl) return;
clearTimeout(self.hideDSBId_to);
self.isDsbShowed_bl = true;
this.dsb_do.setVisible(true);
this.dsb_do.setWidth(self.stageWidth);
this.dsb_do.setHeight(self.stageHeight);
};
this.hideDsb = function(){
if(!self.isDsbShowed_bl) return;
clearTimeout(self.hideDSBId_to);
self.isDsbShowed_bl = false;
self.dsb_do.setVisible(false);
self.dsb_do.setWidth(0);
self.dsb_do.setHeight(0);
};
this.onThumbMove = function(e){
if (self.disableThumbClick || parent.isLigtboxOpened || !self.allowToSwitchCat) return;
var vmc = FWDRLS3DUtils.getViewportMouseCoordinates(e);
self.thumbMouseX = vmc.screenX - parent.rect.left - (self.stageWidth - (self.curDataListAr[self.curId].thumbWidth * self.scale))/2;
self.thumbMouseY = vmc.screenY - parent.rect.top - (self.stageHeight - (self.thumbsMaxHeight * self.scale) + ((self.thumbsMaxHeight * self.scale) - (self.curDataListAr[self.curId].thumbHeight * self.scale)) * 2)/2;
if (self.showTooltip && !self.isTransition){
self.thumbsAr[self.curId].checkThumbOver(e);
}
};
this.onThumbMove = function(e)
{
if (!self.textHolderDO)
return;
if (self.disableThumbClick)
return;
var viewportMouseCoordinates = FWDS3DCUtils.getViewportMouseCoordinates(e);
self.thumbMouseX = viewportMouseCoordinates.screenX - parent.rect.left - (self.stageWidth - self.thumbWidth)/2;
self.thumbMouseY = viewportMouseCoordinates.screenY - parent.rect.top - (self.stageHeight - self.thumbHeight)/2;
if (self.isTextSet)
{
if(self.thumbsAr[self.curId]) self.thumbsAr[self.curId].checkThumbOver();
}
};
//##############################################//
/* show current cat */
//##############################################//
this.showCurrentCat = function(id)
{
if ((id != self.dataListId) && (id >= 0))
{
if(self.data.showBulletsNavigation && self.bulletsNavigation){
self.bulletsNavigation.hideBullets();
}
self.allowToSwitchCat = false;
self.hideCurrentCat();
self.dataListId = id;
return;
}
self.thumbsAr = [];
self.curDataListAr = self.data.dataListAr[self.dataListId];
self.totalThumbs = self.curDataListAr.length;
if (self.totalThumbs == 0)
{
var message = "This category doesn't contain any thumbnails!";
self.dispatchEvent(FWDS3DCThumbsManager.LOAD_ERROR, {text : message});
return;
}
if (self.isMobile)
{
self.totalThumbs = Math.min(self.totalThumbs, data.maxNumberOfThumbsOnMobile);
}
if (typeof(self.startPos) == "number")
{
self.startPos = Math.floor(self.startPos) - 1;
if (self.startPos < 0)
{
self.startPos = Math.floor((self.totalThumbs-1)/2);
}
else if (self.startPos > self.totalThumbs-1)
{
self.startPos = Math.floor((self.totalThumbs-1)/2);
}
self.curId = self.startPos;
}
else
{
switch (self.startPos)
{
case "left":
self.curId = 0;
break;
case "right":
self.curId = self.totalThumbs-1;
break;
case "random":
self.curId = Math.floor(self.totalThumbs * Math.random());
break;
default:
self.curId = Math.floor((self.totalThumbs-1)/2);
}
}
if(self.data.showBulletsNavigation && self.bulletsNavigation){
self.bulletsNavigation.totalItems = self.totalThumbs;
self.bulletsNavigation.curItemId = self.curId;
self.bulletsNavigation.createBullets();
setTimeout(function(){
self.positionControls();
}, 400);
}
self.setupThumbs();
self.prevCurId = self.curId;
self.startIntro();
};
//################################################//
/* hide current cat */
//################################################//
this.hideCurrentCat = function()
{
clearTimeout(self.loadWithDelayIdLeft);
clearTimeout(self.loadWithDelayIdRight);
clearTimeout(self.textTimeoutId);
clearInterval(self.zSortingId);
clearTimeout(self.hideThumbsFinishedId);
clearTimeout(self.loadHtmlContentsId);
clearTimeout(self.loadImagesId);
clearTimeout(self.setTextHeightId);
clearTimeout(self.setIntroFinishedId);
clearTimeout(self.showControlsId);
self.stopSlideshow();
self.disableThumbClick = true;
if (self.image)
{
self.image.onload = null;
self.image.onerror = null;
}
if (self.imageLeft)
{
self.imageLeft.onload = null;
self.imageLeft.onerror = null;
}
if (self.imageRight)
{
self.imageRight.onload = null;
self.imageRight.onerror = null;
}
self.hideThumbs();
};
this.hideThumbs = function()
{
var delay;
var delayDelta;
var newX = -self.thumbWidth/2;
var maxNrOfSideThumbs = Math.max(self.totalThumbs - self.curId, self.curId);
delayDelta = Math.floor(1000/maxNrOfSideThumbs);
for (var i=0; i";
self.dispatchEvent(FWDS3DCThumbsManager.LOAD_ERROR, {text : message});
};
/* setup thumbs */
this.setupThumbs = function()
{
var thumb;
for (var i=0; i= 0) && (self.thumbMouseX <= self.thumbWidth) && (self.thumbMouseY >= 0) && (self.thumbMouseY <= self.thumbHeight))
{
self.onThumbOverHandler();
}
else
{
self.onThumbOutHandler();
}
};
this.onThumbOverHandler = function()
{
if (!self.isThumbOver)
{
self.isThumbOver = true;
FWDAnimation.to(self.textGradientDO, .8, {y:self.thumbHeight - self.borderSize * 2 - self.textDescriptionOffsetTop - self.textHeight - self.textDescriptionOffsetBottom, ease:Expo.easeOut});
FWDAnimation.to(self.textDO, .8, {y:self.thumbHeight - self.borderSize * 2 - self.textHeight - self.textDescriptionOffsetBottom, ease:Expo.easeOut});
}
};
this.onThumbOutHandler = function()
{
if (self.isThumbOver)
{
self.isThumbOver = false;
FWDAnimation.to(self.textGradientDO, .8, {y:self.thumbHeight - self.borderSize * 2 - self.textTitleOffset, ease:Expo.easeOut});
FWDAnimation.to(self.textDO, .8, {y:self.thumbHeight - self.borderSize * 2 - self.textTitleOffset + self.textDescriptionOffsetTop, ease:Expo.easeOut});
}
};
this.loadImages = function()
{
if (FWDS3DCUtils.hasTransform3d && !self.data.showDisplay2DAlways)
{
self.setupIntro3D();
}
else
{
self.setupIntro2D();
}
self.countLoadedThumbsLeft = self.curId - 1;
self.loadWithDelayIdLeft = setTimeout(self.loadThumbImageLeft, 100);
self.countLoadedThumbsRight = self.curId + 1;
self.loadWithDelayIdRight = setTimeout(self.loadThumbImageRight, 100);
};
this.loadCenterImage = function()
{
self.imagePath = self.curDataListAr[self.curId].thumbPath;
self.image = new Image();
self.image.onerror = self.onImageLoadErrorHandler;
self.image.onload = self.onImageLoadHandlerCenter;
self.image.src = self.imagePath;
};
this.onImageLoadHandlerCenter = function(e)
{
var thumb = self.thumbsAr[self.curId];
thumb.addImage(self.image);
if (FWDS3DCUtils.hasTransform3d && !self.data.showDisplay2DAlways)
{
thumb.showThumb3D();
}
else
{
thumb.showThumb2D();
}
if (self.showText)
{
self.isTextSet = true;
thumb.addText(self.textHolderDO, self.textGradientDO, self.textDO);
}
};
this.loadThumbImageLeft = function()
{
if (self.countLoadedThumbsLeft < 0)
return;
self.imagePath = self.curDataListAr[self.countLoadedThumbsLeft].thumbPath;
self.imageLeft = new Image();
self.imageLeft.onerror = self.onImageLoadErrorHandler;
self.imageLeft.onload = self.onImageLoadHandlerLeft;
self.imageLeft.src = self.imagePath;
};
this.onImageLoadHandlerLeft = function(e)
{
var thumb = self.thumbsAr[self.countLoadedThumbsLeft];
thumb.addImage(self.imageLeft);
if (FWDS3DCUtils.hasTransform3d && !self.data.showDisplay2DAlways)
{
thumb.showThumb3D();
}
else
{
thumb.showThumb2D();
}
self.countLoadedThumbsLeft--;
self.loadWithDelayIdLeft = setTimeout(self.loadThumbImageLeft, 200);
};
this.loadThumbImageRight = function()
{
if (self.countLoadedThumbsRight > self.totalThumbs-1)
return;
self.imagePath = self.curDataListAr[self.countLoadedThumbsRight].thumbPath;
self.imageRight = new Image();
self.imageRight.onerror = self.onImageLoadErrorHandler;
self.imageRight.onload = self.onImageLoadHandlerRight;
self.imageRight.src = self.imagePath;
};
this.onImageLoadHandlerRight = function(e)
{
var thumb = self.thumbsAr[self.countLoadedThumbsRight];
thumb.addImage(self.imageRight);
if (FWDS3DCUtils.hasTransform3d && !self.data.showDisplay2DAlways)
{
thumb.showThumb3D();
}
else
{
thumb.showThumb2D();
}
self.countLoadedThumbsRight++;
self.loadWithDelayIdRight = setTimeout(self.loadThumbImageRight, 200);
};
this.onImageLoadErrorHandler = function(e)
{
if (!self || !self.data)
return;
var message = "Thumb can't be loaded, probably the path is incorrect " + self.imagePath + "";
self.dispatchEvent(FWDS3DCThumbsManager.LOAD_ERROR, {text : message});
};
this.loadHtmlContents = function()
{
if (FWDS3DCUtils.hasTransform3d && !self.data.showDisplay2DAlways)
{
self.setupIntro3D();
}
else
{
self.setupIntro2D();
}
self.countLoadedThumbsLeft = self.curId - 1;
self.loadWithDelayIdLeft = setTimeout(self.loadThumbHtmlContentLeft, 100);
self.countLoadedThumbsRight = self.curId + 1;
self.loadWithDelayIdRight = setTimeout(self.loadThumbHtmlContentRight, 100);
};
this.loadCenterHtmlContent = function()
{
var thumb = self.thumbsAr[self.curId];
thumb.addHtmlContent();
if (FWDS3DCUtils.hasTransform3d && !self.data.showDisplay2DAlways)
{
thumb.showThumb3D();
}
else
{
thumb.showThumb2D();
}
if (self.showText)
{
self.isTextSet = true;
thumb.addText(self.textHolderDO, self.textGradientDO, self.textDO);
}
};
this.loadThumbHtmlContentLeft = function()
{
if (self.countLoadedThumbsLeft < 0)
return;
var thumb = self.thumbsAr[self.countLoadedThumbsLeft];
thumb.addHtmlContent();
if (FWDS3DCUtils.hasTransform3d && !self.data.showDisplay2DAlways)
{
thumb.showThumb3D();
}
else
{
thumb.showThumb2D();
}
self.countLoadedThumbsLeft--;
self.loadWithDelayIdLeft = setTimeout(self.loadThumbHtmlContentLeft, 200);
};
this.loadThumbHtmlContentRight = function()
{
if (self.countLoadedThumbsRight > self.totalThumbs-1)
return;
var thumb = self.thumbsAr[self.countLoadedThumbsRight];
thumb.addHtmlContent();
if (FWDS3DCUtils.hasTransform3d && !self.data.showDisplay2DAlways)
{
thumb.showThumb3D();
}
else
{
thumb.showThumb2D();
}
self.countLoadedThumbsRight++;
self.loadWithDelayIdRight = setTimeout(self.loadThumbHtmlContentRight, 200);
};
this.setupIntro3D = function()
{
var newX;
var newY;
var newZ;
var newAlpha;
var newAngleY;
var delay;
for (var i=0; i= 0) && (angleToAdd <= 180))
{
moveAmount = -angleToAdd;
}
else if (angleToAdd > 180)
{
moveAmount = 360 - angleToAdd;
}
for (var i=0; i 180)
{
if (curAngle > newAngleY)
{
curAngle -= 360;
}
else
{
newAngleY -= 360;
}
}
thumb.setAngleY(curAngle);
FWDAnimation.killTweensOf(thumb);
FWDAnimation.to(thumb, .8, {carAngle:tempAngle, angleY:newAngleY, ease:Quart.easeOut, onUpdate:self.updateCarousel});
}
};
this.updateCarousel = function()
{
var newX;
var newY;
var newZ;
var newScale;
for (var i=0; i 0)
{
self.curId--;
}
else
{
self.curId = self.totalThumbs-1;
}
self.gotoThumb();
};
this.setupNextButton = function()
{
FWDS3DCSimpleButton.setPrototype();
self.nextButtonDO = new FWDS3DCSimpleButton(self.data.nextButtonNImg, self.data.nextButtonSImg);
self.nextButtonDO.addListener(FWDS3DCSimpleButton.CLICK, self.nextButtonOnClickHandler);
self.controlsDO.addChild(self.nextButtonDO);
self.nextButtonDO.setX(self.controlsWidth);
self.controlsWidth += self.nextButtonDO.getWidth();
};
this.nextButtonOnClickHandler = function()
{
if (self.curId < self.totalThumbs-1)
{
self.curId++;
}
else
{
self.curId = 0;
}
self.gotoThumb();
};
this.setupSlideshow = function()
{
FWDS3DCTimerManager.setPrototype();
self.timer = new FWDS3DCTimerManager(self.data.slideshowDelay);
self.timer.addListener(FWDS3DCTimerManager.TIME, self.onSlideshowTime);
};
this.startSlideshow = function(){
if (!self.isPlaying){
self.isPlaying = true;
self.timer.start();
}
};
this.stopSlideshow = function(){
if (self.isPlaying){
self.isPlaying = false;
clearTimeout(self.slideshowTimeoutId);
self.timer.stop();
}
};
this.onSlideshowTime = function(){
if (self.curId == self.totalThumbs-1){
self.curId = 0;
}else{
self.curId++;
}
self.gotoThumb();
};
this.startTimeAgain = function()
{
self.timer.stop();
self.timer.start();
};
this.addMouseWheelSupport = function(){
self.parent.mainDO.screen.addEventListener("mousewheel", self.mouseWheelHandler);
self.parent.mainDO.screen.addEventListener('DOMMouseScroll', self.mouseWheelHandler);
}
this.mouseWheelHandler = function(e)
{
if (!self.introFinished || !self.allowToSwitchCat)
return;
var dir = e.detail || e.wheelDelta;
if (e.wheelDelta)
dir *= -1;
if (dir > 0)
{
if (self.curId < self.totalThumbs-1)
{
self.curId++;
}
else
{
self.curId = 0;
}
}
else if (dir < 0)
{
if (self.curId > 0)
{
self.curId--;
}
else
{
self.curId = self.totalThumbs-1;
}
}
self.gotoThumb();
if (e.preventDefault)
{
e.preventDefault();
}
else
{
return false;
}
};
//##########################################//
/* setup mobile drag */
//##########################################//
this.setupMobileDrag = function(){
if(self.hasPointerEvent){
self.parent.mainDO.screen.addEventListener("pointerdown", self.mobileDragStartHandler);
}else if(!self.isMobile){
self.parent.mainDO.screen.addEventListener("mousedown", self.mobileDragStartHandler);
}else{
self.parent.mainDO.screen.addEventListener("touchstart", self.mobileDragStartTest);
}
};
this.mobileDragStartTest = function(e)
{
var viewportMouseCoordinates = FWDS3DCUtils.getViewportMouseCoordinates(e);
//if (viewportMouseCoordinates.screenY > self.getGlobalY())
self.lastPressedX = viewportMouseCoordinates.screenX;
self.lastPressedY = viewportMouseCoordinates.screenY;
self.dragCurId = self.curId;
if(self.isMobile){
window.addEventListener("touchmove", self.mobileDragMoveTest);
window.addEventListener("touchend", self.mobileDragEndTest);
}
};
this.mobileDragMoveTest = function(e)
{
if (e.touches.length != 1) return;
self.disableThumbClick = true;
var viewportMouseCoordinates = FWDS3DCUtils.getViewportMouseCoordinates(e);
self.mouseX = viewportMouseCoordinates.screenX;
self.mouseY = viewportMouseCoordinates.screenY;
var angle = Math.atan2(self.mouseY - self.lastPressedY, self.mouseX - self.lastPressedX);
var posAngle = Math.abs(angle) * 180 / Math.PI;
if ((posAngle > 120) || (posAngle < 60))
{
if(e.preventDefault) e.preventDefault();
self.curId = self.dragCurId + Math.floor(-(self.mouseX - self.lastPressedX) / 100);
if (self.curId < 0){
self.curId = self.totalThumbs-1;
}else if (self.curId > self.totalThumbs-1){
self.curId = 0;
}
self.gotoThumb();
}
else
{
self.disableThumbClick = true;
window.removeEventListener("touchmove", self.mobileDragMoveTest);
}
};
this.mobileDragEndTest = function(e)
{
self.disableThumbClick = false;
window.removeEventListener("touchmove", self.mobileDragMoveTest);
window.removeEventListener("touchmove", self.mobileDragMoveHandler);
window.removeEventListener("touchend", self.mobileDragEndTest);
};
this.mobileDragStartHandler = function(e)
{
var viewportMouseCoordinates = FWDS3DCUtils.getViewportMouseCoordinates(e);
if (!self.allowToSwitchCat) return;
self.mouseX = self.lastPressedX = viewportMouseCoordinates.screenX;
self.lastDragNumber = 100;
self.dragCurId = self.curId;
if(!self.isMobile){
if(self.useDrag){
self.getStyle().cursor = 'url(' + self.grabIconPath_str + '), default';
parent.mainDO.getStyle().cursor = 'url(' + self.grabIconPath_str + '), default';
}
}
if(self.hasPointerEvent){
window.addEventListener("pointerup", self.mobileDragEndHandler);
window.addEventListener("pointermove", self.mobileDragMoveHandler);
}else if(!self.isMobile){
window.addEventListener("mouseup", self.mobileDragEndHandler);
window.addEventListener("mousemove", self.mobileDragMoveHandler);
}
};
this.mobileDragMoveHandler = function(e)
{
if(e.preventDefault) e.preventDefault();
self.disableThumbClick = true;
var viewportMouseCoordinates = FWDS3DCUtils.getViewportMouseCoordinates(e);
if (self.useDrag && !self.isMobile){
self.curDragNumber = parseInt((self.mouseX - self.lastPressedX) / 100);
var sign = "none";
if(self.mouseX - self.lastPressedX > 0){
sign = "plus";
}else if(self.mouseX - self.lastPressedX < 0){
sign = "minus";
}
if(sign == "plus"){
if (self.curId == -1){
self.curId = self.totalThumbs-1;
}else{
if(self.lastDragNumber != self.curDragNumber){
self.curId = self.curId - 1;
self.lastPressedX = viewportMouseCoordinates.screenX;
}
}
}else if(sign == "minus"){
if (self.curId == self.totalThumbs){
self.curId = 0;
}else{
if(self.lastDragNumber != self.curDragNumber){
self.curId ++;
self.lastPressedX = viewportMouseCoordinates.screenX;
}
}
}
}else{
self.mouseX = viewportMouseCoordinates.screenX;
self.curId = self.dragCurId + Math.floor(-(self.mouseX - self.lastPressedX) / 100);
if (self.curId < 0){
self.curId = self.totalThumbs-1;
}else if (self.curId > self.totalThumbs-1)
{
self.curId = 0;
}
}
self.mouseX = viewportMouseCoordinates.screenX;;
if (self.curId != self.prevCurId){
self.gotoThumb();
}
self.lastDragNumber = self.curDragNumber;
};
this.mobileDragEndHandler = function(e){
self.disableThumbClick = false;
if(self.useDrag && !self.isMobile){
self.getStyle().cursor = 'url(' + self.handIconPath_str + '), default';
parent.mainDO.getStyle().cursor = 'url(' + self.handIconPath_str + '), default';
}
if(self.hasPointerEvent){
window.removeEventListener("pointerup", self.mobileDragEndHandler);
window.removeEventListener("pointermove", self.mobileDragMoveHandler);
}else if(!self.isMobile){
window.removeEventListener("mouseup", self.mobileDragEndHandler);
window.removeEventListener("mousemove", self.mobileDragMoveHandler);
}
};
this.removeMobileDrag = function(){
if (self.hasPointerEvent){
self.parent.mainDO.screen.removeEventListener("pointerdown", self.mobileDragStartHandler);
window.removeEventListener("pointerup", self.mobileDragEndHandler);
window.removeEventListener("pointermove", self.mobileDragMoveHandler);
}else if(!self.isMobile){
self.parent.mainDO.screen.removeEventListener("mousedown", self.mobileDragStartHandler);
window.removeEventListener("mouseup", self.mobileDragEndHandler);
window.removeEventListener("mousemove", self.mobileDragMoveHandler);
}else if (window.addEventListener){
self.parent.mainDO.screen.removeEventListener("touchstart", self.mobileDragStartTest);
window.removeEventListener("touchmove", self.mobileDragMoveTest);
window.removeEventListener("touchmove", self.mobileDragMoveHandler);
window.removeEventListener("touchend", self.mobileDragEndTest);
}
};
//####################################//
/* add keyboard support */
//####################################//
this.addKeyboardSupport = function()
{
if(document.addEventListener){
document.addEventListener("keydown", this.onKeyDownHandler);
document.addEventListener("keyup", this.onKeyUpHandler);
}else{
document.attachEvent("onkeydown", this.onKeyDownHandler);
document.attachEvent("onkeyup", this.onKeyUpHandler);
}
};
this.onKeyDownHandler = function(e)
{
if (!self.introFinished || !self.allowToSwitchCat)
return;
if (parent.lightboxDO && parent.lightboxDO.isShowed_bl)
return;
if(document.removeEventListener){
document.removeEventListener("keydown", self.onKeyDownHandler);
}else{
document.detachEvent("onkeydown", self.onKeyDownHandler);
}
if (e.keyCode == 39)
{
if (self.curId < self.totalThumbs-1)
{
self.curId++;
}
else
{
self.curId = 0;
}
self.gotoThumb();
if(e.preventDefault){
e.preventDefault();
}else{
return false;
}
}
else if (e.keyCode == 37)
{
if (self.curId > 0)
{
self.curId--;
}
else
{
self.curId = self.totalThumbs-1;
}
self.gotoThumb();
if(e.preventDefault){
e.preventDefault();
}else{
return false;
}
}
};
this.onKeyUpHandler = function(e)
{
if(document.addEventListener){
document.addEventListener("keydown", self.onKeyDownHandler);
}else{
document.attachEvent("onkeydown", self.onKeyDownHandler);
}
};
this.update = function(e)
{
var newCarRadX = e.carRadiusX;
if (FWDS3DCUtils.isIEAndLessThen10)
{
newCarRadX /= 1.5;
}
FWDAnimation.to(self, .8, {carRadiusX:newCarRadX, ease:Quart.easeOut});
FWDAnimation.to(self, .8, {carRadiusY:e.carRadiusY, ease:Quart.easeOut});
self.carYOffset = e.carYOffset;
self.carouselXRot = e.carouselXRot;
self.thumbMinAlpha = e.thumbMinAlpha;
self.topology = self.topologiesAr[e.carouselTopology];
self.showRefl = e.showRefl;
self.reflDist = e.reflDist;
self.showCenterImg = e.showCenterImg;
if (self.showCenterImg && !self.centerImgDO)
{
self.setupCenterImg();
}
if (self.centerImgDO)
{
if (self.showCenterImg)
{
self.centerImgDO.setAlpha(1);
}
else
{
self.centerImgDO.setAlpha(0);
}
}
var newY;
if (self.data.controlsPos)
{
newY = Math.floor((self.stageHeight - self.controlsHeight)/2 + self.controlsHeight + self.carYOffset);
}
else
{
newY = Math.floor(self.stageHeight/2) + self.carYOffset;
}
FWDAnimation.to(self.thumbsHolderDO, .8, {y:newY, angleX:-self.carouselXRot, ease:Quart.easeOut});
for (var i=0; i this.numChildren -1) throw Error("##getChildAt()## Index out of bounds!");
if(this.numChildren == 0) throw Errror("##getChildAt## Child dose not exist!");
return this.children_ar[index];
};
this.removeChildAtZero = function(){
this.screen.removeChild(this.children_ar[0].screen);
this.children_ar.shift();
};
//################################//
/* event dispatcher */
//#################################//
this.addListener = function (type, listener){
if(type == undefined) throw Error("type is required.");
if(typeof type === "object") throw Error("type must be of type String.");
if(typeof listener != "function") throw Error("listener must be of type Function.");
var event = {};
event.type = type;
event.listener = listener;
event.target = this;
this.listeners.events_ar.push(event);
};
this.dispatchEvent = function(type, props){
if(type == undefined) throw Error("type is required.");
if(typeof type === "object") throw Error("type must be of type String.");
for (var i=0, len=this.listeners.events_ar.length; i < len; i++){
if(this.listeners.events_ar[i].target === this && this.listeners.events_ar[i].type === type){
if(props){
for(var prop in props){
this.listeners.events_ar[i][prop] = props[prop];
}
}
this.listeners.events_ar[i].listener.call(this, this.listeners.events_ar[i]);
break;
}
}
};
this.removeListener = function(type, listener){
if(type == undefined) throw Error("type is required.");
if(typeof type === "object") throw Error("type must be of type String.");
if(typeof listener != "function") throw Error("listener must be of type Function." + type);
for (var i=0, len=this.listeners.events_ar.length; i < len; i++){
if(this.listeners.events_ar[i].target === this
&& this.listeners.events_ar[i].type === type
&& this.listeners.events_ar[i].listener === listener
){
this.listeners.events_ar.splice(i,1);
break;
}
}
};
//###########################################//
/* destroy methods*/
//###########################################//
this.disposeImage = function(){
if(this.type == "img") this.screen.src = null;
};
this.destroy = function(){
try{this.screen.parentNode.removeChild(this.screen);}catch(e){};
this.screen.onselectstart = null;
this.screen.ondragstart = null;
this.screen.ontouchstart = null;
this.screen.ontouchmove = null;
this.screen.ontouchend = null;
this.screen.onmouseover = null;
this.screen.onmouseout = null;
this.screen.onmouseup = null;
this.screen.onmousedown = null;
this.screen.onmousemove = null;
this.screen.onclick = null;
delete this.screen;
delete this.style;
delete this.rect;
delete this.selectable;
delete this.buttonMode;
delete this.position;
delete this.overflow;
delete this.visible;
delete this.innerHTML;
delete this.numChildren;
delete this.x;
delete this.y;
delete this.w;
delete this.h;
delete this.opacityType;
delete this.isHtml5_bl;
delete this.hasTransform2d_bl;
this.children_ar = null;
this.style = null;
this.screen = null;
this.numChildren = null;
this.transform = null;
this.position = null;
this.overflow = null;
this.display= null;
this.visible= null;
this.buttonMode = null;
this.globalX = null;
this.globalY = null;
this.x = null;
this.y = null;
this.w = null;;
this.h = null;;
this.rect = null;
this.alpha = null;
this.innerHTML = null;
this.opacityType = null;
this.isHtml5_bl = null;
this.hasTransform3d_bl = null;
this.hasTransform2d_bl = null;
self = null;
};
/* init */
this.init();
};
window.FWDS3DCTransformDisplayObject = FWDS3DCTransformDisplayObject;
}(window));//FWDS3DCUtils
(function (window){
var FWDS3DCUtils = function(){};
FWDS3DCUtils.dumy = document.createElement("div");
//###################################//
/* String */
//###################################//
FWDS3DCUtils.trim = function(str){
return str.replace(/\s/gi, "");
};
FWDS3DCUtils.splitAndTrim = function(str, trim_bl){
var array = str.split(",");
var length = array.length;
for(var i=0; i 0){
if(e.nextElementSibling){
e = e.nextElementSibling;
}else{
for(var e = e.nextSibling; e && e.nodeType !== 1; e = e.nextSibling);
}
n--;
}else{
if(e.previousElementSibling){
e = e.previousElementSibling;
}else{
for(var e = e.previousSibling; e && e.nodeType !== 1; e = e.previousSibling);
}
n++;
}
}
return e;
};
FWDS3DCUtils.getChildAt = function (e, n){
var kids = FWDS3DCUtils.getChildren(e);
if(n < 0) n += kids.length;
if(n < 0) return null;
return kids[n];
};
FWDS3DCUtils.getChildById = function(id){
return document.getElementById(id) || undefined;
};
FWDS3DCUtils.getChildren = function(e, allNodesTypes){
var kids = [];
for(var c = e.firstChild; c != null; c = c.nextSibling){
if(allNodesTypes){
kids.push(c);
}else if(c.nodeType === 1){
kids.push(c);
}
}
return kids;
};
FWDS3DCUtils.getChildrenFromAttribute = function(e, attr, allNodesTypes){
var kids = [];
for(var c = e.firstChild; c != null; c = c.nextSibling){
if(allNodesTypes && FWDS3DCUtils.hasAttribute(c, attr)){
kids.push(c);
}else if(c.nodeType === 1 && FWDS3DCUtils.hasAttribute(c, attr)){
kids.push(c);
}
}
return kids.length == 0 ? undefined : kids;
};
FWDS3DCUtils.getChildFromNodeListFromAttribute = function(e, attr, allNodesTypes){
for(var c = e.firstChild; c != null; c = c.nextSibling){
if(allNodesTypes && FWDS3DCUtils.hasAttribute(c, attr)){
return c;
}else if(c.nodeType === 1 && FWDS3DCUtils.hasAttribute(c, attr)){
return c;
}
}
return undefined;
};
FWDS3DCUtils.getAttributeValue = function(e, attr){
if(!FWDS3DCUtils.hasAttribute(e, attr)) return undefined;
return e.getAttribute(attr);
};
FWDS3DCUtils.hasAttribute = function(e, attr){
if(e.hasAttribute){
return e.hasAttribute(attr);
}else {
var test = e.getAttribute(attr);
return test ? true : false;
}
};
FWDS3DCUtils.insertNodeAt = function(parent, child, n){
var children = FWDS3DCUtils.children(parent);
if(n < 0 || n > children.length){
throw new Error("invalid index!");
}else {
parent.insertBefore(child, children[n]);
};
};
FWDS3DCUtils.hasCanvas = function(){
return Boolean(document.createElement("canvas"));
};
//###################################//
/* DOM geometry */
//##################################//
FWDS3DCUtils.hitTest = function(target, x, y){
var hit = false;
if(!target) throw Error("Hit test target is null!");
var rect = target.getBoundingClientRect();
if(x >= rect.left && x <= rect.left +(rect.right - rect.left) && y >= rect.top && y <= rect.top + (rect.bottom - rect.top)) return true;
return false;
};
FWDS3DCUtils.getScrollOffsets = function(){
//all browsers
if(window.pageXOffset != null) return{x:window.pageXOffset, y:window.pageYOffset};
//ie7/ie8
if(document.compatMode == "CSS1Compat"){
return({x:document.documentElement.scrollLeft, y:document.documentElement.scrollTop});
}
};
FWDS3DCUtils.getViewportSize = function(){
if(FWDS3DCUtils.hasPointerEvent && navigator.msMaxTouchPoints > 1){
return {w:document.documentElement.clientWidth || window.innerWidth, h:document.documentElement.clientHeight || window.innerHeight};
}
if(FWDS3DCUtils.isMobile) return {w:window.innerWidth, h:window.innerHeight};
return {w:document.documentElement.clientWidth || window.innerWidth, h:document.documentElement.clientHeight || window.innerHeight};
};
FWDS3DCUtils.getViewportMouseCoordinates = function(e){
var offsets = FWDS3DCUtils.getScrollOffsets();
if(e.touches){
return{
screenX:e.touches[0] == undefined ? e.touches.pageX - offsets.x :e.touches[0].pageX - offsets.x,
screenY:e.touches[0] == undefined ? e.touches.pageY - offsets.y :e.touches[0].pageY - offsets.y
};
}
return{
screenX: e.clientX == undefined ? e.pageX - offsets.x : e.clientX,
screenY: e.clientY == undefined ? e.pageY - offsets.y : e.clientY
};
};
//###################################//
/* Browsers test */
//##################################//
FWDS3DCUtils.hasPointerEvent = (function(){
return Boolean(window.navigator.msPointerEnabled) || Boolean(window.navigator.pointerEnabled);
}());
FWDS3DCUtils.isMobile = (function (){
if((FWDS3DCUtils.hasPointerEvent && navigator.msMaxTouchPoints > 1) || (FWDS3DCUtils.hasPointerEvent && navigator.maxTouchPoints > 1)) return true;
var agents = ['android', 'webos', 'iphone', 'ipad', 'blackberry', 'kfsowi'];
for(i in agents) {
if(String(navigator.userAgent).toLowerCase().indexOf(String(agents[i]).toLowerCase()) != -1) {
return true;
}
}
return false;
}());
FWDS3DCUtils.isAndroid = (function(){
return (navigator.userAgent.toLowerCase().indexOf("android".toLowerCase()) != -1);
}());
FWDS3DCUtils.isChrome = (function(){
return navigator.userAgent.toLowerCase().indexOf('chrome') != -1;
}());
FWDS3DCUtils.isSafari = (function(){
return navigator.userAgent.toLowerCase().indexOf('safari') != -1 && navigator.userAgent.toLowerCase().indexOf('chrome') == -1;
}());
FWDS3DCUtils.isOpera = (function(){
return navigator.userAgent.toLowerCase().indexOf('opera') != -1 && navigator.userAgent.toLowerCase().indexOf('chrome') == -1;
}());
FWDS3DCUtils.isFirefox = (function(){
return navigator.userAgent.toLowerCase().indexOf('firefox') != -1;
}());
FWDS3DCUtils.isIE = (function(){
var isIE = Boolean(navigator.userAgent.toLowerCase().indexOf('msie') != -1) || Boolean(navigator.userAgent.toLowerCase().indexOf('edge') != -1);
return Boolean(isIE || document.documentElement.msRequestFullscreen);
}());
FWDS3DCUtils.isIE11 = (function(){
return Boolean(!FWDS3DCUtils.isIE && document.documentElement.msRequestFullscreen);
}());
FWDS3DCUtils.isIEAndLessThen9 = (function(){
return navigator.userAgent.toLowerCase().indexOf("msie 7") != -1 || navigator.userAgent.toLowerCase().indexOf("msie 8") != -1;
}());
FWDS3DCUtils.isIEAndLessThen10 = (function(){
return navigator.userAgent.toLowerCase().indexOf("msie 7") != -1
|| navigator.userAgent.toLowerCase().indexOf("msie 8") != -1
|| navigator.userAgent.toLowerCase().indexOf("msie 9") != -1;
}());
FWDS3DCUtils.isIE7 = (function(){
return navigator.userAgent.toLowerCase().indexOf("msie 7") != -1;
}());
FWDS3DCUtils.isIOS = (function(){
return navigator.userAgent.match(/(iPad|iPhone|iPod)/g);
}());
FWDS3DCUtils.isIphone = (function(){
return navigator.userAgent.match(/(iPhone|iPod)/g);
}());
FWDS3DCUtils.isApple = (function(){
return navigator.appVersion.toLowerCase().indexOf('mac') != -1;
}());
FWDS3DCUtils.isLocal = (function(){
return location.href.indexOf('file:') != -1;
}());
FWDS3DCUtils.hasFullScreen = (function(){
return FWDS3DCUtils.dumy.requestFullScreen || FWDS3DCUtils.dumy.mozRequestFullScreen || FWDS3DCUtils.dumy.webkitRequestFullScreen || FWDS3DCUtils.dumy.msieRequestFullScreen;
}());
FWDS3DCUtils.isAndroidAndWebkit = (function(){
return (FWDS3DCUtils.isOpera || FWDS3DCUtils.isChrome) && FWDS3DCUtils.isAndroid;
}());
function get3d(){
var properties = ['transform', 'msTransform', 'WebkitTransform', 'MozTransform', 'OTransform', 'KhtmlTransform'];
var p;
var position;
while (p = properties.shift()) {
if (typeof FWDS3DCUtils.dumy.style[p] !== 'undefined') {
FWDS3DCUtils.dumy.style.position = "absolute";
position = FWDS3DCUtils.dumy.getBoundingClientRect().left;
FWDS3DCUtils.dumy.style[p] = 'translate3d(500px, 0px, 0px)';
position = Math.abs(FWDS3DCUtils.dumy.getBoundingClientRect().left - position);
if(position > 100 && position < 900){
try{document.documentElement.removeChild(FWDS3DCUtils.dumy);}catch(e){}
return true;
}
}
}
try{document.documentElement.removeChild(FWDS3DCUtils.dumy);}catch(e){}
return false;
};
function get2d(){
var properties = ['transform', 'msTransform', 'WebkitTransform', 'MozTransform', 'OTransform', 'KhtmlTransform'];
var p;
while (p = properties.shift()) {
if (typeof FWDS3DCUtils.dumy.style[p] !== 'undefined') {
return true;
}
}
try{document.documentElement.removeChild(FWDS3DCUtils.dumy);}catch(e){}
return false;
};
//###############################################//
/* various utils */
//###############################################//
FWDS3DCUtils.onReady = function(callbalk){
if (document.addEventListener) {
document.addEventListener( "DOMContentLoaded", function(){
FWDS3DCUtils.checkIfHasTransofrms();
callbalk();
});
}else{
document.onreadystatechange = function () {
FWDS3DCUtils.checkIfHasTransofrms();
if (document.readyState == "complete") callbalk();
};
}
};
FWDS3DCUtils.checkIfHasTransofrms = function(){
document.documentElement.appendChild(FWDS3DCUtils.dumy);
FWDS3DCUtils.hasTransform3d = get3d();
FWDS3DCUtils.hasTransform2d = get2d();
FWDS3DCUtils.isReadyMethodCalled_bl = true;
};
FWDS3DCUtils.disableElementSelection = function(e){
try{e.style.userSelect = "none";}catch(e){};
try{e.style.MozUserSelect = "none";}catch(e){};
try{e.style.webkitUserSelect = "none";}catch(e){};
try{e.style.khtmlUserSelect = "none";}catch(e){};
try{e.style.oUserSelect = "none";}catch(e){};
try{e.style.msUserSelect = "none";}catch(e){};
try{e.msUserSelect = "none";}catch(e){};
e.onselectstart = function(){return false;};
};
FWDS3DCUtils.getSearchArgs = function(){
var args = {};
var query = location.href.substr(location.href.indexOf("?") + 1);
var pairs = query.split("&");
for(var i=0; i< pairs.length; i++){
var pos = pairs[i].indexOf("=");
var name = pairs[i].substring(0,pos);
var value = pairs[i].substring(pos + 1);
value = decodeURIComponent(value);
args[name] = value;
}
return args;
};
FWDS3DCUtils.getHashArgs = function(string){
var args = {};
var query = string.substr(string.indexOf("#") + 1) || location.hash.substring(1);
var pairs = query.split("&");
for(var i=0; i< pairs.length; i++){
var pos = pairs[i].indexOf("=");
var name = pairs[i].substring(0,pos);
var value = pairs[i].substring(pos + 1);
value = decodeURIComponent(value);
args[name] = value;
}
return args;
};
FWDS3DCUtils.isReadyMethodCalled_bl = false;
window.FWDS3DCUtils = FWDS3DCUtils;
}(window));