// unite gallery, version: 1.7.45, released 27 feb 2017
var imgzoom = 1;
var smallimgheight = 68;
/**
* write something to debug line
*/
function debugline(html, addrandom, addhtml) {
if (html === true)
html = "true";
if (html === false)
html = "false";
var output = html;
if (typeof html == "object") {
output = "";
for (name in html) {
var value = html[name];
output += " " + name + ": " + value;
}
}
if (addrandom == true && !addhtml)
output += " " + math.random();
if (addhtml == true) {
var objline = jquery("#debug_line");
objline.width(200);
if (objline.height() >= 500)
objline.html("");
var currenthtml = objline.html();
output = currenthtml + " -------------- " + output;
}
jquery("#debug_line").show().html(output);
}
/**
*
* debug side some object
*/
function debugside(obj) {
var html = "";
for (name in obj) {
var value = obj[name];
html += name + " : " + value + " ";
}
jquery("#debug_side").show().html(html);
}
/**
* output some string to console
*/
function trace(str) {
if (typeof console != "undefined")
console.log(str);
}
/** -------------- ugfunctions class ---------------------*/
function ugfunctions() {
var g_browserprefix = null;
var t = this;
var g_temp = {
startime: 0,
arrthemes: [],
istouchdevice: -1,
isrgbasupported: -1,
timecache: {},
datacache: {},
lasteventtype: "", //for validate touchstart click
lasteventtime: 0,
lasttouchstartelement: null,
touchthreshold: 700,
handle: null //interval handle
};
this.debugvar = "";
this.z__________full_screen___________ = function () { }
/**
* move to full screen mode
* fullscreen id - the id of current fullscreen
*/
this.tofullscreen = function (element, fullscreenid) {
if (element.requestfullscreen) {
element.requestfullscreen();
} else if (element.mozrequestfullscreen) {
element.mozrequestfullscreen();
} else if (element.webkitrequestfullscreen) {
element.webkitrequestfullscreen();
} else if (element.msrequestfullscreen) {
element.msrequestfullscreen();
} else {
return (false);
}
return (true);
}
/**
* exit full screen mode
* return if operation success (or if fullscreen mode supported)
*/
this.exitfullscreen = function () {
if (t.isfullscreen() == false)
return (false);
if (document.exitfullscreen) {
document.exitfullscreen();
} else if (document.cancelfullscreen) {
document.cancelfullscreen();
} else if (document.mozcancelfullscreen) {
document.mozcancelfullscreen();
} else if (document.webkitexitfullscreen) {
document.webkitexitfullscreen();
} else if (document.msexitfullscreen) {
document.msexitfullscreen();
} else {
return (false);
}
return (true);
}
/**
* cross browser attach even function
*/
function addevent(evnt, elem, func) {
if (elem.addeventlistener) // w3c dom
elem.addeventlistener(evnt, func, false);
else if (elem.attachevent) { // ie dom
elem.attachevent("on" + evnt, func);
}
else { // no much to do
elem[evnt] = func;
}
}
/**
* add fullscreen event to some function
*/
this.addfullscreenchangeevent = function (func) {
if (document["webkitcancelfullscreen"])
addevent("webkitfullscreenchange", document, func);
else if (document["msexitfullscreen"])
addevent("msfullscreenchange", document, func);
else if (document["mozcancelfullscreen"])
addevent("mozfullscreenchange", document, func);
else
addevent("fullscreenchange", document, func);
}
/**
* destroy the full screen change event
*/
this.destroyfullscreenchangeevent = function () {
jquery(document).unbind("fullscreenchange");
jquery(document).unbind("mozfullscreenchange");
jquery(document).unbind("webkitfullscreenchange");
jquery(document).unbind("msfullscreenchange");
}
/**
* get the fullscreen element
*/
this.getfullscreenelement = function () {
var fullscreenelement = document.fullscreenelement || document.mozfullscreenelement || document.webkitfullscreenelement || document.msfullscreenelement;
return (fullscreenelement);
}
/**
* return if fullscreen enabled
*/
this.isfullscreen = function () {
var isfullscreen = document.fullscreen || document.mozfullscreen || document.webkitisfullscreen || document.msfullscreenelement;
if (!isfullscreen)
isfullscreen = false;
else
isfullscreen = true;
return (isfullscreen);
}
this.z__________get_props___________ = function () { }
/**
* get browser prefix, can be empty if not detected.
*/
this.getbrowserprefix = function () {
if (g_browserprefix !== null)
return g_browserprefix;
var arrayofprefixes = ['webkit', 'moz', 'ms', 'o'];
var div = document.createelement("div");
for (var index in arrayofprefixes) {
var prefix = arrayofprefixes[index];
if (prefix + "transform" in div.style) {
prefix = prefix.tolowercase();
g_browserprefix = prefix;
return (prefix);
}
}
g_browserprefix = "";
return "";
}
/**
* get image inside parent data by image (find parent and size)
* scalemode: fit, down, fill, fitvert
*/
this.getimageinsideparentdatabyimage = function (objimage, scalemode, objpadding) {
var objparent = objimage.parent();
var objorgsize = t.getimageoriginalsize(objimage);
var objdata = t.getimageinsideparentdata(objparent, objorgsize.width, objorgsize.height, scalemode, objpadding);
return (objdata);
}
/**
* get data of image inside parent
* scalemode: fit, down, fill, fitvert
*/
this.getimageinsideparentdata = function (objparent, originalwidth, originalheight, scalemode, objpadding, maxwidth, maxheight) {
if (!objpadding)
var objpadding = {};
var objoutput = {};
if (typeof maxwidth === "undefined")
var maxwidth = objparent.width();
if (typeof maxheight === "undefined")
var maxheight = objparent.height();
if (objpadding.padding_left)
maxwidth -= objpadding.padding_left;
if (objpadding.padding_right)
maxwidth -= objpadding.padding_right;
if (objpadding.padding_top)
maxheight -= objpadding.padding_top;
if (objpadding.padding_bottom)
maxheight -= objpadding.padding_bottom;
var imagewidth = null;
var imageheight = "100%";
var imagetop = null;
var imageleft = null;
var style = "display:block;margin:0px auto;";
if (originalwidth > 0 && originalheight > 0) {
//get image size and position
if (scalemode == "down" && originalwidth < maxwidth && originalheight < maxheight) {
imageheight = originalheight;
imagewidth = originalwidth;
imageleft = (maxwidth - imagewidth) / 2;
imagetop = (maxheight - imageheight) / 2;
} else if (scalemode == "fill") {
var ratio = originalwidth / originalheight;
imageheight = maxheight;
imagewidth = imageheight * ratio;
if (imagewidth < maxwidth) {
imagewidth = maxwidth;
imageheight = imagewidth / ratio;
//center y position
imageleft = 0;
imagetop = math.round((imageheight - maxheight) / 2 * -1);
} else { //center x position
imagetop = 0;
imageleft = math.round((imagewidth - maxwidth) / 2 * -1);
}
}
else { //fit to borders
var ratio = originalwidth / originalheight;
imageheight = maxheight;
imagewidth = imageheight * ratio;
imagetop = 0;
imageleft = (maxwidth - imagewidth) / 2;
if (scalemode != "fitvert" && imagewidth > maxwidth) {
imagewidth = maxwidth;
imageheight = imagewidth / ratio;
imageleft = 0;
imagetop = (maxheight - imageheight) / 2;
}
}
imagewidth = math.floor(imagewidth);
imageheight = math.floor(imageheight);
imagetop = math.floor(imagetop);
imageleft = math.floor(imageleft);
style = "position:absolute;";
}
//set padding
if (objpadding.padding_top)
imagetop += objpadding.padding_top;
if (objpadding.padding_left)
imageleft += objpadding.padding_left;
objoutput.imagewidth = imagewidth;
objoutput.imageheight = imageheight;
objoutput.imagetop = imagetop;
objoutput.imageleft = imageleft;
objoutput.imageright = imageleft + imagewidth;
if (imagetop == 0 || imageheight == "100%")
objoutput.imagebottom = null;
else
objoutput.imagebottom = imagetop + imageheight;
objoutput.style = style;
return (objoutput);
}
/**
* get element center position inside parent
* even if the object bigger than the parent
*/
this.getelementcenterposition = function (element, objpadding) {
var parent = element.parent();
var objsize = t.getelementsize(element);
var objsizeparent = t.getelementsize(parent);
var parentwidth = objsizeparent.width;
var parentheight = objsizeparent.height;
if (objpadding && objpadding.padding_top !== undefined)
parentheight -= objpadding.padding_top;
if (objpadding && objpadding.padding_bottom !== undefined)
parentheight -= objpadding.padding_bottom;
if (objpadding && objpadding.padding_left !== undefined)
parentwidth -= objpadding.padding_left;
if (objpadding && objpadding.padding_right !== undefined)
parentwidth -= objpadding.padding_right;
var output = {};
output.left = math.round((parentwidth - objsize.width) / 2);
output.top = math.round((parentheight - objsize.height) / 2);
if (objpadding && objpadding.padding_top !== undefined)
output.top += objpadding.padding_top;
if (objpadding && objpadding.padding_left !== undefined)
output.left += objpadding.padding_left;
return (output);
}
/**
* get the center of the element
* includeparent - including left / right related to the parent
*/
this.getelementcenterpoint = function (element, includeparent) {
if (!includeparent)
var includeparent = false;
var objsize = t.getelementsize(element);
var output = {};
output.x = objsize.width / 2;
output.y = objsize.height / 2;
if (includeparent == true) {
output.x += objsize.left;
output.y += objsize.top;
}
output.x = math.round(output.x);
output.y = math.round(output.y);
return (output);
}
/**
*
* get mouse position from the event
* optimised to every device
*/
this.getmouseposition = function (event, element) {
var output = {
pagex: event.pagex,
pagey: event.pagey,
clientx: event.clientx,
clienty: event.clienty
};
if (event.originalevent && event.originalevent.touches && event.originalevent.touches.length > 0) {
output.pagex = event.originalevent.touches[0].pagex;
output.pagey = event.originalevent.touches[0].pagey;
output.clientx = event.originalevent.touches[0].clientx;
output.clienty = event.originalevent.touches[0].clienty;
}
/**
* get element's mouse position
*/
if (element) {
var elementpos = element.offset();
output.mousex = output.pagex - elementpos.left;
output.mousey = output.pagey - elementpos.top;
}
return (output);
}
/**
* get mouse element related point from page related point
*/
this.getmouseelementpoint = function (point, element) {
//rename the input and output
var newpoint = { x: point.pagex, y: point.pagey };
var elementpoint = t.getelementlocalpoint(newpoint, element);
return (elementpoint);
}
/**
* get element local point from global point position
*/
this.getelementlocalpoint = function (point, element) {
var elementpoint = {};
var elementpos = element.offset();
elementpoint.x = math.round(point.x - elementpos.left);
elementpoint.y = math.round(point.y - elementpos.top);
return (elementpoint);
}
/**
* get image oritinal size
* if originalwidth, originalheight is set, just return them.
*/
this.getimageoriginalsize = function (objimage, originalwidth, originalheight) {
if (typeof originalwidth != "undefined" && typeof originalheight != "undefined")
return ({ width: originalwidth, height: originalheight });
var htmlimage = objimage[0];
if (typeof htmlimage == "undefined")
throw new error("getimageoriginalsize error - image not found");
var output = {};
if (typeof htmlimage.naturalwidth == "undefined") {
//check from cache
if (typeof objimage.data("naturalwidth") == "number") {
var output = {};
output.width = objimage.data("naturalwidth");
output.height = objimage.data("naturalheight");
return (output);
}
//load new image
var newimg = new image();
newimg.src = htmlimage.src;
if (newimg.complete) {
output.width = newimg.width;
output.height = newimg.height;
//caching
objimage.data("naturalwidth", output.width);
objimage.data("naturalheight", output.height);
return (output);
}
return ({ width: 0, height: 0 });
} else {
output.width = htmlimage.naturalwidth;
output.height = htmlimage.naturalheight;
return (output);
}
}
/**
* get current image ratio from original size
*/
this.getimageratio = function (objimage) {
var originalsize = t.getimageoriginalsize(objimage);
var size = t.getelementsize(objimage);
var ratio = size.width / originalsize.width;
return (ratio);
}
/**
* tells if the image fit the parent (smaller then the parent)
*/
this.isimagefitparent = function (objimage) {
var objparent = objimage.parent();
var sizeimage = t.getelementsize(objimage);
var sizeparent = t.getelementsize(objparent);
if (sizeimage.width <= sizeparent.width && sizeimage.height <= sizeparent.height)
return (true);
return (false);
}
/**
* get size and position of some object
*/
this.getelementsize = function (element) {
if (element === undefined) {
throw new error("can't get size, empty element");
}
var obj = element.position();
obj.height = element.outerheight();
obj.width = element.outerwidth();
obj.left = math.round(obj.left);
obj.top = math.round(obj.top);
obj.right = obj.left + obj.width;
obj.bottom = obj.top + obj.height;
return (obj);
}
/**
* return true if the element is bigger then it's parent
*/
this.iselementbiggerthenparent = function (element) {
var objparent = element.parent();
var objsizeelement = t.getelementsize(element);
var objsizeparent = t.getelementsize(objparent);
if (objsizeelement.width > objsizeparent.width || objsizeelement.height > objsizeparent.height)
return (true);
return (false);
}
/**
* tells if the mouse point inside image
* the mouse point is related to image pos
*/
this.ispointinsideelement = function (point, objsize) {
var ismousexinside = (point.x >= 0 && point.x < objsize.width);
if (ismousexinside == false)
return (false);
var ismouseyinside = (point.y >= 0 && point.y < objsize.height);
if (ismouseyinside == false)
return (false);
return (true);
}
/**
* get element relative position according the parent
* if the left / top is offset text (left , center, right / top, middle , bottom)
* the element can be number size as well
*/
this.getelementrelativepos = function (element, pos, offset, objparent) {
if (!objparent)
var objparent = element.parent();
if (typeof element == "number") {
var elementsize = {
width: element,
height: element
};
} else
var elementsize = t.getelementsize(element);
var parentsize = t.getelementsize(objparent);
switch (pos) {
case "top":
case "left":
pos = 0;
if (offset)
pos += offset;
break;
case "center":
pos = math.round((parentsize.width - elementsize.width) / 2);
if (offset)
pos += offset;
break;
case "right":
pos = parentsize.width - elementsize.width;
if (offset)
pos -= offset;
break;
case "middle":
pos = math.round((parentsize.height - elementsize.height) / 2);
if (offset)
pos += offset;
break;
case "bottom":
pos = parentsize.height - elementsize.height;
if (offset)
pos -= offset;
break;
}
return (pos);
}
this.z_________set_element_props_______ = function () { }
/**
*
* zoom image inside parent
* the mouse point is page offset position, can be null
* return true if zoomed and false if not zoomed
*/
this.zoomimageinsideparent = function (objimage, zoomin, step, point, scalemode, maxzoomratio, objpadding) {
if (!step)
var step = 1.2;
if (!scalemode)
var scalemode = "fit";
var zoomratio = step;
var objparent = objimage.parent();
var objsize = t.getelementsize(objimage);
var objoriginalsize = t.getimageoriginalsize(objimage);
var ismouseinside = false;
var newheight, newwidth, panx = 0, pany = 0, newx, newy, panorientx = 0, panorienty = 0;
if (!point) {
ismouseinside = false;
} else {
var pointimg = t.getmouseelementpoint(point, objimage);
ismouseinside = t.ispointinsideelement(pointimg, objsize);
//if mouse point outside image, set orient to image center
panorientx = pointimg.x;
panorienty = pointimg.y;
}
if (ismouseinside == false) {
var imgcenterpoint = t.getelementcenterpoint(objimage);
panorientx = imgcenterpoint.x;
panorienty = imgcenterpoint.y;
}
//zoom:
if (zoomin == true) { //zoom in
newheight = objsize.height * zoomratio;
newwidth = objsize.width * zoomratio;
if (panorientx != 0)
panx = -(panorientx * zoomratio - panorientx);
if (panorienty != 0)
pany = -(panorienty * zoomratio - panorienty);
} else { //zoom out
newheight = objsize.height / zoomratio;
newwidth = objsize.width / zoomratio;
var objscaledata = t.getimageinsideparentdata(objparent, objoriginalsize.width, objoriginalsize.height, scalemode, objpadding);
//go back to original size
if (newwidth < objscaledata.imagewidth) {
t.scaleimagefitparent(objimage, objoriginalsize.width, objoriginalsize.height, scalemode, objpadding);
return (true);
}
if (ismouseinside == true) {
if (panorientx != 0)
panx = -(panorientx / zoomratio - panorientx);
if (panorienty != 0)
pany = -(panorienty / zoomratio - panorienty);
}
}
//check max zoom ratio, ix exeeded, abort
if (maxzoomratio) {
var expectedzoomratio = 1;
if (objoriginalsize.width != 0)
expectedzoomratio = newwidth / objoriginalsize.width;
if (expectedzoomratio > maxzoomratio)
return (false);
}
//resize the element
t.setelementsize(objimage, newwidth, newheight);
//set position:
//if zoom out and mouse point not inside image,
//get the image to center
if (zoomin == false && ismouseinside == false) {
var poscenter = t.getelementcenterposition(objimage);
newx = poscenter.left;
newy = poscenter.top;
} else {
newx = objsize.left + panx;
newy = objsize.top + pany;
}
t.placeelement(objimage, newx, newy);
return (true);
}
/**
* place some element to some position
* if the left / top is offset text (left , center, right / top, middle , bottom)
* then put it in parent by the offset.
*/
this.placeelement = function (element, left, top, offsetleft, offsettop, objparent) {
if (jquery.isnumeric(left) == false || jquery.isnumeric(top) == false) {
if (!objparent)
var objparent = element.parent();
var elementsize = t.getelementsize(element);
var parentsize = t.getelementsize(objparent);
}
//select left position
if (jquery.isnumeric(left) == false) {
switch (left) {
case "left":
left = 0;
if (offsetleft)
left += offsetleft;
break;
case "center":
left = math.round((parentsize.width - elementsize.width) / 2);
if (offsetleft)
left += offsetleft;
break;
case "right":
left = parentsize.width - elementsize.width;
if (offsetleft)
left -= offsetleft;
break;
}
}
//select top position
if (jquery.isnumeric(top) == false) {
switch (top) {
case "top":
top = 0;
if (offsettop)
top += offsettop;
break;
case "middle":
case "center":
top = math.round((parentsize.height - elementsize.height) / 2);
if (offsettop)
top += offsettop;
break;
case "bottom":
top = parentsize.height - elementsize.height;
if (offsettop)
top -= offsettop;
break;
}
}
var objcss = {
"position": "absolute",
"margin": "0px"
};
if (left !== null)
objcss.left = left;
if (top !== null)
objcss.top = top;
element.css(objcss);
}
/**
* place element inside parent center.
* the element should be absolute position
*/
this.placeelementinparentcenter = function (element) {
t.placeelement(element, "center", "middle");
}
/**
* set element size and position
*/
this.setelementsizeandposition = function (element, left, top, width, height) {
var objcss = {
"width": width + "px",
"height": height + "px",
"left": left + "px",
"top": top + "px",
"position": "absolute",
"margin": "0px"
}
element.css(objcss);
}
/**
* set widht and height of the element
*/
this.setelementsize = function (element, width, height) {
var objcss = {
"width": width + "px"
}
if (height !== null && typeof height != "undefined")
objcss["height"] = height + "px"
element.css(objcss);
}
/**
* clone element size and position
*/
this.cloneelementsizeandpos = function (objsource, objtarget, isouter, offsetx, offsety) {
var objsize = objsource.position();
if (objsize == undefined) {
throw new error("can't get size, empty element");
}
if (isouter === true) {
objsize.height = objsource.outerheight();
objsize.width = objsource.outerwidth();
} else {
objsize.height = objsource.height();
objsize.width = objsource.width();
}
objsize.left = math.round(objsize.left);
objsize.top = math.round(objsize.top);
if (offsetx)
objsize.left += offsetx;
if (offsety)
objsize.top += offsety;
t.setelementsizeandposition(objtarget, objsize.left, objsize.top, objsize.width, objsize.height);
}
/**
* place image inside parent, scale it by the options
* and scale it to fit the parent.
* scalemode: fit, down, fill
*/
this.placeimageinsideparent = function (urlimage, objparent, originalwidth, originalheight, scalemode, objpadding) {
var obj = t.getimageinsideparentdata(objparent, originalwidth, originalheight, scalemode, objpadding);
//set html image:
var htmlimage = "";
objparent.html(htmlimage);
//return the image just created
var objimage = objparent.children("img");
return (objimage);
}
/**
* scale image to fit parent, and place it into parent
* parent can be width , height, or object
*/
this.scaleimagecoverparent = function (objimage, objparent, pheight) {
if (typeof objparent == "number") {
var parentwidth = objparent;
var parentheight = pheight;
} else {
var parentwidth = objparent.outerwidth();
var parentheight = objparent.outerheight();
}
var objoriginalsize = t.getimageoriginalsize(objimage);
var imagewidth = objoriginalsize.width;
var imageheight = objoriginalsize.height;
var ratio = imagewidth / imageheight;
var fitheight = parentheight;
var fitwidth = fitheight * ratio;
var posy = 0, posx = 0;
if (fitwidth < parentwidth) {
fitwidth = parentwidth;
fitheight = fitwidth / ratio;
//center y position
posx = 0;
posy = math.round((fitheight - parentheight) / 2 * -1);
} else { //center x position
posy = 0;
posx = math.round((fitwidth - parentwidth) / 2 * -1);
}
fitwidth = math.round(fitwidth);
fitheight = math.round(fitheight);
objimage.css({
"width": fitwidth + "px",
"height": fitheight + "px",
"left": posx + "px",
"top": posy + "px"
});
}
/**
* resize image to fit the parent, scale it by the options
* scalemode: fit, down, fill
*/
this.scaleimagefitparent = function (objimage, originalwidth, originalheight, scalemode, objpadding) {
var objparent = objimage.parent();
var obj = t.getimageinsideparentdata(objparent, originalwidth, originalheight, scalemode, objpadding);
var updatecss = false;
var objcss = {};
if (obj.imagewidth !== null) {
updatecss = true
objimage.removeattr("width");
objcss["width"] = obj.imagewidth + "px";
}
if (obj.imageheight != null) {
updatecss = true
objimage.removeattr("height");
objcss["height"] = obj.imageheight + "px";
}
if (obj.imagetop !== null) {
updatecss = true;
objcss.top = obj.imagetop + "px";
}
if (obj.imageleft !== null) {
updatecss = true;
objcss.left = obj.imageleft + "px";
}
if (updatecss == true) {
objcss.position = "absolute";
objcss.margin = "0px 0px";
objimage.css(objcss);
}
return (obj);
}
/**
* scale image by height
*/
this.scaleimagebyheight = function (objimage, height, originalwidth, originalheight) {
var objoriginalsize = t.getimageoriginalsize(objimage, originalwidth, originalheight);
var ratio = objoriginalsize.width / objoriginalsize.height;
var width = math.round(height * ratio);
height = math.round(height);
t.setelementsize(objimage, width, height);
}
/**
* scale image by height
*/
this.scaleimagebywidth = function (objimage, width, originalwidth, originalheight) {
var objoriginalsize = t.getimageoriginalsize(objimage, originalwidth, originalheight);
var ratio = objoriginalsize.width / objoriginalsize.height;
var height = math.round(width / ratio);
width = math.round(width);
t.setelementsize(objimage, width, height);
}
/**
* scale image to exact size in parent, by setting image size and padding
*/
this.scaleimageexactsizeinparent = function (objimage, originalwidth, originalheight, exactwidth, exactheight, scalemode) {
var objparent = objimage.parent();
var parentsize = t.getelementsize(objparent);
if (parentsize.width < exactwidth)
exactwidth = parentsize.width;
if (parentsize.height < exactheight)
exactheight = parentsize.height;
var obj = t.getimageinsideparentdata(null, originalwidth, originalheight, scalemode, null, exactwidth, exactheight);
var imagewidth = exactwidth;
var imageheight = exactheight;
var paddingleft = obj.imageleft;
var paddingright = obj.imageleft;
var paddingtop = obj.imagetop;
var paddingbottom = obj.imagetop;
var imageleft = math.round((parentsize.width - exactwidth) / 2);
var imagetop = math.round((parentsize.height - exactheight) / 2);
var totalwidth = obj.imagewidth + paddingleft + paddingright;
var diff = exactwidth - totalwidth;
if (diff != 0)
paddingright += diff;
var totalheight = obj.imageheight + paddingtop + paddingbottom;
var diff = exactheight - totalheight;
if (diff != 0)
paddingbottom += diff;
//update css:
objimage.removeattr("width");
objimage.removeattr("height");
var objcss = {
position: "absolute",
margin: "0px 0px"
};
objcss["width"] = imagewidth + "px";
objcss["height"] = imageheight + "px";
objcss["left"] = imageleft + "px";
objcss["top"] = imagetop + "px";
objcss["padding-left"] = paddingleft + "px";
objcss["padding-top"] = paddingtop + "px";
objcss["padding-right"] = paddingright + "px";
objcss["padding-bottom"] = paddingbottom + "px";
objimage.css(objcss);
//return size object
var objreturn = {};
objreturn["imagewidth"] = imagewidth;
objreturn["imageheight"] = imageheight;
return (objreturn);
}
/**
* show some element and make opacity:1
*/
this.showelement = function (element, element2, element3) {
element.show().fadeto(0, 1);
if (element2)
element2.show().fadeto(0, 1);
if (element3)
element3.show().fadeto(0, 1);
}
this.z_________gallery_related_functions_______ = function () { }
/**
* disable button
*/
this.disablebutton = function (objbutton, classname) {
if (!classname)
var classname = "ug-button-disabled";
if (t.isbuttondisabled(objbutton, classname) == false)
objbutton.addclass(classname);
}
/**
* convert custom prefix options
* prefix - the prefix.
* base - after the prefix text. example lightbox_slider_option (lightbox - prefix, slider - base)
*/
this.convertcustomprefixoptions = function (objoptions, prefix, base) {
if (!prefix)
return (objoptions);
var modifiedoptions = {};
jquery.each(objoptions, function (key, option) {
if (key.indexof(prefix + "_" + base + "_") === 0) {
var newkey = key.replace(prefix + "_" + base + "_", base + "_");
modifiedoptions[newkey] = option;
} else {
modifiedoptions[key] = option;
}
});
return (modifiedoptions);
}
/**
* enable button
*/
this.enablebutton = function (objbutton, classname) {
if (!classname)
var classname = "ug-button-disabled";
if (t.isbuttondisabled(objbutton, classname) == true)
objbutton.removeclass(classname);
}
/**
* check if some buggon disabled
*/
this.isbuttondisabled = function (objbutton, classname) {
if (!classname)
var classname = "ug-button-disabled";
if (objbutton.hasclass(classname))
return (true);
return (false);
}
this.z_________math_functions_______ = function () { }
/**
*
* normalize the value for readable "human" setting value.
*/
this.normalizesetting = function (realmin, realmax, settingmin, settingmax, value, fixbounds) {
if (!fixbounds)
var fixbounds = false;
var ratio = (value - settingmin) / (settingmax - settingmin);
value = realmin + (realmax - realmin) * ratio;
if (fixbounds == true) {
if (value < realmin)
value = realmin;
if (value > realmax)
value = realmax;
}
return (value);
}
/**
*
* get "real" setting from normalized setting
*/
this.getnormalizedvalue = function (realmin, realmax, settingmin, settingmax, realvalue) {
var ratio = (realvalue - realmin) / (realmax - realmin);
realvalue = realmin + (settingmax - settingmin) * ratio;
return (realvalue);
}
/**
* get distance between 2 points
*/
this.getdistance = function (x1, y1, x2, y2) {
var distance = math.round(math.sqrt(math.abs(((x2 - x1) * (x2 - x1)) + ((y2 - y1) * (y2 - y1)))));
return distance;
}
/**
* get center point of the 2 points
*/
this.getmiddlepoint = function (x1, y1, x2, y2) {
var output = {}
output.x = x1 + math.round((x2 - x1) / 2);
output.y = y1 + math.round((y2 - y1) / 2);
return (output);
}
/**
* get number of items in space width gap
* even item sizes
* by lowest
*/
this.getnumitemsinspace = function (spacesize, itemssize, gapsize) {
var numitems = math.floor((spacesize + gapsize) / (itemssize + gapsize));
return (numitems);
}
/**
* get number of items in space width gap
* even item sizes
* by math.round
*/
this.getnumitemsinspaceround = function (spacesize, itemssize, gapsize) {
var numitems = math.round((spacesize + gapsize) / (itemssize + gapsize));
return (numitems);
}
/**
* get space (width in carousel for example) by num items, item size, and gap size
*/
this.getspacebynumitems = function (numitems, itemsize, gapsize) {
var space = numitems * itemsize + (numitems - 1) * gapsize;
return (space);
}
/**
* get item size by space and gap
*/
this.getitemsizeinspace = function (spacesize, numitems, gapsize) {
var itemsize = math.floor((spacesize - (numitems - 1) * gapsize) / numitems);
return (itemsize);
}
/**
* get column x pos with even column sizes, start from 0
*/
this.getcolx = function (col, colwidth, colgap) {
var posx = col * (colwidth + colgap);
return posx;
}
/**
* get column number by index
*/
this.getcolbyindex = function (numcols, index) {
var col = index % numcols;
return (col);
}
/**
* get col and row by index
*/
this.getcolrowbyindex = function (index, numcols) {
var row = math.floor(index / numcols);
var col = math.floor(index % numcols);
return ({ col: col, row: row });
}
/**
* get index by row, col, numcols
*/
this.getindexbyrowcol = function (row, col, numcols) {
if (row < 0)
return (-1);
if (col < 0)
return (-1);
var index = row * numcols + col;
return (index);
}
/**
* get previous row item in the same column
*/
this.getprevrowsamecolindex = function (index, numcols) {
var obj = t.getcolrowbyindex(index, numcols);
var previndex = t.getindexbyrowcol(obj.row - 1, obj.col, numcols);
return (previndex);
}
/**
* get next row item in the same column
*/
this.getnextrowsamecolindex = function (index, numcols) {
var obj = t.getcolrowbyindex(index, numcols);
var nextindex = t.getindexbyrowcol(obj.row + 1, obj.col, numcols);
return (nextindex);
}
this.z_________data_functions_______ = function () { }
/**
* set data value
*/
this.setglobaldata = function (key, value) {
jquery.data(document.body, key, value);
}
/**
* get global data
*/
this.getglobaldata = function (key) {
var value = jquery.data(document.body, key);
return (value);
}
this.z_________event_data_functions_______ = function () { }
/**
* handle scroll top, return if scroll mode or not
*/
this.handlescrolltop = function (storedeventid) {
if (t.istouchdevice() == false)
return (null);
var objdata = t.getstoredeventdata(storedeventid);
var horpass = 15;
var vertpass = 15;
//check if need to set some movement
if (objdata.scrolldir === null) {
if (math.abs(objdata.diffmousex) > horpass)
objdata.scrolldir = "hor";
else
if (math.abs(objdata.diffmousey) > vertpass && math.abs(objdata.diffmousey) > math.abs(objdata.diffmousex)) {
objdata.scrolldir = "vert";
objdata.scrollstarty = objdata.lastmouseclienty;
objdata.scrollorigin = jquery(document).scrolltop();
g_temp.datacache[storedeventid].scrollstarty = objdata.lastmouseclienty;
g_temp.datacache[storedeventid].scrollorigin = objdata.scrollorigin;
}
//update scrolldir
g_temp.datacache[storedeventid].scrolldir = objdata.scrolldir;
}
if (objdata.scrolldir !== "vert")
return (objdata.scrolldir);
var currentscroll = jquery(document).scrolltop();
var scrollpos = objdata.scrollorigin - (objdata.lastmouseclienty - objdata.scrollstarty);
if (scrollpos >= 0)
jquery(document).scrolltop(scrollpos);
return (objdata.scrolldir);
}
/**
* return true / false if was vertical scrolling
*/
this.wasverticalscroll = function (storedeventid) {
var objdata = t.getstoredeventdata(storedeventid);
if (objdata.scrolldir === "vert")
return (true);
return (false);
}
/**
* store event data
*/
this.storeeventdata = function (event, id, adddata) {
var mousepos = t.getmouseposition(event);
var time = jquery.now();
var obj = {
starttime: time,
lasttime: time,
startmousex: mousepos.pagex,
startmousey: mousepos.pagey,
lastmousex: mousepos.pagex,
lastmousey: mousepos.pagey,
startmouseclienty: mousepos.clienty,
lastmouseclienty: mousepos.clienty,
scrolltop: jquery(document).scrolltop(),
scrolldir: null
};
if (adddata)
obj = jquery.extend(obj, adddata);
g_temp.datacache[id] = obj;
}
/**
* update event data with last position
*/
this.updatestoredeventdata = function (event, id, adddata) {
if (!g_temp.datacache[id])
throw new error("updateeventdata error: must have stored cache object");
var obj = g_temp.datacache[id];
var mousepos = t.getmouseposition(event);
obj.lasttime = jquery.now();
if (mousepos.pagex !== undefined) {
obj.lastmousex = mousepos.pagex;
obj.lastmousey = mousepos.pagey;
obj.lastmouseclienty = mousepos.clienty;
}
if (adddata)
obj = jquery.extend(obj, adddata);
g_temp.datacache[id] = obj;
}
/**
* get stored event data
*/
this.getstoredeventdata = function (id, isvertical) {
if (!g_temp.datacache[id])
throw new error("updateeventdata error: must have stored cache object");
var obj = g_temp.datacache[id];
obj.diffmousex = obj.lastmousex - obj.startmousex;
obj.diffmousey = obj.lastmousey - obj.startmousey;
obj.diffmouseclienty = obj.lastmouseclienty - obj.startmouseclienty;
obj.difftime = obj.lasttime - obj.starttime;
//get mouse position according orientation
if (isvertical === true) {
obj.startmousepos = obj.lastmousey;
obj.lastmousepos = obj.lastmousey;
obj.diffmousepos = obj.diffmousey;
} else {
obj.startmousepos = obj.lastmousex;
obj.lastmousepos = obj.lastmousex;
obj.diffmousepos = obj.diffmousex;
}
return (obj);
}
/**
* return if click event approved according the done motion
*/
this.isapprovestoredeventclick = function (id, isvertical) {
if (!g_temp.datacache[id])
return (true);
var objdata = t.getstoredeventdata(id, isvertical);
var passeddistanceabs = math.abs(objdata.diffmousepos);
if (objdata.difftime > 400)
return (false);
if (passeddistanceabs > 30)
return (false);
return (true);
}
/**
* clear stored event data
*/
this.clearstoredeventdata = function (id) {
g_temp.datacache[id] = null;
}
this.z_________check_support_functions_______ = function () { }
/**
* is canvas exists in the browser
*/
this.iscanvasexists = function () {
var canvas = jquery('')[0];
if (typeof canvas.getcontext == "function")
return (true);
return (false);
}
/**
* tells if vertical scrollbar exists
*/
this.isscrollbarexists = function () {
var hasscrollbar = window.innerwidth > document.documentelement.clientwidth;
return (hasscrollbar);
}
/**
* check if this device are touch enabled
*/
this.istouchdevice = function () {
//get from cache
if (g_temp.istouchdevice !== -1)
return (g_temp.istouchdevice);
try {
document.createevent("touchevent");
g_temp.istouchdevice = true;
}
catch (e) {
g_temp.istouchdevice = false;
}
return (g_temp.istouchdevice);
}
/**
* check if
*/
this.isrgbasupported = function () {
if (g_temp.isrgbasupported !== -1)
return (g_temp.isrgbasupported);
var scriptelement = document.getelementsbytagname('script')[0];
var prevcolor = scriptelement.style.color;
try {
scriptelement.style.color = 'rgba(1,5,13,0.44)';
} catch (e) { }
var result = scriptelement.style.color != prevcolor;
scriptelement.style.color = prevcolor;
g_temp.isrgbasupported = result;
return result;
}
this.z_________general_functions_______ = function () { }
/**
* check if current jquery version is more then minimal version
* version can be "1.8.0" for example
*/
this.checkminjqueryversion = function (version) {
var arrcurrent = jquery.fn.jquery.split('.');
var arrmin = version.split('.');
for (var i = 0, len = arrcurrent.length; i < len; i++) {
var numcurrent = parseint(arrcurrent[i]);
var nummin = parseint(arrmin[i]);
if (typeof arrmin[i] == "undefined")
return (true);
if (nummin > numcurrent)
return (false);
if (numcurrent > nummin)
return (true);
}
//if all equal then all ok
return true;
}
/**
* get css size parameter, like width. if % given, leave it, if number without px - add px.
*/
this.getcsssizeparam = function (sizeparam) {
if (jquery.isnumeric(sizeparam))
return (sizeparam + "px");
return (sizeparam);
}
/**
* convert hex color to rgb color
*/
this.converthextorgb = function (hexinput, opacity) {
var hex = hexinput.replace('#', '');
if (hex === hexinput)
return (hexinput);
r = parseint(hex.substring(0, 2), 16);
g = parseint(hex.substring(2, 4), 16);
b = parseint(hex.substring(4, 6), 16);
result = 'rgba(' + r + ',' + g + ',' + b + ',' + opacity + ')';
return result;
}
/**
* get timestamp to string
*/
this.timestamptostring = function (stamp) {
var d = new date(stamp);
var str = d.getdate() + "/" + d.getmonth();
str += " " + d.gethours() + ":" + d.getminutes() + ":" + d.getseconds() + ":" + d.getmilliseconds();
return (str);
}
/**
* get touches array (if exists) from the event
*/
this.getarrtouches = function (event) {
var arrtouches = [];
if (event.originalevent && event.originalevent.touches && event.originalevent.touches.length > 0) {
arrtouches = event.originalevent.touches;
}
return (arrtouches);
}
/**
* extract touch positions from arrtouches
*/
this.getarrtouchpositions = function (arrtouches) {
var arroutput = [];
for (var i = 0; i < arrtouches.length; i++) {
var point = {
pagex: arrtouches[i].pagex,
pagey: arrtouches[i].pagey
};
arroutput.push(point);
}
return (arroutput);
}
/**
* start time debug
*/
this.starttimedebug = function () {
g_temp.startime = jquery.now();
}
/**
* show time debug
*/
this.showtimedebug = function () {
var endtime = jquery.now();
var difftime = endtime - g_temp.startime;
debugline({ "time passed": difftime }, true);
}
/**
* put progress indicator to some parent by type
* return the progress indicator object
*/
this.initprogressindicator = function (type, options, objparent) {
//check canvas compatability
if (type != "bar" && t.iscanvasexists() == false)
type = "bar";
//put the progress indicator
switch (type) {
case "bar":
var g_objprogress = new ugprogressbar();
g_objprogress.puthidden(objparent, options);
break;
default:
case "pie":
var g_objprogress = new ugprogresspie();
g_objprogress.puthidden(objparent, options);
break;
case "pie2":
options.type_fill = true;
var g_objprogress = new ugprogresspie();
g_objprogress.puthidden(objparent, options);
break;
}
return (g_objprogress);
}
/**
* add to button ug-nohover class on ipad
* need to be processed in css
*/
this.setbuttonmobileready = function (objbutton) {
objbutton.on("touchstart", function (event) {
//event.preventdefault();
jquery(this).addclass("ug-nohover");
});
objbutton.on("mousedown touchend", function (event) {
//debugline("button touchend",true,true);
//event.preventdefault();
event.stoppropagation();
event.stopimmediatepropagation();
//debugline(event.type, true, true);
return (false);
});
}
/**
* register gallery theme
*/
this.registertheme = function (themename) {
g_temp.arrthemes.push(themename);
}
/**
* get themes array
*/
this.getarrthemes = function () {
return (g_temp.arrthemes);
}
/**
* check if theme exists
*/
this.isthemeregistered = function (theme) {
if (jquery.inarray(theme, g_temp.arrthemes) !== -1)
return (true);
return (false);
}
/**
* get first registered theme name
*/
this.getfirstregisteredtheme = function () {
if (g_temp.arrthemes.length == 0)
return ("");
var themename = g_temp.arrthemes[0];
return (themename);
}
/**
* function checks if enought time passsed between function calls.
* good for filtering same time events
*/
this.istimepassed = function (handlername, timelimit) {
if (!timelimit)
var timelimit = 100;
var currenttime = jquery.now();
if (g_temp.timecache.hasownproperty(handlername) == false)
lasttime = 0;
else
lasttime = g_temp.timecache[handlername];
var difftime = currenttime - lasttime;
g_temp.timecache[handlername] = currenttime;
//debugline(difftime,true,true);
if (difftime <= timelimit)
return (false);
return (true);
}
/**
* check if continious event is over like resize
*/
this.whencontiniouseventover = function (handlername, oneventover, timelimit) {
if (!timelimit)
var timelimit = 300;
if (g_temp.timecache.hasownproperty(handlername) == true && g_temp.timecache[handlername] != null) {
cleartimeout(g_temp.timecache[handlername]);
g_temp.timecache[handlername] = null;
}
g_temp.timecache[handlername] = settimeout(oneventover, timelimit);
}
/**
* validate click and touchstart events.
* if click comes after touchstart, return false.
*/
this.validateclicktouchstartevent = function (eventtype) {
var returnval = true;
var diff = jquery.now() - g_temp.lasteventtime;
//debugline({lasttype:g_temp.lasteventtype, diff:diff},true, true);
if (eventtype == "click" && g_temp.lasteventtype == "touchstart" && diff < 1000)
returnval = false;
g_temp.lasteventtime = jquery.now();
g_temp.lasteventtype = eventtype;
return (returnval);
}
/**
* add some class on hover (hover event)
*/
this.addclassonhover = function (element, classname) {
if (!classname)
var classname = "ug-button-hover";
element.hover(function () {
jquery(this).addclass(classname);
}, function () {
jquery(this).removeclass(classname);
});
}
/**
* destroy hover effect on elements
*/
this.destroybutton = function (element) {
element.off("mouseenter");
element.off("mouseleave");
element.off("click");
element.off("touchstart");
element.off("touchend");
element.off("mousedown");
element.off("tap");
}
/**
* set button on click event, advanced
*/
this.setbuttononclick = function (objbutton, onclickfunction) {
t.setbuttonmobileready(objbutton);
objbutton.on("click touchstart", function (event) {
objthis = jquery(this);
event.stoppropagation();
event.stopimmediatepropagation();
if (t.validateclicktouchstartevent(event.type) == false)
return (true);
onclickfunction(objthis, event);
});
}
/**
* set button on tap
*/
this.setbuttonontap = function (objbutton, onclickfunction) {
//set the event
objbutton.on("tap", onclickfunction);
//set tap event trigger
if (t.istouchdevice() == false) {
objbutton.on("click", function (event) {
var objelement = jquery(this);
if (t.validateclicktouchstartevent(event.type) == false)
return (true);
objelement.trigger("tap");
});
} else {
//set tap event
objbutton.on("touchstart", function (event) {
var objelement = jquery(this);
objelement.addclass("ug-nohover");
g_temp.lasttouchstartelement = jquery(this);
g_temp.lasteventtime = jquery.now();
});
objbutton.on("touchend", function (event) {
var objelement = jquery(this);
//validate same element
if (objelement.is(g_temp.lasttouchstartelement) == false)
return (true);
//validate time passed
if (!g_temp.lasteventtime)
return (true);
var timepassed = jquery.now() - g_temp.lasteventtime;
if (timepassed > g_temp.touchthreshold)
return (true);
objelement.trigger("tap");
});
}
}
/**
* load javascript dynamically
*/
this.loadjs = function (url, addprotocol) {
if (addprotocol === true)
url = location.protocol + "//" + url;
var tag = document.createelement('script');
tag.src = url;
var firstscripttag = document.getelementsbytagname('script')[0];
firstscripttag.parentnode.insertbefore(tag, firstscripttag);
}
/**
* load css dymanically
*/
this.loadcss = function (url, addprotocol) {
if (addprotocol === true)
url = location.protocol + "//" + url;
var tag = document.createelement("link");
tag.setattribute("rel", "stylesheet");
tag.setattribute("type", "text/css");
tag.setattribute("href", url);
document.getelementsbytagname("head")[0].appendchild(tag);
}
/**
* add event listener with old browsers fallback
*/
this.addevent = function (elem, event, func) {
if (typeof (elem.addeventlistener) != "undefined") {
elem.addeventlistener(event, func, false);
} else if (elem.attachevent) {
elem.attachevent('on' + event, func);
}
}
/**
* fire event where all images are loaded
*/
this.checkimagesloaded = function (objimages, oncomplete, onprogress) {
var arrimages = [];
var counter = 0;
var numimages = objimages.length;
//if no images - exit
if (numimages == 0 && oncomplete) {
oncomplete();
return (false);
}
//nested function
function checkcomplete(image, iserror) {
counter++;
if (typeof onprogress == "function") {
settimeout(function () {
onprogress(image, iserror);
});
}
if (counter == numimages && typeof oncomplete == "function") {
settimeout(function () {
oncomplete();
});
}
}
//start a little later
settimeout(function () {
//start the function
for (var index = 0; index < numimages; index++) {
var image = objimages[index];
//arrimages.push(jquery(image));
if (image.naturalwidth !== undefined && image.naturalwidth !== 0) {
checkcomplete(objimages[index], false);
}
else {
var proxyimage = jquery('');
proxyimage.data("index", index);
proxyimage.on("load", function () {
var index = jquery(this).data("index");
checkcomplete(objimages[index], false);
});
proxyimage.on("error", function () {
var index = jquery(this).data("index");
checkcomplete(objimages[index], true);
});
proxyimage.attr("src", image.src);
}
}
});
}
/**
* run the function when the element size will be not 0
*/
this.waitforwidth = function (element, func) {
var width = element.width();
if (width != 0) {
func();
return (false);
}
g_temp.handle = setinterval(function () {
width = element.width();
if (width != 0) {
clearinterval(g_temp.handle);
func();
}
}, 300);
}
/**
* shuffle (randomise) array
*/
this.arrayshuffle = function (arr) {
if (typeof arr != "object")
return (arr);
for (var j, x, i = arr.length; i; j = parseint(math.random() * i), x = arr[--i], arr[i] = arr[j], arr[j] = x);
return arr;
}
/**
* get object length
*/
this.getobjectlength = function (object) {
var num = 0;
for (var item in object)
num++;
return num;
}
/**
* normalize the percent, return always between 0 and 1
*/
this.normalizepercent = function (percent) {
if (percent < 0)
percent = 0;
if (percent > 1)
percent = 1;
return (percent);
}
/**
* strip tags from string
*/
this.striptags = function (html) {
var text = html.replace(/(<([^>]+)>)/ig, "");
return (text);
}
/**
* escape double slash
*/
this.escapedoubleslash = function (str) {
return str.replace('"', '\"');
}
/**
* html entitles
*/
this.htmlentitles = function (html) {
var text = jquery('
').text(html).html();
return (text);
}
this.z_________end_general_functions_______ = function () { }
}
var g_ugfunctions = new ugfunctions();
/** -------------- end ugfunctions class ---------------------*/
/** -------------- mousewheel ---------------------*/
!function (e) { "function" == typeof define && define.amd ? define(["jquery"], e) : "object" == typeof exports ? module.exports = e : e(jquery) }(function (e) { function t(t) { var s = t || window.event, a = h.call(arguments, 1), u = 0, r = 0, d = 0, f = 0; if (t = e.event.fix(s), t.type = "mousewheel", "detail" in s && (d = -1 * s.detail), "wheeldelta" in s && (d = s.wheeldelta), "wheeldeltay" in s && (d = s.wheeldeltay), "wheeldeltax" in s && (r = -1 * s.wheeldeltax), "axis" in s && s.axis === s.horizontal_axis && (r = -1 * d, d = 0), u = 0 === d ? r : d, "deltay" in s && (d = -1 * s.deltay, u = d), "deltax" in s && (r = s.deltax, 0 === d && (u = -1 * r)), 0 !== d || 0 !== r) { if (1 === s.deltamode) { var c = e.data(this, "mousewheel-line-height"); u *= c, d *= c, r *= c } else if (2 === s.deltamode) { var m = e.data(this, "mousewheel-page-height"); u *= m, d *= m, r *= m } return f = math.max(math.abs(d), math.abs(r)), (!l || l > f) && (l = f, i(s, f) && (l /= 40)), i(s, f) && (u /= 40, r /= 40, d /= 40), u = math[u >= 1 ? "floor" : "ceil"](u / l), r = math[r >= 1 ? "floor" : "ceil"](r / l), d = math[d >= 1 ? "floor" : "ceil"](d / l), t.deltax = r, t.deltay = d, t.deltafactor = l, t.deltamode = 0, a.unshift(t, u, r, d), o && cleartimeout(o), o = settimeout(n, 200), (e.event.dispatch || e.event.handle).apply(this, a) } } function n() { l = null } function i(e, t) { return r.settings.adjustolddeltas && "mousewheel" === e.type && t % 120 === 0 } var o, l, s = ["wheel", "mousewheel", "dommousescroll", "mozmousepixelscroll"], a = "onwheel" in document || document.documentmode >= 9 ? ["wheel"] : ["mousewheel", "dommousescroll", "mozmousepixelscroll"], h = array.prototype.slice; if (e.event.fixhooks) for (var u = s.length; u;) e.event.fixhooks[s[--u]] = e.event.mousehooks; var r = e.event.special.mousewheel = { version: "3.1.9", setup: function () { if (this.addeventlistener) for (var n = a.length; n;) this.addeventlistener(a[--n], t, !1); else this.onmousewheel = t; e.data(this, "mousewheel-line-height", r.getlineheight(this)), e.data(this, "mousewheel-page-height", r.getpageheight(this)) }, teardown: function () { if (this.removeeventlistener) for (var e = a.length; e;) this.removeeventlistener(a[--e], t, !1); else this.onmousewheel = null }, getlineheight: function (t) { return parseint(e(t)["offsetparent" in e.fn ? "offsetparent" : "parent"]().css("fontsize"), 10) }, getpageheight: function (t) { return e(t).height() }, settings: { adjustolddeltas: !0 } }; e.fn.extend({ mousewheel: function (e) { return e ? this.bind("mousewheel", e) : this.trigger("mousewheel") }, unmousewheel: function (e) { return this.unbind("mousewheel", e) } }) });
/** -------------- easing functions ---------------------*/
(function (factory) { if (typeof define === "function" && define.amd) { define(["jquery"], function ($) { return factory($) }) } else if (typeof module === "object" && typeof module.exports === "object") { exports = factory(require("jquery")) } else { factory(jquery) } })(function ($) { $.easing["jswing"] = $.easing["swing"]; var pow = math.pow, sqrt = math.sqrt, sin = math.sin, cos = math.cos, pi = math.pi, c1 = 1.70158, c2 = c1 * 1.525, c3 = c1 + 1, c4 = 2 * pi / 3, c5 = 2 * pi / 4.5; function bounceout(x) { var n1 = 7.5625, d1 = 2.75; if (x < 1 / d1) { return n1 * x * x } else if (x < 2 / d1) { return n1 * (x -= 1.5 / d1) * x + .75 } else if (x < 2.5 / d1) { return n1 * (x -= 2.25 / d1) * x + .9375 } else { return n1 * (x -= 2.625 / d1) * x + .984375 } } $.extend($.easing, { def: "easeoutquad", swing: function (x) { return $.easing[$.easing.def](x) }, easeinquad: function (x) { return x * x }, easeoutquad: function (x) { return 1 - (1 - x) * (1 - x) }, easeinoutquad: function (x) { return x < .5 ? 2 * x * x : 1 - pow(-2 * x + 2, 2) / 2 }, easeincubic: function (x) { return x * x * x }, easeoutcubic: function (x) { return 1 - pow(1 - x, 3) }, easeinoutcubic: function (x) { return x < .5 ? 4 * x * x * x : 1 - pow(-2 * x + 2, 3) / 2 }, easeinquart: function (x) { return x * x * x * x }, easeoutquart: function (x) { return 1 - pow(1 - x, 4) }, easeinoutquart: function (x) { return x < .5 ? 8 * x * x * x * x : 1 - pow(-2 * x + 2, 4) / 2 }, easeinquint: function (x) { return x * x * x * x * x }, easeoutquint: function (x) { return 1 - pow(1 - x, 5) }, easeinoutquint: function (x) { return x < .5 ? 16 * x * x * x * x * x : 1 - pow(-2 * x + 2, 5) / 2 }, easeinsine: function (x) { return 1 - cos(x * pi / 2) }, easeoutsine: function (x) { return sin(x * pi / 2) }, easeinoutsine: function (x) { return -(cos(pi * x) - 1) / 2 }, easeinexpo: function (x) { return x === 0 ? 0 : pow(2, 10 * x - 10) }, easeoutexpo: function (x) { return x === 1 ? 1 : 1 - pow(2, -10 * x) }, easeinoutexpo: function (x) { return x === 0 ? 0 : x === 1 ? 1 : x < .5 ? pow(2, 20 * x - 10) / 2 : (2 - pow(2, -20 * x + 10)) / 2 }, easeincirc: function (x) { return 1 - sqrt(1 - pow(x, 2)) }, easeoutcirc: function (x) { return sqrt(1 - pow(x - 1, 2)) }, easeinoutcirc: function (x) { return x < .5 ? (1 - sqrt(1 - pow(2 * x, 2))) / 2 : (sqrt(1 - pow(-2 * x + 2, 2)) + 1) / 2 }, easeinelastic: function (x) { return x === 0 ? 0 : x === 1 ? 1 : -pow(2, 10 * x - 10) * sin((x * 10 - 10.75) * c4) }, easeoutelastic: function (x) { return x === 0 ? 0 : x === 1 ? 1 : pow(2, -10 * x) * sin((x * 10 - .75) * c4) + 1 }, easeinoutelastic: function (x) { return x === 0 ? 0 : x === 1 ? 1 : x < .5 ? -(pow(2, 20 * x - 10) * sin((20 * x - 11.125) * c5)) / 2 : pow(2, -20 * x + 10) * sin((20 * x - 11.125) * c5) / 2 + 1 }, easeinback: function (x) { return c3 * x * x * x - c1 * x * x }, easeoutback: function (x) { return 1 + c3 * pow(x - 1, 3) + c1 * pow(x - 1, 2) }, easeinoutback: function (x) { return x < .5 ? pow(2 * x, 2) * ((c2 + 1) * 2 * x - c2) / 2 : (pow(2 * x - 2, 2) * ((c2 + 1) * (x * 2 - 2) + c2) + 2) / 2 }, easeinbounce: function (x) { return 1 - bounceout(1 - x) }, easeoutbounce: bounceout, easeinoutbounce: function (x) { return x < .5 ? (1 - bounceout(1 - 2 * x)) / 2 : (1 + bounceout(2 * x - 1)) / 2 } }) });
/** -------------- jquery color animations ---------------------*/
!function (r, n) {
if (typeof r.csshooks == "undefined") //error protection
return (false);
function t(r, n, t) { var e = f[n.type] || {}; return null == r ? t || !n.def ? null : n.def : (r = e.floor ? ~~r : parsefloat(r), isnan(r) ? n.def : e.mod ? (r + e.mod) % e.mod : 0 > r ? 0 : e.max < r ? e.max : r) } function e(n) { var t = l(), e = t._rgba = []; return n = n.tolowercase(), h(u, function (r, o) { var a, s = o.re.exec(n), i = s && o.parse(s), u = o.space || "rgba"; return i ? (a = t[u](i), t[c[u].cache] = a[c[u].cache], e = t._rgba = a._rgba, !1) : void 0 }), e.length ? ("0,0,0,0" === e.join() && r.extend(e, a.transparent), t) : a[n] } function o(r, n, t) { return t = (t + 1) % 1, 1 > 6 * t ? r + (n - r) * t * 6 : 1 > 2 * t ? n : 2 > 3 * t ? r + (n - r) * (2 / 3 - t) * 6 : r } var a, s = "backgroundcolor borderbottomcolor borderleftcolor borderrightcolor bordertopcolor color columnrulecolor outlinecolor textdecorationcolor textemphasiscolor", i = /^([\-+])=\s*(\d+\.?\d*)/, u = [{ re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/, parse: function (r) { return [r[1], r[2], r[3], r[4]] } }, { re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/, parse: function (r) { return [2.55 * r[1], 2.55 * r[2], 2.55 * r[3], r[4]] } }, { re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/, parse: function (r) { return [parseint(r[1], 16), parseint(r[2], 16), parseint(r[3], 16)] } }, { re: /#([a-f0-9])([a-f0-9])([a-f0-9])/, parse: function (r) { return [parseint(r[1] + r[1], 16), parseint(r[2] + r[2], 16), parseint(r[3] + r[3], 16)] } }, { re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/, space: "hsla", parse: function (r) { return [r[1], r[2] / 100, r[3] / 100, r[4]] } }], l = r.color = function (n, t, e, o) { return new r.color.fn.parse(n, t, e, o) }, c = { rgba: { props: { red: { idx: 0, type: "byte" }, green: { idx: 1, type: "byte" }, blue: { idx: 2, type: "byte" } } }, hsla: { props: { hue: { idx: 0, type: "degrees" }, saturation: { idx: 1, type: "percent" }, lightness: { idx: 2, type: "percent" } } } }, f = { "byte": { floor: !0, max: 255 }, percent: { max: 1 }, degrees: { mod: 360, floor: !0 } }, p = l.support = {}, d = r("
")[0], h = r.each; d.style.csstext = "background-color:rgba(1,1,1,.5)", p.rgba = d.style.backgroundcolor.indexof("rgba") > -1, h(c, function (r, n) { n.cache = "_" + r, n.props.alpha = { idx: 3, type: "percent", def: 1 } }), l.fn = r.extend(l.prototype, { parse: function (o, s, i, u) { if (o === n) return this._rgba = [null, null, null, null], this; (o.jquery || o.nodetype) && (o = r(o).css(s), s = n); var f = this, p = r.type(o), d = this._rgba = []; return s !== n && (o = [o, s, i, u], p = "array"), "string" === p ? this.parse(e(o) || a._default) : "array" === p ? (h(c.rgba.props, function (r, n) { d[n.idx] = t(o[n.idx], n) }), this) : "object" === p ? (o instanceof l ? h(c, function (r, n) { o[n.cache] && (f[n.cache] = o[n.cache].slice()) }) : h(c, function (n, e) { var a = e.cache; h(e.props, function (r, n) { if (!f[a] && e.to) { if ("alpha" === r || null == o[r]) return; f[a] = e.to(f._rgba) } f[a][n.idx] = t(o[r], n, !0) }), f[a] && r.inarray(null, f[a].slice(0, 3)) < 0 && (f[a][3] = 1, e.from && (f._rgba = e.from(f[a]))) }), this) : void 0 }, is: function (r) { var n = l(r), t = !0, e = this; return h(c, function (r, o) { var a, s = n[o.cache]; return s && (a = e[o.cache] || o.to && o.to(e._rgba) || [], h(o.props, function (r, n) { return null != s[n.idx] ? t = s[n.idx] === a[n.idx] : void 0 })), t }), t }, _space: function () { var r = [], n = this; return h(c, function (t, e) { n[e.cache] && r.push(t) }), r.pop() }, transition: function (r, n) { var e = l(r), o = e._space(), a = c[o], s = 0 === this.alpha() ? l("transparent") : this, i = s[a.cache] || a.to(s._rgba), u = i.slice(); return e = e[a.cache], h(a.props, function (r, o) { var a = o.idx, s = i[a], l = e[a], c = f[o.type] || {}; null !== l && (null === s ? u[a] = l : (c.mod && (l - s > c.mod / 2 ? s += c.mod : s - l > c.mod / 2 && (s -= c.mod)), u[a] = t((l - s) * n + s, o))) }), this[o](u) }, blend: function (n) { if (1 === this._rgba[3]) return this; var t = this._rgba.slice(), e = t.pop(), o = l(n)._rgba; return l(r.map(t, function (r, n) { return (1 - e) * o[n] + e * r })) }, torgbastring: function () { var n = "rgba(", t = r.map(this._rgba, function (r, n) { return null == r ? n > 2 ? 1 : 0 : r }); return 1 === t[3] && (t.pop(), n = "rgb("), n + t.join() + ")" }, tohslastring: function () { var n = "hsla(", t = r.map(this.hsla(), function (r, n) { return null == r && (r = n > 2 ? 1 : 0), n && 3 > n && (r = math.round(100 * r) + "%"), r }); return 1 === t[3] && (t.pop(), n = "hsl("), n + t.join() + ")" }, tohexstring: function (n) { var t = this._rgba.slice(), e = t.pop(); return n && t.push(~~(255 * e)), "#" + r.map(t, function (r) { return r = (r || 0).tostring(16), 1 === r.length ? "0" + r : r }).join("") }, tostring: function () { return 0 === this._rgba[3] ? "transparent" : this.torgbastring() } }), l.fn.parse.prototype = l.fn, c.hsla.to = function (r) { if (null == r[0] || null == r[1] || null == r[2]) return [null, null, null, r[3]]; var n, t, e = r[0] / 255, o = r[1] / 255, a = r[2] / 255, s = r[3], i = math.max(e, o, a), u = math.min(e, o, a), l = i - u, c = i + u, f = .5 * c; return n = u === i ? 0 : e === i ? 60 * (o - a) / l + 360 : o === i ? 60 * (a - e) / l + 120 : 60 * (e - o) / l + 240, t = 0 === l ? 0 : .5 >= f ? l / c : l / (2 - c), [math.round(n) % 360, t, f, null == s ? 1 : s] }, c.hsla.from = function (r) { if (null == r[0] || null == r[1] || null == r[2]) return [null, null, null, r[3]]; var n = r[0] / 360, t = r[1], e = r[2], a = r[3], s = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - s; return [math.round(255 * o(i, s, n + 1 / 3)), math.round(255 * o(i, s, n)), math.round(255 * o(i, s, n - 1 / 3)), a] }, h(c, function (e, o) { var a = o.props, s = o.cache, u = o.to, c = o.from; l.fn[e] = function (e) { if (u && !this[s] && (this[s] = u(this._rgba)), e === n) return this[s].slice(); var o, i = r.type(e), f = "array" === i || "object" === i ? e : arguments, p = this[s].slice(); return h(a, function (r, n) { var e = f["object" === i ? r : n.idx]; null == e && (e = p[n.idx]), p[n.idx] = t(e, n) }), c ? (o = l(c(p)), o[s] = p, o) : l(p) }, h(a, function (n, t) { l.fn[n] || (l.fn[n] = function (o) { var a, s = r.type(o), u = "alpha" === n ? this._hsla ? "hsla" : "rgba" : e, l = this[u](), c = l[t.idx]; return "undefined" === s ? c : ("function" === s && (o = o.call(this, c), s = r.type(o)), null == o && t.empty ? this : ("string" === s && (a = i.exec(o), a && (o = c + parsefloat(a[2]) * ("+" === a[1] ? 1 : -1))), l[t.idx] = o, this[u](l))) }) }) }), l.hook = function (n) { var t = n.split(" "); h(t, function (n, t) { r.csshooks[t] = { set: function (n, o) { var a, s, i = ""; if ("transparent" !== o && ("string" !== r.type(o) || (a = e(o)))) { if (o = l(a || o), !p.rgba && 1 !== o._rgba[3]) { for (s = "backgroundcolor" === t ? n.parentnode : n; ("" === i || "transparent" === i) && s && s.style;) try { i = r.css(s, "backgroundcolor"), s = s.parentnode } catch (u) { } o = o.blend(i && "transparent" !== i ? i : "_default") } o = o.torgbastring() } try { n.style[t] = o } catch (u) { } } }, r.fx.step[t] = function (n) { n.colorinit || (n.start = l(n.elem, t), n.end = l(n.end), n.colorinit = !0), r.csshooks[t].set(n.elem, n.start.transition(n.end, n.pos)) } }) }, l.hook(s), r.csshooks.bordercolor = { expand: function (r) { var n = {}; return h(["top", "right", "bottom", "left"], function (t, e) { n["border" + e + "color"] = r }), n } }, a = r.color.names = { aqua: "#00ffff", black: "#000000", blue: "#0000ff", fuchsia: "#ff00ff", gray: "#808080", green: "#008000", lime: "#00ff00", maroon: "#800000", navy: "#000080", olive: "#808000", purple: "#800080", red: "#ff0000", silver: "#c0c0c0", teal: "#008080", white: "#ffffff", yellow: "#ffff00", transparent: [null, null, null, 0], _default: "#ffffff" }
}(jquery);
/** -------------- some general functions ---------------------*/
/**
* ismouseover function - check if the mouse over some object
*/
!function (t) { function e() { try { var i = this === document ? t(this) : t(this).contents(); } catch (error) { return (false); } i.mousemove(function (e) { t.mlp = { x: e.pagex, y: e.pagey } }), i.find("iframe").on("load", e) } t.mlp = { x: 0, y: 0 }, t(e), t.fn.ismouseover = function () { var e = !1; return this.eq(0).each(function () { var i = t(this).is("iframe") ? t(this).contents().find("body") : t(this), n = i.offset(); e = n.left <= t.mlp.x && n.left + i.outerwidth() > t.mlp.x && n.top <= t.mlp.y && n.top + i.outerheight() > t.mlp.y }), e } }(jquery);
function ugthumbsgeneral() {
var t = this, g_objthis = jquery(t);
var g_gallery = new unitegallerymain(), g_objgallery, g_objects, g_objwrapper;
var g_arritems, g_objstrip, g_objparent;
var g_functions = new ugfunctions();
var g_strip;
var outer_options;
this.type = {
get_thumbs_all: "all",
get_thumbs_ratio: "ratio",
get_thumbs_no_ratio: "no_ratio",
get_thumbs_new: "new"
};
this.events = {
setoverstyle: "thumbmouseover",
setnormalstyle: "thumbmouseout",
setselectedstyle: "thumbsetselected",
placeimage: "thumbplaceimage",
afterplaceimage: "thumb_after_place_image",
imageloaderror: "thumbimageloaderror",
thumb_image_loaded: "thumb_image_loaded"
};
var g_options = {
thumb_width: 88, //thumb width
thumb_height: 50, //thumb height
thumb_fixed_size: true, //true,false - fixed/dynamic thumbnail width
thumb_resize_by: "height", //set resize by width or height of the image in case of non fixed size,
thumb_border_effect: true, //true, false - specify if the thumb has border
thumb_border_width: 0, //thumb border width
thumb_border_color: "#000000", //thumb border color
thumb_over_border_width: 0, //thumb border width in mouseover state
thumb_over_border_color: "#d9d9d9", //thumb border color in mouseover state
thumb_selected_border_width: 1, //thumb width in selected state
thumb_selected_border_color: "#d9d9d9", //thumb border color in selected state
thumb_round_corners_radius: 0, //thumb border radius
thumb_color_overlay_effect: true, //true,false - thumb color overlay effect, release the overlay on mouseover and selected states
thumb_overlay_color: "#000000", //thumb overlay color
thumb_overlay_opacity: 0.4, //thumb overlay color opacity
thumb_overlay_reverse: false, //true,false - reverse the overlay, will be shown on selected state only
thumb_image_overlay_effect: false, //true,false - images orverlay effect on normal state only
thumb_image_overlay_type: "bw", //bw , blur, sepia - the type of image effect overlay, black and white, sepia and blur.
thumb_transition_duration: 200, //thumb effect transition duration
thumb_transition_easing: "easeoutquad", //thumb effect transition easing
thumb_show_loader: true, //show thumb loader while loading the thumb
thumb_loader_type: "dark", //dark, light - thumb loader type
thumb_wrapper_as_link: false, //set thumb as link
thumb_link_newpage: false //set the link to open newpage
}
var g_temp = {
touchenabled: false,
num_thumbs_checking: 0,
customthumbs: false,
funcsetcustomthumbhtml: null,
iseffectborder: false,
iseffectoverlay: false,
iseffectimage: false,
coloroverlayopacity: 1,
thumbinnerreduce: 0,
allowonresize: true, //allow onresize event
classnewthumb: "ug-new-thumb"
};
var g_serviceparams = { //service variables
timeout_thumb_check: 100,
thumb_max_check_times: 600, //60 seconds
eventsizechange: "thumb_size_change"
};
/**
* init the thumbs object
*/
this.init = function (gallery, customoptions) {
g_objects = gallery.getobjects();
g_gallery = gallery;
g_objgallery = jquery(gallery);
g_objwrapper = g_objects.g_objwrapper;
g_arritems = g_objects.g_arritems;
g_options = jquery.extend(g_options, customoptions);
//set effects vars:
g_temp.iseffectborder = g_options.thumb_border_effect;
g_temp.iseffectoverlay = g_options.thumb_color_overlay_effect;
g_temp.iseffectimage = g_options.thumb_image_overlay_effect;
}
this._____________external_setters__________ = function () { };
/**
* append html from item
*/
function appendhtmlthumbfromitem(itemindex, imageeffectclass) {
var objitem = g_arritems[itemindex];
var classaddition = "";
if (g_temp.customthumbs == false)
classaddition = " ug-thumb-generated";
var zindex = objitem.index + 1;
var thumbstyle = "style='z-index:" + zindex + ";'";
var htmlthumb = "
";
if (g_options.thumb_wrapper_as_link == true) {
var urllink = objitem.link;
if (objitem.link == "")
urllink = "javascript:void(0)";
var linktarget = "";
if (g_options.thumb_link_newpage == true && objitem.link)
linktarget = " target='_blank'";
var htmlthumb = "";
}
var objthumbwrapper = jquery(htmlthumb);
var objimage = objitem.objthumbimage;
if (g_temp.customthumbs == false) {
if (g_options.thumb_show_loader == true && objimage) {
var loaderclass = "ug-thumb-loader-dark";
if (g_options.thumb_loader_type == "bright")
loaderclass = "ug-thumb-loader-bright";
objthumbwrapper.append("");
objthumbwrapper.append("");
}
if (objimage) {
objimage.addclass("ug-thumb-image");
//if image overlay effects active, clone the image, and set the effects class on it
if (g_options.thumb_image_overlay_effect == true) {
var objimageoverlay = objimage.clone().appendto(objthumbwrapper);
objimageoverlay.addclass("ug-thumb-image-overlay " + imageeffectclass).removeclass("ug-thumb-image");
objimageoverlay.fadeto(0, 0);
objitem.objimageoverlay = objimageoverlay;
}
objthumbwrapper.append(objimage);
}
}//end if not custom thumb
if (g_temp.iseffectborder)
objthumbwrapper.append("");
if (g_temp.iseffectoverlay)
objthumbwrapper.append("");
g_objparent.append(objthumbwrapper);
//only custom thumbs function
if (g_temp.customthumbs) {
g_temp.funcsetcustomthumbhtml(objthumbwrapper, objitem);
}
//add thumb wrapper object to items array
g_arritems[itemindex].objthumbwrapper = objthumbwrapper;
return (objthumbwrapper);
}
/**
* append the thumbs html to some parent
*/
this.sethtmlthumbs = function (objparent, isappend) {
g_objparent = objparent;
//set image effect class
if (g_temp.iseffectimage == true) {
var imageeffectclass = getimageeffectsclass();
}
if (isappend !== true) { //set all thumbs
var numitems = g_gallery.getnumitems();
//append thumbs to strip
for (var i = 0; i < numitems; i++) {
appendhtmlthumbfromitem(i, imageeffectclass);
}
} else { //append only new items, mark only new added thumbs as new thumbs
var objthumbs = t.getthumbs();
objthumbs.removeclass(g_temp.classnewthumb);
var arrnewindexes = g_gallery.getnewaddeditemsindexes();
jquery.each(arrnewindexes, function (i, itemindex) {
var objthumbwrapper = appendhtmlthumbfromitem(itemindex, imageeffectclass);
objthumbwrapper.addclass(g_temp.classnewthumb);
});
}
}
function _______________setters______________() { };
/**
* set thumb size with all the inside components (without the image).
* else, set to all the thumbs
*/
function setthumbsize(width, height, objthumb, inneronly) {
var objcss = {
width: width + "px",
height: height + "px"
};
var objcssinner = {
width: width - g_temp.thumbinnerreduce + "px",
height: height - g_temp.thumbinnerreduce + "px"
};
var selectorsstring = ".ug-thumb-loader, .ug-thumb-error, .ug-thumb-border-overlay, .ug-thumb-overlay";
//set thumb size
if (objthumb) {
if (inneronly !== true)
objthumb.css(objcss);
objthumb.find(selectorsstring).css(objcssinner);
}
else { //set to all items
g_objparent.children(".ug-thumb-wrapper").css(objcss);
g_objparent.find(selectorsstring).css(objcssinner);
}
}
/**
* set thumb border effect
*/
function setthumbbordereffect(objthumb, borderwidth, bordercolor, noanimation) {
if (!noanimation)
var noanimation = false;
if (g_gallery.isfakefullscreen())
noanimation = true;
var objborderoverlay = objthumb.children(".ug-thumb-border-overlay");
//set the border to thumb and not to overlay if no border size transition
/*
if(g_options.thumb_border_width == g_options.thumb_over_border_width
&& g_options.thumb_border_width == g_options.thumb_selected_border_width)
objborderoverlay = objthumb;
*/
var objcss = {};
objcss["border-width"] = borderwidth + "px";
if (borderwidth != 0)
objcss["border-color"] = bordercolor;
if (noanimation && noanimation === true) {
objborderoverlay.css(objcss);
if (borderwidth == 0)
objborderoverlay.hide();
else
objborderoverlay.show();
}
else {
if (borderwidth == 0)
objborderoverlay.stop().fadeout(g_options.thumb_transition_duration);
else
objborderoverlay.show().stop().fadein(g_options.thumb_transition_duration);
animatethumb(objborderoverlay, objcss);
}
}
/**
* set thumb border effect
*/
function setthumbcoloroverlayeffect(objthumb, isactive, noanimation) {
var objoverlay = objthumb.children(".ug-thumb-overlay");
var animationduration = g_options.thumb_transition_duration;
if (noanimation && noanimation === true)
animationduration = 0;
if (isactive) {
objoverlay.stop(true).fadeto(animationduration, g_temp.coloroverlayopacity);
} else {
objoverlay.stop(true).fadeto(animationduration, 0);
}
}
/**
* set thumbnail bw effect
*/
function setthumbimageoverlayeffect(objthumb, isactive, noanimation) {
var objimage = objthumb.children("img.ug-thumb-image");
var objimageoverlay = objthumb.children("img.ug-thumb-image-overlay");
var animationduration = g_options.thumb_transition_duration;
if (noanimation && noanimation === true)
animationduration = 0;
if (isactive) {
objimageoverlay.stop(true).fadeto(animationduration, 1);
} else {
//show the image, hide the overlay
objimage.fadeto(0, 1);
objimageoverlay.stop(true).fadeto(animationduration, 0);
}
}
/**
* on thumb mouse out - return the thumb style to original
*/
this.setthumbnormalstyle = function (objthumb, noanimation, fromwhere) {
if (g_temp.customthumbs == true) {
objthumb.removeclass("ug-thumb-over");
}
if (g_temp.iseffectborder)
setthumbbordereffect(objthumb, g_options.thumb_border_width, g_options.thumb_border_color, noanimation);
if (g_temp.iseffectoverlay) {
var isset = (g_options.thumb_overlay_reverse == true) ? false : true;
setthumbcoloroverlayeffect(objthumb, isset, noanimation);
}
if (g_temp.iseffectimage) {
setthumbimageoverlayeffect(objthumb, true, noanimation);
}
g_objthis.trigger(t.events.setnormalstyle, objthumb);
}
/**
* on thumb mouse over - turn thumb style to over position
*/
this.setthumboverstyle = function (objthumb) {
if (g_temp.customthumbs == true) {
objthumb.addclass("ug-thumb-over");
}
//border effect
if (g_temp.iseffectborder)
setthumbbordereffect(objthumb, g_options.thumb_over_border_width, g_options.thumb_over_border_color);
//color overlay effect
if (g_temp.iseffectoverlay) {
var isset = (g_options.thumb_overlay_reverse == true) ? true : false;
setthumbcoloroverlayeffect(objthumb, isset);
}
//image overlay effect
if (g_temp.iseffectimage == true) {
setthumbimageoverlayeffect(objthumb, false);
}
//trigger event for parent classes
g_objthis.trigger(t.events.setoverstyle, objthumb);
}
/**
* set thumb selected style
*/
function setthumbselectedstyle(objthumb, noanimation) {
if (g_temp.iseffectborder)
setthumbbordereffect(objthumb, g_options.thumb_selected_border_width, g_options.thumb_selected_border_color, noanimation);
if (g_temp.iseffectoverlay) {
var isset = (g_options.thumb_overlay_reverse == true) ? true : false;
setthumbcoloroverlayeffect(objthumb, isset, noanimation);
}
//image overlay effect
if (g_temp.iseffectimage)
setthumbimageoverlayeffect(objthumb, false, noanimation);
g_objthis.trigger(t.events.setselectedstyle, objthumb);
}
/**
* set loading error of the thumb
*/
function setitemthumbloadederror(objthumb) {
var objitem = t.getitembythumb(objthumb);
objitem.isloaded = true;
objitem.isthumbimageloaded = false;
if (g_temp.customthumbs == true) {
g_objthis.trigger(t.events.imageloaderror, objthumb);
return (true);
}
objthumb.children(".ug-thumb-loader").hide();
objthumb.children(".ug-thumb-error").show();
}
/**
* set border radius of all the thmbs
*/
function setthumbsborderradius(objthumbs) {
if (g_options.thumb_round_corners_radius <= 0)
return (false);
//set radius:
var objcss = {
"border-radius": g_options.thumb_round_corners_radius + "px"
};
if (objthumbs) {
objthumbs.css(objcss);
objthumbs.find(".ug-thumb-border-overlay").css(objcss);
} else {
g_objparent.find(".ug-thumb-wrapper, .ug-thumb-wrapper .ug-thumb-border-overlay").css(objcss);
}
}
/**
* animate thumb transitions
*/
function animatethumb(objthumb, objthumbcss) {
objthumb.stop(true).animate(objthumbcss, {
duration: g_options.thumb_transition_duration,
easing: g_options.thumb_transition_easing,
queue: false
});
}
/**
* redraw the thumb style according the state
*/
function redrawthumbstyle(objthumb) {
if (isthumbselected(objthumb) == true)
setthumbselectedstyle(objthumb, true, "redraw");
else
t.setthumbnormalstyle(objthumb, true, "redraw");
}
/**
* place thumb image
* retrun - false, if already loaded
* return true - if was set on this function
* isforce - set the image anyway
*/
function placethumbimage(objthumb, objimage, objitem) {
//scale the image
if (g_options.thumb_fixed_size == true) {
g_functions.scaleimagecoverparent(objimage, objthumb);
}
else {
//variant size
if (g_options.thumb_resize_by == "height") //horizontal strip
g_functions.scaleimagebyheight(objimage, g_options.thumb_height);
else //vertical strip
g_functions.scaleimagebywidth(objimage, g_options.thumb_width);
var imagesize = g_functions.getelementsize(objimage);
g_functions.placeelement(objimage, 0, 0);
setthumbsize(imagesize.width, imagesize.height, objthumb);
}
//hide loader
objthumb.children(".ug-thumb-loader").hide();
//show image
objimage.show();
//if overlay effect exists
if (g_options.thumb_image_overlay_effect == false) {
objimage.fadeto(0, 1);
}
else {
//place bw image also if exists
if (g_options.thumb_image_overlay_effect == true) {
copypositiontothumboverlayimage(objimage);
}
//hide the original image (avoid blinking at start)
objimage.fadeto(0, 0);
//redraw the style, because this function can overwrite it
redrawthumbstyle(objthumb);
}
g_objthis.trigger(t.events.afterplaceimage, objthumb);
}
/**
* copy image position to bw image (if exists)
*/
function copypositiontothumboverlayimage(objimage) {
var objimagebw = objimage.siblings(".ug-thumb-image-overlay");
if (objimagebw.length == 0)
return (false);
var objsize = g_functions.getelementsize(objimage);
var objcss = {
"width": objsize.width + "px",
"height": objsize.height + "px",
"left": objsize.left + "px",
"top": objsize.top + "px"
}
objimagebw.css(objcss);
//show the image
if (g_temp.customthumbs == false)
objimagebw.fadeto(0, 1);
}
function _______________getters______________() { };
/**
* get the image effects class from the options
*/
function getimageeffectsclass() {
var imageeffectclass = "";
var arreffects = g_options.thumb_image_overlay_type.split(",");
for (var index in arreffects) {
var effect = arreffects[index];
switch (effect) {
case "bw":
imageeffectclass += " ug-bw-effect";
break;
case "blur":
imageeffectclass += " ug-blur-effect";
break;
case "sepia":
imageeffectclass += " ug-sepia-effect";
break;
}
}
return (imageeffectclass);
}
/**
* get if the thumb is selected
*/
function isthumbselected(objthumbwrapper) {
if (objthumbwrapper.hasclass("ug-thumb-selected"))
return (true);
return (false);
}
function _______________events______________() { };
/**
* on thumb size change - triggered by parent on custom thumbs type
*/
function onthumbsizechange(temp, objthumb) {
objthumb = jquery(objthumb);
var objitem = t.getitembythumb(objthumb);
var objsize = g_functions.getelementsize(objthumb);
setthumbsize(objsize.width, objsize.height, objthumb, true);
redrawthumbstyle(objthumb);
}
/**
* on thumb mouse over
*/
function onmouseover(objthumb) {
//if touch enabled unbind event
if (g_temp.touchenabled == true) {
objthumbs.off("mouseenter").off("mouseleave");
return (true);
}
if (isthumbselected(objthumb) == false)
t.setthumboverstyle(objthumb);
}
/**
* on thumb mouse out
*/
function onmouseout(objthumb) {
if (g_temp.touchenabled == true)
return (true);
if (isthumbselected(objthumb) == false)
t.setthumbnormalstyle(objthumb, false);
}
/**
* on image loaded event
*/
function onimageloaded(image, isforce) {
if (!isforce)
var isforce = false;
var objimage = jquery(image);
var objthumb = objimage.parents(".ug-thumb-wrapper");
if (objthumb.parent().length == 0) //don't treat detached thumbs
return (false);
objitem = t.getitembythumb(objthumb);
if (objitem.isloaded == true && isforce === false)
return (false);
t.triggerimageloadedevent(objthumb, objimage);
if (g_temp.customthumbs == true) {
g_objthis.trigger(t.events.placeimage, [objthumb, objimage]);
} else {
placethumbimage(objthumb, objimage, objitem);
}
}
/**
* on image loaded - set appropriete item vars
*/
function onthumbimageloaded(data, objthumb, objimage) {
objitem = t.getitembythumb(objthumb);
objitem.isloaded = true;
objitem.isthumbimageloaded = true;
var objsize = g_functions.getimageoriginalsize(objimage);
objitem.thumbwidth = objsize.width;
objitem.thumbheight = objsize.height;
objitem.thumbratiobywidth = objsize.width / objsize.height;
objitem.thumbratiobyheight = objsize.height / objsize.width;
objthumb.addclass("ug-thumb-ratio-set");
}
/**
* set thumbnails html properties
*/
this.sethtmlproperties = function (objthumbs) {
if (!objthumbs)
var objthumbs = t.getthumbs();
//set thumb params
if (g_temp.customthumbs == false) {
var objthumbcss = {};
//set thumb fixed size
if (g_options.thumb_fixed_size == true)
setthumbsize(g_options.thumb_width, g_options.thumb_height, objthumbs);
setthumbsborderradius(objthumbs);
}
//set normal style to all the thumbs
objthumbs.each(function () {
var objthumb = jquery(this);
redrawthumbstyle(objthumb);
});
//set color. if empty set from css
if (g_temp.iseffectoverlay) {
if (g_options.thumb_overlay_color) {
var objcss = {};
if (g_functions.isrgbasupported()) {
var colorrgb = g_functions.converthextorgb(g_options.thumb_overlay_color, g_options.thumb_overlay_opacity);
objcss["background-color"] = colorrgb;
} else {
objcss["background-color"] = g_options.thumb_overlay_color;
g_temp.coloroverlayopacity = g_options.thumb_overlay_opacity;
}
objthumbs.find(".ug-thumb-overlay").css(objcss);
}
}
}
/**
* set the thumb on selected state
*/
this.setthumbselected = function (objthumbwrapper) {
if (g_temp.customthumbs == true)
objthumbwrapper.removeclass("ug-thumb-over");
if (isthumbselected(objthumbwrapper) == true)
return (true);
objthumbwrapper.addclass("ug-thumb-selected");
//set thumb selected style
setthumbselectedstyle(objthumbwrapper);
}
/**
* set the thumb unselected state
*/
this.setthumbunselected = function (objthumbwrapper) {
//remove the selected class
objthumbwrapper.removeclass("ug-thumb-selected");
t.setthumbnormalstyle(objthumbwrapper, false, "set unselected");
}
/**
* set the options of the strip
*/
this.setoptions = function (objoptions) {
g_options = jquery.extend(g_options, objoptions);
}
/**
* set thumb inner reduce - reduce this number when resizing thumb inner
*/
this.setthumbinnerreduce = function (innerreduce) {
g_temp.thumbinnerreduce = innerreduce;
}
/**
* set custom thumbs
* allowedeffects - border, overlay, image
*/
this.setcustomthumbs = function (funcsethtml, arralowedeffects, customoptions) {
g_temp.customthumbs = true;
if (typeof funcsethtml != "function")
throw new error("the argument should be function");
g_temp.funcsetcustomthumbhtml = funcsethtml;
//enable effects:
if (jquery.inarray("overlay", arralowedeffects) == -1)
g_temp.iseffectoverlay = false;
if (jquery.inarray("border", arralowedeffects) == -1)
g_temp.iseffectborder = false;
g_temp.iseffectimage = false; //for custom effects the image is always off
//check for dissalow onresize
if (customoptions && customoptions.allow_onresize === false) {
g_temp.allowonresize = false;
}
}
this._____________external_getters__________ = function () { };
/**
* get the options object
*/
this.getoptions = function () {
return (g_options);
}
/**
* get num thumbs
*/
this.getnumthumbs = function () {
var numthumbs = g_arritems.length;
return (numthumbs);
}
/**
* get thumb image
*/
this.getthumbimage = function (objthumb) {
var objimage = objthumb.find(".ug-thumb-image");
return (objimage);
}
/**
* get thumbs by index
*/
this.getthumbbyindex = function (index) {
var objthumbs = t.getthumbs();
if (index >= objthumbs.length || index < 0)
throw new error("wrong thumb index");
var objthumb = jquery(objthumbs[index]);
return (objthumb);
}
/**
* get all thumbs jquery object
*/
this.getthumbs = function (mode) {
var thumbclass = ".ug-thumb-wrapper";
var classratio = ".ug-thumb-ratio-set";
switch (mode) {
default:
case t.type.get_thumbs_all:
var objthumbs = g_objparent.children(thumbclass)
break;
case t.type.get_thumbs_no_ratio:
var objthumbs = g_objparent.children(thumbclass).not(classratio);
break;
case t.type.get_thumbs_ratio:
var objthumbs = g_objparent.children(thumbclass + classratio);
break;
case t.type.get_thumbs_new:
var objthumbs = g_objparent.children("." + g_temp.classnewthumb);
break;
}
return (objthumbs);
}
/**
* get item by thumb object
*/
this.getitembythumb = function (objthumb) {
var index = objthumb.data("index");
if (index === undefined)
index = objthumb.index();
var arritem = g_arritems[index];
return (arritem);
}
/**
* is thumb loaded
*/
this.isthumbloaded = function (objthumb) {
var objitem = t.getitembythumb(objthumb);
return (objitem.isloaded);
}
/**
* get global thumb size
*/
this.getglobalthumbsize = function () {
var objsize = {
width: g_options.thumb_width,
height: g_options.thumb_height
};
return (objsize);
}
this._____________external_others__________ = function () { };
/**
* init events
*/
this.initevents = function () {
var selectorthumb = ".ug-thumb-wrapper";
//one time event
if (g_temp.allowonresize == true)
g_objwrapper.on(g_serviceparams.eventsizechange, onthumbsizechange);
//on image loaded event - for setting the image sizes
g_objthis.on(t.events.thumb_image_loaded, onthumbimageloaded);
//thumbs events
g_objparent.on("touchstart", selectorthumb, function () {
g_temp.touchenabled = true;
g_objparent.off("mouseenter").off("mouseleave");
});
g_objparent.on("mouseenter", selectorthumb, function (event) {
var objthumb = jquery(this);
onmouseover(objthumb);
});
g_objparent.on("mouseleave", selectorthumb, function (event) {
var objthumb = jquery(this);
onmouseout(objthumb);
});
}
/**
* destroy the thumb element
*/
this.destroy = function () {
var selectorthumb = ".ug-thumb-wrapper";
g_objparent.off("touchstart", selectorthumb);
g_objwrapper.off(g_serviceparams.eventsizechange);
g_objparent.off("mouseenter", selectorthumb);
g_objparent.off("mouseleave", selectorthumb);
g_objthis.off(t.events.thumb_image_loaded);
}
/**
* preload thumbs images and put them into the thumbnails
*/
this.loadthumbsimages = function () {
var objimages = g_objparent.find(".ug-thumb-image");
g_functions.checkimagesloaded(objimages, null, function (objimage, iserror) {
if (iserror == false) {
onimageloaded(objimage, true);
}
else {
var objitem = jquery(objimage).parent();
setitemthumbloadederror(objitem);
}
});
}
/**
* trigger image loaded event
*/
this.triggerimageloadedevent = function (objthumb, objimage) {
g_objthis.trigger(t.events.thumb_image_loaded, [objthumb, objimage]);
}
/**
* hide thumbs
*/
this.hidethumbs = function () {
g_objparent.find(".ug-thumb-wrapper").hide();
}
}
/**
* thumbs class
* addon to strip gallery
*/
function ugthumbsstrip() {
var t = this;
var g_gallery = new unitegallerymain(), g_objgallery, g_objects, g_objwrapper;
var g_arritems, g_objstrip, g_objstripinner;
var g_aviacontrol, g_touchthumbscontrol, g_functions = new ugfunctions();
var g_isvertical = false, g_thumbs = new ugthumbsgeneral();
var g_functions = new ugfunctions();
var g_options = {
strip_vertical_type: false,
strip_thumbs_align: "left", //left, center, right, top, middle, bottom - the align of the thumbs when they smaller then the strip size.
strip_space_between_thumbs: 6, //space between thumbs
strip_thumb_touch_sensetivity: 15, //from 1-100, 1 - most sensetive, 100 - most unsensetive
strip_scroll_to_thumb_duration: 500, //duration of scrolling to thumb
strip_scroll_to_thumb_easing: "easeoutcubic", //easing of scrolling to thumb animation
strip_control_avia: true, //avia control - move the strip according strip moseover position
strip_control_touch: true, //touch control - move the strip by dragging it
strip_padding_top: 0, //add some space from the top
strip_padding_bottom: 0, //add some space from the bottom
strip_padding_left: 0, //add some space from left
strip_padding_right: 0 //add some space from right
}
var g_temp = {
isrunonce: false,
is_placed: false,
isnotfixedthumbs: false,
handle: null
};
var g_sizes = {
stripsize: 0, //set after position thumbs
stripactivesize: 0, //strip size without the padding
stripinnersize: 0,
thumbsize: 0,
thumbsecondsize: 0 //size of the height and width of the strip
}
this.events = { //events variables
strip_move: "stripmove",
inner_size_change: "size_change"
}
//the defaults for vertical align
var g_defaultsvertical = {
strip_thumbs_align: "top",
thumb_resize_by: "width"
}
/**
* set the thumbs strip html
*/
this.sethtml = function (objparent) {
if (!objparent) {
var objparent = g_objwrapper;
if (g_options.parent_container != null)
objparent = g_options.parent_container;
}
objparent.append("
");
g_objstrip = objparent.children(".ug-thumbs-strip");
g_objstripinner = g_objstrip.children(".ug-thumbs-strip-inner");
//put the thumbs to inner strip
g_thumbs.sethtmlthumbs(g_objstripinner);
//hide thumbs on not fixed mode
if (g_temp.isnotfixedthumbs == true)
g_thumbs.hidethumbs();
}
function ___________general___________() { };
/**
* init the strip
*/
function initstrip(gallery, customoptions) {
g_objects = gallery.getobjects();
g_gallery = gallery;
g_gallery.attachthumbspanel("strip", t);
g_objgallery = jquery(gallery);
g_objwrapper = g_objects.g_objwrapper;
g_arritems = g_objects.g_arritems;
g_options = jquery.extend(g_options, customoptions);
g_isvertical = g_options.strip_vertical_type;
//set vertical defaults
if (g_isvertical == true) {
g_options = jquery.extend(g_options, g_defaultsvertical);
g_options = jquery.extend(g_options, customoptions);
customoptions.thumb_resize_by = "width";
}
g_thumbs.init(gallery, customoptions);
onaftersetoptions();
}
/**
* run this funcion after set options.
*/
function onaftersetoptions() {
var thumbsoptions = g_thumbs.getoptions();
g_temp.isnotfixedthumbs = (thumbsoptions.thumb_fixed_size === false);
g_isvertical = g_options.strip_vertical_type;
}
/**
* run the strip
*/
function runstrip() {
g_thumbs.sethtmlproperties();
initsizeparams();
fixsize();
positionthumbs();
//run only once
if (g_temp.isrunonce == false) {
//init thumbs strip touch
if (g_options.strip_control_touch == true) {
g_touchthumbscontrol = new ugtouchthumbscontrol();
g_touchthumbscontrol.init(t);
}
//init thumbs strip avia control
if (g_options.strip_control_avia == true) {
g_aviacontrol = new ugaviacontrol();
g_aviacontrol.init(t);
}
checkcontrolsenabledisable();
g_thumbs.loadthumbsimages();
initevents();
}
g_temp.isrunonce = true;
}
/**
* store strip size and strip active size in vars
* do after all strip size change
*/
function storestripsize(size) {
g_sizes.stripsize = size;
if (g_isvertical == false)
g_sizes.stripactivesize = g_sizes.stripsize - g_options.strip_padding_left - g_options.strip_padding_right;
else
g_sizes.stripactivesize = g_sizes.stripsize - g_options.strip_padding_top - g_options.strip_padding_bottom;
if (g_sizes.stripactivesize < 0)
g_sizes.stripactivesize = 0;
}
/**
* init some size parameters, before size init and after position thumbs
*/
function initsizeparams() {
//set thumb outer size:
var arrthumbs = g_objstripinner.children(".ug-thumb-wrapper");
var firstthumb = jquery(arrthumbs[0]);
var thumbsrealwidth = firstthumb.outerwidth();
var thumbsrealheight = firstthumb.outerheight();
var thumbs_options = g_thumbs.getoptions();
if (g_isvertical == false) { //horizontal
g_sizes.thumbsize = thumbsrealwidth;
if (thumbs_options.thumb_fixed_size == true) {
g_sizes.thumbsecondsize = thumbsrealheight;
} else {
g_sizes.thumbsecondsize = thumbs_options.thumb_height;
}
storestripsize(g_objstrip.width());
g_sizes.stripinnersize = g_objstripinner.width();
} else { //vertical
g_sizes.thumbsize = thumbsrealheight;
if (thumbs_options.thumb_fixed_size == true) {
g_sizes.thumbsecondsize = thumbsrealwidth;
} else {
g_sizes.thumbsecondsize = thumbs_options.thumb_width;
}
storestripsize(g_objstrip.height());
g_sizes.stripinnersize = g_objstripinner.height();
}
}
/**
* set size of inner strip according the orientation
*/
function setinnerstripsize(innersize) {
if (g_isvertical == false)
g_objstripinner.width(innersize);
else
g_objstripinner.height(innersize);
g_sizes.stripinnersize = innersize;
checkcontrolsenabledisable();
jquery(t).trigger(t.events.inner_size_change);
}
/**
* position thumbnails in the thumbs panel
*/
function positionthumbs() {
var arrthumbs = g_objstripinner.children(".ug-thumb-wrapper");
var posx = 0;
var posy = 0;
if (g_isvertical == false)
posy = g_options.strip_padding_top;
for (i = 0; i < arrthumbs.length; i++) {
var objthumb = jquery(arrthumbs[i]);
//skip from placing if not loaded yet on non fixed mode
if (g_temp.isnotfixedthumbs == true) {
objitem = g_thumbs.getitembythumb(objthumb);
if (objitem.isloaded == false)
continue;
//the thumb is hidden if not placed
objthumb.show();
}
g_functions.placeelement(objthumb, posx, posy);
if (g_isvertical == false)
posx += objthumb.outerwidth() + g_options.strip_space_between_thumbs;
else
posy += objthumb.outerheight() + g_options.strip_space_between_thumbs;
}
//set strip size, width or height
if (g_isvertical == false)
var innerstripsize = posx - g_options.strip_space_between_thumbs;
else
var innerstripsize = posy - g_options.strip_space_between_thumbs;
setinnerstripsize(innerstripsize);
}
/**
* fix strip and inner size
*/
function fixsize() {
if (g_isvertical == false) { //fix horizontal
var height = g_sizes.thumbsecondsize;
var objcssstrip = {};
objcssstrip["height"] = height + "px";
//set inner strip params
var objcssinner = {};
objcssinner["height"] = height + "px";
} else { //fix vertical
var width = g_sizes.thumbsecondsize;
var objcssstrip = {};
objcssstrip["width"] = width + "px";
//set inner strip params
var objcssinner = {};
objcssinner["width"] = width + "px";
}
g_objstrip.css(objcssstrip);
g_objstripinner.css(objcssinner);
}
/**
* scroll by some number
* .
*/
function scrollby(scrollstep) {
var innerpos = t.getinnerstrippos();
var finalpos = innerpos + scrollstep;
finalpos = t.fixinnerstriplimits(finalpos);
t.positioninnerstrip(finalpos, true);
}
/**
* scroll to thumb from min. (left or top) position
*/
function scrolltothumbmin(objthumb) {
var objthumbpos = getthumbpos(objthumb);
var scrollpos = objthumbpos.min * -1;
scrollpos = t.fixinnerstriplimits(scrollpos);
t.positioninnerstrip(scrollpos, true);
}
/**
* scroll to thumb from max. (right or bottom) position
*/
function scrolltothumbmax(objthumb) {
var objthumbpos = getthumbpos(objthumb);
var scrollpos = objthumbpos.max * -1 + g_sizes.stripsize;
scrollpos = t.fixinnerstriplimits(scrollpos);
t.positioninnerstrip(scrollpos, true);
}
/**
* scroll to some thumbnail
*/
function scrolltothumb(objthumb) {
if (isstripmovingenabled() == false)
return (false);
var objbounds = getthumbsinsidebounds();
var objthumbpos = getthumbpos(objthumb);
if (objthumbpos.min < objbounds.minposthumbs) {
var prevthumb = objthumb.prev();
if (prevthumb.length)
scrolltothumbmin(prevthumb);
else
scrolltothumbmin(objthumb);
} else if (objthumbpos.max > objbounds.maxposthumbs) {
var nextthumb = objthumb.next();
if (nextthumb.length)
scrolltothumbmax(nextthumb);
else
scrolltothumbmax(objthumb);
}
}
/**
* scroll to selected thumb
*/
function scrolltoselectedthumb() {
var selecteditem = g_gallery.getselecteditem();
if (selecteditem == null)
return (true);
var objthumb = selecteditem.objthumbwrapper;
if (objthumb)
scrolltothumb(objthumb);
}
/**
* check that the inner strip off the limits position, and reposition it if there is a need
*/
function checkandrepositioninnerstrip() {
if (isstripmovingenabled() == false)
return (false);
var pos = t.getinnerstrippos();
var posfixed = t.fixinnerstriplimits(pos);
if (pos != posfixed)
t.positioninnerstrip(posfixed, true);
}
/**
* enable / disable controls according inner width (move enabled).
*/
function checkcontrolsenabledisable() {
var ismovingendbled = isstripmovingenabled();
if (ismovingendbled == true) {
if (g_aviacontrol)
g_aviacontrol.enable();
if (g_touchthumbscontrol)
g_touchthumbscontrol.enable();
} else {
if (g_aviacontrol)
g_aviacontrol.disable();
if (g_touchthumbscontrol)
g_touchthumbscontrol.disable();
}
}
/**
* align inner strip according the options
*/
function aligninnerstrip() {
if (isstripmovingenabled())
return (false);
if (g_isvertical == false)
g_functions.placeelement(g_objstripinner, g_options.strip_thumbs_align, 0);
else
g_functions.placeelement(g_objstripinner, 0, g_options.strip_thumbs_align);
}
function ___________events___________() { };
/**
* on thumb click event. select the thumb
*/
function onthumbclick(objthumb) {
//cancel click event only if passed significant movement
if (t.istouchmotionactive()) {
var issignificantpassed = g_touchthumbscontrol.issignificantpassed();
if (issignificantpassed == true)
return (true);
}
//run select item operation
var objitem = g_thumbs.getitembythumb(objthumb);
g_gallery.selectitem(objitem);
}
/**
* on some thumb placed, run the resize, but with time passed
*/
function onthumbplaced() {
cleartimeout(g_temp.handle);
g_temp.handle = settimeout(function () {
positionthumbs();
}, 50);
}
/**
* on item change
*/
function onitemchange() {
var objitem = g_gallery.getselecteditem();
g_thumbs.setthumbselected(objitem.objthumbwrapper);
scrolltothumb(objitem.objthumbwrapper);
}
/**
* init panel events
*/
function initevents() {
g_thumbs.initevents();
var objthumbs = g_objstrip.find(".ug-thumb-wrapper");
objthumbs.on("click touchend", function (event) {
var clickedthumb = jquery(this);
onthumbclick(clickedthumb);
});
//on item change, make the thumb selected
g_objgallery.on(g_gallery.events.item_change, onitemchange);
//position thumbs after each load on non fixed mode
if (g_temp.isnotfixedthumbs) {
jquery(g_thumbs).on(g_thumbs.events.afterplaceimage, onthumbplaced);
}
}
/**
* destroy the strip panel events
*/
this.destroy = function () {
var objthumbs = g_objstrip.find(".ug-thumb-wrapper");
objthumbs.off("click");
objthumbs.off("touchend");
g_objgallery.off(g_gallery.events.item_change);
jquery(g_thumbs).off(g_thumbs.events.afterplaceimage);
if (g_touchthumbscontrol)
g_touchthumbscontrol.destroy();
if (g_aviacontrol)
g_aviacontrol.destroy();
g_thumbs.destroy();
}
function ____________getters___________() { };
/**
* check if the inner width is more then strip width
*/
function isstripmovingenabled() {
if (g_sizes.stripinnersize > g_sizes.stripactivesize)
return (true);
else
return (false);
}
/**
* get bounds, if the thumb not in them, it need to be scrolled
* minposthumbs, maxposthumbs - the min and max position that the thumbs should be located to be visible
*/
function getthumbsinsidebounds() {
var obj = {};
var innerpos = t.getinnerstrippos();
//the 1 is gap that avoid exact bounds
obj.minposthumbs = innerpos * -1 + 1;
obj.maxposthumbs = innerpos * -1 + g_sizes.stripsize - 1;
return (obj);
}
/**
* get thumb position according the orientation in the inner strip
*/
function getthumbpos(objthumb) {
var objreturn = {};
var objpos = objthumb.position();
if (g_isvertical == false) {
objreturn.min = objpos.left;
objreturn.max = objpos.left + g_sizes.thumbsize;
} else {
objreturn.min = objpos.top;
objreturn.max = objpos.top + g_sizes.thumbsize;
}
return (objreturn);
}
this.________external_general___________ = function () { };
/**
* init function for avia controls
*/
this.init = function (gallery, customoptions) {
initstrip(gallery, customoptions);
}
/**
* set html and properties
*/
this.run = function () {
runstrip();
}
/**
* position inner strip on some pos according the orientation
*/
this.positioninnerstrip = function (pos, isanimate) {
if (isanimate === undefined)
var isanimate = false;
if (g_isvertical == false)
var objposition = { "left": pos + "px" };
else
var objposition = { "top": pos + "px" };
if (isanimate == false) { //normal position
g_objstripinner.css(objposition);
t.triggerstripmoveevent();
}
else { //position with animation
t.triggerstripmoveevent();
g_objstripinner.stop(true).animate(objposition, {
duration: g_options.strip_scroll_to_thumb_duration,
easing: g_options.strip_scroll_to_thumb_easing,
queue: false,
progress: function () { t.triggerstripmoveevent() },
always: function () { t.triggerstripmoveevent() }
});
}
}
/**
* trigger event - on strip move
*/
this.triggerstripmoveevent = function () {
//trigger onstripmove event
jquery(t).trigger(t.events.strip_move);
}
/**
* return true if the touch animation or dragging is active
*/
this.istouchmotionactive = function () {
if (!g_touchthumbscontrol)
return (false);
var isactive = g_touchthumbscontrol.istouchactive();
return (isactive);
}
/**
* check if thmb item visible, means inside the visible part of the inner strip
*/
this.isitemthumbvisible = function (objitem) {
var objthumb = objitem.objthumbwrapper;
var thumbpos = objthumb.position();
var posmin = t.getinnerstrippos() * -1;
if (g_isvertical == false) {
var posmax = posmin + g_sizes.stripsize;
var thumbposmin = thumbpos.left;
var thumbposmax = thumbpos.left + objthumb.width();
} else {
var posmax = posmin + g_sizes.stripsize;
var thumbposmin = thumbpos.top;
var thumbposmax = thumbpos.top + objthumb.height();
}
var isvisible = false;
if (thumbposmax >= posmin && thumbposmin <= posmax)
isvisible = true;
return (isvisible);
}
/**
* get inner strip position according the orientation
*/
this.getinnerstrippos = function () {
if (g_isvertical == false)
return g_objstripinner.position().left;
else
return g_objstripinner.position().top;
}
/**
* get inner strip limits
*/
this.getinnerstriplimits = function () {
var output = {};
if (g_isvertical == false)
output.maxpos = g_options.strip_padding_left;
else
output.maxpos = g_options.strip_padding_top;
//debugline(g_sizes.stripactivesize);
output.minpos = -(g_sizes.stripinnersize - g_sizes.stripactivesize);
return (output);
}
/**
* fix inner position by check boundaries limit
*/
this.fixinnerstriplimits = function (distpos) {
var minpos;
var objlimits = t.getinnerstriplimits();
if (distpos > objlimits.maxpos)
distpos = objlimits.maxpos;
if (distpos < objlimits.minpos)
distpos = objlimits.minpos;
return (distpos);
}
/**
* scroll left or down
*/
this.scrollforeward = function () {
scrollby(-g_sizes.stripsize);
}
/**
* scroll left or down
*/
this.scrollback = function () {
scrollby(g_sizes.stripsize);
}
this.________external_setters___________ = function () { };
/**
* set the options of the strip
*/
this.setoptions = function (objoptions) {
g_options = jquery.extend(g_options, objoptions);
g_thumbs.setoptions(objoptions);
onaftersetoptions();
}
/**
* set size of the strip
* the height size is set automatically from options
*/
this.setsizevertical = function (height) {
if (g_isvertical == false) {
throw new error("setsizevertical error, the strip size is not vertical");
return (false);
}
var width = g_sizes.thumbsecondsize;
var objcssstrip = {};
objcssstrip["width"] = width + "px";
objcssstrip["height"] = height + "px";
g_objstrip.css(objcssstrip);
storestripsize(height);
//set inner strip params
var objcssinner = {};
objcssinner["width"] = width + "px";
objcssinner["left"] = "0px";
objcssinner["top"] = "0px";
g_objstripinner.css(objcssinner);
g_temp.is_placed = true;
checkcontrolsenabledisable();
}
/**
* set size of the strip
* the height size is set automatically from options
*/
this.setsizehorizontal = function (width) {
if (g_isvertical == true) {
throw new error("setsizehorizontal error, the strip size is not horizontal");
return (false);
}
var height = g_sizes.thumbsecondsize + g_options.strip_padding_top + g_options.strip_padding_bottom;
var objcssstrip = {};
objcssstrip["width"] = width + "px";
objcssstrip["height"] = height + "px";
g_objstrip.css(objcssstrip);
storestripsize(width);
var innerleft = g_options.strip_padding_left;
//set inner strip params
var objcssinner = {};
objcssinner["height"] = height + "px";
objcssinner["left"] = innerleft + "px";
objcssinner["top"] = "0px";
g_objstripinner.css(objcssinner);
g_temp.is_placed = true;
checkcontrolsenabledisable();
}
/**
* set position of the strip
*/
this.setposition = function (left, top, offsetleft, offsettop) {
g_functions.placeelement(g_objstrip, left, top, offsetleft, offsettop);
}
/**
* resize the panel according the orientation
*/
this.resize = function (newsize) {
if (g_isvertical == false) {
g_objstrip.width(newsize);
g_sizes.stripactivesize = newsize - g_options.strip_padding_left - g_options.strip_padding_right;
} else {
g_objstrip.height(newsize);
g_sizes.stripactivesize = newsize - g_options.strip_padding_top - g_options.strip_padding_bottom;
}
storestripsize(newsize);
checkcontrolsenabledisable();
checkandrepositioninnerstrip();
aligninnerstrip();
scrolltoselectedthumb();
}
/**
* set the thumb unselected state
*/
this.setthumbunselected = function (objthumbwrapper) {
g_thumbs.setthumbunselected(objthumbwrapper);
}
/**
* set custom thumbs
*/
this.setcustomthumbs = function (funcsethtml) {
g_thumbs.setcustomthumbs(funcsethtml);
}
this.________external_getters___________ = function () { };
/**
* get objects
*/
this.getobjects = function () {
var thumbsoptions = g_thumbs.getoptions();
var commonopitions = jquery.extend(g_options, thumbsoptions);
var obj = {
g_gallery: g_gallery,
g_objgallery: g_objgallery,
g_objwrapper: g_objwrapper,
g_arritems: g_arritems,
g_objstrip: g_objstrip,
g_objstripinner: g_objstripinner,
g_aviacontrol: g_aviacontrol,
g_touchthumbscontrol: g_touchthumbscontrol,
isvertical: g_isvertical,
g_options: commonopitions,
g_thumbs: g_thumbs
};
return (obj);
}
/**
* get thumbs onject
*/
this.getobjthumbs = function () {
return (g_thumbs);
}
/**
* get selected thumb
*/
this.getselectedthumb = function () {
var selectedindex = g_gallery.getselecteditemindex();
if (selectedindex == -1)
return (null);
return g_thumbs.getthumbbyindex(selectedindex);
}
/**
* get strip size and position object
*/
this.getsizeandposition = function () {
var obj = g_functions.getelementsize(g_objstrip);
return (obj);
}
/**
* get thumbs strip height
*/
this.getheight = function () {
var stripheight = g_objstrip.outerheight();
return (stripheight)
}
/**
* get thumbs strip width
*/
this.getwidth = function () {
var stripwidth = g_objstrip.outerwidth();
return (stripwidth);
}
/**
* get all stored sizes object
*/
this.getsizes = function () {
return (g_sizes);
}
/**
* return if vertical orientation or not
*/
this.isvertical = function () {
return (g_isvertical);
}
/**
* return if the strip is placed or not
*/
this.isplaced = function () {
return (g_temp.is_placed);
}
/**
* return if the strip moving enabled or not
*/
this.ismoveenabled = function () {
var isenabled = isstripmovingenabled();
return (isenabled);
}
}
/**
* touch thumbs control class
* addon to strip gallery
*/
function ugtouchthumbscontrol() {
var g_parent, g_gallery, g_objgallery, g_objects;
var g_objstrip, g_objstripinner, g_options, g_isvertical;
var g_functions = new ugfunctions();
//service variables
var g_serviceparams = {
touch_portion_time: 200, //the time in ms that the potion is counts for continue touch movement
thumb_touch_slowfactor: 0, //set from user
mindeltatime: 70, //don't alow portion less then the mintime
minpath: 10, //if less then this path, dont' continue motion
limitsbreakaddition: 30, //the limits break addition for second return animation
returnanimatespeed: 500, //the speed of return animation
animationeasing: "easeoutcubic", //animation easing function
returnanimationeasing: "easeoutcubic" //return animation easing function
};
var g_temp = { //temp variables
touch_active: false,
loop_active: false,
mousepos: 0,
innerpos: 0,
startpos: 0,
starttime: 0,
lasttime: 0,
buttonreleasetime: 0,
lastpos: 0,
lastportionpos: 0,
lastdeltatime: 0,
lastdeltapos: 0,
speed: 0,
handle: "",
touchenabled: false,
iscontrolenabled: true
};
/**
* enable the control
*/
this.enable = function () {
g_temp.iscontrolenabled = true;
}
/**
* disable the control
*/
this.disable = function () {
g_temp.iscontrolenabled = false;
}
/**
* init function for avia controls
*/
this.init = function (objstrip) {
g_parent = objstrip;
g_objects = objstrip.getobjects();
g_gallery = g_objects.g_gallery;
g_objgallery = g_objects.g_objgallery; //jquery object
g_objstrip = g_objects.g_objstrip;
g_objstripinner = g_objects.g_objstripinner;
g_options = g_objects.g_options;
g_isvertical = g_objects.isvertical;
setserviceparams();
initevents();
}
/**
* get action related variables
*/
function getactionvars() {
var currenttime = jquery.now();
var obj = {};
obj.passedtime = g_temp.lasttime - g_temp.starttime;
obj.lastactivetime = currenttime - g_temp.buttonreleasetime;
obj.passeddistance = g_temp.lastpos - g_temp.startpos;
obj.passeddistanceabs = math.abs(obj.passeddistance);
return (obj);
}
/**
* return if passed some significant movement
*/
this.issignificantpassed = function () {
var objvars = getactionvars();
if (objvars.passedtime > 300)
return (true);
if (objvars.passeddistanceabs > 30)
return (true);
return (false);
}
/**
* return true if the touch dragging or animate motion is active
*/
this.istouchactive = function () {
if (g_temp.touch_active == true)
return (true);
//check if still animating
if (g_objstripinner.is(":animated") == true)
return (true);
//check if just ended, the touch active continue for a few moments.
var objvars = getactionvars();
if (objvars.lastactivetime < 50)
return (true);
return (false);
}
/**
* set service parameters from user parameters
*/
function setserviceparams() {
//set slow factor by sensetivity of touch motion
g_serviceparams.thumb_touch_slowfactor = g_functions.normalizesetting(0.00005, 0.01, 1, 100, g_options.strip_thumb_touch_sensetivity, true);
//debugline("slowfactor "+ g_serviceparams.thumb_touch_slowfactor);
}
/**
* get mouse position based on orientation
*/
function getmouseorientposition(event) {
if (g_isvertical == false)
return (g_functions.getmouseposition(event).pagex);
else
return (g_functions.getmouseposition(event).pagey);
}
/**
* position the strip according the touch drag diff
*/
function handlestripdrag(mousepos) {
var diff = g_temp.mousepos - mousepos;
var distpos = g_temp.innerpos - diff;
//make harder to drag the limits
var objlimits = g_parent.getinnerstriplimits();
if (distpos > objlimits.maxpos) {
var path = distpos - objlimits.maxpos;
distpos = objlimits.maxpos + path / 3;
}
if (distpos < objlimits.minpos) {
var path = objlimits.minpos - distpos;
distpos = objlimits.minpos - path / 3;
}
g_parent.positioninnerstrip(distpos);
}
/**
* store initial touch values
*/
function storeinittouchvalues(pagepos) {
var currentinnerpos = g_parent.getinnerstrippos();
//remember current mouse position and inner strip position
g_temp.mousepos = pagepos;
g_temp.innerpos = currentinnerpos;
g_temp.lastportionpos = currentinnerpos;
g_temp.lastdeltatime = 0;
g_temp.lastdeltapos = 0;
//init position and time related variables
g_temp.starttime = jquery.now();
g_temp.startpos = g_temp.innerpos;
g_temp.lasttime = g_temp.starttime;
g_temp.lastpos = g_temp.startpos;
g_temp.speed = 0;
}
/**
* store touch portion data
*/
function storetouchportiondata() {
//calc speed
var currenttime = jquery.now();
var deltatime = currenttime - g_temp.lasttime;
if (deltatime >= g_serviceparams.touch_portion_time) {
g_temp.lastdeltatime = currenttime - g_temp.lasttime;
if (g_temp.lastdeltatime > g_serviceparams.touch_portion_time)
g_temp.lastdeltatime = g_serviceparams.touch_portion_time;
g_temp.lastdeltapos = g_temp.lastpos - g_temp.lastportionpos;
g_temp.lastportionpos = g_temp.lastpos;
g_temp.lasttime = currenttime;
}
}
/**
* continue touch motion - touch motion ending.
*/
function continuetouchmotion() {
var slowfactor = g_serviceparams.thumb_touch_slowfactor;
//don't alow portion less then the mintime
var mindeltatime = g_serviceparams.mindeltatime;
//if less then this path, dont' continue motion
var minpath = g_serviceparams.minpath;
var currentinnerpos = g_parent.getinnerstrippos();
var currenttime = jquery.now();
var deltatime = currenttime - g_temp.lasttime;
var deltapos = currentinnerpos - g_temp.lastportionpos;
//if time too fast, take last portion values
if (deltatime < mindeltatime && g_temp.lastdeltatime > 0) {
deltatime = g_temp.lastdeltatime;
deltapos = g_temp.lastdeltapos + deltapos;
}
//fix delta time
if (deltatime < mindeltatime)
deltatime = mindeltatime;
var dir = (deltapos > 0) ? 1 : -1;
var speed = 0;
if (deltatime > 0)
speed = deltapos / deltatime;
var path = (speed * speed) / (slowfactor * 2) * dir;
//disable path for very slow motions
if (math.abs(path) <= minpath)
path = 0;
var innerstrippos = g_parent.getinnerstrippos();
var newpos = innerstrippos + path;
var correctpos = g_parent.fixinnerstriplimits(newpos);
var objlimits = g_parent.getinnerstriplimits();
//check the off the limits and return (second animation)
var limitsbreakaddition = g_serviceparams.limitsbreakaddition;
var doqueue = false;
var returnpos = correctpos;
//fix the first animation position (off the limits)
if (newpos > objlimits.maxpos) {
doqueue = true;
correctpos = limitsbreakaddition;
if (newpos < limitsbreakaddition)
correctpos = newpos;
}
if (newpos < objlimits.minpos) {
doqueue = true;
var maxstoppos = objlimits.minpos - limitsbreakaddition;
correctpos = maxstoppos;
if (newpos > maxstoppos)
correctpos = newpos;
}
var correctpath = correctpos - innerstrippos;
//set animation speed
var animatespeed = math.abs(math.round(speed / slowfactor));
//fix animation speed according the paths difference
if (path != 0)
animatespeed = animatespeed * correctpath / path;
//do first animation
if (innerstrippos != correctpos) {
var animateprops = { "left": correctpos + "px" };
if (g_isvertical == true)
animateprops = { "top": correctpos + "px" };
g_objstripinner.animate(animateprops, {
duration: animatespeed,
easing: g_serviceparams.animationeasing,
queue: true,
progress: onanimateprogress
});
}
//do second animation if off limits
if (doqueue == true) {
var returnanimatespeed = g_serviceparams.returnanimatespeed;
var returnanimateprops = { "left": returnpos + "px" };
if (g_isvertical == true)
returnanimateprops = { "top": returnpos + "px" };
g_objstripinner.animate(returnanimateprops, {
duration: returnanimatespeed,
easing: g_serviceparams.returnanimationeasing,
queue: true,
progress: onanimateprogress
});
}
}
/**
* on animate progress event. store position and trigger event to gallery
*/
function onanimateprogress() {
g_temp.lastpos = g_parent.getinnerstrippos();
g_parent.triggerstripmoveevent();
}
/**
* start loop while touching strip
*/
function startstriptouchloop() {
if (g_temp.loop_active == true)
return (true);
g_temp.loop_active = true;
g_temp.handle = setinterval(storetouchportiondata, 10);
}
/**
* end loop when not touching
*/
function endstriptouchloop(event) {
if (g_temp.loop_active == false)
return (true);
if (event) {
var pagepos = getmouseorientposition(event);
continuetouchmotion(pagepos);
}
g_temp.loop_active = false;
g_temp.handle = clearinterval(g_temp.handle);
}
/**
* on tuch end event
*/
function ontouchend(event) {
if (g_temp.iscontrolenabled == false)
return (true);
g_temp.buttonreleasetime = jquery.now();
if (g_temp.touch_active == false) {
endstriptouchloop(event);
return (true);
}
event.preventdefault();
g_temp.touch_active = false;
endstriptouchloop(event);
g_objstrip.removeclass("ug-dragging");
}
/**
* on touch start - start the motion
* @param event
*/
function ontouchstart(event) {
if (g_temp.iscontrolenabled == false)
return (true);
event.preventdefault();
g_temp.touch_active = true; //don't move this up
var pagepos = getmouseorientposition(event);
//stop inner animation if exist
g_objstripinner.stop(true);
//store initial touch values
storeinittouchvalues(pagepos);
startstriptouchloop();
g_objstrip.addclass("ug-dragging");
}
/**
* on touch move event, move the strip
*/
function ontouchmove(event) {
if (g_temp.iscontrolenabled == false)
return (true);
if (g_temp.touch_active == false)
return (true);
event.preventdefault();
//detect moving without button press
if (event.buttons == 0) {
g_temp.touch_active = false;
endstriptouchloop(event);
return (true);
}
//store current position
var pagepos = getmouseorientposition(event);
g_temp.lastpos = g_parent.getinnerstrippos();
handlestripdrag(pagepos);
storetouchportiondata();
}
/**
* init strip touch events
*/
function initevents() {
//strip mouse down - drag start
g_objstrip.bind("mousedown touchstart", ontouchstart);
//on body mouse up - drag end
jquery(window).add("body").bind("mouseup touchend", ontouchend);
//on body move
jquery("body").bind("mousemove touchmove", ontouchmove);
}
/**
* destroy the touch events
*/
this.destroy = function () {
g_objstrip.unbind("mousedown");
g_objstrip.unbind("touchstart");
jquery(window).add("body").unbind("mouseup").unbind("touchend");
jquery("body").unbind("mousemove").unbind("touchmove");
}
}
/** -------------- panel base functions ---------------------*/
function ugpanelsbase() {
var g_temp, g_panel, g_objpanel, g_options, g_objthis;
var g_gallery = new unitegallerymain();
var t = this, g_objhandle, g_objgallery;
var g_functions = new ugfunctions();
/**
* init the base panel
*/
this.init = function (gallery, g_temparg, g_panelarg, options, g_objthisarg) {
g_temp = g_temparg;
g_panel = g_panelarg;
g_gallery = gallery;
g_options = options;
g_objthis = g_objthisarg;
g_objgallery = jquery(g_gallery);
}
/**
* set common panels html
*/
this.sethtml = function (g_objpanelarg) {
g_objpanel = g_objpanelarg;
if (g_temp.paneltype == "strip")
var enable_handle = g_options.strippanel_enable_handle;
else
var enable_handle = g_options.gridpanel_enable_handle;
// add handle
if (enable_handle == true) {
g_objhandle = new ugpanelhandle();
g_objhandle.init(g_panel, g_objpanel, g_options, g_temp.paneltype, g_gallery);
g_objhandle.sethtml();
}
//set disabled at start if exists
if (g_temp.isdisabledatstart === true) {
var html = "";
g_objpanel.append(html);
settimeout(function () {
g_objpanel.children(".ug-overlay-disabled").hide();
}, g_temp.disabledatstarttimeout);
}
}
/**
* place common elements
*/
this.placeelements = function () {
// place handle
if (g_objhandle)
g_objhandle.placehandle();
}
/**
* init common events
*/
this.initevents = function () {
// set handle events
if (g_objhandle) {
g_objhandle.initevents();
//set on slider action events
g_objgallery.on(g_gallery.events.slider_action_start, function () {
g_objhandle.hidehandle();
});
g_objgallery.on(g_gallery.events.slider_action_end, function () {
g_objhandle.showhandle();
});
}
}
/**
* destroy the panel events
*/
this.destroy = function () {
if (g_objhandle) {
g_objhandle.destroy();
g_objgallery.off(g_gallery.events.slider_action_start);
g_objgallery.off(g_gallery.events.slider_action_end);
}
}
/**
* place panel with some animation
*/
function placepanelanimation(paneldest, functiononcomplete) {
switch (g_temp.orientation) {
case "right": // vertical
case "left":
var objcss = {
left: paneldest + "px"
};
break;
case "top":
case "bottom":
var objcss = {
top: paneldest + "px"
};
break;
}
g_objpanel.stop(true).animate(objcss, {
duration: 300,
easing: "easeinoutquad",
queue: false,
complete: function () {
if (functiononcomplete)
functiononcomplete();
}
});
}
/**
* place the panel without animation
*
* @param paneldest
*/
function placepanelnoanimation(paneldest) {
switch (g_temp.orientation) {
case "right": // vertical
case "left":
g_functions.placeelement(g_objpanel, paneldest, null);
break;
case "top":
case "bottom":
g_functions.placeelement(g_objpanel, null, paneldest);
break;
}
}
/**
* event on panel slide finish
*/
function onpanelslidefinish() {
g_objthis.trigger(g_panel.events.finish_move);
}
/**
* open the panel
*/
this.openpanel = function (noanimation) {
if (!noanimation)
var noanimation = false;
if (g_objpanel.is(":animated"))
return (false);
if (g_temp.isclosed == false)
return (false);
g_temp.isclosed = false;
g_objthis.trigger(g_panel.events.open_panel);
if (noanimation === false)
placepanelanimation(g_temp.originalpos, onpanelslidefinish);
else {
placepanelnoanimation(g_temp.originalpos);
onpanelslidefinish();
}
}
/**
* close the panel (slide in)
*/
this.closepanel = function (noanimation) {
if (!noanimation)
var noanimation = false;
if (g_objpanel.is(":animated"))
return (false);
if (g_temp.isclosed == true)
return (false);
var paneldest = t.getclosedpaneldest();
g_temp.isclosed = true;
g_objthis.trigger(g_panel.events.close_panel);
if (noanimation === false)
placepanelanimation(paneldest, onpanelslidefinish);
else {
placepanelnoanimation(paneldest);
onpanelslidefinish();
}
}
/**
* set the panel that it's in closed state, and set original pos for opening
* later
*/
this.setclosedstate = function (originalpos) {
g_temp.originalpos = originalpos;
g_objthis.trigger(g_panel.events.close_panel);
g_temp.isclosed = true;
}
/**
* set the panel opened state
*/
this.setopenedstate = function (originalpos) {
g_objthis.trigger(g_panel.events.open_panel);
g_temp.isclosed = false;
}
/**
* get closed panel destanation
*/
this.getclosedpaneldest = function () {
var objpanelsize = g_functions.getelementsize(g_objpanel), paneldest;
switch (g_temp.orientation) {
case "left":
g_temp.originalpos = objpanelsize.left;
paneldest = -g_temp.panelwidth;
break;
case "right":
g_temp.originalpos = objpanelsize.left;
var gallerysize = g_gallery.getsize();
paneldest = gallerysize.width;
break;
case "top":
g_temp.originalpos = objpanelsize.top;
paneldest = -g_temp.panelheight;
break;
case "bottom":
g_temp.originalpos = objpanelsize.top;
var gallerysize = g_gallery.getsize();
paneldest = gallerysize.height;
break;
}
return (paneldest);
}
/**
* tells if the panel is closed
*/
this.ispanelclosed = function () {
return (g_temp.isclosed);
}
/**
* set the panel disabled at start, called after init before sethtml
* it's enabled again after timeout end
*/
this.setdisabledatstart = function (timeout) {
if (timeout <= 0)
return (false);
g_temp.isdisabledatstart = true;
g_temp.disabledatstarttimeout = timeout;
}
}
/** -------------- panel handle object ---------------------*/
function ugpanelhandle() {
var t = this, g_objpanel, g_panel, g_objhandletip, g_paneloptions = {};
var g_functions = new ugfunctions();
var g_options = {
panel_handle_align: "top", //top, middle, bottom , left, right, center - close handle tip align on the handle bar according panel orientation
panel_handle_offset: 0, //offset of handle bar according the valign
panel_handle_skin: 0 //skin of the handle, if empty inherit from gallery skin
};
/**
* init the handle
*/
this.init = function (panel, objpanel, paneloptions, paneltype, gallery) {
g_panel = panel;
g_objpanel = objpanel;
//set needed options
switch (paneltype) {
case "grid":
g_options.panel_handle_align = paneloptions.gridpanel_handle_align;
g_options.panel_handle_offset = paneloptions.gridpanel_handle_offset;
g_options.panel_handle_skin = paneloptions.gridpanel_handle_skin;
break;
case "strip":
g_options.panel_handle_align = paneloptions.strippanel_handle_align;
g_options.panel_handle_offset = paneloptions.strippanel_handle_offset;
g_options.panel_handle_skin = paneloptions.strippanel_handle_skin;
break;
default:
throw new error("panel handle error: wrong panel type: " + paneltype);
break;
}
//set arrows skin:
var galleryoptions = gallery.getoptions();
var globalskin = galleryoptions.gallery_skin;
if (g_options.panel_handle_skin == "")
g_options.panel_handle_skin = globalskin;
}
/**
* set handle html
*/
this.sethtml = function () {
var orientation = g_panel.getorientation();
var classtip = "ug-panel-handle-tip";
switch (orientation) {
case "right":
classtip += " ug-handle-tip-left";
break;
case "left":
classtip += " ug-handle-tip-right";
break;
case "bottom":
classtip += " ug-handle-tip-top";
break;
case "top":
classtip += " ug-handle-tip-bottom";
break;
}
g_objpanel.append("");
g_objhandletip = g_objpanel.children(".ug-panel-handle-tip");
}
/**
* remove hover state of the tip
*/
function removehoverstate() {
g_objhandletip.removeclass("ug-button-hover");
}
/**
* add closed state class
*/
function setclosedstate() {
g_objhandletip.addclass("ug-button-closed");
}
/**
* add closed state class
*/
function removeclosedstate() {
g_objhandletip.removeclass("ug-button-closed");
}
/**
* on handle click, close or open panel
*/
function onhandleclick(event) {
event.stoppropagation();
event.stopimmediatepropagation();
if (g_functions.validateclicktouchstartevent(event.type) == false)
return (true);
if (g_panel.ispanelclosed())
g_panel.openpanel();
else
g_panel.closepanel();
}
/**
* init events
*/
this.initevents = function () {
g_functions.addclassonhover(g_objhandletip);
g_objhandletip.bind("click touchstart", onhandleclick);
//on panel open
jquery(g_panel).on(g_panel.events.open_panel, function () {
removehoverstate();
removeclosedstate();
});
//one panel close
jquery(g_panel).on(g_panel.events.close_panel, function () {
removehoverstate();
setclosedstate();
});
}
/**
* destroy the handle panel events
*/
this.destroy = function () {
g_functions.destroybutton(g_objhandletip);
jquery(g_panel).off(g_panel.events.open_panel);
jquery(g_panel).off(g_panel.events.close_panel);
}
/**
* check and fix align option, set write direction
*/
function checkandfixalign() {
var orientation = g_panel.getorientation();
switch (orientation) {
case "right":
case "left":
if (g_options.panel_handle_align != "top" && g_options.panel_handle_align != "bottom")
g_options.panel_handle_align = "top";
break;
case "bottom":
if (g_options.panel_handle_align != "left" && g_options.panel_handle_align != "right")
g_options.panel_handle_align = "left";
break;
case "top":
if (g_options.panel_handle_align != "left" && g_options.panel_handle_align != "right")
g_options.panel_handle_align = "right";
break;
}
}
/**
* place the panel
*/
this.placehandle = function () {
var handlesize = g_functions.getelementsize(g_objhandletip);
checkandfixalign();
var orientation = g_panel.getorientation();
switch (orientation) {
case "left":
g_functions.placeelement(g_objhandletip, "right", g_options.panel_handle_align, -handlesize.width);
break;
case "right":
g_functions.placeelement(g_objhandletip, -handlesize.width, g_options.panel_handle_align, 0, g_options.panel_handle_offset);
break;
case "top":
g_functions.placeelement(g_objhandletip, g_options.panel_handle_align, "bottom", g_options.panel_handle_offset, -handlesize.height);
break;
case "bottom":
g_functions.placeelement(g_objhandletip, g_options.panel_handle_align, "top", g_options.panel_handle_offset, -handlesize.height);
break;
default:
throw new error("wrong panel orientation: " + orientation);
break;
}
}
/**
* hide the handle
*/
this.hidehandle = function () {
if (g_objhandletip.is(":visible") == true)
g_objhandletip.hide();
}
/**
* show the handle
*/
this.showhandle = function () {
if (g_objhandletip.is(":visible") == false)
g_objhandletip.show();
}
}
/**
* grid panel class addon to grid gallery
*/
function ugstrippanel() {
var t = this, g_objthis = jquery(this);
var g_gallery = new unitegallerymain(), g_objgallery, g_objwrapper, g_objpanel;
var g_functions = new ugfunctions(), g_objstrip = new ugthumbsstrip(), g_panelbase = new ugpanelsbase();
var g_objbuttonnext, g_objbuttonprev;
this.events = {
finish_move: "gridpanel_move_finish", // called after close or open panel (slide finish).
open_panel: "open_panel", // called before opening the panel.
close_panel: "close_panel" // called before closing the panel.
};
var g_options = {
strippanel_vertical_type: false, // true, false - specify if the panel is vertical or horizonatal type
strippanel_padding_top: 8, // space from top of the panel
strippanel_padding_bottom: 8, // space from bottom of the panel
strippanel_padding_left: 0, // space from left of the panel
strippanel_padding_right: 0, // space from right of the panel
strippanel_enable_buttons: true, // enable buttons from the sides of the panel
strippanel_buttons_skin: "", // skin of the buttons, if empty inherit from gallery skin
strippanel_padding_buttons: 2, // padding between the buttons and the panel
strippanel_buttons_role: "scroll_strip", // scroll_strip, advance_item - the role of the side buttons
strippanel_enable_handle: true, // enable grid handle
strippanel_handle_align: "top", // top, middle, bottom , left, right, center - close handle tip align on the handle bar according panel orientation
strippanel_handle_offset: 0, // offset of handle bar according the valign
strippanel_handle_skin: "", // skin of the handle, if empty inherit from gallery skin
strippanel_background_color: "" // background color of the strip wrapper, if not set, it will be taken from the css
};
var g_defaults_vertical = {
strip_vertical_type: true,
strippanel_padding_left: 8,
strippanel_padding_right: 8,
strippanel_padding_top: 0,
strippanel_padding_bottom: 0
};
var g_defaults_no_buttons = {
strippanel_padding_left: 8,
strippanel_padding_right: 8,
strippanel_padding_top: 8,
strippanel_padding_bottom: 8
};
var g_temp = {
paneltype: "strip",
panelwidth: 0,
panelheight: 0,
iseventsinited: false,
isclosed: false,
orientation: null,
originalpos: null,
isfirstrun: true
};
/**
* init the panel
*/
function initpanel(gallery, customoptions) {
g_gallery = gallery;
g_objgallery = jquery(g_gallery);
g_options = jquery.extend(g_options, customoptions);
var repeatcustomoptions = false;
if (g_options.strippanel_vertical_type == true) {
g_options = jquery.extend(g_options, g_defaults_vertical);
repeatcustomoptions = true;
}
if (g_options.strippanel_enable_buttons == false) {
g_options = jquery.extend(g_options, g_defaults_no_buttons);
repeatcustomoptions = true;
}
if (repeatcustomoptions == true)
g_options = jquery.extend(g_options, customoptions); // do the
// set arrows skin:
var galleryoptions = g_gallery.getoptions();
var globalskin = galleryoptions.gallery_skin;
if (g_options.strippanel_buttons_skin == "")
g_options.strippanel_buttons_skin = globalskin;
g_objwrapper = g_gallery.getelement();
//init the base panel object:
g_panelbase.init(g_gallery, g_temp, t, g_options, g_objthis);
//init thumbs strip
g_objstrip = new ugthumbsstrip();
g_objstrip.init(g_gallery, g_options);
}
/**
* validate panel before run
*/
function validatepanelbeforerun() {
if (g_options.strippanel_vertical_type == false) { // horizontal
// validate
if (g_temp.panelwidth == 0) {
throw new error(
"strip panel error: the width not set, please set width");
return (false);
}
} else { // vertical validate
if (g_temp.panelheight == 0) {
throw new error(
"strip panel error: the height not set, please set height");
return (false);
}
}
// validate orientation
if (g_temp.orientation == null) {
throw new error(
"wrong orientation, please set panel orientation before run");
return (false);
}
return (true);
}
/**
* run the panel
*/
function runpanel() {
// validation
if (g_temp.isfirstrun == true && validatepanelbeforerun() == false)
return (false);
g_objstrip.run();
setelementssize();
placeelements();
initevents();
g_temp.isfirstrun = false;
checksidebuttons();
}
/**
* set panel html
*/
function setpanelhtml(parentcontainer) {
if (!parentcontainer)
var parentcontainer = g_objwrapper;
// add panel wrapper
parentcontainer.append("");
g_objpanel = parentcontainer.children('.ug-strip-panel');
// add arrows:
if (g_options.strippanel_enable_buttons == true) {
var arrowprevclass = "ug-strip-arrow-left";
var arrownextclass = "ug-strip-arrow-right";
if (g_options.strippanel_vertical_type == true) {
arrowprevclass = "ug-strip-arrow-up";
arrownextclass = "ug-strip-arrow-down";
}
g_objpanel.append("
");
g_objpanel.append("
");
}
g_panelbase.sethtml(g_objpanel);
g_objstrip.sethtml(g_objpanel);
if (g_options.strippanel_enable_buttons == true) {
g_objbuttonprev = g_objpanel.children("." + arrowprevclass);
g_objbuttonnext = g_objpanel.children("." + arrownextclass);
}
sethtmlproperties();
}
/**
* set html properties according the options
*/
function sethtmlproperties() {
// set panel background color
if (g_options.strippanel_background_color != "")
g_objpanel.css("background-color",
g_options.strippanel_background_color);
}
/**
* set elements size horizontal type
*/
function setelementssize_hor() {
// get strip height
var stripheight = g_objstrip.getheight();
var panelwidth = g_temp.panelwidth;
// set buttons height
if (g_objbuttonnext) {
g_objbuttonprev.height(stripheight);
g_objbuttonnext.height(stripheight);
// arrange buttons tip
var prevtip = g_objbuttonprev.children(".ug-strip-arrow-tip");
g_functions.placeelement(prevtip, "center", "middle");
var nexttip = g_objbuttonnext.children(".ug-strip-arrow-tip");
g_functions.placeelement(nexttip, "center", "middle");
}
// set panel height
var panelheight = stripheight + g_options.strippanel_padding_top
+ g_options.strippanel_padding_bottom;
// set panel size
g_objpanel.width(panelwidth);
g_objpanel.height(panelheight);
g_temp.panelheight = panelheight;
// set strip size
var stripwidth = panelwidth - g_options.strippanel_padding_left - g_options.strippanel_padding_right;
if (g_objbuttonnext) {
var buttonwidth = g_objbuttonnext.outerwidth();
stripwidth = stripwidth - buttonwidth * 2 - g_options.strippanel_padding_buttons * 2;
}
g_objstrip.resize(stripwidth);
}
/**
* set elements size vertical type
*/
function setelementssize_vert() {
// get strip width
var stripwidth = g_objstrip.getwidth();
var panelheight = g_temp.panelheight;
// set buttons height
if (g_objbuttonnext) {
g_objbuttonprev.width(stripwidth);
g_objbuttonnext.width(stripwidth);
// arrange buttons tip
var prevtip = g_objbuttonprev.children(".ug-strip-arrow-tip");
g_functions.placeelement(prevtip, "center", "middle");
var nexttip = g_objbuttonnext.children(".ug-strip-arrow-tip");
g_functions.placeelement(nexttip, "center", "middle");
}
// set panel width
var panelwidth = stripwidth + g_options.strippanel_padding_left
+ g_options.strippanel_padding_right;
// set panel size
g_objpanel.width(panelwidth);
g_objpanel.height(panelheight);
g_temp.panelwidth = panelwidth;
// set strip size
var stripheight = panelheight - g_options.strippanel_padding_top
- g_options.strippanel_padding_bottom;
if (g_objbuttonnext) {
var buttonheight = g_objbuttonnext.outerheight();
stripheight = stripheight - buttonheight * 2
- g_options.strippanel_padding_buttons * 2;
}
g_objstrip.resize(stripheight);
}
/**
* set elements size and place the elements
*/
function setelementssize() {
if (g_options.strippanel_vertical_type == false)
setelementssize_hor();
else
setelementssize_vert();
}
/**
* place elements horizontally
*/
function placeelements_hor() {
// place buttons
if (g_objbuttonnext) {
g_functions.placeelement(g_objbuttonprev, "left", "top",
g_options.strippanel_padding_left,
g_options.strippanel_padding_top);
g_functions.placeelement(g_objbuttonnext, "right", "top",
g_options.strippanel_padding_right,
g_options.strippanel_padding_top);
}
var stripx = g_options.strippanel_padding_left;
if (g_objbuttonnext)
stripx += g_objbuttonnext.outerwidth()
+ g_options.strippanel_padding_buttons;
g_objstrip.setposition(stripx, g_options.strippanel_padding_top);
}
/**
* place elements vertically
*/
function placeelements_vert() {
// place buttons
if (g_objbuttonnext) {
g_functions.placeelement(g_objbuttonprev, "left", "top",
g_options.strippanel_padding_left,
g_options.strippanel_padding_top);
g_functions.placeelement(g_objbuttonnext, "left", "bottom",
g_options.strippanel_padding_left,
g_options.strippanel_padding_bottom);
}
var stripy = g_options.strippanel_padding_top;
if (g_objbuttonnext)
stripy += g_objbuttonnext.outerheight()
+ g_options.strippanel_padding_buttons;
g_objstrip.setposition(g_options.strippanel_padding_left, stripy);
}
/**
* place elements
*/
function placeelements() {
if (g_options.strippanel_vertical_type == false)
placeelements_hor();
else
placeelements_vert();
g_panelbase.placeelements();
}
function __________events___________() {
}
;
/**
* on next button click
*/
function onnextbuttonclick(objbutton) {
if (g_functions.isbuttondisabled(objbutton))
return (true);
if (g_options.strippanel_buttons_role == "advance_item")
g_gallery.nextitem();
else
g_objstrip.scrollforeward();
}
/**
* on previous button click
*/
function onprevbuttonclick(objbutton) {
if (g_functions.isbuttondisabled(objbutton))
return (true);
if (g_options.strippanel_buttons_role == "advance_item")
g_gallery.previtem();
else
g_objstrip.scrollback();
}
/**
* check buttons if they need to be disabled or not
*/
function checksidebuttons() {
if (!g_objbuttonnext)
return (true);
// if the strip not movable - disable both buttons
if (g_objstrip.ismoveenabled() == false) {
g_functions.disablebutton(g_objbuttonprev);
g_functions.disablebutton(g_objbuttonnext);
return (true);
}
// check the limits
var limits = g_objstrip.getinnerstriplimits();
var pos = g_objstrip.getinnerstrippos();
if (pos >= limits.maxpos) {
g_functions.disablebutton(g_objbuttonprev);
} else {
g_functions.enablebutton(g_objbuttonprev);
}
if (pos <= limits.minpos)
g_functions.disablebutton(g_objbuttonnext);
else
g_functions.enablebutton(g_objbuttonnext);
}
/**
* on strip move event
*/
function onstripmove() {
checksidebuttons();
}
/**
* on item change event, disable or enable buttons according the images
* position
*/
function onitemchange() {
if (g_gallery.islastitem())
g_functions.disablebutton(g_objbuttonnext);
else
g_functions.enablebutton(g_objbuttonnext);
if (g_gallery.isfirstitem())
g_functions.disablebutton(g_objbuttonprev);
else
g_functions.enablebutton(g_objbuttonprev);
}
/**
* init panel events
*/
function initevents() {
if (g_temp.iseventsinited == true)
return (false);
g_temp.iseventsinited = true;
// buttons events
if (g_objbuttonnext) {
// add hove class
g_functions.addclassonhover(g_objbuttonnext, "ug-button-hover");
g_functions.addclassonhover(g_objbuttonprev, "ug-button-hover");
// add click events
g_functions.setbuttononclick(g_objbuttonprev, onprevbuttonclick);
g_functions.setbuttononclick(g_objbuttonnext, onnextbuttonclick);
// add disable / enable buttons on strip move event
if (g_options.strippanel_buttons_role != "advance_item") {
jquery(g_objstrip).on(g_objstrip.events.strip_move, onstripmove);
jquery(g_objstrip).on(g_objstrip.events.inner_size_change, checksidebuttons);
g_objgallery.on(g_gallery.events.size_change, checksidebuttons);
} else {
var galleryoptions = g_gallery.getoptions();
if (galleryoptions.gallery_carousel == false)
jquery(g_gallery).on(g_gallery.events.item_change, onitemchange);
}
}
g_panelbase.initevents();
}
/**
* destroy the strip panel events
*/
this.destroy = function () {
if (g_objbuttonnext) {
g_functions.destroybutton(g_objbuttonnext);
g_functions.destroybutton(g_objbuttonprev);
jquery(g_objstrip).off(g_objstrip.events.strip_move);
jquery(g_gallery).off(g_gallery.events.item_change);
jquery(g_gallery).off(g_gallery.events.size_change);
}
g_panelbase.destroy();
g_objstrip.destroy();
}
/**
* get panel orientation
*/
this.getorientation = function () {
return (g_temp.orientation);
}
/**
* set panel orientation (left, right, top, bottom)
*/
this.setorientation = function (orientation) {
g_temp.orientation = orientation;
}
/**
* init the panel
*/
this.init = function (gallery, customoptions) {
initpanel(gallery, customoptions);
}
/**
* run the panel
*/
this.run = function () {
runpanel();
}
/**
* place panel html
*/
this.sethtml = function (parentcontainer) {
setpanelhtml(parentcontainer);
}
/**
* get the panel element
*/
this.getelement = function () {
return (g_objpanel);
}
/**
* get panel size object
*/
this.getsize = function () {
var objsize = g_functions.getelementsize(g_objpanel);
return (objsize);
}
/**
* set panel width (for horizonal type)
*/
this.setwidth = function (width) {
g_temp.panelwidth = width;
}
/**
* set panel height (for vertical type)
*/
this.setheight = function (height) {
g_temp.panelheight = height;
}
/**
* resize the panel
*/
this.resize = function (newwidth) {
t.setwidth(newwidth);
setelementssize();
placeelements();
}
this.__________functions_from_base_____ = function () { }
/**
* tells if the panel is closed
*/
this.ispanelclosed = function () {
return (g_panelbase.ispanelclosed());
}
/**
* get closed panel destanation
*/
this.getclosedpaneldest = function () {
return g_panelbase.getclosedpaneldest();
}
/**
* open the panel
*/
this.openpanel = function (noanimation) {
g_panelbase.openpanel(noanimation);
}
/**
* close the panel (slide in)
*/
this.closepanel = function (noanimation) {
g_panelbase.closepanel(noanimation);
}
/**
* set the panel opened state
*/
this.setopenedstate = function (originalpos) {
g_panelbase.setopenedstate(originalpos);
}
/**
* set the panel that it's in closed state, and set original pos for opening later
*/
this.setclosedstate = function (originalpos) {
g_panelbase.setclosedstate(originalpos);
}
/**
* set custom thumbs of the strip
*/
this.setcustomthumbs = function (funcsethtml) {
g_objstrip.setcustomthumbs(funcsethtml);
}
/**
* set panel disabled at start
*/
this.setdisabledatstart = function (timeout) {
g_panelbase.setdisabledatstart(timeout);
}
}
/**
* grid panel class
* addon to grid gallery
*/
function uggridpanel() {
var t = this, g_objthis = jquery(this);
var g_gallery = new unitegallerymain(), g_objgallery, g_objwrapper, g_objpanel;
var g_functions = new ugfunctions();
var g_objgrid = new ugthumbsgrid();
var g_panelbase = new ugpanelsbase();
var g_objarrownext, g_objarrowprev;
this.events = {
finish_move: "gridpanel_move_finish", //called after close or open panel (slide finish).
open_panel: "open_panel", //called before opening the panel.
close_panel: "close_panel" //called before closing the panel.
};
var g_options = {
gridpanel_vertical_scroll: true, //vertical or horizontal grid scroll and arrows
gridpanel_grid_align: "middle", //top , middle , bottom, left, center, right - the align of the grid panel in the gallery
gridpanel_padding_border_top: 10, //padding between the top border of the panel
gridpanel_padding_border_bottom: 4, //padding between the bottom border of the panel
gridpanel_padding_border_left: 10, //padding between the left border of the panel
gridpanel_padding_border_right: 10, //padding between the right border of the panel
gridpanel_arrows_skin: "", //skin of the arrows, if empty inherit from gallery skin
gridpanel_arrows_align_vert: "middle", //borders, grid, middle - vertical align of arrows, to the top and bottom botders, to the grid, or in the middle space.
gridpanel_arrows_padding_vert: 4, //padding between the arrows and the grid, in case of middle align, it will be minimal padding
gridpanel_arrows_align_hor: "center", //borders, grid, center - horizontal align of arrows, to the left and right botders, to the grid, or in the center space.
gridpanel_arrows_padding_hor: 10, //in case of horizontal type only, minimal size from the grid in case of "borders" and size from the grid in case of "grid"
gridpanel_space_between_arrows: 20, //space between arrows on horizontal grids only
gridpanel_arrows_always_on: false, //always show arrows even if the grid is one pane only
gridpanel_enable_handle: true, //enable grid handle
gridpanel_handle_align: "top", //top, middle, bottom , left, right, center - close handle tip align on the handle bar according panel orientation
gridpanel_handle_offset: 0, //offset of handle bar according the valign
gridpanel_handle_skin: "", //skin of the handle, if empty inherit from gallery skin
gridpanel_background_color: "" //background color of the grid wrapper, if not set, it will be taken from the css
};
//default options for vertical scroll
var g_defaultsvertical = {
gridpanel_grid_align: "middle", //top , middle , bottom
gridpanel_padding_border_top: 2, //padding between the top border of the panel
gridpanel_padding_border_bottom: 2 //padding between the bottom border of the panel
};
//default options for horizontal type panel
var g_defaultshortype = {
gridpanel_grid_align: "center" //left, center, right
};
var g_temp = {
paneltype: "grid",
ishortype: false,
arrowsvisible: false,
panelheight: 0,
panelwidth: 0,
originalposx: null,
iseventsinited: false,
isclosed: false,
orientation: null
};
/**
* init the grid panel
*/
function initgridpanel(gallery, customoptions) {
g_gallery = gallery;
validateorientation();
//set defaults and custom options
if (customoptions && customoptions.vertical_scroll) {
g_options.gridpanel_vertical_scroll = customoptions.vertical_scroll;
}
g_options = jquery.extend(g_options, customoptions);
//set defautls for horizontal panel type
if (g_temp.ishortype == true) {
g_options = jquery.extend(g_options, g_defaultshortype);
g_options = jquery.extend(g_options, customoptions);
} else if (g_options.gridpanel_vertical_scroll == true) {
//set defaults for vertical scroll
g_options = jquery.extend(g_options, g_defaultsvertical);
g_options = jquery.extend(g_options, customoptions);
g_options.grid_panes_direction = "bottom";
}
//set arrows skin:
var galleryoptions = g_gallery.getoptions();
var globalskin = galleryoptions.gallery_skin;
if (g_options.gridpanel_arrows_skin == "")
g_options.gridpanel_arrows_skin = globalskin;
//get the gallery wrapper
var objects = gallery.getobjects();
g_objwrapper = objects.g_objwrapper;
//init the base panel object:
g_panelbase.init(g_gallery, g_temp, t, g_options, g_objthis);
//init the grid
g_objgrid = new ugthumbsgrid();
g_objgrid.init(g_gallery, g_options);
}
/**
* validate the orientation if exists
*/
function validateorientation() {
if (g_temp.orientation == null)
throw new error("wrong orientation, please set panel orientation before run");
}
/**
* run the rid panel
*/
function runpanel() {
//validate orientation
validateorientation();
processoptions();
g_objgrid.run();
setarrows();
setpanelsize();
placeelements();
initevents();
}
/**
* set html of the grid panel
*/
function sethtmlpanel() {
//add panel wrapper
g_objwrapper.append("");
g_objpanel = g_objwrapper.children('.ug-grid-panel');
//add arrows:
if (g_temp.ishortype) {
g_objpanel.append("");
g_objpanel.append("");
g_objarrowprev = g_objpanel.children(".grid-arrow-left-hortype");
g_objarrownext = g_objpanel.children(".grid-arrow-right-hortype");
}
else if (g_options.gridpanel_vertical_scroll == false) { //horizonatl arrows
g_objpanel.append("");
g_objpanel.append("");
g_objarrowprev = g_objpanel.children(".grid-arrow-left");
g_objarrownext = g_objpanel.children(".grid-arrow-right");
} else { //vertical arrows
g_objpanel.append("");
g_objpanel.append("");
g_objarrowprev = g_objpanel.children(".grid-arrow-up");
g_objarrownext = g_objpanel.children(".grid-arrow-down");
}
g_panelbase.sethtml(g_objpanel);
//hide the arrows
g_objarrowprev.fadeto(0, 0);
g_objarrownext.fadeto(0, 0);
g_objgrid.sethtml(g_objpanel);
sethtmlproperties();
}
/**
* set html properties according the options
*/
function sethtmlproperties() {
//set panel background color
if (g_options.gridpanel_background_color != "")
g_objpanel.css("background-color", g_options.gridpanel_background_color);
}
/**
* process and fix certain options, avoid arrows and validate options
*/
function processoptions() {
if (g_options.gridpanel_grid_align == "center")
g_options.gridpanel_grid_align = "middle";
}
/**
* place panel with some animation
*/
function placepanelanimation(panelx, functiononcomplete) {
var objcss = { left: panelx + "px" };
g_objpanel.stop(true).animate(objcss, {
duration: 300,
easing: "easeinoutquad",
queue: false,
complete: function () {
if (functiononcomplete)
functiononcomplete();
}
});
}
/**
* get max height of the grid according the arrows size
*/
function getgridmaxheight() {
//check space taken without arrows for one pane grids
var spacetaken = g_options.gridpanel_padding_border_top + g_options.gridpanel_padding_border_bottom;
var maxgridheight = g_temp.panelheight - spacetaken;
if (g_options.gridpanel_arrows_always_on == false) {
var numpanes = g_objgrid.getnumpanesestimationbyheight(maxgridheight);
if (numpanes == 1)
return (maxgridheight);
}
//count the size with arrows
var arrowssize = g_functions.getelementsize(g_objarrownext);
var arrowsheight = arrowssize.height;
var spacetaken = arrowsheight + g_options.gridpanel_arrows_padding_vert;
if (g_options.gridpanel_vertical_scroll == true) //in case of 2 arrows multiply by 2
spacetaken *= 2;
spacetaken += g_options.gridpanel_padding_border_top + g_options.gridpanel_padding_border_bottom;
maxgridheight = g_temp.panelheight - spacetaken;
return (maxgridheight);
}
/**
* get grid maximum width
*/
function getgridmaxwidth() {
//check space taken without arrows for one pane grids
var spacetaken = g_options.gridpanel_padding_border_left + g_options.gridpanel_padding_border_right;
var maxgridwidth = g_temp.panelwidth - spacetaken;
if (g_options.gridpanel_arrows_always_on == false) {
var numpanes = g_objgrid.getnumpanesestimationbywidth(maxgridwidth);
if (numpanes == 1)
return (maxgridwidth);
}
//count the size with arrows
var arrowssize = g_functions.getelementsize(g_objarrownext);
var arrowswidth = arrowssize.width;
spacetaken += (arrowswidth + g_options.gridpanel_arrows_padding_hor) * 2;
maxgridwidth = g_temp.panelwidth - spacetaken;
return (maxgridwidth);
}
/**
* enable / disable arrows according the grid
*/
function setarrows() {
var showarrows = false;
if (g_options.gridpanel_arrows_always_on == true) {
showarrows = true;
}
else {
var numpanes = g_objgrid.getnumpanes();
if (numpanes > 1)
showarrows = true;
}
if (showarrows == true) { //show arrows
g_objarrownext.show().fadeto(0, 1);
g_objarrowprev.show().fadeto(0, 1);
g_temp.arrowsvisible = true;
} else { //hide arrows
g_objarrownext.hide();
g_objarrowprev.hide();
g_temp.arrowsvisible = false;
}
}
/**
* set panel size by the given height and grid width
*/
function setpanelsize() {
var gridsize = g_objgrid.getsize();
//set panel size
if (g_temp.ishortype == true)
g_temp.panelheight = gridsize.height + g_options.gridpanel_padding_border_top + g_options.gridpanel_padding_border_bottom;
else
g_temp.panelwidth = gridsize.width + g_options.gridpanel_padding_border_left + g_options.gridpanel_padding_border_right;
g_functions.setelementsize(g_objpanel, g_temp.panelwidth, g_temp.panelheight);
}
/**
* place the panel without animation
* @param paneldest
*/
function placepanelnoanimation(paneldest) {
switch (g_temp.orientation) {
case "right": //vertical
case "left":
g_functions.placeelement(g_objpanel, paneldest, null);
break;
}
}
function __________events___________() { };
/**
* event on panel slide finish
*/
function onpanelslidefinish() {
g_objthis.trigger(t.events.finish_move);
}
/**
* init panel events
*/
function initevents() {
if (g_temp.iseventsinited == true)
return (false);
g_temp.iseventsinited = true;
if (g_objarrowprev) {
g_functions.addclassonhover(g_objarrowprev);
g_objgrid.attachprevpanebutton(g_objarrowprev);
}
if (g_objarrownext) {
g_functions.addclassonhover(g_objarrownext);
g_objgrid.attachnextpanebutton(g_objarrownext);
}
g_panelbase.initevents();
}
/**
* destroy the events
*/
this.destroy = function () {
if (g_objarrowprev)
g_functions.destroybutton(g_objarrowprev);
if (g_objarrownext)
g_functions.destroybutton(g_objarrownext);
g_panelbase.destroy();
g_objgrid.destroy();
}
function ______place_elements___________() { };
/**
* get padding left of the grid
*/
function getgridpaddingleft() {
var gridpanelleft = g_options.gridpanel_padding_border_left;
return (gridpanelleft);
}
/**
* place elements vertical - grid only
*/
function placeelements_noarrows() {
//place grid
var gridy = g_options.gridpanel_grid_align, gridpaddingy = 0;
switch (gridy) {
case "top":
gridpaddingy = g_options.gridpanel_padding_border_top;
break;
case "bottom":
gridpaddingy = g_options.gridpanel_padding_border_bottom;
break;
}
var gridpanelleft = getgridpaddingleft();
var gridelement = g_objgrid.getelement();
g_functions.placeelement(gridelement, gridpanelleft, gridy, 0, gridpaddingy);
}
/**
* place elements vertical - with arrows
*/
function placeelementsvert_arrows() {
//place grid
var gridy, prevarrowy, nextarrowy, nextarrowpaddingy;
var objarrowsize = g_functions.getelementsize(g_objarrowprev);
var objgridsize = g_objgrid.getsize();
switch (g_options.gridpanel_grid_align) {
default:
case "top":
gridy = g_options.gridpanel_padding_border_top + objarrowsize.height + g_options.gridpanel_arrows_padding_vert;
break;
case "middle":
gridy = "middle";
break;
case "bottom":
gridy = g_temp.panelheight - objgridsize.height - objarrowsize.height - g_options.gridpanel_padding_border_bottom - g_options.gridpanel_arrows_padding_vert;
break;
}
//place the grid
var gridpanelleft = getgridpaddingleft();
var gridelement = g_objgrid.getelement();
g_functions.placeelement(gridelement, gridpanelleft, gridy);
var objgridsize = g_objgrid.getsize();
//place arrows
switch (g_options.gridpanel_arrows_align_vert) {
default:
case "center":
case "middle":
prevarrowy = (objgridsize.top - objarrowsize.height) / 2;
nextarrowy = objgridsize.bottom + (g_temp.panelheight - objgridsize.bottom - objarrowsize.height) / 2;
nextarrowpaddingy = 0;
break;
case "grid":
prevarrowy = objgridsize.top - objarrowsize.height - g_options.gridpanel_arrows_padding_vert_vert
nextarrowy = objgridsize.bottom + g_options.gridpanel_arrows_padding_vert;
nextarrowpaddingy = 0;
break;
case "border":
case "borders":
prevarrowy = g_options.gridpanel_padding_border_top;
nextarrowy = "bottom";
nextarrowpaddingy = g_options.gridpanel_padding_border_bottom;
break;
}
g_functions.placeelement(g_objarrowprev, "center", prevarrowy);
g_functions.placeelement(g_objarrownext, "center", nextarrowy, 0, nextarrowpaddingy);
}
/**
* place elements vertical
*/
function placeelementsvert() {
if (g_temp.arrowsvisible == true)
placeelementsvert_arrows();
else
placeelements_noarrows();
}
/**
* place elements horizontal with arrows
*/
function placeelementshor_arrows() {
var arrowsy, prevarrowpadding, arrowspaddingy, nextarrowpadding;
var objarrowsize = g_functions.getelementsize(g_objarrowprev);
var objgridsize = g_objgrid.getsize();
//place grid
var gridy = g_options.gridpanel_padding_border_top;
switch (g_options.gridpanel_grid_align) {
case "middle":
switch (g_options.gridpanel_arrows_align_vert) {
default:
var elementsheight = objgridsize.height + g_options.gridpanel_arrows_padding_vert + objarrowsize.height;
gridy = (g_temp.panelheight - elementsheight) / 2;
break;
case "border":
case "borders":
var remainheight = g_temp.panelheight - objarrowsize.height - g_options.gridpanel_padding_border_bottom;
gridy = (remainheight - objgridsize.height) / 2;
break;
}
break;
case "bottom":
var elementsheight = objgridsize.height + objarrowsize.height + g_options.gridpanel_arrows_padding_vert;
gridy = g_temp.panelheight - elementsheight - g_options.gridpanel_padding_border_bottom;
break;
}
var gridelement = g_objgrid.getelement();
var gridpanelleft = getgridpaddingleft();
g_functions.placeelement(gridelement, gridpanelleft, gridy);
var objgridsize = g_objgrid.getsize();
switch (g_options.gridpanel_arrows_align_vert) {
default:
case "center":
case "middle":
arrowsy = objgridsize.bottom + (g_temp.panelheight - objgridsize.bottom - objarrowsize.height) / 2;
arrowspaddingy = 0;
break;
case "grid":
arrowsy = objgridsize.bottom + g_options.gridpanel_arrows_padding_vert;
arrowspaddingy = 0;
break;
case "border":
case "borders":
arrowsy = "bottom";
arrowspaddingy = g_options.gridpanel_padding_border_bottom;
break;
}
prevarrowpadding = -objarrowsize.width / 2 - g_options.gridpanel_space_between_arrows / 2;
g_functions.placeelement(g_objarrowprev, "center", arrowsy, prevarrowpadding, arrowspaddingy);
//place next arrow
var nextarrowpadding = math.abs(prevarrowpadding); //make positive
g_functions.placeelement(g_objarrownext, "center", arrowsy, nextarrowpadding, arrowspaddingy);
}
/**
* place elements horizonatal
*/
function placeelementshor() {
if (g_temp.arrowsvisible == true)
placeelementshor_arrows();
else
placeelements_noarrows();
}
/**
* place elements horizontal type with arrows
*/
function placeelementshortype_arrows() {
//place grid
var gridx, prevarrowx, nextarrowx, arrowsy;
var objarrowsize = g_functions.getelementsize(g_objarrowprev);
var objgridsize = g_objgrid.getsize();
switch (g_options.gridpanel_grid_align) {
default:
case "left":
gridx = g_options.gridpanel_padding_border_left + g_options.gridpanel_arrows_padding_hor + objarrowsize.width;
break;
case "middle":
case "center":
gridx = "center";
break;
case "right":
gridx = g_temp.panelwidth - objgridsize.width - objarrowsize.width - g_options.gridpanel_padding_border_right - g_options.gridpanel_arrows_padding_hor;
break;
}
//place the grid
var gridelement = g_objgrid.getelement();
g_functions.placeelement(gridelement, gridx, g_options.gridpanel_padding_border_top);
objgridsize = g_objgrid.getsize();
//place arrows, count y
switch (g_options.gridpanel_arrows_align_vert) {
default:
case "center":
case "middle":
arrowsy = (objgridsize.height - objarrowsize.height) / 2 + objgridsize.top;
break;
case "top":
arrowsy = g_options.gridpanel_padding_border_top + g_options.gridpanel_arrows_padding_vert;
break;
case "bottom":
arrowsy = g_temp.panelheight - g_options.gridpanel_padding_border_bottom - g_options.gridpanel_arrows_padding_vert - objarrowsize.height;
break;
}
//get arrows x
switch (g_options.gridpanel_arrows_align_hor) {
default:
case "borders":
prevarrowx = g_options.gridpanel_padding_border_left;
nextarrowx = g_temp.panelwidth - g_options.gridpanel_padding_border_right - objarrowsize.width;
break;
case "grid":
prevarrowx = objgridsize.left - g_options.gridpanel_arrows_padding_hor - objarrowsize.width;
nextarrowx = objgridsize.right + g_options.gridpanel_arrows_padding_hor;
break;
case "center":
prevarrowx = (objgridsize.left - objarrowsize.width) / 2;
nextarrowx = objgridsize.right + (g_temp.panelwidth - objgridsize.right - objarrowsize.width) / 2;
break;
}
g_functions.placeelement(g_objarrowprev, prevarrowx, arrowsy);
g_functions.placeelement(g_objarrownext, nextarrowx, arrowsy);
}
/**
* place elements horizontal type without arrows
*/
function placeelementhortype_noarrows() {
var gridx;
var objgridsize = g_objgrid.getsize();
switch (g_options.gridpanel_grid_align) {
default:
case "left":
gridx = g_options.gridpanel_padding_border_left;
break;
case "middle":
case "center":
gridx = "center";
break;
case "right":
gridx = g_temp.panelwidth - objgridsize.width - g_options.gridpanel_padding_border_right;
break;
}
//place the grid
var gridelement = g_objgrid.getelement();
g_functions.placeelement(gridelement, gridx, g_options.gridpanel_padding_border_top);
}
/**
* place elements when the grid in horizontal position
*/
function placeelementshortype() {
if (g_temp.arrowsvisible == true)
placeelementshortype_arrows();
else
placeelementhortype_noarrows();
}
/**
* place the arrows
*/
function placeelements() {
if (g_temp.ishortype == false) {
if (g_options.gridpanel_vertical_scroll == true)
placeelementsvert();
else
placeelementshor();
} else {
placeelementshortype();
}
g_panelbase.placeelements();
}
/**
* get panel orientation
*/
this.getorientation = function () {
return (g_temp.orientation);
}
/**
* set panel orientation (left, right, top, bottom)
*/
this.setorientation = function (orientation) {
g_temp.orientation = orientation;
//set ishortype temp variable for ease of use
switch (orientation) {
case "right":
case "left":
g_temp.ishortype = false;
break;
case "top":
case "bottom":
g_temp.ishortype = true;
break;
default:
throw new error("wrong grid panel orientation: " + orientation);
break;
}
}
/**
* set panel height
*/
this.setheight = function (height) {
if (g_temp.ishortype == true)
throw new error("setheight is not appliable to this orientatio (" + g_temp.orientation + "). please use setwidth");
g_temp.panelheight = height;
var gridmaxheight = getgridmaxheight();
g_objgrid.setmaxheight(gridmaxheight);
}
/**
* set panel width
*/
this.setwidth = function (width) {
if (g_temp.ishortype == false)
throw new error("setwidth is not appliable to this orientatio (" + g_temp.orientation + "). please use setheight");
g_temp.panelwidth = width;
var gridmaxwidth = getgridmaxwidth();
g_objgrid.setmaxwidth(gridmaxwidth);
}
/**
* init the panel
*/
this.init = function (gallery, customoptions) {
initgridpanel(gallery, customoptions);
}
/**
* place panel html
*/
this.sethtml = function () {
sethtmlpanel();
}
/**
* run the panel
*/
this.run = function () {
runpanel();
}
/**
* get the panel element
*/
this.getelement = function () {
return (g_objpanel);
}
/**
* get panel size object
*/
this.getsize = function () {
var objsize = g_functions.getelementsize(g_objpanel);
return (objsize);
}
this.__________functions_from_base_____ = function () { }
/**
* tells if the panel is closed
*/
this.ispanelclosed = function () {
return (g_panelbase.ispanelclosed());
}
/**
* get closed panel destanation
*/
this.getclosedpaneldest = function () {
return g_panelbase.getclosedpaneldest();
}
/**
* open the panel
*/
this.openpanel = function (noanimation) {
g_panelbase.openpanel(noanimation);
}
/**
* close the panel (slide in)
*/
this.closepanel = function (noanimation) {
g_panelbase.closepanel(noanimation);
}
/**
* set the panel opened state
*/
this.setopenedstate = function (originalpos) {
g_panelbase.setopenedstate(originalpos);
}
/**
* set the panel that it's in closed state, and set original pos for opening later
*/
this.setclosedstate = function (originalpos) {
g_panelbase.setclosedstate(originalpos);
}
/**
* set panel disabled at start
*/
this.setdisabledatstart = function (timeout) {
g_panelbase.setdisabledatstart(timeout);
}
}
/**
* thumbs class
* addon to strip gallery
*/
function ugthumbsgrid() {
var t = this, g_objthis = jquery(this);
var g_gallery = new unitegallerymain(), g_objgallery, g_objects, g_objwrapper;
var g_functions = new ugfunctions(), g_arritems, g_objgrid, g_objinner;
var g_thumbs = new ugthumbsgeneral(), g_tilesdesign = new ugtiledesign();
var g_options = {
grid_panes_direction: "left", //where panes will move -> left, bottom
grid_num_cols: 2, //number of grid columns
grid_min_cols: 2, //minimum number of columns (for horizontal type) - the tile size is dynamic
grid_num_rows: 2, //number of grid rows (for horizontal type)
grid_space_between_cols: 10, //space between columns
grid_space_between_rows: 10, //space between rows
grid_space_between_mobile: 10, //space between rows and cols mobile
grid_transition_duration: 300, //transition of the panes change duration
grid_transition_easing: "easeinoutquad", //transition of the panes change easing function
grid_carousel: false, //next pane goes to first when last
grid_padding: 0, //set padding to the grid
grid_vertical_scroll_ondrag: false //scroll the gallery on vertical drag
};
this.events = {
pane_change: "pane_change"
};
var g_temp = {
eventsizechange: "thumb_size_change",
ishorizontal: false,
ismaxheight: false, //set if the height that set is max height. in that case need a height correction
ismaxwidth: false, //set if the height that set is max height. in that case need a height correction
gridheight: 0,
gridwidth: 0,
innerwidth: 0,
innerheight: 0,
numpanes: 0,
arrpanes: 0,
numthumbs: 0,
currentpane: 0,
numthumbsinpane: 0,
isnavigationvertical: false,
touchactive: false,
startscrollpos: 0,
isfirsttimerun: true,
istilesmode: false,
storedeventid: "thumbsgrid",
tilemaxwidth: null,
tilemaxheight: null,
spacebetweencols: null,
spacebetweenrows: null
};
function __________general_________() { };
/**
* init the gallery
*/
function init(gallery, customoptions, istilesmode) {
g_objects = gallery.getobjects();
g_gallery = gallery;
g_gallery.attachthumbspanel("grid", t);
g_objgallery = jquery(gallery);
g_objwrapper = g_objects.g_objwrapper;
g_arritems = g_objects.g_arritems;
if (istilesmode === true)
g_temp.istilesmode = true;
g_temp.numthumbs = g_arritems.length;
setoptions(customoptions);
if (g_temp.istilesmode == true) {
g_tilesdesign.setfixedmode();
g_tilesdesign.setapproveclickfunction(isapprovetileclick);
g_tilesdesign.init(gallery, g_options);
var options_td = g_tilesdesign.getoptions();
g_temp.tilemaxheight = options_td.tile_height;
g_temp.tilemaxwidth = options_td.tile_width;
g_thumbs = g_tilesdesign.getobjthumbs();
} else {
//disable the dynamic size in thumbs
customoptions.thumb_fixed_size = true;
g_thumbs.init(gallery, customoptions);
}
}
/**
* set the grid panel html
*/
function sethtml(parentcontainer) {
var objparent = g_objwrapper;
if (parentcontainer)
objparent = parentcontainer;
objparent.append("
");
g_objgrid = objparent.children(".ug-thumbs-grid");
g_objinner = g_objgrid.children(".ug-thumbs-grid-inner");
//put the thumbs to inner strip
if (g_temp.istilesmode == true)
g_tilesdesign.sethtml(g_objinner);
else
g_thumbs.sethtmlthumbs(g_objinner);
}
/**
* validate before running the grid
*/
function validatebeforerun() {
if (g_temp.ishorizontal == false) { //vertical type
if (g_temp.gridheight == 0)
throw new error("you must set height before run.");
} else {
if (g_temp.gridwidth == 0)
throw new error("you must set width before run.");
}
}
/**
* run the gallery after init and set html
*/
function run() {
var selecteditem = g_gallery.getselecteditem();
validatebeforerun();
if (g_temp.isfirsttimerun == true) {
initevents();
if (g_temp.istilesmode == true) {
initgriddynamicsize();
initsizeparams();
g_tilesdesign.run();
} else {
g_thumbs.sethtmlproperties();
initsizeparams();
g_thumbs.loadthumbsimages();
}
} else {
if (g_temp.istilesmode == true) {
//check if dynamic size changed. if do, run the thumbs again
var ischanged = initgriddynamicsize();
if (ischanged == true) {
initsizeparams();
g_tilesdesign.run();
}
}
}
positionthumbs();
if (g_temp.isfirsttimerun == true && g_temp.istilesmode) {
var objtiles = g_thumbs.getthumbs();
//fire size change event
objtiles.each(function (index, tile) {
g_objwrapper.trigger(g_temp.eventsizechange, jquery(tile));
});
objtiles.fadeto(0, 1);
}
if (selecteditem != null)
scrolltothumb(selecteditem.index);
//trigger pane change event on the start
g_objthis.trigger(t.events.pane_change, g_temp.currentpane);
g_temp.isfirsttimerun = false;
}
/**
* get thumb size object
*/
function getthumbssize() {
if (g_temp.istilesmode == true)
var objthumbsize = g_tilesdesign.getglobaltilesize();
else
var objthumbsize = g_thumbs.getglobalthumbsize();
return (objthumbsize);
}
/**
* init grid dynamic size (tiles mode)
*/
function initgriddynamicsize() {
if (g_temp.istilesmode == false)
throw new error("dynamic size can be set only in tiles mode");
var ischanged = false;
var ismobile = g_gallery.ismobilemode();
//--- set space between cols and rows
var spaceold = g_temp.spacebetweencols;
if (ismobile == true) {
g_temp.spacebetweencols = g_options.grid_space_between_mobile;
g_temp.spacebetweenrows = g_options.grid_space_between_mobile;
} else {
g_temp.spacebetweencols = g_options.grid_space_between_cols;
g_temp.spacebetweenrows = g_options.grid_space_between_rows;
}
if (g_temp.spacebetweencols != spaceold)
ischanged = true;
//set tile size
var lastthumbsize = getthumbssize();
var lastthumbwidth = lastthumbsize.width;
var tilewidth = g_temp.tilemaxwidth;
var numcols = g_functions.getnumitemsinspace(g_temp.gridwidth, g_temp.tilemaxwidth, g_temp.spacebetweencols);
if (numcols < g_options.grid_min_cols) {
tilewidth = g_functions.getitemsizeinspace(g_temp.gridwidth, g_options.grid_min_cols, g_temp.spacebetweencols);
}
g_tilesdesign.settilesizeoptions(tilewidth);
if (tilewidth != lastthumbwidth)
ischanged = true;
return (ischanged);
}
/**
* init grid size horizontal
* get height param
*/
function initsizeparamshor() {
var objthumbsize = getthumbssize();
var thumbsheight = objthumbsize.height;
//set grid size
var gridwidth = g_temp.gridwidth;
var gridheight = g_options.grid_num_rows * thumbsheight + (g_options.grid_num_rows - 1) * g_temp.spacebetweenrows + g_options.grid_padding * 2;
g_temp.gridheight = gridheight;
g_functions.setelementsize(g_objgrid, gridwidth, gridheight);
//set inner size (as grid size, will be corrected after placing thumbs
g_functions.setelementsize(g_objinner, gridwidth, gridheight);
//set initial inner size params
g_temp.innerwidth = gridwidth;
g_temp.innerheight = gridheight;
}
/**
* init size params vertical
*/
function initsizeparamsvert() {
var objthumbsize = getthumbssize();
var thumbswidth = objthumbsize.width;
//set grid size
var gridwidth = g_options.grid_num_cols * thumbswidth + (g_options.grid_num_cols - 1) * g_temp.spacebetweencols + g_options.grid_padding * 2;
var gridheight = g_temp.gridheight;
g_temp.gridwidth = gridwidth;
g_functions.setelementsize(g_objgrid, gridwidth, gridheight);
//set inner size (as grid size, will be corrected after placing thumbs
g_functions.setelementsize(g_objinner, gridwidth, gridheight);
//set initial inner size params
g_temp.innerwidth = gridwidth;
g_temp.innerheight = gridheight;
}
/**
* init grid size
*/
function initsizeparams() {
if (g_temp.ishorizontal == false)
initsizeparamsvert();
else
initsizeparamshor();
}
/**
* goto pane by index
*/
function scrolltothumb(thumbindex) {
var paneindex = getpaneindexbythumbindex(thumbindex);
if (paneindex == -1)
return (false);
t.gotopane(paneindex, "scroll");
}
/**
* set the options of the strip
*/
function setoptions(objoptions) {
g_options = jquery.extend(g_options, objoptions);
g_thumbs.setoptions(objoptions);
//set vertical or horizon
g_temp.isnavigationvertical = (g_options.grid_panes_direction == "top" || g_options.grid_panes_direction == "bottom")
g_temp.spacebetweencols = g_options.grid_space_between_cols;
g_temp.spacebetweenrows = g_options.grid_space_between_rows;
}
/**
* position the thumbs and init panes horizontally
*/
function positionthumb_hor() {
var arrthumbs = g_objinner.children(".ug-thumb-wrapper");
var posx = 0;
var posy = 0;
var counter = 0;
var basex = 0;
var maxx = 0, maxy = 0;
g_temp.innerwidth = 0;
g_temp.numpanes = 1;
g_temp.arrpanes = [];
g_temp.numthumbsinpane = 0;
//set first pane position
g_temp.arrpanes.push(basex);
var numthumbs = arrthumbs.length;
for (i = 0; i < numthumbs; i++) {
var objthumb = jquery(arrthumbs[i]);
g_functions.placeelement(objthumb, posx, posy);
var thumbwidth = objthumb.outerwidth();
var thumbheight = objthumb.outerheight();
//count maxx
if (posx > maxx)
maxx = posx;
//count maxy
var endy = posy + thumbheight;
if (endy > maxy)
maxy = endy;
//count maxx end
var endx = maxx + thumbwidth;
if (endx > g_temp.innerwidth)
g_temp.innerwidth = endx;
posx += thumbwidth + g_temp.spacebetweencols;
//next row
counter++;
if (counter >= g_options.grid_num_cols) {
posy += thumbheight + g_temp.spacebetweenrows;
posx = basex;
counter = 0;
}
//count number thumbs in pane
if (g_temp.numpanes == 1)
g_temp.numthumbsinpane++;
//prepare next pane
if ((posy + thumbheight) > g_temp.gridheight) {
posy = 0;
basex = g_temp.innerwidth + g_temp.spacebetweencols;
posx = basex;
counter = 0;
//correct max height size (do it once only)
if (g_temp.ismaxheight == true && g_temp.numpanes == 1) {
g_temp.gridheight = maxy;
g_objgrid.height(g_temp.gridheight);
}
//save next pane props (if exists)
if (i < (numthumbs - 1)) {
g_temp.numpanes++;
//set next pane position
g_temp.arrpanes.push(basex);
}
}
}
//set inner strip width and height
g_objinner.width(g_temp.innerwidth);
//set grid height
if (g_temp.ismaxheight == true && g_temp.numpanes == 1) {
g_temp.gridheight = maxy;
g_objgrid.height(maxy);
}
}
/**
* position the thumbs and init panes vertically
*/
function positionthumb_vert() {
var arrthumbs = g_objinner.children(".ug-thumb-wrapper");
var posx = 0;
var posy = 0;
var maxy = 0;
var counter = 0;
var basex = 0;
var panestarty = 0;
g_temp.innerwidth = 0;
g_temp.numpanes = 1;
g_temp.arrpanes = [];
g_temp.numthumbsinpane = 0;
//set first pane position
g_temp.arrpanes.push(basex);
var numthumbs = arrthumbs.length;
for (i = 0; i < numthumbs; i++) {
var objthumb = jquery(arrthumbs[i]);
g_functions.placeelement(objthumb, posx, posy);
var thumbwidth = objthumb.outerwidth();
var thumbheight = objthumb.outerheight();
posx += thumbwidth + g_temp.spacebetweencols;
var endy = (posy + thumbheight);
if (endy > maxy)
maxy = endy;
//next row
counter++;
if (counter >= g_options.grid_num_cols) {
posy += thumbheight + g_temp.spacebetweenrows;
posx = basex;
counter = 0;
}
//count number thumbs in pane
if (g_temp.numpanes == 1)
g_temp.numthumbsinpane++;
//prepare next pane
endy = (posy + thumbheight);
var panemaxy = panestarty + g_temp.gridheight;
//advance next pane
if (endy > panemaxy) {
//correct max height size (do it once only)
if (g_temp.ismaxheight == true && g_temp.numpanes == 1) {
g_temp.gridheight = maxy;
g_objgrid.height(g_temp.gridheight);
panemaxy = g_temp.gridheight;
}
posy = panemaxy + g_temp.spacebetweenrows;
panestarty = posy;
basex = 0;
posx = basex;
counter = 0;
//save next pane props (if exists)
if (i < (numthumbs - 1)) {
g_temp.numpanes++;
//set next pane position
g_temp.arrpanes.push(posy);
}
}
}//for
//set inner height
g_objinner.height(maxy);
g_temp.innerheight = maxy;
//set grid height
if (g_temp.ismaxheight == true && g_temp.numpanes == 1) {
g_temp.gridheight = maxy;
g_objgrid.height(maxy);
}
}
/**
* position the thumbs horizontal type
*/
function positionthumb_hortype() {
var arrthumbs = g_objinner.children(".ug-thumb-wrapper");
var basex = g_options.grid_padding;
var basey = g_options.grid_padding;
var posy = basey;
var posx = basex;
var maxx = 0, maxy = 0, panemaxy = 0, gridmaxy = 0;
var rowscounter = 0;
g_temp.innerwidth = 0;
g_temp.numpanes = 1;
g_temp.arrpanes = [];
g_temp.numthumbsinpane = 0;
//set first pane position
g_temp.arrpanes.push(basex - g_options.grid_padding);
var numthumbs = arrthumbs.length;
for (i = 0; i < numthumbs; i++) {
var objthumb = jquery(arrthumbs[i]);
var thumbwidth = objthumb.outerwidth();
var thumbheight = objthumb.outerheight();
//check end of the size, start a new row
if ((posx - basex + thumbwidth) > g_temp.gridwidth) {
rowscounter++;
posy = 0;
if (rowscounter >= g_options.grid_num_rows) {
//change to a new pane
rowscounter = 0;
basex = posx;
posy = basey;
panemaxy = 0;
//change grid width to max width
if (g_temp.numpanes == 1) {
g_temp.gridwidth = maxx + g_options.grid_padding;
g_objgrid.width(g_temp.gridwidth);
g_temp.gridheight = gridmaxy + g_options.grid_padding;
g_objgrid.height(g_temp.gridheight);
}
g_temp.numpanes++;
g_temp.arrpanes.push(basex - g_options.grid_padding);
} else { //start new line in existing pane
posx = basex;
posy = panemaxy + g_temp.spacebetweenrows;
}
}
//place the thumb
g_functions.placeelement(objthumb, posx, posy);
//count maxx
var endx = posx + thumbwidth;
if (endx > maxx)
maxx = endx;
//count maxy
var endy = posy + thumbheight;
if (endy > panemaxy) //pane height
panemaxy = endy;
if (endy > gridmaxy) //total height
gridmaxy = endy;
if (endy > maxy)
maxy = endy;
//count maxx end
var endx = maxx + thumbwidth;
if (endx > g_temp.innerwidth)
g_temp.innerwidth = endx;
posx += thumbwidth + g_temp.spacebetweencols;
//count number thumbs in pane
if (g_temp.numpanes == 1)
g_temp.numthumbsinpane++;
}//end for
//set inner strip width and height
g_temp.innerwidth = maxx + g_options.grid_padding;
g_temp.innerheight = gridmaxy + g_options.grid_padding;
g_objinner.width(g_temp.innerwidth);
g_objinner.height(g_temp.innerheight);
//set grid height
if (g_temp.numpanes == 1) {
g_temp.gridwidth = maxx + g_options.grid_padding;
g_temp.gridheight = gridmaxy + g_options.grid_padding;
g_objgrid.width(g_temp.gridwidth);
g_objgrid.height(g_temp.gridheight);
}
}
/**
* position the thumbs and init panes related and width related vars
*/
function positionthumbs() {
if (g_temp.ishorizontal == false) { //position vertical type
if (g_temp.isnavigationvertical)
positionthumb_vert();
else
positionthumb_hor();
} else {
positionthumb_hortype();
}
}
/**
* validate thumb index
*/
function validatethumbindex(thumbindex) {
if (thumbindex < 0 || thumbindex >= g_temp.numthumbs) {
throw new error("thumb not exists: " + thumbindex);
return (false);
}
return (true);
}
/**
*
* validate that the pane index exists
*/
function validatepaneindex(paneindex) {
if (paneindex >= g_temp.numpanes || paneindex < 0) {
throw new error("pane " + index + " doesn't exists.");
return (false);
}
return (true);
}
/**
* validate inner position
*/
function validateinnerpos(pos) {
var abspos = math.abs(pos);
if (g_temp.isnavigationvertical == false) {
if (abspos < 0 || abspos >= g_temp.innerwidth) {
throw new error("wrong inner x position: " + pos);
return (false);
}
} else {
if (abspos < 0 || abspos >= g_temp.innerheight) {
throw new error("wrong inner y position: " + pos);
return (false);
}
}
return (true);
}
/**
*
* set inner strip position
*/
function setinnerpos(pos) {
var objcss = getinnerposobj(pos);
if (objcss == false)
return (false);
g_objinner.css(objcss);
}
/**
* animate inner to some position
*/
function animateinnerto(pos) {
var objcss = getinnerposobj(pos);
if (objcss == false)
return (false);
g_objinner.stop(true).animate(objcss, {
duration: g_options.grid_transition_duration,
easing: g_options.grid_transition_easing,
queue: false
});
}
/**
* animate back to current pane
*/
function animatetocurrentpane() {
var innerpos = -g_temp.arrpanes[g_temp.currentpane];
animateinnerto(innerpos);
}
function __________getters_________() { };
/**
* get inner object size according the orientation
*/
function getinnersize() {
if (g_temp.isnavigationvertical == true)
return (g_temp.innerheight);
else
return (g_temp.innerwidth);
}
/**
* get pane width or height according the orientation
*/
function getpanesize() {
if (g_temp.isnavigationvertical == true)
return (g_temp.gridheight);
else
return (g_temp.gridwidth);
}
/**
* get object of iner position move
*/
function getinnerposobj(pos) {
var obj = {};
if (g_temp.isnavigationvertical == true)
obj.top = pos + "px";
else
obj.left = pos + "px";
return (obj);
}
/**
* get mouse position according the orientation
*/
function getmousepos(event) {
var mousepos = g_functions.getmouseposition(event);
if (g_temp.isnavigationvertical == true)
return (mousepos.pagey);
else
return (mousepos.pagex);
}
/**
* get inner position according the orientation
*/
function getinnerpos() {
var objsize = g_functions.getelementsize(g_objinner);
if (g_temp.isnavigationvertical == true)
return (objsize.top);
else
return (objsize.left);
}
/**
* get pane by thumb index
*/
function getpaneindexbythumbindex(thumbindex) {
//validate thumb index
if (validatethumbindex(thumbindex) == false)
return (-1);
var numpane = math.floor(thumbindex / g_temp.numthumbsinpane);
return (numpane);
}
/**
* get position of some pane
*/
function getpaneposition(index) {
var pos = g_temp.arrpanes[index];
return (pos);
}
/**
* return if passed some significant movement, for thumb click
*/
function issignificantpassed() {
if (g_temp.numpanes == 1)
return (false);
var objdata = g_functions.getstoredeventdata(g_temp.storedeventid);
var passedtime = objdata.difftime;
var currentinnerpos = getinnerpos();
var passeddistanceabs = math.abs(currentinnerpos - objdata.startinnerpos);
if (passeddistanceabs > 30)
return (true);
if (passeddistanceabs > 5 && passedtime > 300)
return (true);
return (false);
}
/**
* check if the movement that was held is valid for pane change
*/
function ismovementvalidforchange() {
var objdata = g_functions.getstoredeventdata(g_temp.storedeventid);
//check position, if more then half, move
var currentinnerpos = getinnerpos();
diffpos = math.abs(objdata.startinnerpos - currentinnerpos);
var panesize = getpanesize();
var breaksize = math.round(panesize * 3 / 8);
if (diffpos >= breaksize)
return (true);
if (objdata.difftime < 300 && diffpos > 25)
return (true);
return (false);
}
/**
* return if passed some significant movement
*/
function isapprovetileclick() {
if (g_temp.numpanes == 1)
return (true);
var isapprove = g_functions.isapprovestoredeventclick(g_temp.storedeventid, g_temp.isnavigationvertical);
return (isapprove);
}
function __________events_______() { };
/**
* on thumb click event
*/
function onthumbclick(event) {
//event.preventdefault();
if (issignificantpassed() == true)
return (true);
//run select item operation
var objthumb = jquery(this);
var objitem = g_thumbs.getitembythumb(objthumb);
g_gallery.selectitem(objitem);
}
/**
* on touch start
*/
function ontouchstart(event) {
if (g_temp.numpanes == 1)
return (true);
if (g_temp.touchactive == true)
return (true);
if (g_temp.istilesmode == false)
event.preventdefault();
g_temp.touchactive = true;
var adddata = {
startinnerpos: getinnerpos()
};
g_functions.storeeventdata(event, g_temp.storedeventid, adddata);
}
/**
* handle scroll top, return if scroll mode or not
*/
function handlescrolltop() {
if (g_options.grid_vertical_scroll_ondrag == false)
return (false);
if (g_temp.isnavigationvertical == true)
return (false);
var scrolldir = g_functions.handlescrolltop(g_temp.storedeventid);
if (scrolldir === "vert")
return (true);
return (false);
}
/**
* on touch move
*/
function ontouchmove(event) {
if (g_temp.touchactive == false)
return (true);
event.preventdefault();
g_functions.updatestoredeventdata(event, g_temp.storedeventid);
var objdata = g_functions.getstoredeventdata(g_temp.storedeventid, g_temp.isnavigationvertical);
//check if was vertical scroll
var isscroll = handlescrolltop();
if (isscroll)
return (true);
var diff = objdata.diffmousepos;
var innerpos = objdata.startinnerpos + diff;
var direction = (diff > 0) ? "prev" : "next";
var lastpanesize = g_temp.arrpanes[g_temp.numpanes - 1];
//slow down when off limits
if (g_options.grid_carousel == false && innerpos > 0 && direction == "prev") {
innerpos = innerpos / 3;
}
//debugline({lastsize:lastpanesize,innerpos: innerpos});
if (g_options.grid_carousel == false && innerpos < -lastpanesize && direction == "next") {
innerpos = objdata.startinnerpos + diff / 3;
}
setinnerpos(innerpos);
}
/**
* on touch end
* change panes or return to current pane
*/
function ontouchend(event) {
if (g_temp.touchactive == false)
return (true);
g_functions.updatestoredeventdata(event, g_temp.storedeventid);
var objdata = g_functions.getstoredeventdata(g_temp.storedeventid, g_temp.isnavigationvertical);
//event.preventdefault();
g_temp.touchactive = false;
if (ismovementvalidforchange() == false) {
animatetocurrentpane();
return (true);
}
//move pane or return back
var innerpos = getinnerpos();
var diff = innerpos - objdata.startinnerpos;
var direction = (diff > 0) ? "prev" : "next";
if (direction == "next") {
if (g_options.grid_carousel == false && t.islastpane())
animatetocurrentpane();
else
t.nextpane();
}
else {
if (g_options.grid_carousel == false && t.isfirstpane()) {
animatetocurrentpane();
}
else
t.prevpane();
}
}
/**
* on item change
*/
function onitemchange() {
var objitem = g_gallery.getselecteditem();
g_thumbs.setthumbselected(objitem.objthumbwrapper);
scrolltothumb(objitem.index);
}
/**
* init panel events
*/
function initevents() {
if (g_temp.istilesmode == false) {
g_thumbs.initevents();
var objthumbs = g_objgrid.find(".ug-thumb-wrapper");
objthumbs.on("click touchend", onthumbclick);
g_objgallery.on(g_gallery.events.item_change, onitemchange);
} else {
g_tilesdesign.initevents();
}
//touch drag events
//slider mouse down - drag start
g_objgrid.bind("mousedown touchstart", ontouchstart);
//on body move
jquery("body").bind("mousemove touchmove", ontouchmove);
//on body mouse up - drag end
jquery(window).add("body").bind("mouseup touchend", ontouchend);
}
/**
* destroy the events
*/
this.destroy = function () {
if (g_temp.istilesmode == false) {
var objthumbs = g_objgrid.find(".ug-thumb-wrapper");
objthumbs.off("click");
objthumbs.off("touchend");
g_objgallery.on(g_gallery.events.item_change);
g_thumbs.destroy();
} else {
g_tilesdesign.destroy();
}
g_objgrid.unbind("mousedown");
g_objgrid.unbind("touchstart");
jquery("body").unbind("mousemove");
jquery("body").unbind("touchmove");
jquery(window).add("body").unbind("touchend");
jquery(window).add("body").unbind("mouseup");
g_objthis.off(t.events.pane_change);
}
this.__________external_general_________ = function () { };
/**
* set the thumb unselected state
*/
this.setthumbunselected = function (objthumbwrapper) {
g_thumbs.setthumbunselected(objthumbwrapper);
}
/**
* check if thmb item visible, means inside the visible part of the inner strip
*/
this.isitemthumbvisible = function (objitem) {
var itemindex = objitem.index;
var paneindex = getpaneindexbythumbindex(itemindex);
if (paneindex == g_temp.currentpane)
return (true);
return (false);
}
this.__________external_api_________ = function () { };
/**
* get estimation of number of panes by the height of the grid.
*/
this.getnumpanesestimationbyheight = function (gridheight) {
if (g_temp.istilesmode == true) {
var thumbheight = g_options.tile_height;
} else {
var thumbsoptions = g_thumbs.getoptions();
var thumbheight = thumbsoptions.thumb_height;
}
var numthumbs = g_thumbs.getnumthumbs();
var numrows = math.ceil(numthumbs / g_options.grid_num_cols);
var totalheight = numrows * thumbheight + (numrows - 1) * g_temp.spacebetweenrows;
var numpanes = math.ceil(totalheight / gridheight);
return (numpanes);
}
/**
* get estimation of number of panes by the width of the grid.
*/
this.getnumpanesestimationbywidth = function (gridwidth) {
if (g_temp.istilesmode) {
var thumbwidth = g_options.tile_width;
} else {
var thumbsoptions = g_thumbs.getoptions();
var thumbwidth = thumbsoptions.thumb_width;
}
var numthumbs = g_thumbs.getnumthumbs();
var numcols = math.ceil(numthumbs / g_options.grid_num_rows);
var totalwidth = numcols * thumbwidth + (numcols - 1) * g_temp.spacebetweencols;
var numpanes = math.ceil(totalwidth / gridwidth);
return (numpanes);
}
/**
* get height estimation by width, works only in tiles mode
*/
this.getheightestimationbywidth = function (width) {
if (g_temp.istilesmode == false)
throw new error("this function works only with tiles mode");
var numthumbs = g_thumbs.getnumthumbs();
var numcols = g_functions.getnumitemsinspace(width, g_options.tile_width, g_temp.spacebetweencols);
var numrows = math.ceil(numthumbs / numcols);
if (numrows > g_options.grid_num_rows)
numrows = g_options.grid_num_rows;
var gridheight = g_functions.getspacebynumitems(numrows, g_options.tile_height, g_temp.spacebetweenrows);
gridheight += g_options.grid_padding * 2;
return (gridheight);
}
/**
* get the grid element
*/
this.getelement = function () {
return (g_objgrid);
}
/**
* get element size and position
*/
this.getsize = function () {
var objsize = g_functions.getelementsize(g_objgrid);
return (objsize);
}
/**
* get number of panes
*/
this.getnumpanes = function () {
return (g_temp.numpanes);
}
/**
* get if the current pane is first
*/
this.isfirstpane = function () {
if (g_temp.currentpane == 0)
return (true);
return (false);
}
/**
* get if the current pane is last
*/
this.islastpane = function () {
if (g_temp.currentpane == (g_temp.numpanes - 1))
return (true);
return (false);
}
/**
* get pane number, and num panes
*/
this.getpaneinfo = function () {
var obj = {
pane: g_temp.currentpane,
total: g_temp.numpanes
};
return (obj);
}
/**
* get current pane
*/
this.getpane = function () {
return (g_temp.currentpane);
}
/**
* set grid width (horizontal type)
*/
this.setwidth = function (gridwidth) {
g_temp.gridwidth = gridwidth;
g_temp.ishorizontal = true;
}
/**
* set max width, the width will be corrected by the number of items
* set vertical type
*/
this.setmaxwidth = function (maxwidth) {
g_temp.gridwidth = maxwidth;
g_temp.ismaxwidth = true;
g_temp.ishorizontal = true;
}
/**
* set grid height (vertical type)
*/
this.setheight = function (gridheight) {
g_temp.gridheight = gridheight;
g_temp.ishorizontal = false;
}
/**
* set max height, the height will be corrected by the number of items
* set the vertical type
*/
this.setmaxheight = function (maxheight) {
g_temp.gridheight = maxheight;
g_temp.ismaxheight = true;
g_temp.ishorizontal = false;
}
/**
* goto some pane
* force skip current pane checks
*/
this.gotopane = function (index, fromwhere) {
if (validatepaneindex(index) == false)
return (false);
if (index == g_temp.currentpane)
return (false);
var innerpos = -g_temp.arrpanes[index];
g_temp.currentpane = index;
animateinnerto(innerpos);
//trigger pane change event
g_objthis.trigger(t.events.pane_change, index);
}
/**
* foreward to the next pane
*/
this.nextpane = function () {
var nextpaneindex = g_temp.currentpane + 1;
if (nextpaneindex >= g_temp.numpanes) {
if (g_options.grid_carousel == false)
return (true);
nextpaneindex = 0;
}
t.gotopane(nextpaneindex, "next");
}
/**
* foreward to the next pane
*/
this.prevpane = function () {
var prevpaneindex = g_temp.currentpane - 1;
if (prevpaneindex < 0) {
prevpaneindex = g_temp.numpanes - 1;
if (g_options.grid_carousel == false)
return (false);
}
t.gotopane(prevpaneindex, "prev");
}
/**
* set next pane button
*/
this.attachnextpanebutton = function (objbutton) {
g_functions.setbuttononclick(objbutton, t.nextpane);
if (g_options.grid_carousel == true)
return (true);
if (t.islastpane())
objbutton.addclass("ug-button-disabled");
//set disabled button class if first pane
g_objthis.on(t.events.pane_change, function () {
if (t.islastpane())
objbutton.addclass("ug-button-disabled");
else
objbutton.removeclass("ug-button-disabled");
});
}
/**
* set prev pane button
*/
this.attachprevpanebutton = function (objbutton) {
g_functions.setbuttononclick(objbutton, t.prevpane);
if (g_options.grid_carousel == true)
return (true);
if (t.isfirstpane())
objbutton.addclass("ug-button-disabled");
//set disabled button class if first pane
g_objthis.on(t.events.pane_change, function () {
if (t.isfirstpane())
objbutton.addclass("ug-button-disabled");
else
objbutton.removeclass("ug-button-disabled");
});
}
/**
* attach bullets object
*/
this.attachbullets = function (objbullets) {
objbullets.setactive(g_temp.currentpane);
jquery(objbullets).on(objbullets.events.bullet_click, function (data, numbullet) {
t.gotopane(numbullet, "theme");
objbullets.setactive(numbullet);
});
jquery(t).on(t.events.pane_change, function (data, numpane) {
objbullets.setactive(numpane);
});
}
/**
* get tile design object
*/
this.getobjtiledesign = function () {
return g_tilesdesign;
}
/**
* init function
*/
this.init = function (gallery, customoptions, istilesmode) {
init(gallery, customoptions, istilesmode);
}
/**
* set html and properties
*/
this.run = function () {
run();
}
/**
* set html
*/
this.sethtml = function (parentcontainer) {
sethtml(parentcontainer);
}
}
/**
* tiles class
*/
function ugtiles() {
var t = this, g_objthis = jquery(this);
var g_gallery = new unitegallerymain(), g_objgallery, g_objwrapper, g_objparent;
var g_functions = new ugfunctions(), g_arritems, g_objtiledesign = new ugtiledesign();
var g_thumbs = new ugthumbsgeneral(), g_vars = {};
var g_arrnestedgridrow, g_arrnesteditems;
var g_options = {
tiles_type: "columns", //columns / justified - tiles layout type
tiles_col_width: 250, //column width - exact or base according the settings
tiles_align: "center", //align of the tiles in the space
tiles_exact_width: false, //exact width of column - disables the min and max columns
tiles_space_between_cols: 3, //space between images
tiles_space_between_cols_mobile: 3, //space between cols for mobile type
tiles_include_padding: true, //include padding at the sides of the columns, equal to current space between cols
tiles_min_columns: 2, //min columns
tiles_max_columns: 0, //max columns (0 for unlimited)
tiles_keep_order: false, //keep order - slower algorytm
tiles_set_initial_height: true, //set some estimated height before images show
tiles_justified_row_height: 150, //base row height of the justified type
tiles_justified_space_between: 3, //space between the tiles justified type
tiles_nested_optimal_tile_width: 250, // tiles optimal width
tiles_nested_col_width: null, // nested tiles column width
tiles_nested_debug: false,
tiles_enable_transition: true //enable transition when screen width change
};
this.events = {
thumb_size_change: "thumb_size_change",
tiles_first_placed: "tiles_first_placed", //only in case of justified
all_tiles_loaded: "all_tiles_loaded"
};
var g_temp = {
isfirsttimerun: true, //if run once
handle: null, //interval handle
istransactive: false, //is transition active
istransinited: false, //if the transition function is set
isfirstplaced: true, //is first time placed
isallloaded: false
};
var g_nestedwork = {
colwidth: null,
nestedoptimalcols: 5,
gridy: 0,
maxcolumns: 0, //maxcolumns
columnsvaluetoenableheightresize: 3, //columns value to enable height resize
resizeleftrighttocolumn: true,
currentitem: 0,
currentgap: null,
optimaltilewidth: null,
maxgridy: 0
}
function __________general_________() { };
/**
* init the gallery
*/
function init(gallery, customoptions) {
g_objects = gallery.getobjects();
g_gallery = gallery;
g_objgallery = jquery(gallery);
g_objwrapper = g_objects.g_objwrapper;
g_arritems = g_objects.g_arritems;
g_options = jquery.extend(g_options, customoptions);
modifyoptions();
g_objtiledesign.init(gallery, g_options);
g_thumbs = g_objtiledesign.getobjthumbs();
}
/**
* modify options
*/
function modifyoptions() {
if (g_options.tiles_min_columns < 1)
g_options.tiles_min_columns = 1;
//protection of max columns, can't be more then min columns
if (g_options.tiles_max_columns != 0 && g_options.tiles_max_columns < g_options.tiles_min_columns) {
g_options.tiles_max_columns = g_options.tiles_min_columns;
}
}
/**
* set the grid panel html
*/
function sethtml(objparent) {
if (!objparent) {
if (g_objparent)
objparent = g_objparent;
else
var objparent = g_objwrapper;
}
g_objparent = objparent;
var tilestype = g_options.tiles_type;
objparent.addclass("ug-tiletype-" + tilestype);
g_objtiledesign.sethtml(objparent);
objparent.children(".ug-thumb-wrapper").hide();
}
/**
* set class that enables transition
*/
function settransition() {
//set the tiles in resting mode, to activate their own transitions
g_objparent.addclass("ug-tiles-rest-mode");
g_temp.istransinited = true;
//add css tansition
if (g_options.tiles_enable_transition == true) {
g_objparent.addclass("ug-tiles-transit");
//add image overlay transition
var optionstile = g_objtiledesign.getoptions();
if (optionstile.tile_enable_image_effect == true && optionstile.tile_image_effect_reverse == false)
g_objparent.addclass("ug-tiles-transit-overlays");
g_temp.istransactive = true;
}
}
/**
* get parent width
*/
function getparentwidth() {
return g_functions.getelementsize(g_objparent).width;
}
/**
* do some actions before transition
*/
function dobeforetransition() {
if (g_temp.istransinited == false)
return (false);
g_objparent.addclass("ug-tiles-transition-active");
g_objparent.removeclass("ug-tiles-rest-mode");
//prepare for transition
if (g_temp.istransactive == false)
return (false);
g_objtiledesign.disableevents();
}
/**
* set after transition classes
*/
function doaftertransition_setclasses() {
if (g_temp.istransinited == false)
return (false);
g_objparent.removeclass("ug-tiles-transition-active");
g_objparent.addclass("ug-tiles-rest-mode");
}
/**
* do some actions after transition
*/
function doaftertransition() {
if (g_temp.istransactive == true) {
//trigger size change after transition
settimeout(function () {
g_objtiledesign.enableevents();
g_objtiledesign.triggersizechangeeventalltiles();
doaftertransition_setclasses();
}, 800);
//control size change
if (g_temp.handle)
cleartimeout(g_temp.handle);
g_temp.handle = settimeout(function () {
doaftertransition_setclasses();
g_objtiledesign.triggersizechangeeventalltiles();
g_temp.handle = null;
}, 2000);
} else {
g_objtiledesign.triggersizechangeeventalltiles();
doaftertransition_setclasses();
}
}
function __________column_type_related_________() { };
/**
* count width by number of columns
*/
function filltilesvars_countwidthbycols() {
g_vars.colwidth = (g_vars.availwidth - g_vars.colgap * (g_vars.numcols - 1)) / g_vars.numcols;
g_vars.colwidth = math.floor(g_vars.colwidth);
g_vars.totalwidth = g_functions.getspacebynumitems(g_vars.numcols, g_vars.colwidth, g_vars.colgap);
}
/**
* fill common tiles vars
*/
function filltilesvars() {
g_vars.colwidth = g_options.tiles_col_width;
g_vars.mincols = g_options.tiles_min_columns;
g_vars.maxcols = g_options.tiles_max_columns;
if (g_gallery.ismobilemode() == false) {
g_vars.colgap = g_options.tiles_space_between_cols;
} else {
g_vars.colgap = g_options.tiles_space_between_cols_mobile;
}
//set gallery width
g_vars.gallerywidth = getparentwidth();
g_vars.availwidth = g_vars.gallerywidth;
if (g_options.tiles_include_padding == true)
g_vars.availwidth = g_vars.gallerywidth - g_vars.colgap * 2;
//set the column number by exact width
if (g_options.tiles_exact_width == true) {
g_vars.numcols = g_functions.getnumitemsinspace(g_vars.availwidth, g_vars.colwidth, g_vars.colgap);
if (g_vars.maxcols > 0 && g_vars.numcols > g_vars.maxcols)
g_vars.numcols = g_vars.maxcols;
//if less then min cols count width by cols
if (g_vars.numcols < g_vars.mincols) {
g_vars.numcols = g_vars.mincols;
filltilesvars_countwidthbycols();
} else {
g_vars.totalwidth = g_vars.numcols * (g_vars.colwidth + g_vars.colgap) - g_vars.colgap;
}
} else {
//set dynamic column number
var numcols = g_functions.getnumitemsinspaceround(g_vars.availwidth, g_vars.colwidth, g_vars.colgap);
if (numcols < g_vars.mincols)
numcols = g_vars.mincols;
else
if (g_vars.maxcols != 0 && numcols > g_vars.maxcols)
numcols = g_vars.maxcols;
g_vars.numcols = numcols;
filltilesvars_countwidthbycols();
}
switch (g_options.tiles_align) {
case "center":
default:
//add x to center point
g_vars.addx = math.round((g_vars.gallerywidth - g_vars.totalwidth) / 2);
break;
case "left":
g_vars.addx = 0;
break;
case "right":
g_vars.addx = g_vars.gallerywidth - g_vars.totalwidth;
break;
}
//get posx array (constact to all columns)
g_vars.arrposx = [];
for (col = 0; col < g_vars.numcols; col++) {
var colx = g_functions.getcolx(col, g_vars.colwidth, g_vars.colgap);
g_vars.arrposx[col] = colx + g_vars.addx;
}
}
/**
* init col heights
*/
function initcolheights() {
g_vars.maxcolheight = 0;
//empty heights array
g_vars.colheights = [0];
}
/**
* get column with minimal height
*/
function gettilesmincol() {
var numcol = 0;
var minheight = 999999999;
for (col = 0; col < g_vars.numcols; col++) {
if (g_vars.colheights[col] == undefined || g_vars.colheights[col] == 0)
return col;
if (g_vars.colheights[col] < minheight) {
numcol = col;
minheight = g_vars.colheights[col];
}
}
return (numcol);
}
/**
* place tile as it loads
*/
function placetile(objtile, toshow, setgalleryheight, numcol) {
if (numcol === null || typeof numcol == "undefined")
var numcol = gettilesmincol();
//set posy
var posy = 0;
if (g_vars.colheights[numcol] !== undefined)
posy = g_vars.colheights[numcol];
var itemheight = g_objtiledesign.gettileheightbywidth(g_vars.colwidth, objtile);
if (itemheight === null) { //for custom html tile
if (g_options.tiles_enable_transition == true)
throw new error("can't know tile height, please turn off transition");
var itemsize = g_functions.getelementsize(objtile);
itemheight = itemsize.height;
}
var posx = g_vars.arrposx[numcol];
g_functions.placeelement(objtile, posx, posy);
var realheight = posy + itemheight;
g_vars.colheights[numcol] = realheight + g_vars.colgap;
//set max height
if (g_vars.maxcolheight < realheight)
g_vars.maxcolheight = realheight;
if (toshow == true)
objtile.show().fadeto(0, 1);
if (setgalleryheight == true) {
g_objparent.height(g_vars.maxcolheight);
}
}
/**
* place the tiles
*/
function placetiles(toshow) {
if (!toshow)
toshow = false;
filltilesvars();
initcolheights();
var objthumbs = g_thumbs.getthumbs(g_thumbs.type.get_thumbs_ratio);
//do some operation before the transition
dobeforetransition();
//resize all thumbs
g_objtiledesign.resizealltiles(g_vars.colwidth, g_objtiledesign.resizemode.visible_elements, objthumbs);
//place elements
for (var index = 0; index < objthumbs.length; index++) {
var objtile = jquery(objthumbs[index]);
var col = undefined;
if (g_options.tiles_keep_order == true)
col = g_functions.getcolbyindex(g_vars.numcols, index);
placetile(objtile, toshow, false, col);
}
//bring back the state after transition
doaftertransition();
//set gallery height, according the transition
var galleryheight = g_objparent.height();
if (g_temp.istransactive == true && galleryheight > g_vars.maxcolheight)
settimeout(function () {
g_objparent.height(g_vars.maxcolheight);
}, 700);
else
g_objparent.height(g_vars.maxcolheight);
}
/**
* check if alowed to place ordered tile
*/
function isorderedtileplacealowed(objtile) {
var index = objtile.index();
//don't allow double put items
var currentitem = g_gallery.getitem(index);
if (currentitem.ordered_placed === true)
return (false);
var previndex = g_functions.getprevrowsamecolindex(index, g_vars.numcols);
//put first item in the column
if (previndex < 0)
return (true);
//check if previous tile in column is placed
var objprevitem = g_gallery.getitem(previndex);
if (objprevitem.ordered_placed === true)
return (true);
return (false);
}
/**
* place ordered tile
*/
function placeorderedtile(objtile, isforce) {
if (isforce !== true) {
var isalowed = isorderedtileplacealowed(objtile);
if (isalowed == false)
return (false);
}
var index = objtile.index();
var col = g_functions.getcolbyindex(g_vars.numcols, index);
var objitem = g_gallery.getitem(index);
g_objtiledesign.resizetile(objtile, g_vars.colwidth);
placetile(objtile, true, true, col);
objitem.ordered_placed = true;
//check by recursion and place next items in column
var numitems = g_gallery.getnumitems();
var nextindex = g_functions.getnextrowsamecolindex(index, g_vars.numcols);
if (nextindex >= numitems)
return (false);
var nexttile = g_thumbs.getthumbbyindex(nextindex);
var nextitem = g_gallery.getitem(nextindex);
var isloaded = g_thumbs.isthumbloaded(nexttile);
if (g_thumbs.isthumbloaded(nexttile) && !nextitem.ordered_placed)
placeorderedtile(nexttile, true);
}
/**
* on single image load
*/
function onsingleimageload(objimage, iserror) {
if (iserror == true)
return (false);
objimage = jquery(objimage);
var objtile = jquery(objimage).parent();
g_thumbs.triggerimageloadedevent(objtile, objimage);
if (g_options.tiles_keep_order == true) {
placeorderedtile(objtile);
} else {
g_objtiledesign.resizetile(objtile, g_vars.colwidth);
placetile(objtile, true, true);
}
}
/**
* run columns type - place tiles that are not loaded yet
*/
function runcolumnstype() {
//get thumbs only when the ratio not set
var objthumbs = g_thumbs.getthumbs(g_thumbs.type.get_thumbs_no_ratio);
if (!objthumbs || objthumbs.length == 0)
return (false);
g_temp.isallloaded = false;
if (g_temp.isfirstplaced == true) {
filltilesvars();
initcolheights();
var diffwidth = math.abs(g_vars.gallerywidth - g_vars.totalwidth);
//set initial height of the parent by estimation
if (g_options.tiles_set_initial_height == true && g_functions.isscrollbarexists() == false && diffwidth < 25) {
var numthumbs = objthumbs.length;
var numrows = math.ceil(objthumbs.length / g_vars.numcols);
var estimateheight = numrows * g_options.tiles_col_width * 0.75;
g_objparent.height(estimateheight);
filltilesvars();
}
}
objthumbs.fadeto(0, 0);
var objimages = objthumbs.find("img.ug-thumb-image");
var initnumcols = g_vars.numcols;
var initwidth = g_vars.gallerywidth;
//on place the tile as it loads. after all tiles loaded,check position again.
g_functions.checkimagesloaded(objimages, function () {
filltilesvars();
if (initnumcols != g_vars.numcols || initwidth != g_vars.gallerywidth) {
placetiles(false);
}
settransition();
g_objthis.trigger(t.events.all_tiles_loaded);
}, function (objimage, iserror) {
if (g_temp.isfirstplaced == true)
g_gallery.triggerevent(t.events.tiles_first_placed); //set to false
onsingleimageload(objimage, iserror);
});
}
function __________justified_type_related_________() { };
/**
* ------------ justified type related functions ----------------
*/
function getjustifieddata() {
var gallerywidth = getparentwidth();
var objtiles = g_thumbs.getthumbs(true);
var rowheightopt = g_options.tiles_justified_row_height;
var arrwidths = [];
var totalwidth = 0;
var gap = g_options.tiles_justified_space_between;
var numtiles = objtiles.length;
//get arr widths and total width
jquery.each(objtiles, function (index, objtile) {
objtile = jquery(objtile);
var objitem = g_thumbs.getitembythumb(objtile);
var tilewidth = objitem.thumbwidth;
var tileheight = objitem.thumbheight;
if (tileheight !== rowheightopt)
tilewidth = math.floor(objitem.thumbratiobywidth * rowheightopt);
arrwidths[index] = tilewidth;
totalwidth += tilewidth;
});
var numrows = math.ceil(totalwidth / gallerywidth);
if (numrows > numtiles)
numrows = numtiles;
var finalrowwidth = totalwidth / numrows;
//fill rows array, break tiles to rows
var arrrows = [], eachrowwidth = 0;
var rowswidths = [], rowstiles = [], row = [];
var progresswidth = 0, numrow = 0;
jquery.each(objtiles, function (index, objtile) {
var tilewidth = arrwidths[index];
if ((progresswidth + tilewidth / 2) > (numrow + 1) * finalrowwidth) {
rowswidths[arrrows.length] = eachrowwidth;
arrrows.push(row);
row = [];
eachrowwidth = 0;
numrow++;
}
progresswidth += tilewidth;
eachrowwidth += tilewidth;
row.push(objtile);
});
rowswidths[arrrows.length] = eachrowwidth;
arrrows.push(row);
//set heights and position images:
var arrrowwidths = [];
var arrrowheights = [];
var totalheight = 0;
jquery.each(arrrows, function (index, row) {
var numtiles = row.length;
var rowwidth = rowswidths[index];
var gapwidth = (row.length - 1) * gap;
var ratio = (gallerywidth - gapwidth) / rowwidth;
var rowheight = math.round(rowheightopt * ratio);
//count total height
totalheight += rowheight;
if (index > 0)
totalheight += gap;
arrrowheights.push(rowheight);
//ratio between 2 heights for fixing image width:
var ratioheights = rowheight / rowheightopt;
//set tiles sizes:
var arrrowtilewidths = [];
var actualrowwidth = gapwidth;
jquery.each(row, function (indexinrow, tile) {
var objtile = jquery(tile);
var tileindex = objtile.index();
var tilewidth = arrwidths[tileindex];
var newwidth = math.round(tilewidth * ratioheights);
arrrowtilewidths[indexinrow] = newwidth;
actualrowwidth += newwidth;
});
//fix images widths by adding or reducing 1 pixel
var diff = actualrowwidth - gallerywidth;
var newtotal = 0;
jquery.each(arrrowtilewidths, function (indexinrow, width) {
if (diff == 0)
return (false);
if (diff < 0) {
arrrowtilewidths[indexinrow] = width + 1;
diff++;
} else {
arrrowtilewidths[indexinrow] = width - 1;
diff--;
}
//if at last item diff stays, add all diff
if (indexinrow == (arrrowtilewidths.length - 1) && diff != 0)
arrrowtilewidths[indexinrow] -= diff;
});
arrrowwidths[index] = arrrowtilewidths;
});
var objdata = {
arrrows: arrrows,
arrrowwidths: arrrowwidths,
arrrowheights: arrrowheights,
gap: gap,
totalheight: totalheight
};
return (objdata);
}
/**
* put justified images
*/
function placejustified(toshow) {
if (!toshow)
var toshow = false;
var parentwidth = getparentwidth();
var objdata = getjustifieddata();
//if the width changed after height change (because of scrollbar), recalculate
g_objparent.height(objdata.totalheight);
var parentwidthafter = getparentwidth();
if (parentwidthafter != parentwidth)
objdata = getjustifieddata();
dobeforetransition();
var posy = 0;
var totalwidth = 0; //just count total widht for check / print
jquery.each(objdata.arrrows, function (index, row) {
var arrrowtilewidths = objdata.arrrowwidths[index];
var rowheight = objdata.arrrowheights[index];
//resize and place tiles
var posx = 0;
jquery.each(row, function (indexinrow, tile) {
var objtile = jquery(tile);
var tileheight = rowheight;
var tilewidth = arrrowtilewidths[indexinrow];
g_objtiledesign.resizetile(objtile, tilewidth, tileheight, g_objtiledesign.resizemode.visible_elements);
g_functions.placeelement(objtile, posx, posy);
posx += tilewidth;
if (posx > totalwidth)
totalwidth = posx;
posx += objdata.gap;
if (toshow == true)
jquery(tile).show();
});
posy += (rowheight + objdata.gap);
});
doaftertransition();
}
/**
* run justified type gallery
*/
function runjustifiedtype() {
var objimages = jquery(g_objwrapper).find("img.ug-thumb-image");
var objtiles = g_thumbs.getthumbs();
g_temp.isallloaded = false;
objtiles.fadeto(0, 0);
g_functions.checkimagesloaded(objimages, function () {
settimeout(function () {
placejustified(true);
objtiles.fadeto(0, 1);
g_gallery.triggerevent(t.events.tiles_first_placed);
settransition();
g_objthis.trigger(t.events.all_tiles_loaded);
});
}, function (objimage, iserror) {
objimage = jquery(objimage);
var objtile = jquery(objimage).parent();
g_thumbs.triggerimageloadedevent(objtile, objimage);
});
}
function __________nested_type_related_________() { };
/**
* ------------ nested type related functions ----------------
*/
function runnestedtype() {
var objimages = jquery(g_objwrapper).find("img.ug-thumb-image");
var objtiles = g_thumbs.getthumbs();
g_temp.isallloaded = false;
objtiles.fadeto(0, 0);
g_functions.checkimagesloaded(objimages, function () {
if (g_gallery.ismobilemode() == true) {
placetiles(true);
}
else
placenestedimages(true);
g_gallery.triggerevent(t.events.tiles_first_placed);
settransition();
g_objthis.trigger(t.events.all_tiles_loaded);
}, function (objimage, iserror) {
objimage = jquery(objimage);
var objtile = jquery(objimage).parent();
g_thumbs.triggerimageloadedevent(objtile, objimage);
});
}
/**
* fill nested vars
*/
function fillnestedvars() {
var gallerywidth = getparentwidth();
g_nestedwork.gallerywidth = gallerywidth;
g_arrnestedgridrow = {};
g_nestedwork.colwidth = g_options.tiles_nested_col_width;
g_nestedwork.optimaltilewidth = g_options.tiles_nested_optimal_tile_width;
g_nestedwork.currentgap = g_options.tiles_space_between_cols;
if (g_gallery.ismobilemode() == true)
g_nestedwork.currentgap = g_options.tiles_space_between_cols_mobile;
if (g_nestedwork.colwidth == null) {
g_nestedwork.colwidth = math.floor(g_nestedwork.optimaltilewidth / g_nestedwork.nestedoptimalcols);
} else if (g_nestedwork.optimaltilewidth > g_nestedwork.colwidth) {
g_nestedwork.nestedoptimalcols = math.ceil(g_nestedwork.optimaltilewidth / g_nestedwork.colwidth);
} else {
g_nestedwork.nestedoptimalcols = 1;
}
g_nestedwork.maxcolumns = g_functions.getnumitemsinspace(gallerywidth, g_nestedwork.colwidth, g_nestedwork.currentgap);
//fix col width - justify tiles
g_nestedwork.colwidth = g_functions.getitemsizeinspace(gallerywidth, g_nestedwork.maxcolumns, g_nestedwork.currentgap);
g_nestedwork.gridy = 0;
g_arrnesteditems = []
var objtiles = g_thumbs.getthumbs(true);
objtiles.each(function () {
var objtile = jquery(this);
var sizes = setnestedsize(objtile);
g_arrnesteditems.push(sizes);
});
if (g_nestedwork.optimaltilewidth > g_nestedwork.colwidth) {
g_nestedwork.nestedoptimalcols = math.ceil(g_nestedwork.optimaltilewidth / g_nestedwork.colwidth);
} else {
g_nestedwork.nestedoptimalcols = 1;
}
g_nestedwork.totalwidth = g_nestedwork.maxcolumns * (g_nestedwork.colwidth + g_nestedwork.currentgap) - g_nestedwork.currentgap;
switch (g_options.tiles_align) {
case "center":
default:
//add x to center point
g_nestedwork.addx = math.round((g_nestedwork.gallerywidth - g_nestedwork.totalwidth) / 2);
break;
case "left":
g_nestedwork.addx = 0;
break;
case "right":
g_nestedwork.addx = g_nestedwork.gallerywidth - g_nestedwork.totalwidth;
break;
}
g_nestedwork.maxgridy = 0;
}
/**
* place nested type images
*/
function placenestedimages(toshow) {
var parentwidth = getparentwidth();
fillnestedvars();
placenestedimagescycle();
var totalheight = g_nestedwork.maxgridy * (g_nestedwork.colwidth + g_nestedwork.currentgap) - g_nestedwork.currentgap;
//if the width changed after height change (because of scrollbar), recalculate
g_objparent.height(totalheight);
var parentwidthafter = getparentwidth();
if (parentwidthafter != parentwidth) {
fillnestedvars();
placenestedimagescycle();
}
if (g_options.tiles_nested_debug == false)
drawnestedimages(toshow);
}
/**
* set nested size
*/
function setnestedsize(objtile) {
var dimwidth, dimheight;
var output = {};
var colwidth = g_nestedwork.colwidth;
var gapwidth = g_nestedwork.currentgap;
var objimagesize = g_objtiledesign.gettileimagesize(objtile);
var index = objtile.index();
var maxdim = math.ceil(getpresettedrandombywidth(index) * (g_nestedwork.nestedoptimalcols * 1 / 3) + g_nestedwork.nestedoptimalcols * 2 / 3);
var imgwidth = objimagesize.width;
var imgheight = objimagesize.height;
var ratio = imgwidth / imgheight;
if (imgwidth > imgheight) {
dimwidth = maxdim;
dimheight = math.round(dimwidth / ratio);
if (dimheight == 0) {
dimheight = 1;
}
} else {
dimheight = maxdim;
dimwidth = math.round(dimheight * ratio);
if (dimwidth == 0) {
dimwidth = 1;
}
}
output.dimwidth = dimwidth;
output.dimheight = dimheight;
output.width = dimwidth * colwidth + gapwidth * (dimwidth - 1);
output.height = dimheight * colwidth + gapwidth * (dimheight - 1);
output.imgwidth = imgwidth;
output.imgheight = imgheight;
output.left = 0;
output.top = 0;
return output;
}
/**
* get presetted random [0,1] from int
*/
function getpresettedrandombywidth(index) {
return math.abs(math.sin(math.abs(math.sin(index) * 1000)));
}
/**
* place nested images debug
*/
function placenestedimagesdebug(toshow, placeone) {
if (placeone == false) {
for (var i = g_nestedwork.currentitem; i < g_arrnesteditems.length; i++) {
placenestedimage(i, true);
}
g_nestedwork.currentitem = g_arrnesteditems.length - 1;
} else {
placenestedimage(g_nestedwork.currentitem, true);
}
for (var i = 0; i <= g_nestedwork.currentitem; i++) {
drawnestedimage(i, true);
}
g_nestedwork.currentitem++;
}
/**
* start cycle of placing imgaes
*/
function placenestedimagescycle(placeone) {
if (g_options.tiles_nested_debug == true) {
if (typeof placeone === 'undefined')
placeone = true;
placenestedimagesdebug(true, placeone);
return (false);
}
for (var i = 0; i < g_arrnesteditems.length; i++)
placenestedimage(i, true);
}
/**
* place nested image
*/
function placenestedimage(tileid, toshow) {
if (!toshow)
var toshow = false;
g_nestedwork.maxcolheight = 0;
var rowsvalue = g_functions.getobjectlength(g_arrnestedgridrow);
for (var row = g_nestedwork.gridy; row <= rowsvalue + 1; row++) {
for (var column = 0; column < g_nestedwork.maxcolumns; column++) {
if (isgridrowexists(g_nestedwork.gridy) == false || isgridcelltaken(g_nestedwork.gridy, column) == false) {
var totalfree = gettotalfreefromposition(column);
calculateoptimalstretchandposition(tileid, totalfree, column);
return;
}
}
g_nestedwork.gridy++;
}
}
/**
* calculate optimal stretch of tile
*/
function calculateoptimalstretchandposition(tileid, totalfree, column) {
var sizes = jquery.extend(true, {}, g_arrnesteditems[tileid]);
var currentwidth = sizes.dimwidth;
var placefornextimage = totalfree - sizes.dimwidth;
var optimalwidth = g_nestedwork.nestedoptimalcols;
var onlycurrentimage = (totalfree <= sizes.dimwidth || placefornextimage <= 0.33 * optimalwidth || totalfree <= optimalwidth);
//width stretching if needed
if (onlycurrentimage) { // if free space is smaller than image width - place to this space anyway
resizetonewwidth(tileid, totalfree);
} else if (placefornextimage <= optimalwidth) { // if there are place for 2 images
if (optimalwidth >= 4) {
if (isgridimagealigned(math.floor(totalfree / 2), column) == true) {
resizetonewwidth(tileid, math.floor(totalfree / 2) + 1);
} else {
resizetonewwidth(tileid, math.floor(totalfree / 2));
}
} else {
resizetonewwidth(objimage, totalfree);
}
} else {
if (isgridimagealigned(currentwidth, column) == true) {
switch (currentwidth >= optimalwidth) {
case true:
resizetonewwidth(tileid, currentwidth - 1);
break
case false:
resizetonewwidth(tileid, currentwidth + 1);
break
}
}
}
//height stretching if needed
sizes = jquery.extend(true, {}, g_arrnesteditems[tileid]);
var columninfo = getgridcolumnheight(tileid, sizes.dimwidth, column); // [columnheight, imagesids]
if (g_nestedwork.columnsvaluetoenableheightresize <= columninfo[0] && g_nestedwork.maxcolumns >= 2 * g_nestedwork.nestedoptimalcols) {
var sidehelper = getgridimageverticaldifference(column, sizes);
var columnsizes = resizetonewheight(tileid, sidehelper.newheight, true);
g_arrnesteditems[tileid].dimheight = columnsizes.dimheight;
var columnresizes = redistributecolumnitems(columninfo, columnsizes.dimwidth, column);
var columncrosshairs = getcolumncrosshairscount(columnresizes);
var disablecolumnresizes = false;
if (columncrosshairs >= 2) {
disablecolumnresizes = true;
}
if (sidehelper.newheight >= sizes.dimheight) {
sizes = resizetonewheight(tileid, sidehelper.newheight, true);
}
var sideresizes = getsideresizeinfo(sidehelper.idtoresize, sidehelper.newheight, sizes.dimheight);
sizes.top = g_nestedwork.gridy;
sizes.left = column;
sideresizes.push({ "tileid": tileid, "sizes": sizes });
var sideresizesval = calcresizeratio(sideresizes);
var columnresizesval = calcresizeratio(columnresizes);
if (sideresizesval < columnresizesval || disablecolumnresizes == true) {
applyresizes(sideresizes);
return;
} else {
applyresizes(columnresizes);
return;
}
}
sizes.left = column;
sizes.top = g_nestedwork.gridy;
g_arrnesteditems[tileid] = sizes;
putimagetogridrow(tileid, sizes, column, g_nestedwork.gridy);
g_nestedwork.maxgridy = sizes.top + sizes.dimheight;
}
/**
* check columns crosshairs
*/
function getcolumncrosshairscount(tilesandsizes) {
var crosshairscountr = 0;
var crosshairscountl = 0;
for (var i = 0; i < tilesandsizes.length - 1; i++) {
var sizes = tilesandsizes[i].sizes;
var topitem = -1;
var bottomitem = -1;
if (isgridrowexists(sizes.top + sizes.dimheight) && g_nestedwork.maxcolumns > sizes.left + sizes.dimwidth) {
topitem = g_arrnestedgridrow[sizes.top + sizes.dimheight - 1][sizes.left + sizes.dimwidth];
bottomitem = g_arrnestedgridrow[sizes.top + sizes.dimheight][sizes.left + sizes.dimwidth];
}
if (topitem != bottomitem) {
crosshairscountr++;
}
}
for (var i = 0; i < tilesandsizes.length - 1; i++) {
var sizes = tilesandsizes[i].sizes;
var topitem = -1;
var bottomitem = -1;
if (isgridrowexists(sizes.top + sizes.dimheight) && sizes.left - 1 >= 0) {
topitem = g_arrnestedgridrow[sizes.top + sizes.dimheight - 1][sizes.left - 1];
bottomitem = g_arrnestedgridrow[sizes.top + sizes.dimheight][sizes.left - 1];
}
if (topitem != bottomitem) {
crosshairscountl++;
}
}
return math.max(crosshairscountl, crosshairscountr);
}
/**
* get size resize info
*/
function getsideresizeinfo(idtoresize, newheight, dimheight) {
var currenttile = g_arrnesteditems[idtoresize];
var tileheight = currenttile.dimheight;
var tilewidth = currenttile.dimwidth;
var tileleft = currenttile.left;
var tiletop = currenttile.top;
var tiledimtop = parseint(tiletop / (g_nestedwork.colwidth + g_nestedwork.currentgap));
var tiledimleft = parseint(tileleft / (g_nestedwork.colwidth + g_nestedwork.currentgap));
var newsideheight = tileheight - newheight + dimheight;
var sidesizes = resizetonewheight(idtoresize, newsideheight, true);
var output = [];
output.push({ "tileid": idtoresize, "sizes": sidesizes });
return output;
}
/**
* apply resizes to fix column
*/
function applyresizes(resizetilesandsizes) {
for (var i = 0; i < resizetilesandsizes.length; i++) {
var sizes = resizetilesandsizes[i].sizes;
var tileid = resizetilesandsizes[i].tileid;
g_arrnesteditems[tileid] = jquery.extend(true, {}, sizes);
putimagetogridrow(tileid, sizes, sizes.left, sizes.top);
}
}
/**
* redistribute heights in column
* returns current item sizes
*/
function redistributecolumnitems(columninfo, columnwidth) {
var originalheight = 0;
var columnheight = 0;
var objtiles = [];
var cordx = 0, cordy = 0;
for (var i = 0; i < columninfo[1].length; i++) {
var tileid = columninfo[1][i];
var currenttile = g_arrnesteditems[columninfo[1][i]];
columnheight += currenttile.dimheight;
if (i == 0) {
var sizes = resizetonewwidth(tileid, columnwidth, true);
originalheight += sizes.dimheight;
objtiles.push([columninfo[1][i], sizes.dimheight]);
continue;
}
originalheight += currenttile.dimheight;
objtiles.push([tileid, currenttile.dimheight]);
}
cordx = currenttile.left;
cordy = currenttile.top;
var tempheight = columnheight;
var output = [];
for (var i = objtiles.length - 1; i >= 0; i--) {
var tileid = objtiles[i][0];
var newheight;
if (i != 0) {
newheight = math.max(math.round(columnheight * 1 / 3), math.floor(objtiles[i][1] * (columnheight / originalheight)));
tempheight = tempheight - newheight;
sizes = resizetonewheight(tileid, newheight, true);
sizes.left = cordx;
sizes.top = cordy;
output.push({ "tileid": tileid, "sizes": sizes });
cordy += sizes.dimheight;
} else {
newheight = tempheight;
sizes = resizetonewheight(tileid, newheight, true);
sizes.left = cordx;
sizes.top = cordy;
output.push({ "tileid": tileid, "sizes": sizes });
}
}
return output;
}
/**
* calculate num of objects in current column and return they are id's
*/
function getgridcolumnheight(tileid, dimwidth, column) {
var tempy = g_nestedwork.gridy - 1;
var curimage = 0;
var previmage = 0;
var columnheight = 1;
var imagesids = [];
var toreturn = [];
imagesids.push(tileid);
if (tempy >= 0) {
previmage = 0;
while (tempy >= 0) {
curimage = g_arrnestedgridrow[tempy][column];
if ((typeof g_arrnestedgridrow[tempy][column - 1] === 'undefined' || g_arrnestedgridrow[tempy][column - 1] != g_arrnestedgridrow[tempy][column])
&& (typeof g_arrnestedgridrow[tempy][column + dimwidth] === 'undefined' || g_arrnestedgridrow[tempy][column + dimwidth - 1] != g_arrnestedgridrow[tempy][column + dimwidth])
&& (g_arrnestedgridrow[tempy][column] == g_arrnestedgridrow[tempy][column + dimwidth - 1])) {
if (previmage != curimage) {
columnheight++;
imagesids.push(curimage);
}
} else {
toreturn.push(columnheight);
toreturn.push(imagesids);
return toreturn;
}
tempy--;
previmage = curimage;
}
toreturn.push(columnheight);
toreturn.push(imagesids);
return toreturn;
}
return [0, []];
}
/**
* get new height based on left and right difference
*/
function getgridimageverticaldifference(column, sizes) {
var newheightr = 0;
var newheightl = 0;
var dimwidth = sizes.dimwidth;
var dimheight = sizes.dimheight;
var leftid = 0;
var rightid = 0;
var array = jquery.map(g_arrnestedgridrow, function (value, index) {
return [value];
});
if (typeof array[g_nestedwork.gridy] === 'undefined' || typeof array[g_nestedwork.gridy][column - 1] === 'undefined') {
newheightl = 0;
} else {
var tempy = 0;
while (true) {
if (typeof g_arrnestedgridrow[g_nestedwork.gridy + tempy] !== 'undefined' && g_arrnestedgridrow[g_nestedwork.gridy + tempy][column - 1] != -1) {
leftid = g_arrnestedgridrow[g_nestedwork.gridy + tempy][column - 2];
tempy++;
newheightl++;
} else {
break;
}
}
}
if (typeof array[g_nestedwork.gridy] === 'undefined' || typeof array[g_nestedwork.gridy][column + dimwidth] === 'undefined') {
newheightr = 0;
} else {
tempy = 0;
while (true) {
if (typeof g_arrnestedgridrow[g_nestedwork.gridy + tempy] !== 'undefined' && g_arrnestedgridrow[g_nestedwork.gridy + tempy][column + dimwidth] != -1) {
rightid = g_arrnestedgridrow[g_nestedwork.gridy + tempy][column + dimwidth + 1];
tempy++;
newheightr++;
} else {
break;
}
}
}
var newheight = 0;
var idtoresize = 0;
if (math.abs(dimheight - newheightl) < math.abs(dimheight - newheightr) && newheightl != 0) {
newheight = newheightl;
idtoresize = leftid;
} else if (newheightr != 0) {
newheight = newheightr;
idtoresize = rightid;
} else {
newheight = dimheight; //malo li
}
var output = { "newheight": newheight, "idtoresize": idtoresize };
return output;
}
/**
* resize to new dim width
*/
function resizetonewwidth(tileid, newdimwidth, toreturn) {
if (!toreturn) {
toreturn = false;
}
var colwidth = g_nestedwork.colwidth;
var gapwidth = g_nestedwork.currentgap;
var currenttile = g_arrnesteditems[tileid];
var imgwidth = currenttile.imgwidth;
var imgheight = currenttile.imgheight;
var ratio = imgwidth / imgheight;
dimwidth = newdimwidth;
dimheight = math.round(dimwidth / ratio);
if (toreturn == true) {
var sizes = jquery.extend(true, {}, currenttile);
sizes.dimwidth = dimwidth;
sizes.dimheight = dimheight;
sizes.width = dimwidth * colwidth + gapwidth * (dimwidth - 1);
sizes.height = dimheight * colwidth + gapwidth * (dimheight - 1);
return sizes;
}
currenttile.dimwidth = dimwidth;
currenttile.dimheight = dimheight;
currenttile.width = dimwidth * colwidth + gapwidth * (dimwidth - 1);
currenttile.height = dimheight * colwidth + gapwidth * (dimheight - 1);
}
/**
* resize to new height without width changing
*/
function resizetonewheight(tileid, newdimheight, toreturn) {
if (!toreturn) {
toreturn = false;
}
var currenttile = g_arrnesteditems[tileid];
var dimwidth = currenttile.dimwidth;
var colwidth = g_nestedwork.colwidth;
var gapwidth = g_nestedwork.currentgap;
if (toreturn == true) {
var sizes = jquery.extend(true, {}, currenttile);
sizes.dimheight = newdimheight;
sizes.width = dimwidth * colwidth + gapwidth * (dimwidth - 1);
sizes.height = newdimheight * colwidth + gapwidth * (newdimheight - 1);
return sizes;
}
currenttile.dimheight = newdimheight;
currenttile.width = dimwidth * colwidth + gapwidth * (dimwidth - 1);
currenttile.height = newdimheight * colwidth + gapwidth * (newdimheight - 1);
}
/**
* calc resize koef
*/
function calcresizeratio(objtilesandsizes) {
var tempresizes = 0;
var tempnum = 0;
for (var i = 0; i < objtilesandsizes.length; i++) {
var sizes = g_arrnesteditems[objtilesandsizes[i].tileid];
if ((sizes.dimheight != 0) && (sizes.height != 0)) {
resizeval = (sizes.dimwidth / sizes.dimheight) / (sizes.imgwidth / sizes.imgheight);
} else {
return;
}
if (resizeval < 1) {
resizeval = 1 / resizeval;
}
tempresizes += resizeval;
tempnum++;
}
return tempresizes / tempnum;
}
/**
* check for column break
*/
function isgridimagealigned(dimwidth, column) {
var y = g_nestedwork.gridy - 1;
if (y <= 0 || isgridrowexists(y) == false) {
return false;
}
if (g_arrnestedgridrow[y][column + dimwidth - 1] != g_arrnestedgridrow[y][column + dimwidth]) {
return true;
}
return false;
}
/**
* get free line length in gridrow
*/
function gettotalfreefromposition(column) {
var x = column;
var totalfree = 0;
if (isgridrowexists(g_nestedwork.gridy) == true) {
while (isgridcelltaken(g_nestedwork.gridy, x) == false) {
totalfree++;
x++;
}
} else {
totalfree = g_nestedwork.maxcolumns;
}
return totalfree;
}
/**
* is nestedgridrow row exists
*/
function isgridrowexists(y) {
if (typeof g_arrnestedgridrow[y] === 'undefined') {
return false;
}
return true;
}
/**
* put image to grid row
*/
function putimagetogridrow(id, sizes, gridx, gridy) {
for (var y = 0; y < sizes.dimheight; y++) {
for (var x = 0; x < sizes.dimwidth; x++) {
if (isgridrowexists(gridy + y) == 0) {
addgridrow(gridy + y);
}
setgridcellvalue(gridy + y, gridx + x, id);
}
}
}
/**
* add grid with y index
*/
function addgridrow(y) {
g_arrnestedgridrow[y] = new object;
for (var t = 0; t < g_nestedwork.maxcolumns; t++) {
g_arrnestedgridrow[y][t] = -1;
}
}
/**
* isgridrowcelltaken
*/
function isgridcelltaken(y, x) {
return (g_arrnestedgridrow[y][x] != -1);
}
/**
* set nestedgridrow cell value
*/
function setgridcellvalue(y, x, value) {
g_arrnestedgridrow[y][x] = value;
}
/**
* draw nested images
*/
function drawnestedimages(toshow) {
if (!toshow)
var toshow = false;
dobeforetransition();
for (var i = 0; i < g_arrnesteditems.length; i++) {
drawnestedimage(i, toshow);
}
g_objparent.height(g_nestedwork.maxcolheight);
doaftertransition();
}
/**
* draw nested image
*/
function drawnestedimage(i, toshow) {
var objtile = g_thumbs.getthumbbyindex(i);
var sizes = g_arrnesteditems[i];
var newy = sizes.top * (g_nestedwork.colwidth + g_nestedwork.currentgap);
var newx = g_nestedwork.addx + sizes.left * (g_nestedwork.colwidth + g_nestedwork.currentgap);
g_objtiledesign.resizetile(objtile, sizes.width, sizes.height, g_objtiledesign.resizemode.visible_elements);
g_functions.placeelement(objtile, newx, newy);
if (newy + sizes.height > g_nestedwork.maxcolheight) {
g_nestedwork.maxcolheight = newy + sizes.height;
};
if (toshow == true) {
objtile.fadeto(0, 1);
}
}
function __________common_and_events_______() { };
/**
* on resize event
*/
function onresize() {
if (g_temp.isfirsttimerun == true)
return (true);
if (g_temp.isallloaded == false)
return (false);
switch (g_options.tiles_type) {
case "columns":
placetiles(false);
break;
case "justified":
placejustified(false);
break;
case "nested":
var ismobilemode = g_gallery.ismobilemode();
if (ismobilemode == true) {
placetiles(false);
}
else
placenestedimages(false);
break;
}
}
/**
* init panel events
*/
function initevents() {
g_objthis.on(t.events.all_tiles_loaded, function () {
g_temp.isallloaded = true;
});
g_objgallery.on(g_gallery.events.size_change, onresize);
g_objgallery.on(t.events.tiles_first_placed, function () {
g_temp.isfirstplaced = false;
});
g_objtiledesign.initevents();
}
/**
* run the gallery after init and set html
*/
function run() {
//show tiles
g_objwrapper.children(".ug-tile").show();
if (g_temp.isfirsttimerun == true) {
initevents();
}
g_objtiledesign.run();
switch (g_options.tiles_type) {
default:
case "columns":
runcolumnstype();
break;
case "justified":
runjustifiedtype();
break;
case "nested":
runnestedtype();
break;
}
g_temp.isfirsttimerun = false;
}
/**
* destroy the events
*/
this.destroy = function () {
g_objgallery.off(g_gallery.events.size_change);
g_objtiledesign.destroy();
g_objgallery.off(t.events.tiles_first_placed);
}
/**
* init function for avia controls
*/
this.init = function (gallery, customoptions) {
init(gallery, customoptions);
}
/**
* set html
*/
this.sethtml = function (objparent) {
sethtml(objparent);
}
/**
* get tile design object
*/
this.getobjtiledesign = function () {
return (g_objtiledesign);
}
/**
* set html and properties
*/
this.run = function () {
run();
}
/**
* run the new items
*/
this.runnewitems = function () {
if (!g_objparent)
throw new error("can't run new items - parent not set");
g_objtiledesign.sethtml(g_objparent, true);
g_objtiledesign.run(true);
switch (g_options.tiles_type) {
case "columns":
runcolumnstype();
break;
default:
case "justified":
case "nested":
throw new error("tiles type: " + g_options.tiles_type + " not support load more yet");
break;
}
}
}
/**
* tiles design class
*/
function ugtiledesign() {
var t = this, g_objthis = jquery(this);
var g_gallery = new unitegallerymain(), g_objgallery;
var g_functions = new ugfunctions(), g_objparentwrapper, g_objwrapper;
var g_thumbs = new ugthumbsgeneral(), g_items;
this.resizemode = { //modes constants for resize tile
full: "full",
wrapper_only: "wrapper_only",
visible_elements: "visible_elements"
};
this.sizeby = { //sizeby option constants
global_ratio: "global_ratio",
tile_ratio: "tile_ratio",
image_ratio: "image_ratio",
custom: "custom"
};
this.events = {
tile_click: "tile_click"
};
var g_options = {
tile_width: 250, //in case of fixed size: tile width
tile_height: 200, //in case of fixed size: tile height
tile_size_by: t.sizeby.image_ratio, //image ratio, tile ratio , global_ratio - decide by what parameter resize the tile
tile_visible_before_image: false, //tile visible before image load
tile_enable_background: true, //enable backgruond of the tile
tile_background_color: "#f0f0f0", //tile background color
tile_enable_border: false, //enable border of the tile
tile_border_width: 3, //tile border width
tile_border_color: "#f0f0f0", //tile border color
tile_border_radius: 0, //tile border radius (applied to border only, not to outline)
tile_enable_outline: false, //enable outline of the tile (works only together with the border)
tile_outline_color: "#8b8b8b", //tile outline color
tile_enable_shadow: false, //enable shadow of the tile
tile_shadow_h: 1, //position of horizontal shadow
tile_shadow_v: 1, //position of vertical shadow
tile_shadow_blur: 3, //shadow blur
tile_shadow_spread: 2, //shadow spread
tile_shadow_color: "#8b8b8b", //shadow color
tile_enable_action: true, //enable tile action on click like lightbox
tile_as_link: false, //act the tile as link, no lightbox will appear
tile_link_newpage: true, //open the tile link in new page
tile_enable_overlay: true, //enable tile color overlay (on mouseover)
tile_overlay_opacity: 0.4, //tile overlay opacity
tile_overlay_color: "#000000", //tile overlay color
tile_enable_icons: true, //enable icons in mouseover mode
tile_show_link_icon: false, //show link icon (if the tile has a link). in case of tile_as_link this option not enabled
tile_videoplay_icon_always_on: 'never', //'always', 'never', 'mobile_only', 'desktop_only' always show video play icon
tile_space_between_icons: 26, //initial space between icons, (on small tiles it may change)
tile_enable_image_effect: false, //enable tile image effect
tile_image_effect_type: "bw", //bw, blur, sepia - tile effect type
tile_image_effect_reverse: false, //reverce the image, set only on mouseover state
tile_enable_textpanel: false, //enable textpanel
tile_textpanel_source: "title", //title,desc,desc_title,title_and_desc. source of the textpanel. desc_title - if description empty, put title
tile_textpanel_always_on: false, //textpanel always visible - for inside type
tile_textpanel_appear_type: "slide", //slide, fade - appear type of the textpanel on mouseover
tile_textpanel_position: "inside_bottom", //inside_bottom, inside_top, inside_center, top, bottom the position of the textpanel
tile_textpanel_offset: 0 //vertical offset of the textpanel
};
var g_defaults = {
thumb_color_overlay_effect: true,
thumb_overlay_reverse: true,
thumb_image_overlay_effect: false,
tile_textpanel_enable_description: false,
tile_textpanel_bg_opacity: 0.6,
tile_textpanel_padding_top: 8,
tile_textpanel_padding_bottom: 8
};
var g_temp = {
ratiobyheight: 0,
ratiobywidth: 0,
eventsizechange: "thumb_size_change",
funccustomtilehtml: null,
funccustompositionelements: null,
funcparentapproveclick: null,
issaparateicons: false,
tileinnerreduce: 0, //how much reduce from the tile inner elements from border mostly
istextpaneloutside: false, //is the textpanel is out of tile image border
hasimagecontainer: false,
isvideoplayiconalwayson: false,
istextpanelhidden: false
};
/**
* init the tile object
*/
function init(gallery, customoptions) {
g_gallery = gallery;
g_objgallery = jquery(gallery);
var objects = g_gallery.getobjects();
g_objwrapper = objects.g_objwrapper;
g_items = g_gallery.getarritems();
g_options = jquery.extend(g_options, g_defaults);
g_options = jquery.extend(g_options, customoptions);
modifyoptions();
g_thumbs.init(gallery, g_options);
var objcustomoptions = { allow_onresize: false };
var customthumbsadd = ["overlay"];
if (g_temp.funccustomtilehtml)
customthumbsadd = [];
g_thumbs.setcustomthumbs(sethtmlthumb, customthumbsadd, objcustomoptions);
//get thumb default options too:
var thumboptions = g_thumbs.getoptions();
g_options = jquery.extend(g_options, thumboptions);
//set ratios of fixed mode
g_temp.ratiobywidth = g_options.tile_width / g_options.tile_height;
g_temp.ratiobyheight = g_options.tile_height / g_options.tile_width;
//set if tile has image container
if (g_options.tile_size_by == t.sizeby.global_ratio && g_temp.istextpaneloutside)
g_temp.hasimagecontainer = true;
}
/**
* set thumb and textpanel options according tile options
*/
function modifyoptions() {
//set overlay related options
if (g_options.tile_enable_overlay == true) {
g_options.thumb_overlay_opacity = g_options.tile_overlay_opacity;
g_options.thumb_overlay_color = g_options.tile_overlay_color;
} else if (g_options.tile_enable_icons == false) { //if nothing on overlay - turn it off
g_options.thumb_color_overlay_effect = false;
} else { //if icons enabled - make it transparent
g_options.thumb_overlay_opacity = 0;
}
//set item as link
if (g_options.tile_as_link) {
g_options.thumb_wrapper_as_link = true;
g_options.thumb_link_newpage = g_options.tile_link_newpage;
}
//outline cannot appear without border
if (g_options.tile_enable_outline == true && g_options.tile_enable_border == false)
g_options.tile_enable_outline = false;
//set inner reduce value - in case of the border
g_temp.tileinnerreduce = 0;
if (g_options.tile_enable_border) {
g_temp.tileinnerreduce = g_options.tile_border_width * 2;
g_thumbs.setthumbinnerreduce(g_temp.tileinnerreduce);
}
//check if saparate icons
g_temp.issaparateicons = !g_functions.isrgbasupported();
//set if the textpanel is enabled and outside
if (g_options.tile_enable_textpanel == true) {
//optimize for touch device
switch (g_options.tile_textpanel_position) {
case "top":
g_options.tile_textpanel_align = "top";
case "bottom":
g_temp.istextpaneloutside = true;
g_options.tile_textpanel_always_on = true;
g_options.tile_textpanel_offset = 0;
break;
case "inside_top":
g_options.tile_textpanel_align = "top";
break;
case "middle":
g_options.tile_textpanel_align = "middle";
g_options.tile_textpanel_appear_type = "fade";
break;
}
//if text panel oppearing with the overlay, icons should be saparated
if (g_options.tile_textpanel_always_on == false)
g_temp.issaparateicons = true;
}
//if the textpanel offset is not from the border, it's always fade.
if (g_options.tile_textpanel_offset != 0) {
g_options.tile_textpanel_appear_type = "fade";
g_options.tile_textpanel_margin = g_options.tile_textpanel_offset;
}
//enable description if needed
if (g_options.tile_textpanel_source == "title_and_desc") {
g_options.tile_textpanel_enable_description = true;
g_options.tile_textpanel_desc_style_as_title = true;
}
}
/**
* set options before render
*/
function modifyoptionsbeforerender() {
var ismobile = g_gallery.ismobilemode();
//set text panel show / hide
g_temp.istextpanelhidden = false;
if (ismobile == true && g_options.tile_textpanel_always_on == false)
g_temp.istextpanelhidden = true;
//set video icon always on true / false
g_temp.isvideoplayiconalwayson = g_options.tile_videoplay_icon_always_on;
switch (g_options.tile_videoplay_icon_always_on) {
case "always":
g_temp.isvideoplayiconalwayson = true;
break;
case "never":
g_temp.isvideoplayiconalwayson = false;
break;
case "mobile_only":
g_temp.isvideoplayiconalwayson = (ismobile == true) ? true : false;
break;
case "desktop_only":
g_temp.isvideoplayiconalwayson = (ismobile == false) ? true : false;
break;
}
}
/**
* set thumb html
*/
function sethtmlthumb(objthumbwrapper, objitem) {
objthumbwrapper.addclass("ug-tile");
if (g_temp.funccustomtilehtml) {
g_temp.funccustomtilehtml(objthumbwrapper, objitem);
return (false);
}
var html = "";
//add image container
if (g_temp.hasimagecontainer == true) {
html += "
";
}
//add thumb image:
var classimage = "ug-thumb-image";
if (g_options.tile_enable_image_effect == false || g_options.tile_image_effect_reverse == true)
classimage += " ug-trans-enabled";
var imagealt = g_functions.striptags(objitem.title);
imagealt = g_functions.htmlentitles(imagealt);
html += "";
if (g_temp.hasimagecontainer == true) {
html += "
";
}
objthumbwrapper.append(html);
if (g_options.tile_size_by == t.sizeby.global_ratio) {
objthumbwrapper.fadeto(0, 0); //turn on in thumbsgeneral
}
//---- set thumb styles ----
//set border:
var objcss = {};
if (g_options.tile_enable_background == true) {
objcss["background-color"] = g_options.tile_background_color;
}
if (g_options.tile_enable_border == true) {
objcss["border-width"] = g_options.tile_border_width + "px";
objcss["border-style"] = "solid";
objcss["border-color"] = g_options.tile_border_color;
if (g_options.tile_border_radius)
objcss["border-radius"] = g_options.tile_border_radius + "px";
}
//set outline:
if (g_options.tile_enable_outline == true) {
objcss["outline"] = "1px solid " + g_options.tile_outline_color;
}
//set shadow
if (g_options.tile_enable_shadow == true) {
var htmlshadow = g_options.tile_shadow_h + "px ";
htmlshadow += g_options.tile_shadow_v + "px ";
htmlshadow += g_options.tile_shadow_blur + "px ";
htmlshadow += g_options.tile_shadow_spread + "px ";
htmlshadow += g_options.tile_shadow_color;
objcss["box-shadow"] = htmlshadow;
}
objthumbwrapper.css(objcss);
//----- add icons
var htmladd = "";
if (g_options.tile_enable_icons) {
//add zoom icon
if (g_options.tile_as_link == false && g_options.tile_enable_action == true) {
var iconplayclass = "ug-button-play ug-icon-zoom";
if (objitem.type != "image")
iconplayclass = "ug-button-play ug-icon-play";
htmladd += "";
}
//add link icon
if (objitem.link && g_options.tile_show_link_icon == true || g_options.tile_as_link == true) {
if (g_options.tile_as_link == false) {
var linktarget = "";
if (g_options.tile_link_newpage == true)
linktarget = " target='_blank'";
htmladd += "";
} else {
htmladd += "";
}
}
var tosaparateicon = g_temp.issaparateicons;
if (tosaparateicon == false && objitem.type != "image" && g_temp.isvideoplayiconalwayson == true)
tosaparateicon = true;
if (tosaparateicon) //put the icons on the thumb
var objoverlay = objthumbwrapper;
else
var objoverlay = objthumbwrapper.children(".ug-thumb-overlay");
objoverlay.append(htmladd);
var objbuttonzoom = objoverlay.children("." + iconplayclass);
if (objbuttonzoom.length == 0)
objbuttonzoom = null;
else
objbuttonzoom.hide();
var objbuttonlink = objoverlay.children(".ug-icon-link");
if (objbuttonlink.length == 0)
objbuttonlink = null;
else
objbuttonlink.hide();
//if only zoom icon, make the tile clickable for lightbox open
if (!objbuttonlink && g_options.tile_enable_action == true)
objthumbwrapper.addclass("ug-tile-clickable");
} //if icons enabled
else { //if the icons don't enabled, set the tile clickable
if (g_options.tile_enable_action == true)
objthumbwrapper.addclass("ug-tile-clickable");
}
//add image overlay
if (g_options.tile_enable_image_effect == true) {
var imageeffectclassadd = "";
if (g_options.tile_image_effect_reverse == false)
imageeffectclassadd = " ug-trans-enabled";
var imageoverlayhtml = "
";
objthumbwrapper.append(imageoverlayhtml);
//hide the image overlay if reversed
if (g_options.tile_image_effect_reverse == true) {
objthumbwrapper.children(".ug-tile-image-overlay").fadeto(0, 0);
}
}
//add text panel
if (g_options.tile_enable_textpanel == true) {
var objtextpanel = new ugtextpanel();
objtextpanel.init(g_gallery, g_options, "tile");
//set transition class
var textpaneladdclass = "";
if (g_options.tile_textpanel_always_on == true || g_temp.istextpaneloutside == true)
textpaneladdclass = "ug-trans-enabled";
objtextpanel.appendhtml(objthumbwrapper, textpaneladdclass);
var paneltitle = objitem.title;
var paneldesc = "";
switch (g_options.tile_textpanel_source) {
case "desc":
case "description":
paneltitle = objitem.description;
break;
case "desc_title":
if (objitem.description != "")
paneltitle = objitem.description;
break;
case "title_and_desc":
paneltitle = objitem.title;
paneldesc = objitem.description;
break;
}
objtextpanel.settextplain(paneltitle, paneldesc);
if (g_options.tile_textpanel_always_on == false)
objtextpanel.getelement().fadeto(0, 0);
objthumbwrapper.data("objtextpanel", objtextpanel);
//if textpanel always on, it has to be under the overlay
if (g_options.tile_textpanel_always_on == true) {
var textpanelelement = gettextpanelelement(objthumbwrapper);
textpanelelement.css("z-index", 2);
}
//if text panel is outside, clone textpanel
if (g_temp.istextpaneloutside == true) {
var htmlclone = "";
objthumbwrapper.append(htmlclone);
var objclonewrapper = objthumbwrapper.children(".ug-tile-cloneswrapper");
var objtextpanelclone = new ugtextpanel();
objtextpanelclone.init(g_gallery, g_options, "tile");
objtextpanelclone.appendhtml(objclonewrapper);
objtextpanelclone.settextplain(paneltitle, paneldesc);
objthumbwrapper.data("objtextpanelclone", objtextpanelclone);
}
}
//add additional html
if (objitem.addhtml !== null)
objthumbwrapper.append(objitem.addhtml);
}
/**
* load tile image, place the image on load
*/
this.loadtileimage = function (objtile) {
var objimage = t.gettileimage(objtile);
g_functions.checkimagesloaded(objimage, null, function (objimage, iserror) {
onplaceimage(null, objtile, jquery(objimage));
});
}
function _________________getters________________() { };
/**
* get image overlay
*/
function gettileoverlayimage(objtile) {
var objoverlayimage = objtile.children(".ug-tile-image-overlay");
return (objoverlayimage);
}
/**
* get tile color overlay
*/
function gettileoverlay(objtile) {
var objoverlay = objtile.children(".ug-thumb-overlay");
return (objoverlay);
}
/**
* get image container
*/
function gettileimagecontainer(objtile) {
if (g_temp.hasimagecontainer == false)
return (null);
var objimagecontainer = objtile.children(".ug-image-container");
return (objimagecontainer);
}
/**
* get image effect
*/
function gettileimageeffect(objtile) {
var objimageeffect = objtile.find(".ug-tile-image-overlay img");
return (objimageeffect);
}
/**
* get text panel
*/
function gettextpanel(objtile) {
var objtextpanel = objtile.data("objtextpanel");
return (objtextpanel);
}
/**
* get cloned text panel
*/
function gettextpanelclone(objtile) {
var objtextpanelclone = objtile.data("objtextpanelclone");
return (objtextpanelclone);
}
/**
* get text panel element from the tile
*/
function gettextpanelelement(objtile) {
var objtextpanel = objtile.children(".ug-textpanel");
return (objtextpanel);
}
/**
* get text panel element cloned
*/
function gettextpanelcloneelement(objtile) {
var objtextpanel = objtile.find(".ug-tile-cloneswrapper .ug-textpanel");
if (objtextpanel.length == 0)
throw new error("text panel cloned element not found");
return (objtextpanel);
}
/**
* get text panel height
*/
function gettextpanelheight(objtile) {
if (g_temp.istextpaneloutside == true)
var objtextpanel = gettextpanelcloneelement(objtile);
else
var objtextpanel = gettextpanelelement(objtile);
if (!objtextpanel)
return (0);
var objsize = g_functions.getelementsize(objtextpanel);
return (objsize.height);
}
/**
* get button link
*/
function getbuttonlink(objtile) {
var objbutton = objtile.find(".ug-icon-link");
if (objbutton.length == 0)
return (null);
return objbutton;
}
/**
* get tile ratio
*/
function gettileratio(objtile) {
//global ratio
var ratio = g_temp.ratiobyheight;
switch (g_options.tile_size_by) {
default: //global ratio
ratio = g_temp.ratiobyheight;
break;
case t.sizeby.image_ratio:
if (!objtile)
throw new error("tile should be given for tile ratio");
var item = t.getitembytile(objtile);
if (typeof item.thumbratiobyheight != "undefined") {
if (item.thumbratiobyheight == 0) {
trace(item);
throw new error("the item ratio not inited yet");
}
ratio = item.thumbratiobyheight;
}
break;
case t.sizeby.custom:
return null;
break;
}
return (ratio);
}
/**
* get button zoom
*/
function getbuttonzoom(objtile) {
var objbutton = objtile.find(".ug-button-play");
if (objbutton.length == 0)
return (null);
return objbutton;
}
/**
* tells if the tile is over style
*/
function isoverstyle(objtile) {
if (objtile.hasclass("ug-thumb-over"))
return (true);
return (false);
}
/**
* check if the tile is clickable
*/
function istileclickable(objtile) {
return objtile.hasclass("ug-tile-clickable");
}
/**
* return if the items icon always on
*/
function isitemiconalwayson(objitem) {
if (g_options.tile_enable_icons == true && g_temp.isvideoplayiconalwayson == true && objitem.type != "image")
return (true);
return (false);
}
function _________________setters________________() { };
/**
* position tile images elements
* width, height - tile width height
*/
function positionelements_images(objtile, width, height, visibleonly) {
var objimageoverlay = gettileoverlayimage(objtile);
var objthumbimage = t.gettileimage(objtile);
var objimageeffect = gettileimageeffect(objtile);
//reduce borders
width -= g_temp.tileinnerreduce;
height -= g_temp.tileinnerreduce;
var imageposy = null;
//reduce textpanel height
if (g_temp.istextpaneloutside == true) {
var textheight = gettextpanelheight(objtile);
height -= textheight;
if (g_options.tile_textpanel_position == "top") {
imageposy = textheight;
}
/**
* if has image container
*/
if (g_temp.hasimagecontainer == true) {
var objimagecontainer = gettileimagecontainer(objtile);
g_functions.setelementsize(objimagecontainer, width, height);
if (imageposy !== null)
g_functions.placeelement(objimagecontainer, 0, imageposy);
}
}
//scale image
if (g_options.tile_enable_image_effect == false) {
g_functions.scaleimagecoverparent(objthumbimage, width, height);
if (g_temp.hasimagecontainer == false && imageposy !== null)
g_functions.placeelement(objthumbimage, 0, imageposy);
} else { //width the effect
//set what to resize
var dontresize = "nothing";
if (visibleonly === true && g_temp.istextpaneloutside == false) {
if (g_options.tile_image_effect_reverse == true) {
dontresize = "effect";
} else {
dontresize = "image";
}
}
//resize image effect
if (dontresize != "effect") {
g_functions.setelementsize(objimageoverlay, width, height);
if (imageposy !== null)
g_functions.placeelement(objimageoverlay, 0, imageposy);
g_functions.scaleimagecoverparent(objimageeffect, width, height);
}
//resize image
if (dontresize != "image") {
if (g_temp.hasimagecontainer == true) {
g_functions.scaleimagecoverparent(objthumbimage, width, height);
} else {
//if can't clone, resize
if (dontresize == "effect") {
g_functions.scaleimagecoverparent(objthumbimage, width, height);
if (imageposy !== null)
g_functions.placeelement(objthumbimage, 0, imageposy);
}
else
g_functions.cloneelementsizeandpos(objimageeffect, objthumbimage, false, null, imageposy);
}
}
}
}
/**
* position text panel
* paneltype - default or clone
*/
function positionelements_textpanel(objtile, paneltype, tilewidth, tileheight) {
var panelwidth = null;
if (tilewidth)
panelwidth = tilewidth - g_temp.tileinnerreduce;
if (tileheight)
tileheight -= g_temp.tileinnerreduce;
if (paneltype == "clone") {
var objtextpanelclone = gettextpanelclone(objtile);
objtextpanelclone.refresh(true, true, panelwidth);
var objitem = t.getitembytile(objtile);
objitem.textpanelclonesizeset = true;
return (false);
}
var objtextpanel = gettextpanel(objtile);
if (!objtextpanel)
return (false);
var panelheight = null;
//set panel height also
if (g_temp.istextpaneloutside == true)
panelheight = gettextpanelheight(objtile);
objtextpanel.refresh(false, true, panelwidth, panelheight);
var isposition = (g_options.tile_textpanel_always_on == true || g_options.tile_textpanel_appear_type == "fade");
if (isposition) {
if (g_temp.istextpaneloutside == true && tileheight && g_options.tile_textpanel_position == "bottom") {
var posy = tileheight - panelheight;
objtextpanel.positionpanel(posy);
} else
objtextpanel.positionpanel();
}
}
/**
* position the elements
*/
function positionelements(objtile) {
var objitem = t.getitembytile(objtile);
var objbuttonzoom = getbuttonzoom(objtile);
var objbuttonlink = getbuttonlink(objtile);
var sizetile = g_functions.getelementsize(objtile);
positionelements_images(objtile, sizetile.width, sizetile.height);
//position text panel:
if (g_options.tile_enable_textpanel == true)
positionelements_textpanel(objtile, "regular", sizetile.width, sizetile.height);
//position overlay:
var overlaywidth = sizetile.width - g_temp.tileinnerreduce;
var overlayheight = sizetile.height - g_temp.tileinnerreduce;
var overlayy = 0;
if (g_temp.istextpaneloutside == true) {
var textheight = gettextpanelheight(objtile);
overlayheight -= textheight;
if (g_options.tile_textpanel_position == "top")
overlayy = textheight;
}
var objoverlay = gettileoverlay(objtile);
g_functions.setelementsizeandposition(objoverlay, 0, overlayy, overlaywidth, overlayheight);
//set vertical gap for icons
if (objbuttonzoom || objbuttonlink) {
var gapvert = 0;
if (g_options.tile_enable_textpanel == true && g_temp.istextpanelhidden == false && g_temp.istextpaneloutside == false) {
var objtextpanelelement = gettextpanelelement(objtile);
var texpanelsize = g_functions.getelementsize(objtextpanelelement);
if (texpanelsize.height > 0)
gapvert = math.floor((texpanelsize.height / 2) * -1);
}
}
if (objbuttonzoom && objbuttonlink) {
var sizezoom = g_functions.getelementsize(objbuttonzoom);
var sizelink = g_functions.getelementsize(objbuttonlink);
var spacebetween = g_options.tile_space_between_icons;
var buttonswidth = sizezoom.width + spacebetween + sizelink.width;
var buttonsx = math.floor((sizetile.width - buttonswidth) / 2);
//trace("x: "+buttonsx+" "+"space: " + spacebetween);
//if space more then padding, calc even space.
if (buttonsx < spacebetween) {
spacebetween = math.floor((sizetile.width - sizezoom.width - sizelink.width) / 3);
buttonswidth = sizezoom.width + spacebetween + sizelink.width;
buttonsx = math.floor((sizetile.width - buttonswidth) / 2);
}
g_functions.placeelement(objbuttonzoom, buttonsx, "middle", 0, gapvert);
g_functions.placeelement(objbuttonlink, buttonsx + sizezoom.width + spacebetween, "middle", 0, gapvert);
} else {
if (objbuttonzoom)
g_functions.placeelement(objbuttonzoom, "center", "middle", 0, gapvert);
if (objbuttonlink)
g_functions.placeelement(objbuttonlink, "center", "middle", 0, gapvert);
}
if (objbuttonzoom)
objbuttonzoom.show();
if (objbuttonlink)
objbuttonlink.show();
}
/**
* set tiles htmls
*/
this.sethtml = function (objparent, isappend) {
g_objparentwrapper = objparent;
if (isappend !== true)
modifyoptionsbeforerender();
g_thumbs.sethtmlthumbs(objparent, isappend);
}
/**
* set the overlay effect
*/
function setimageoverlayeffect(objtile, isactive) {
var objitem = t.getitembytile(objtile);
var objoverlayimage = gettileoverlayimage(objtile);
var animationduration = g_options.thumb_transition_duration;
if (g_options.tile_image_effect_reverse == false) {
var objthumbimage = t.gettileimage(objtile);
if (isactive) {
objthumbimage.fadeto(0, 1);
objoverlayimage.stop(true).fadeto(animationduration, 0);
}
else
objoverlayimage.stop(true).fadeto(animationduration, 1);
} else {
if (isactive) {
objoverlayimage.stop(true).fadeto(animationduration, 1);
}
else {
objoverlayimage.stop(true).fadeto(animationduration, 0);
}
}
}
/**
* set textpanel effect
*/
function settextpaneleffect(objtile, isactive) {
var animationduration = g_options.thumb_transition_duration;
var objtextpanel = gettextpanelelement(objtile);
if (!objtextpanel)
return (true);
if (g_options.tile_textpanel_appear_type == "slide") {
var panelsize = g_functions.getelementsize(objtextpanel);
if (panelsize.width == 0)
return (false);
var startpos = -panelsize.height;
var endpos = 0;
var startclass = {}, endclass = {};
var posname = "bottom";
if (g_options.tile_textpanel_position == "inside_top")
posname = "top";
startclass[posname] = startpos + "px";
endclass[posname] = endpos + "px";
if (isactive == true) {
objtextpanel.fadeto(0, 1);
if (objtextpanel.is(":animated") == false)
objtextpanel.css(startclass);
endclass["opacity"] = 1;
objtextpanel.stop(true).animate(endclass, animationduration);
} else {
objtextpanel.stop(true).animate(startclass, animationduration);
}
} else { //fade effect
if (isactive == true) {
objtextpanel.stop(true).fadeto(animationduration, 1);
} else {
objtextpanel.stop(true).fadeto(animationduration, 0);
}
}
}
/**
* set thumb border effect
*/
function seticonseffect(objtile, isactive, noanimation) {
var animationduration = g_options.thumb_transition_duration;
if (noanimation && noanimation === true)
animationduration = 0;
var g_objiconzoom = getbuttonzoom(objtile);
var g_objiconlink = getbuttonlink(objtile);
var opacity = isactive ? 1 : 0;
if (g_objiconzoom)
g_objiconzoom.stop(true).fadeto(animationduration, opacity);
if (g_objiconlink)
g_objiconlink.stop(true).fadeto(animationduration, opacity);
}
/**
* set tile over style
*/
function setoverstyle(data, objtile) {
objtile = jquery(objtile);
if (g_options.tile_enable_image_effect)
setimageoverlayeffect(objtile, true);
if (g_options.tile_enable_textpanel == true && g_options.tile_textpanel_always_on == false && g_temp.istextpanelhidden == false)
settextpaneleffect(objtile, true);
//show/hide icons - if saparate (if not, they are part of the overlay)
//if the type is video and icon always on - the icon should stay
if (g_temp.issaparateicons && g_options.tile_enable_icons == true) {
var isset = (g_options.thumb_overlay_reverse == true);
var objitem = t.getitembytile(objtile);
if (isitemiconalwayson(objitem) == false)
seticonseffect(objtile, isset, false);
}
}
/**
* set normal style
*/
function setnormalstyle(data, objtile) {
objtile = jquery(objtile);
if (g_options.tile_enable_image_effect)
setimageoverlayeffect(objtile, false);
if (g_options.tile_enable_textpanel == true && g_options.tile_textpanel_always_on == false)
settextpaneleffect(objtile, false);
//show/hide icons - if saparate (if not, they are part of the overlay)
if (g_temp.issaparateicons == true && g_options.tile_enable_icons == true) {
var isset = (g_options.thumb_overlay_reverse == true) ? false : true;
var objitem = t.getitembytile(objtile);
if (isitemiconalwayson(objitem) == false)
seticonseffect(objtile, isset, false);
else { //make icon always appear
seticonseffect(objtile, true, true);
}
}
}
/**
* set all tiles normal style
*/
function setalltilesnormalstyle(objtileexcept) {
var objtiles = g_thumbs.getthumbs().not(objtileexcept);
objtiles.each(function (index, objtile) {
g_thumbs.setthumbnormalstyle(jquery(objtile));
});
}
function _________________events________________() { };
/**
* on tile size change, place elements
*/
function onsizechange(data, objtile, forceposition) {
objtile = jquery(objtile);
//position elements only if the image loaded (placed)
if (g_options.tile_visible_before_image == true && objtile.data("image_placed") !== true && forceposition !== true)
return (true);
positionelements(objtile);
g_thumbs.setthumbnormalstyle(objtile);
}
/**
* on place image event after images loaded
*/
function onplaceimage(data, objtile, objimage) {
positionelements(objtile);
objimage.fadeto(0, 1);
objtile.data("image_placed", true);
}
/**
* on tile click on mobile devices on normal state
* set the tile over state
*/
function onmobileclick(objtile) {
if (istileclickable(objtile) == true) {
g_objthis.trigger(t.events.tile_click, objtile);
return (true);
}
if (isoverstyle(objtile) == false) {
setalltilesnormalstyle(objtile);
g_thumbs.setthumboverstyle(objtile);
}
}
/**
* on tile click event
*/
function ontileclick(event) {
var objtile = jquery(this);
var tagname = objtile.prop("tagname").tolowercase();
var isapproved = true;
if (g_temp.funcparentapproveclick && g_temp.funcparentapproveclick() == false)
isapproved = false;
if (tagname == "a") {
if (isapproved == false)
event.preventdefault();
} else { //in case of div
if (isoverstyle(objtile) == false) { //mobile click version
if (isapproved == true)
onmobileclick(objtile);
} else {
if (istileclickable(objtile) == false)
return (true);
if (isapproved == true)
g_objthis.trigger(t.events.tile_click, objtile);
}
}
}
/**
* click on zoom button (as tile click)
*/
function onzoombuttonclick(event) {
event.stoppropagation();
var objtile = jquery(this).parents(".ug-tile");
var isapproved = true;
if (g_temp.funcparentapproveclick && g_temp.funcparentapproveclick() == false)
isapproved = false;
if (isoverstyle(objtile) == false) {
onmobileclick(objtile);
return (true);
}
if (isapproved == true) {
g_objthis.trigger(t.events.tile_click, objtile);
return (false);
}
}
/**
* on link icon click
*/
function onlinkbuttonclick(event) {
var objtile = jquery(this).parents(".ug-tile");
if (g_temp.funcparentapproveclick && g_temp.funcparentapproveclick() == false)
event.preventdefault();
//allow click only from over style
if (isoverstyle(objtile) == false && g_options.tile_as_link == false) {
event.preventdefault();
onmobileclick(objtile);
}
}
/**
* init events
*/
this.initevents = function () {
g_thumbs.initevents();
//connect the over and normal style of the regular thumbs
jquery(g_thumbs).on(g_thumbs.events.setoverstyle, setoverstyle);
jquery(g_thumbs).on(g_thumbs.events.setnormalstyle, setnormalstyle);
jquery(g_thumbs).on(g_thumbs.events.placeimage, onplaceimage);
g_objwrapper.on(g_temp.eventsizechange, onsizechange);
g_objparentwrapper.on("click", ".ug-tile", ontileclick);
g_objparentwrapper.on("click", ".ug-tile .ug-button-play", onzoombuttonclick);
g_objparentwrapper.on("click", ".ug-tile .ug-icon-link", onlinkbuttonclick);
}
/**
* destroy the element events
*/
this.destroy = function () {
g_objparentwrapper.off("click", ".ug-tile");
g_objparentwrapper.off("click", ".ug-tile .ug-button-play");
g_objparentwrapper.off("click", ".ug-tile .ug-icon-link");
jquery(g_thumbs).off(g_thumbs.events.setoverstyle);
jquery(g_thumbs).off(g_thumbs.events.setnormalstyle);
jquery(g_thumbs).off(g_thumbs.events.placeimage);
g_objwrapper.off(g_temp.eventsizechange);
if (g_options.tile_enable_textpanel == true) {
var objthumbs = g_thumbs.getthumbs();
jquery.each(objthumbs, function (index, thumb) {
var textpanel = gettextpanel(jquery(thumb));
if (textpanel)
textpanel.destroy();
});
}
g_thumbs.destroy();
}
/**
* external init
*/
this.init = function (gallery, g_thumbs, customoptions) {
init(gallery, g_thumbs, customoptions);
}
/**
* set fixed mode
*/
this.setfixedmode = function () {
g_options.tile_size_by = t.sizeby.global_ratio;
g_options.tile_visible_before_image = true;
}
/**
* set parent approve click function
*/
this.setapproveclickfunction = function (funcapprove) {
g_temp.funcparentapproveclick = funcapprove;
}
/**
* resize tile. if no size given, resize to original size
* the resize mode taken from resize modes constants, default is full
*/
this.resizetile = function (objtile, newwidth, newheight, resizemode) {
//if textpanel outside - refresh the textpanel first
if (g_temp.istextpaneloutside == true)
positionelements_textpanel(objtile, "clone", newwidth);
if (!newwidth) {
var newwidth = g_options.tile_width;
var newheight = g_options.tile_height;
} else { //only height is missing
if (!newheight) {
var newheight = t.gettileheightbywidth(newwidth, objtile);
}
}
g_functions.setelementsize(objtile, newwidth, newheight);
switch (resizemode) {
default:
case t.resizemode.full:
t.triggersizechangeevent(objtile, true);
break;
case t.resizemode.wrapper_only:
return (true);
break;
case t.resizemode.visible_elements:
if (g_temp.funccustomtilehtml) {
t.triggersizechangeevent(objtile, true);
return (true);
}
//resize images
positionelements_images(objtile, newwidth, newheight, true);
//resize text panel, if visible
if (g_options.tile_enable_textpanel == true && g_options.tile_textpanel_always_on == true && newwidth) {
positionelements_textpanel(objtile, "regular", newwidth, newheight);
}
break;
}
}
/**
* resize all tiles
*/
this.resizealltiles = function (newwidth, resizemode, objtiles) {
modifyoptionsbeforerender();
var newheight = null;
if (g_options.tile_size_by == t.sizeby.global_ratio)
newheight = t.gettileheightbywidth(newwidth);
if (!objtiles)
var objtiles = g_thumbs.getthumbs();
objtiles.each(function (index, objtile) {
t.resizetile(jquery(objtile), newwidth, newheight, resizemode);
});
}
/**
* trigger size change events
* the force is only for fixed size mode
*/
this.triggersizechangeevent = function (objtile, isforce) {
if (!objtile)
return (false);
if (!isforce)
var isforce = false;
g_objwrapper.trigger(g_temp.eventsizechange, [objtile, isforce]);
}
/**
* trigger size change event to all tiles
* the force is only for fixed mode
*/
this.triggersizechangeeventalltiles = function (isforce) {
var objthumbs = g_thumbs.getthumbs();
objthumbs.each(function () {
var objtile = jquery(this);
t.triggersizechangeevent(objtile, isforce);
});
}
/**
* disable all events
*/
this.disableevents = function () {
var objthumbs = g_thumbs.getthumbs();
objthumbs.css("pointer-events", "none");
}
/**
* enable all events
*/
this.enableevents = function () {
var objthumbs = g_thumbs.getthumbs();
objthumbs.css("pointer-events", "auto");
}
/**
* set new options
*/
this.setoptions = function (newoptions) {
g_options = jquery.extend(g_options, newoptions);
g_thumbs.setoptions(newoptions);
}
/**
* set new tile size, this function will not resize, and keep ratio
*/
this.settilesizeoptions = function (newtilewidth) {
if (g_options.tile_size_by !== t.sizeby.global_ratio)
throw new error("setnewtileoptions works with global ration only");
g_options.tile_width = newtilewidth;
g_options.tile_height = math.floor(newtilewidth * g_temp.ratiobyheight);
}
/**
* set custom tile html function
*/
this.setcustomfunctions = function (funccustomhtml, funcpositionelements) {
g_temp.funccustomtilehtml = funccustomhtml;
g_temp.funccustompositionelements = funcpositionelements;
}
/**
* run the tile design
*/
this.run = function (newonly) {
//resize all tiles
var getmode = g_thumbs.type.get_thumbs_all;
if (newonly === true)
getmode = g_thumbs.type.get_thumbs_new;
var objthumbs = g_thumbs.getthumbs(getmode);
if (g_options.tile_size_by == t.sizeby.global_ratio) {
t.resizealltiles(g_options.tile_width, t.resizemode.wrapper_only, objthumbs);
}
//hide original image if image effect active
if (g_options.tile_enable_image_effect == true && g_options.tile_image_effect_reverse == false)
objthumbs.children(".ug-thumb-image").fadeto(0, 0);
g_thumbs.sethtmlproperties(objthumbs);
if (g_options.tile_visible_before_image == true) {
//if textpanel outside - refresh the textpanel first
objthumbs.children(".ug-thumb-image").fadeto(0, 0);
g_thumbs.loadthumbsimages();
}
}
this._____________external_getters____________ = function () { };
/**
* get thumbs general option
*/
this.getobjthumbs = function () {
return g_thumbs;
}
/**
* get options
*/
this.getoptions = function () {
return g_options;
}
/**
* get tile image
*/
this.gettileimage = function (objtile) {
var objimage = objtile.find("img.ug-thumb-image");
return (objimage);
}
/**
* get item from tile
*/
this.getitembytile = function (objtile) {
return g_thumbs.getitembythumb(objtile);
}
/**
* get tile height by width
*/
this.gettileheightbywidth = function (newwidth, objtile) {
var ratio = gettileratio(objtile);
if (ratio === null)
return (null);
var height = math.floor((newwidth - g_temp.tileinnerreduce) * ratio) + g_temp.tileinnerreduce;
if (objtile && g_temp.istextpaneloutside == true && g_options.tile_size_by == t.sizeby.image_ratio)
height += gettextpanelheight(objtile);
return (height);
}
/**
* get tile original size
*/
this.gettileimagesize = function (objtile) {
var objitem = t.getitembytile(objtile);
if (!objitem.thumbwidth || !objitem.thumbheight)
throw new error("can't get image size - image not inited.");
var objsize = {
width: objitem.thumbwidth,
height: objitem.thumbheight
};
return (objsize);
}
/**
* get tile size
*/
this.getglobaltilesize = function () {
if (g_options.tile_size_by != t.sizeby.global_ratio)
throw new error("the size has to be global ratio");
var objsize = {
width: g_options.tile_width,
height: g_options.tile_height
};
return (objsize);
}
}
/**
* avia control class
* addon to strip gallery
*/
function ugaviacontrol() {
var g_parent, g_gallery, g_objects, g_objstrip, g_objstripinner, g_options;
var g_isvertical;
var g_temp = {
touchenabled: false, //variable that tells if touch event was before move event
ismouseinsidestrip: false,
strip_finalpos: 0,
handle_timeout: "",
isstripmoving: false,
iscontrolenabled: true
};
/**
* enable the control
*/
this.enable = function () {
g_temp.iscontrolenabled = true;
}
/**
* disable the control
*/
this.disable = function () {
g_temp.iscontrolenabled = false;
}
/**
* init function for avia controls
*/
this.init = function (objparent) {
g_parent = objparent;
g_objects = objparent.getobjects();
g_gallery = g_objects.g_gallery;
g_objstrip = g_objects.g_objstrip;
g_objstripinner = g_objects.g_objstripinner;
g_options = g_objects.g_options;
g_isvertical = g_objects.isvertical;
initevents();
}
/**
* get mouse position from event according the orientation
*/
function getmousepos(event) {
if (g_isvertical == false)
return (event.pagex);
return (event.pagey);
}
/**
* handle avia strip control event on body mouse move
*/
function initevents(event) {
//make sure that the avia control will not work on touch devices
jquery("body").on("touchstart", function (event) {
if (g_temp.iscontrolenabled == false)
return (true);
g_temp.touchenabled = true;
});
//on body move
jquery("body").mousemove(function (event) {
if (g_temp.iscontrolenabled == false)
return (true);
//protection for touch devices, disable the avia events
if (g_temp.touchenabled == true) {
jquery("body").off("mousemove");
return (true);
}
g_temp.ismouseinsidestrip = g_objstrip.ismouseover();
var strip_touch_active = g_parent.istouchmotionactive();
if (g_temp.ismouseinsidestrip == true && strip_touch_active == false) {
var mousepos = getmousepos(event);
movestriptomouseposition(mousepos);
} else {
stopstripmovingloop();
}
});
}
/**
* destroy the avia control events
*/
this.destroy = function () {
jquery("body").off("touchstart");
jquery("body").off("mousemove");
}
/**
* get inner y position according mouse y position on the strip
*/
function getinnerposy(mousey) {
var inneroffsettop = g_options.strip_padding_top;
var inneroffsetbottom = g_options.strip_padding_bottom;
var stripheight = g_objstrip.height();
var innerheight = g_objstripinner.height();
//if all thumbs visible, no need to move
if (stripheight > innerheight)
return (null);
//find y position inside the strip
var stripoffset = g_objstrip.offset();
var offsety = stripoffset.top;
var posy = mousey - offsety - inneroffsettop;
if (posy < 0)
return (null);
//set measure line parameters
var mlinestart = g_options.thumb_height;
var mlineend = stripheight - g_options.thumb_height;
var mlinesize = mlineend - mlinestart;
//fix position borders on the measure line
if (posy < mlinestart)
posy = mlinestart;
if (posy > mlineend)
posy = mlineend;
//count the ratio of the position on the measure line
var ratio = (posy - mlinestart) / mlinesize;
var innerposy = (innerheight - stripheight) * ratio;
innerposy = math.round(innerposy) * -1 + inneroffsettop;
return (innerposy);
}
/**
* get inner x position according mouse x position on the strip
*/
function getinnerposx(mousex) {
var inneroffsetleft = g_options.strip_padding_left;
var inneroffsetright = g_options.strip_padding_right;
var stripwidth = g_objstrip.width() - inneroffsetleft - inneroffsetright;
var innerwidth = g_objstripinner.width();
//if all thumbs visible, no need to move
if (stripwidth > innerwidth)
return (null);
var stripoffset = g_objstrip.offset();
var offsetx = stripoffset.left;
var posx = mousex - offsetx - inneroffsetleft;
//set measure line parameters
var mlinestart = g_options.thumb_width;
var mlineend = stripwidth - g_options.thumb_width;
var mlinesize = mlineend - mlinestart;
//fix position borders on the measure line
if (posx < mlinestart)
posx = mlinestart;
if (posx > mlineend)
posx = mlineend;
//count the ratio of the position on the measure line
var ratio = (posx - mlinestart) / mlinesize;
var innerposx = (innerwidth - stripwidth) * ratio;
innerposx = math.round(innerposx) * -1 + inneroffsetleft;
return (innerposx);
}
/**
* move strip stap to final position
*/
function movestripstep() {
if (g_temp.is_strip_moving == false) {
return (false);
}
var innerpos = g_parent.getinnerstrippos();
if (math.floor(innerpos) == math.floor(g_temp.strip_finalpos)) {
stopstripmovingloop();
}
//calc step
var diff = math.abs(g_temp.strip_finalpos - innerpos);
var dpos;
if (diff < 1) {
dpos = diff;
}
else {
dpos = diff / 4;
if (dpos > 0 && dpos < 1)
dpos = 1;
}
if (g_temp.strip_finalpos < innerpos)
dpos = dpos * -1;
var newpos = innerpos + dpos;
g_parent.positioninnerstrip(newpos);
}
/**
* start loop of strip moving
*/
function startstripmovingloop() {
if (g_temp.isstripmoving == true)
return (false);
g_temp.isstripmoving = true;
g_temp.handle_timeout = setinterval(movestripstep, 10);
}
/**
* stop loop of strip moving
*/
function stopstripmovingloop() {
if (g_temp.isstripmoving == false)
return (false);
g_temp.isstripmoving = false;
g_temp.handle_timeout = clearinterval(g_temp.handle_timeout);
}
/**
* get inner position according the orientation
* taken by the mouse position
*/
function getinnerpos(mousepos) {
if (g_isvertical == false)
return getinnerposx(mousepos);
else
return getinnerposy(mousepos);
}
/**
* move the strip to mouse position on it
* mousex - mouse position relative to the document
*/
function movestriptomouseposition(mousepos) {
var innerpos = getinnerpos(mousepos);
if (innerpos === null)
return (false);
g_temp.is_strip_moving = true;
g_temp.strip_finalpos = innerpos;
startstripmovingloop();
}
}
/**
* slider class
* addon to strip gallery
*/
function ugslider() {
var t = this, g_objthis = jquery(t);
var g_gallery = new unitegallerymain(), g_objgallery, g_objwrapper, g_objthumbs;
//the video arrows is independent arrows that is not sitting on the controls
var g_objslider, g_objinner, g_objslide1, g_objslide2, g_objslide3, g_objarrowleft, g_objarrowright;
var g_objtouchslider, g_objzoomslider, g_objzoompanel, g_objbuttonplay = null, g_objbuttonfullscreen = null, g_objbullets = null;
var g_objvideoplayer = new ugvideoplayer(), g_optionsprefix;
var g_functions = new ugfunctions(), g_objprogress = null, g_objtextpanel = null;
this.events = {
item_changed: "item_changed", //on item changed
before_switch_slides: "before_switch", //before slides switching
before_return: "before_return", //before return from pan or from zoom
after_return: "after_return", //after return from pan or from zoom
zoom_start: "slider_zoom_start", //on zoom start
zoom_end: "slider_zoom_end", //on zoom move
zooming: "slider_zooming", //on zooming
zoom_change: "slider_zoom_change", //on slide image image zoom change
start_drag: "start_drag", //on slider drag start
after_drag_change: "after_drag_change", //after finish drag chagne transition
action_start: "action_start", //on slide action start
action_end: "action_end", //on slide action stop
click: "slider_click", //on click event
transition_start: "slider_transition_start", //before transition start event
transition_end: "slider_transition_end", //on transition end event
after_put_image: "after_put_image", //after put slide image
image_mouseenter: "slider_image_mouseenter", //on slide image mouseonter
image_mouseleave: "slider_image_mouseleave", //on slide image mouseleave
currentslide_load_start: "slider_current_loadstart", //on current slide load image start
currentslide_load_end: "slider_current_loadend" //on finish load current slide image
}
var g_options = {
slider_scale_mode: "fill", //fit: scale down and up the image to always fit the slider
//down: scale down only, smaller images will be shown, don't enlarge images (scale up)
//fill: fill the entire slider space by scaling, cropping and centering the image
//fitvert: make the image always fill the vertical slider area
slider_scale_mode_media: "fill", //fill, fit, down, fitvert - scale mode on media items
slider_scale_mode_fullscreen: "down", //fill, fit, down, fitvert - scale mode on fullscreen.
slider_item_padding_top: 0, //padding top of the slider item
slider_item_padding_bottom: 0, //padding bottom of the slider item
slider_item_padding_left: 0, //padding left of the slider item
slider_item_padding_right: 0, //padding right of the slider item
slider_background_color: "", //slider background color, set if you want to change default
slider_background_opacity: 1, //slider background opacity
slider_image_padding_top: 0, //padding top of the image inside the item
slider_image_padding_bottom: 0, //padding bottom of the image inside the item
slider_image_padding_left: 0, //padding left of the image inside the item
slider_image_padding_right: 0, //padding right of the image inside the item
slider_image_border: false, //enable border around the image
slider_image_border_width: 10, //image border width
slider_image_border_color: "#ffffff", //image border color
slider_image_border_radius: 0, //image border radius
slider_image_border_maxratio: 0.35, //max ratio that the border can take from the image
slider_image_shadow: false, //enable border shadow the image
slider_video_constantsize: false, //constant video size mode for video items
slider_video_constantsize_scalemode: "fit", //fit,down: constant video size scale mode
slider_video_constantsize_width: 854, //constant video size width
slider_video_constantsize_height: 480, //constant video size height
slider_video_padding_top: 0, //padding top of the video player inside the item
slider_video_padding_bottom: 0, //padding bottom of the video player inside the item
slider_video_padding_left: 0, //padding left of the video player inside the item
slider_video_padding_right: 0, //padding right of the video player inside the item
slider_video_enable_closebutton: true, //enable video close button
slider_transition: "slide", //fade, slide - the transition of the slide change
slider_transition_speed: 300, //transition duration of slide change
slider_transition_easing: "easeinoutquad", //transition easing function of slide change
slider_control_swipe: true, //true,false - enable swiping control
slider_control_zoom: true, //true, false - enable zooming control
slider_zoom_mousewheel: true, //enable zoom on mousewheel
slider_vertical_scroll_ondrag: false, //vertical scroll on slider area drag
slider_loader_type: 1, //shape of the loader (1-7)
slider_loader_color: "white", //color of the loader: (black , white)
slider_enable_links: true, //enable slide as link functionality
slider_links_newpage: false, //open the slide link in new page
slider_enable_bullets: false, //enable the bullets onslider element
slider_bullets_skin: "", //skin of the bullets, if empty inherit from gallery skin
slider_bullets_space_between: -1, //set the space between bullets. if -1 then will be set default space from the skins
slider_bullets_align_hor: "center", //left, center, right - bullets horizontal align
slider_bullets_align_vert: "bottom", //top, middle, bottom - bullets vertical algin
slider_bullets_offset_hor: 0, //bullets horizontal offset
slider_bullets_offset_vert: 10, //bullets vertical offset
slider_enable_arrows: true, //enable arrows onslider element
slider_arrows_skin: "", //skin of the slider arrows, if empty inherit from gallery skin
slider_arrow_left_align_hor: "left", //left, center, right - left arrow horizonal align
slider_arrow_left_align_vert: "middle", //top, middle, bottom - left arrow vertical align
slider_arrow_left_offset_hor: 20, //left arrow horizontal offset
slider_arrow_left_offset_vert: 0, //left arrow vertical offset
slider_arrow_right_align_hor: "right", //left, center, right - right arrow horizontal algin
slider_arrow_right_align_vert: "middle", //top, middle, bottom - right arrow vertical align
slider_arrow_right_offset_hor: 20, //right arrow horizontal offset
slider_arrow_right_offset_vert: 0, //right arrow vertical offset
slider_enable_progress_indicator: true, //enable progress indicator element
slider_progress_indicator_type: "pie", //pie, pie2, bar (if pie not supported, it will switch to bar automatically)
slider_progress_indicator_align_hor: "right", //left, center, right - progress indicator horizontal align
slider_progress_indicator_align_vert: "top", //top, middle, bottom - progress indicator vertical align
slider_progress_indicator_offset_hor: 10, //progress indicator horizontal offset
slider_progress_indicator_offset_vert: 10, //progress indicator vertical offset
slider_enable_play_button: true, //true,false - enable play / pause button onslider element
slider_play_button_skin: "", //skin of the slider play button, if empty inherit from gallery skin
slider_play_button_align_hor: "left", //left, center, right - play button horizontal align
slider_play_button_align_vert: "top", //top, middle, bottom - play button vertical align
slider_play_button_offset_hor: 40, //play button horizontal offset
slider_play_button_offset_vert: 8, //play button vertical offset
slider_play_button_mobilehide: false, //hide the play button on mobile
slider_enable_fullscreen_button: true, //true,false - enable fullscreen button onslider element
slider_fullscreen_button_skin: "", //skin of the slider fullscreen button, if empty inherit from gallery skin
slider_fullscreen_button_align_hor: "left", //left, center, right - fullscreen button horizonatal align
slider_fullscreen_button_align_vert: "top", //top, middle, bottom - fullscreen button vertical align
slider_fullscreen_button_offset_hor: 11, //fullscreen button horizontal offset
slider_fullscreen_button_offset_vert: 9, //fullscreen button vertical offset
slider_fullscreen_button_mobilehide: false, //hide the button on mobile
slider_enable_zoom_panel: true, //true,false - enable the zoom buttons, works together with zoom control.
slider_zoompanel_skin: "", //skin of the slider zoom panel, if empty inherit from gallery skin
slider_zoompanel_align_hor: "left", //left, center, right - zoom panel horizontal align
slider_zoompanel_align_vert: "top", //top, middle, bottom - zoom panel vertical align
slider_zoompanel_offset_hor: 12, //zoom panel horizontal offset
slider_zoompanel_offset_vert: 92, //zoom panel vertical offset
slider_zoompanel_mobilehide: false, //hide the zoom panel on mobile
slider_controls_always_on: false, //true,false - controls are always on, false - show only on mouseover
slider_controls_appear_ontap: true, //true,false - appear controls on tap event on touch devices
slider_controls_appear_duration: 300, //the duration of appearing controls
slider_enable_text_panel: true, //true,false - enable the text panel
slider_textpanel_always_on: true, //true,false - text panel are always on, false - show only on mouseover
slider_videoplay_button_type: "square" //square, round - the videoplay button type, square or round
};
//default options for bar progress incicator
var g_defaultsprogressbar = {
slider_progress_indicator_align_hor: "left", //left, center, right
slider_progress_indicator_align_vert: "bottom", //top, middle, bottom
slider_progress_indicator_offset_hor: 0, //horizontal offset
slider_progress_indicator_offset_vert: 0 //vertical offset
};
var g_temp = {
isrunonce: false,
istextpanelsaparatehover: false, //if the panel need to be appeared without the controls object on mouseover
numprev: 1,
numcurrent: 2,
numnext: 3,
iscontrolsvisible: true,
currentcontrolsmode: "image"
};
function __________general___________() { };
/**
* init the slider
*/
function initslider(objgallery, objoptions, optionsprefix) {
g_gallery = objgallery;
//change options by prefix
if (optionsprefix) {
g_optionsprefix = optionsprefix;
objoptions = g_functions.convertcustomprefixoptions(objoptions, g_optionsprefix, "slider");
}
g_objgallery = jquery(objgallery);
var objects = g_gallery.getobjects();
g_objwrapper = objects.g_objwrapper;
g_objthumbs = objects.g_objthumbs;
//set progress indicator bar defaults if type bar
if (objoptions.hasownproperty("slider_progress_indicator_type"))
g_options.slider_progress_indicator_type = objoptions.slider_progress_indicator_type;
if (g_options.slider_progress_indicator_type == "bar") {
g_options = jquery.extend(g_options, g_defaultsprogressbar);
}
if (objoptions)
t.setoptions(objoptions);
processoptions();
//init bullets:
if (g_options.slider_enable_bullets == true) {
g_objbullets = new ugbullets();
var bulletsoptions = {
bullets_skin: g_options.slider_bullets_skin,
bullets_space_between: g_options.slider_bullets_space_between
}
g_objbullets.init(g_gallery, bulletsoptions);
}
//init text panel
if (g_options.slider_enable_text_panel) {
g_objtextpanel = new ugtextpanel();
g_objtextpanel.init(g_gallery, g_options, "slider");
}
if (g_options.slider_enable_zoom_panel) {
g_objzoompanel = new ugzoombuttonspanel();
g_objzoompanel.init(t, g_options);
}
var galleryid = g_gallery.getgalleryid();
//init video player
g_objvideoplayer.init(g_options, false, galleryid);
}
/**
* run the slider functionality
*/
function runslider() {
if (g_temp.isrunonce == true)
return (false);
g_temp.isrunonce = true;
//set background color
if (g_options.slider_background_color) {
var bgcolor = g_options.slider_background_color;
if (g_options.slider_background_opacity != 1)
bgcolor = g_functions.converthextorgb(bgcolor, g_options.slider_background_opacity);
g_objslider.css("background-color", bgcolor);
} else if (g_options.slider_background_opacity != 1) { //set opacity with default color
bgcolor = g_functions.converthextorgb("#000000", g_options.slider_background_opacity);
g_objslider.css("background-color", bgcolor);
}
//init touch slider control
if (g_options.slider_control_swipe == true) {
g_objtouchslider = new ugtouchslidercontrol();
g_objtouchslider.init(t, g_options);
}
//init zoom slider control
if (g_options.slider_control_zoom == true) {
g_objzoomslider = new ugzoomslidercontrol();
g_objzoomslider.init(t, g_options);
}
//run the text panel
if (g_objtextpanel)
g_objtextpanel.run();
initevents();
}
/**
* process the options
*/
function processoptions() {
var galleryoptions = g_gallery.getoptions();
//set skins:
var globalskin = galleryoptions.gallery_skin;
if (g_options.slider_bullets_skin == "")
g_options.slider_bullets_skin = globalskin;
if (g_options.slider_arrows_skin == "")
g_options.slider_arrows_skin = globalskin;
if (g_options.slider_zoompanel_skin == "")
g_options.slider_zoompanel_skin = globalskin;
if (g_options.slider_play_button_skin == "")
g_options.slider_play_button_skin = globalskin;
if (g_options.slider_fullscreen_button_skin == "")
g_options.slider_fullscreen_button_skin = globalskin;
g_options.video_enable_closebutton = g_options.slider_video_enable_closebutton;
//set mousewheel option depends on the gallery option
if (galleryoptions.gallery_mousewheel_role != "zoom")
g_options.slider_zoom_mousewheel = false;
}
/**
*
* get html slide
*/
function gethtmlslide(loaderclass, numslide) {
var classvideoplay = "ug-type-square";
if (g_options.slider_videoplay_button_type == "round")
classvideoplay = "ug-type-round";
var html = "";
html += "
";
html += "";
html += "";
html += "";
html += "
";
return (html);
}
/**
* set the slider html
*/
function sethtmlslider(objparent) {
if (objparent)
g_objwrapper = objparent;
//get if the slide has controls
var loaderclass = getloaderclass();
var galleryoptions = g_gallery.getoptions();
var html = "
";
html += "
";
html += gethtmlslide(loaderclass, 1);
html += gethtmlslide(loaderclass, 2);
html += gethtmlslide(loaderclass, 3);
html += "
"; //end inner
//----------------
//add arrows
if (g_options.slider_enable_arrows == true) {
html += "";
html += "";
}
//add play button
if (g_options.slider_enable_play_button == true) {
html += "";
}
//add fullscreen button
if (g_options.slider_enable_fullscreen_button == true) {
html += "";
}
html += "
"; //end slider
g_objwrapper.append(html);
//----------------
//set objects
g_objslider = g_objwrapper.children(".ug-slider-wrapper");
g_objinner = g_objslider.children(".ug-slider-inner");
g_objslide1 = g_objinner.children(".ug-slide1");
g_objslide2 = g_objinner.children(".ug-slide2");
g_objslide3 = g_objinner.children(".ug-slide3");
//set slides data
g_objslide1.data("slidenum", 1);
g_objslide2.data("slidenum", 2);
g_objslide3.data("slidenum", 3);
//add bullets
if (g_objbullets)
g_objbullets.appendhtml(g_objslider);
//----------------
//get arrows object
if (g_options.slider_enable_arrows == true) {
g_objarrowleft = g_objslider.children(".ug-arrow-left");
g_objarrowright = g_objslider.children(".ug-arrow-right");
}
//get play button
if (g_options.slider_enable_play_button == true) {
g_objbuttonplay = g_objslider.children(".ug-button-play");
}
//get fullscreen button
if (g_options.slider_enable_fullscreen_button == true) {
g_objbuttonfullscreen = g_objslider.children(".ug-button-fullscreen");
}
//----------------
//add progress indicator
if (g_options.slider_enable_progress_indicator == true) {
g_objprogress = g_functions.initprogressindicator(g_options.slider_progress_indicator_type, g_options, g_objslider);
var finaltype = g_objprogress.gettype();
//change options in case of type change
if (finaltype == "bar" && g_options.slider_progress_indicator_type == "pie") {
g_options.slider_progress_indicator_type = "bar";
g_options = jquery.extend(g_options, g_defaultsprogressbar);
}
g_gallery.setprogressindicator(g_objprogress);
}
//----------------
//add text panel (hidden)
if (g_options.slider_enable_text_panel == true) {
g_objtextpanel.appendhtml(g_objslider);
//hide panel saparatelly from the controls object
if (g_options.slider_textpanel_always_on == false) {
//hide the panel
var panelelement = g_objtextpanel.getelement();
panelelement.hide().data("ishidden", true);
g_temp.istextpanelsaparatehover = true;
}
}
//----------------
//add zoom buttons panel:
if (g_options.slider_enable_zoom_panel == true) {
g_objzoompanel.appendhtml(g_objslider);
}
//add video player
g_objvideoplayer.sethtml(g_objinner);
}
/**
* position elements that related to slide
*/
function positionslideelements(objslide) {
//position preloader
var objpreloader = getslidepreloader(objslide);
g_functions.placeelementinparentcenter(objpreloader);
//position video play button
var objvideoplaybutton = getslidevideoplaybutton(objslide);
g_functions.placeelementinparentcenter(objvideoplaybutton);
}
/**
* position elements
*/
function positionelements() {
//place bullets
if (g_objbullets) {
objbullets = g_objbullets.getelement();
//strange bug fix (bullets width: 20) by double placing
g_functions.placeelement(objbullets, g_options.slider_bullets_align_hor, g_options.slider_bullets_align_vert, g_options.slider_bullets_offset_hor, g_options.slider_bullets_offset_vert);
g_functions.placeelement(objbullets, g_options.slider_bullets_align_hor, g_options.slider_bullets_align_vert, g_options.slider_bullets_offset_hor, g_options.slider_bullets_offset_vert);
}
//place arrows
if (g_options.slider_enable_arrows == true) {
g_functions.placeelement(g_objarrowleft, g_options.slider_arrow_left_align_hor, g_options.slider_arrow_left_align_vert, g_options.slider_arrow_left_offset_hor, g_options.slider_arrow_left_offset_vert);
g_functions.placeelement(g_objarrowright, g_options.slider_arrow_right_align_hor, g_options.slider_arrow_left_align_vert, g_options.slider_arrow_right_offset_hor, g_options.slider_arrow_right_offset_vert);
}
//hide controls
if (g_options.slider_controls_always_on == false)
hidecontrols(true);
//place progress indicator
if (g_objprogress) {
var objprogresselement = g_objprogress.getelement();
if (g_options.slider_progress_indicator_type == "bar") {
var sliderwidth = g_objslider.width();
g_objprogress.setsize(sliderwidth);
g_functions.placeelement(objprogresselement, "left", g_options.slider_progress_indicator_align_vert, 0, g_options.slider_progress_indicator_offset_vert);
} else {
g_functions.placeelement(objprogresselement, g_options.slider_progress_indicator_align_hor, g_options.slider_progress_indicator_align_vert, g_options.slider_progress_indicator_offset_hor, g_options.slider_progress_indicator_offset_vert);
}
}
//position text panel
if (g_objtextpanel)
g_objtextpanel.positionpanel();
//position controls elements
placecontrolselements();
//place slide elements
positionslideelements(g_objslide1);
positionslideelements(g_objslide2);
positionslideelements(g_objslide3);
checkmobilemodify();
}
/**
* place elements that located on "controls" div
*/
function placecontrolselements() {
if (g_objbuttonplay)
g_functions.placeelement(g_objbuttonplay, g_options.slider_play_button_align_hor, g_options.slider_play_button_align_vert, g_options.slider_play_button_offset_hor, g_options.slider_play_button_offset_vert);
//position fullscreen button
if (g_objbuttonfullscreen)
g_functions.placeelement(g_objbuttonfullscreen, g_options.slider_fullscreen_button_align_hor, g_options.slider_fullscreen_button_align_vert, g_options.slider_fullscreen_button_offset_hor, g_options.slider_fullscreen_button_offset_vert);
//position zoom panel
if (g_objzoompanel) {
var zoompanelelement = g_objzoompanel.getelement();
g_functions.placeelement(zoompanelelement, g_options.slider_zoompanel_align_hor, g_options.slider_zoompanel_align_vert, g_options.slider_zoompanel_offset_hor, g_options.slider_zoompanel_offset_vert);
}
}
/**
* position slides by their order
*/
function positionslides() {
var slides = t.getslidesreference();
var posx = 0, posy = 0, innerwidth;
var posxprev = 0, posxcurrent = 0, posxnext, nexthasitem, prevhasitem;
nexthasitem = t.isslidehasitem(slides.objnextslide);
prevhasitem = t.isslidehasitem(slides.objprevslide);
if (prevhasitem) {
posxcurrent = slides.objprevslide.outerwidth();
slides.objprevslide.css("z-index", 1);
} else
slides.objprevslide.hide();
posxnext = posxcurrent + slides.objcurrentslide.outerwidth();
innerwidth = posxnext;
if (nexthasitem) {
innerwidth = posxnext + slides.objnextslide.outerwidth();
slides.objprevslide.css("z-index", 2);
} else
slides.objnextslide.hide();
slides.objcurrentslide.css("z-index", 3);
//set inner size and position
g_functions.placeelement(slides.objcurrentslide, posxcurrent, posy);
g_objinner.css({ "left": -posxcurrent + "px", width: innerwidth + "px" });
//position prev
if (prevhasitem) {
g_functions.placeelement(slides.objprevslide, posxprev, posy);
g_functions.showelement(slides.objprevslide);
}
if (nexthasitem) {
g_functions.showelement(slides.objnextslide);
g_functions.placeelement(slides.objnextslide, posxnext, posy);
}
}
/**
* resize the slide image inside item
*/
function resizeslideitem(objslide) {
var index = objslide.data("index");
if (index === undefined || index == null)
return (false);
var objitem = g_gallery.getitem(index);
if (!objitem)
return (false);
setitemtoslide(objslide, objitem);
}
/**
* show the preloader
* show the index, so only the current index load will hide.
*/
function showpreloader(objpreloader) {
objpreloader.stop(true).show(100);
}
/**
* hide the preloader
*/
function hidepreloader(objpreloader) {
objpreloader.stop(true).hide(100);
}
/**
* get proper image border width
*/
function getimageborderwidth(objimage, imagedata) {
var borderwidth = g_options.slider_image_border_width;
if (borderwidth <= 10)
return (borderwidth);
//set image size
var imagesize = g_functions.getelementsize(objimage);
var imagewidth = imagesize.width;
var imageheight = imagesize.height;
if (imagedata) {
if (imagedata.hasownproperty("imagewidth"))
imagewidth = imagedata.imagewidth;
if (imagedata.hasownproperty("imageheight"))
imageheight = imagedata.imageheight;
}
if (imagewidth <= 0)
return (borderwidth);
//take the less size
var totalsize = (imagewidth < imageheight) ? imagewidth : imageheight;
var bordersize = borderwidth * 2;
var borderratio = bordersize / totalsize;
if (borderratio < g_options.slider_image_border_maxratio)
return (borderwidth);
//change border width
var borderwidth = (totalsize * g_options.slider_image_border_maxratio) / 2;
borderwidth = math.round(borderwidth);
return (borderwidth);
}
/**
* set slider image css design according the settings
*/
function setimagedesign(objimage, slidetype, imagedata) {
var css = {};
if (g_options.slider_image_border == true) {
css["border-style"] = "solid";
var borderwidth = getimageborderwidth(objimage, imagedata);
css["border-width"] = borderwidth + "px";
css["border-color"] = g_options.slider_image_border_color;
css["border-radius"] = g_options.slider_image_border_radius;
}
if (slidetype != "image" && g_options.slider_video_constantsize == true)
css["background-color"] = "#000000";
if (g_options.slider_image_shadow == true) {
css["box-shadow"] = "3px 3px 10px 0px #353535";
}
objimage.css(css);
}
/**
* scale image constant size (for video items)
*/
function scaleimageconstantsize(objimage, objitem) {
var constantwidth = g_options.slider_video_constantsize_width;
var constantheight = g_options.slider_video_constantsize_height;
var scalemode = g_options.slider_video_constantsize_scalemode;
var objsize = g_functions.scaleimageexactsizeinparent(objimage, objitem.imagewidth, objitem.imageheight, constantwidth, constantheight, scalemode);
return (objsize);
}
/**
*
* set item to slide
*/
function setimagetoslide(objslide, objitem, isforce) {
var objitemwrapper = objslide.children(".ug-item-wrapper");
var objpreloader = getslidepreloader(objslide);
if (typeof objitem.urlimage == "undefined" || objitem.urlimage == "")
throw new error("the slide don't have big image defined ( data-image='imageurl' ). please check gallery items.", "showbig");
var urlimage = objitem.urlimage;
var currentimage = objslide.data("urlimage");
objslide.data("urlimage", urlimage);
var scalemode = t.getscalemode(objslide);
var slidetype = t.getslidetype(objslide);
objpadding = t.getobjimagepadding();
if (currentimage == urlimage && isforce !== true) {
var objimage = objitemwrapper.children("img");
if (objitem.imagewidth == 0 || objitem.imageheight == 0) {
g_gallery.checkfillimagesize(objimage, objitem);
}
var objimagedata = {};
if (slidetype != "image" && g_options.slider_video_constantsize == true) {
objimagedata = scaleimageconstantsize(objimage, objitem);
}
else {
objimagedata = g_functions.scaleimagefitparent(objimage, objitem.imagewidth, objitem.imageheight, scalemode, objpadding);
}
setimagedesign(objimage, slidetype, objimagedata);
g_objthis.trigger(t.events.after_put_image, objslide);
}
else { //place the image inside parent first time
objimage = g_functions.placeimageinsideparent(urlimage, objitemwrapper, objitem.imagewidth, objitem.imageheight, scalemode, objpadding);
//set image loaded on load:
if (objitem.isbigimageloaded == true) {
objimage.fadeto(0, 1);
hidepreloader(objpreloader);
if (slidetype != "image" && g_options.slider_video_constantsize == true)
var objimagedata = scaleimageconstantsize(objimage, objitem);
else
var objimagedata = g_functions.getimageinsideparentdata(objitemwrapper, objitem.imagewidth, objitem.imageheight, scalemode, objpadding);
//set missing css width
objimage.css("width", objimagedata.imagewidth + "px");
setimagedesign(objimage, slidetype, objimagedata);
g_objthis.trigger(t.events.after_put_image, objslide);
}
else { //if the image not loaded, load the image and show it after.
objimage.fadeto(0, 0);
showpreloader(objpreloader);
objslide.data("isloading", true);
if (t.isslidecurrent(objslide))
g_objthis.trigger(t.events.currentslide_load_start);
objimage.data("itemindex", objitem.index);
objimage.on("load", function () {
//place the image normally with coordinates
var objimage = jquery(this);
var itemindex = objimage.data("itemindex");
objimage.fadeto(0, 1);
//get and hide preloader
var objslide = objimage.parent().parent();
var slidetype = t.getslidetype(objslide);
var objpreloader = getslidepreloader(objslide);
var objpadding = t.getobjimagepadding();
var scalemode = t.getscalemode(objslide);
hidepreloader(objpreloader);
objslide.data("isloading", false);
if (t.isslidecurrent(objslide))
g_objthis.trigger(t.events.currentslide_load_end);
g_gallery.onitembigimageloaded(null, objimage);
var objitem = g_gallery.getitem(itemindex);
var objimagedata = {};
if (slidetype != "image" && g_options.slider_video_constantsize == true)
scaleimageconstantsize(objimage, objitem);
else {
objimagedata = g_functions.scaleimagefitparent(objimage, objitem.imagewidth, objitem.imageheight, scalemode, objpadding);
}
objimage.fadeto(0, 1);
setimagedesign(objimage, slidetype, objimagedata);
g_objthis.trigger(t.events.after_put_image, objslide);
});
}
}
}
/**
* set slider image by url
* if item not set, get current slide item
*/
function setitemtoslide(objslide, objitem) {
try {
var objitemwrapper = objslide.children(".ug-item-wrapper");
//if the item is empty, remove the image from slide
if (objitem == null) {
objitemwrapper.html("");
objslide.removedata("index");
objslide.removedata("type");
objslide.removedata("urlimage");
return (false);
}
var currentindex = objslide.data("index");
objslide.data("index", objitem.index);
objslide.data("type", objitem.type);
//set link class
if (g_options.slider_enable_links == true && objitem.type == "image") {
if (objitem.link)
objslide.addclass("ug-slide-clickable");
else
objslide.removeclass("ug-slide-clickable");
}
setimagetoslide(objslide, objitem);
//show type related elements
var objvideoplaybutton = getslidevideoplaybutton(objslide);
switch (objitem.type) {
case "image":
objvideoplaybutton.hide();
break;
default: //video
objvideoplaybutton.show();
break;
}
} catch (error) {
if (typeof error.filename != "undefined" && error.filename == "showbig")
g_gallery.showerrormessagereplacegallery(error.message);
objitemwrapper.html("");
throw new error(error);
return (true);
}
}
/**
* hide the panel
*/
function hidetextpanel() {
if (!g_objtextpanel)
return (false);
if (istextpanelhidden() == true)
return (false);
var panelelement = g_objtextpanel.getelement();
var animationtime = 0;
if (g_temp.istextpanelsaparatehover == true || g_options.slider_textpanel_always_on == true) {
animationtime = g_options.slider_controls_appear_duration;
}
panelelement.stop().fadeto(animationtime, 0);
panelelement.data("ishidden", true);
}
/**
* show the text panel
*/
function showtextpanel() {
if (!g_objtextpanel)
return (false);
if (istextpanelhidden() == false)
return (false);
var panelelement = g_objtextpanel.getelement();
var animationtime = 0;
if (g_temp.istextpanelsaparatehover == true || g_options.slider_textpanel_always_on == true) {
panelelement.show();
g_objtextpanel.positionelements();
animationtime = g_options.slider_controls_appear_duration;
}
panelelement.stop().show().fadeto(animationtime, 1);
panelelement.data("ishidden", false);
}
/**
* check if the text panel is hidden or not
*/
function istextpanelhidden() {
var panelelement = g_objtextpanel.getelement();
var ishidden = panelelement.data("ishidden");
if (ishidden === false)
return (false);
return (true);
}
/**
* validate that the slide is certain type, if not, throw error
*/
function validateslidetype(type, objslide) {
if (objslide == undefined)
var objslide = t.getcurrentslide();
var slidetype = t.getslidetype(objslide);
if (slidetype != type) {
throw new error("wrong slide type: " + slidetype + ", should be: " + type);
return (false);
}
return (true);
}
function __________video_player_______() { };
/**
* set video player position
*/
function setvideoplayerposition() {
var objcurrentslide = t.getcurrentslide();
var objimage = t.getslideimage(objcurrentslide);
var slidesize = g_functions.getelementsize(objcurrentslide);
var left = slidesize.left;
var top = slidesize.top;
//set by image position
if (g_options.slider_video_constantsize == true) {
var imagesize = g_functions.getelementsize(objimage);
left += imagesize.left;
top += imagesize.top;
} else { //set video padding
left += g_options.slider_video_padding_left;
top += g_options.slider_video_padding_top;
}
g_objvideoplayer.setposition(left, top);
}
/**
* set video player constant size
*/
function setvideoplayerconstantsize() {
var videowidth = g_options.slider_video_constantsize_width;
var videoheight = g_options.slider_video_constantsize_height;
g_objvideoplayer.setsize(videowidth, videoheight);
//set video design
var videoelement = g_objvideoplayer.getobject();
setimagedesign(videoelement, "video");
}
function __________transition_______() { };
/**
* do the transition between the current and the next
*/
function dotransition(direction, objitem, forcetransition) {
g_objthis.trigger(t.events.transition_start);
var transition = g_options.slider_transition;
if (forcetransition)
transition = forcetransition;
//stop current slide action
t.stopslideaction(null, true);
switch (transition) {
default:
case "fade":
transitionfade(objitem);
break;
case "slide":
transitionslide(direction, objitem);
break;
case "lightbox_open": //fade transition without animation
transitionfade(objitem, false, true);
break;
}
}
/**
* switch slide numbers after transition (by direction)
*
*/
this.switchslidenums = function (direction) {
//trigger item changed effect
g_objthis.trigger(t.events.before_switch_slides);
switch (direction) {
case "left":
var currentnum = g_temp.numcurrent;
g_temp.numcurrent = g_temp.numnext;
g_temp.numnext = g_temp.numprev;
g_temp.numprev = currentnum;
break;
case "right":
var currentnum = g_temp.numcurrent;
g_temp.numcurrent = g_temp.numprev;
g_temp.numprev = g_temp.numnext;
g_temp.numnext = currentnum;
break;
default:
throw new error("wrong direction: " + direction);
break;
}
//trace(g_temp.numcurrent);
//trigger item changed effect
g_objthis.trigger(t.events.item_changed);
}
/**
* do slide transition
*/
function transitionslide(direction, objitem) {
var animating = t.isanimating();
if (animating == true) {
g_temp.itemwaiting = objitem;
return (true);
}
//always clear next item on transition start
// next item can be only in the middle of the transition.
if (g_temp.itemwaiting != null)
g_temp.itemwaiting = null;
var slides = t.getslidesreference();
switch (direction) {
case "right": //change to prev item
setitemtoslide(slides.objprevslide, objitem);
positionslides();
var posprev = g_functions.getelementsize(slides.objprevslide);
var destx = -posprev.left;
t.switchslidenums("right");
break;
case "left": //change to next item
setitemtoslide(slides.objnextslide, objitem);
positionslides();
var posnext = g_functions.getelementsize(slides.objnextslide);
var destx = -posnext.left;
t.switchslidenums("left");
break;
default:
throw new error("wrong direction: " + direction);
break;
}
var transspeed = g_options.slider_transition_speed;
var transeasing = g_options.slider_transition_easing;
var animateparams = {
duration: transspeed,
easing: transeasing,
queue: false,
always: function () {
t.stopslideaction();
g_objvideoplayer.hide();
//transit next item if waiting
if (g_temp.itemwaiting != null) {
var direction = getslidedirection(g_temp.itemwaiting);
transitionslide(direction, g_temp.itemwaiting);
} else {
//if no item waiting, please neighbour items in places
t.placenabouritems();
g_objthis.trigger(t.events.transition_end);
}
}
};
g_objinner.animate({ left: destx + "px" }, animateparams);
}
/**
*
* animate opacity in and out
*/
function animateopacity(objitem, opacity, completefunction) {
if (completefunction)
objitem.fadeto(g_options.slider_transition_speed, opacity, completefunction);
else
objitem.fadeto(g_options.slider_transition_speed, opacity);
}
/**
* do fade transition
*/
function transitionfade(objitem, noanimation, nohideplayer) {
if (!noanimation)
var noanimation = false;
var slides = t.getslidesreference();
setitemtoslide(slides.objnextslide, objitem);
var objcurrentpos = g_functions.getelementsize(slides.objcurrentslide);
g_functions.placeelement(slides.objnextslide, objcurrentpos.left, objcurrentpos.top);
//switch slide nums
var currentnum = g_temp.numcurrent;
g_temp.numcurrent = g_temp.numnext;
g_temp.numnext = currentnum;
g_objthis.trigger(t.events.item_changed);
slides.objnextslide.stop(true);
slides.objcurrentslide.stop(true);
if (noanimation == true) {
slides.objcurrentslide.fadeto(0, 0);
slides.objnextslide.fadeto(0, 1);
t.placenabouritems();
g_objthis.trigger(t.events.transition_end);
if (nohideplayer !== true)
g_objvideoplayer.hide();
} else {
slides.objnextslide.fadeto(0, 0);
animateopacity(slides.objcurrentslide, 0, function () {
t.placenabouritems();
g_objthis.trigger(t.events.transition_end);
if (nohideplayer !== true)
g_objvideoplayer.hide();
});
if (g_objvideoplayer.isvisible() == true) {
var videoelement = g_objvideoplayer.getobject();
animateopacity(videoelement, 0);
}
//animate to next show next
animateopacity(slides.objnextslide, 1);
}
}
function __________controls_object_______() { };
/**
* modify the slider for mobile
*/
function modifyformobile() {
if (g_options.slider_fullscreen_button_mobilehide == true && g_objbuttonfullscreen)
g_objbuttonfullscreen.hide();
if (g_options.slider_play_button_mobilehide == true && g_objbuttonplay)
g_objbuttonplay.hide();
if (g_options.slider_zoompanel_mobilehide == true && g_objzoompanel)
g_objzoompanel.getelement().hide();
}
/**
* modify for no mobile
*/
function modifyfordesctop() {
if (g_options.slider_fullscreen_button_mobilehide == true && g_objbuttonfullscreen)
g_objbuttonfullscreen.show();
if (g_options.slider_play_button_mobilehide == true && g_objbuttonplay)
g_objbuttonplay.show();
if (g_options.slider_zoompanel_mobilehide == true && g_objzoompanel)
g_objzoompanel.getelement().show();
}
/**
* check and modify for mobile or desctop
*/
function checkmobilemodify() {
var ismobile = g_gallery.ismobilemode();
if (ismobile)
modifyformobile();
else
modifyfordesctop();
}
/**
* get a jquery set of the controls objects
*/
function getcontrolsobjects() {
var objcontrol = g_objslider.children(".ug-slider-control");
return (objcontrol);
}
/**
* hide the controls
*/
function hidecontrols(noanimation) {
if (g_functions.istimepassed("slidercontrolstoggle") == false)
return (false);
if (g_temp.iscontrolsvisible == false)
return (false);
if (!noanimation)
var noanimation = false;
var objcontrols = getcontrolsobjects();
if (noanimation === true)
objcontrols.stop().fadeto(0, 0).hide();
else {
objcontrols.stop().fadeto(g_options.slider_controls_appear_duration, 0, function () { objcontrols.hide() });
}
g_temp.iscontrolsvisible = false;
}
/**
* show controls only if they meaned to be shown
* @param noanimation
*/
function checkandshowcontrols(noanimation) {
if (g_options.slider_controls_always_on == true)
showcontrols(noanimation);
}
/**
* hide the controls
*/
function showcontrols(noanimation) {
//validate for short time pass
if (g_functions.istimepassed("slidercontrolstoggle") == false)
return (false);
if (g_temp.iscontrolsvisible == true)
return (true);
if (!noanimation)
var noanimation = false;
var objcontrols = getcontrolsobjects();
if (noanimation === true)
objcontrols.stop().show();
else {
objcontrols.stop().show().fadeto(0, 0);
objcontrols.fadeto(g_options.slider_controls_appear_duration, 1);
}
g_temp.iscontrolsvisible = true;
}
/**
* toggle the controls (show, hide)
*/
function togglecontrols() {
if (g_temp.iscontrolsvisible == false)
showcontrols();
else
hidecontrols();
}
/**
* set controls mode
* modes: image, video
*/
function setcontrolsmode(mode) {
if (mode == g_temp.currentcontrolsmode)
return (false);
switch (mode) {
case "image":
if (g_objzoompanel)
g_objzoompanel.getelement().show();
break;
case "video":
if (g_objzoompanel)
g_objzoompanel.getelement().hide();
break;
default:
throw new error("wrong controld mode: " + mode);
break;
}
g_temp.currentcontrolsmode = mode;
}
function __________events___________() { };
/**
* on item change event
*/
function onitemchange(data, arg_objitem, role) {
//trace("slider on change");
var objitem = g_gallery.getselecteditem();
t.setitem(objitem, false, role);
var itemindex = objitem.index;
//set active bullet
if (g_objbullets)
g_objbullets.setactive(itemindex);
//handle text panel
if (g_objtextpanel) {
if (g_temp.istextpanelsaparatehover == false)
showtextpanel();
}
if (objitem.type == "image") {
setcontrolsmode("image");
//placecontrolselements();
}
else {
setcontrolsmode("video");
}
}
/**
* on bullet click - change the item to selected
*/
function onbulletclick(event, bulletindex) {
g_gallery.selectitem(bulletindex);
}
/**
* on touch end
* toggle controls
*/
function onclick(event) {
//double tap action
if (g_objtouchslider && g_objtouchslider.istapeventoccured(event) == false)
return (true);
g_objthis.trigger(t.events.click, event);
}
/**
* on actual click event
*/
function onactualclick() {
//check link
var currentslide = t.getcurrentslide();
var isclickable = currentslide.hasclass("ug-slide-clickable");
var objitem = t.getcurrentitem();
if (isclickable) {
//redirect to link
if (g_options.slider_links_newpage == false) {
location.href = objitem.link;
} else {
window.open(objitem.link, '_blank');
}
return (true);
}
//check toggle controls
if (g_options.slider_controls_always_on == false &&
g_options.slider_controls_appear_ontap == true && t.iscurrentslidetype("image") == true) {
togglecontrols();
//show text panel if hidden
if (g_objtextpanel && g_options.slider_textpanel_always_on == true && t.iscurrentslidetype("image") && t.iscurrentslideimagefit())
showtextpanel();
}
}
/**
* on zoom start event
*/
function onzoomchange(event) {
if (g_objtextpanel && t.iscurrentslidetype("image") && t.iscurrentslideimagefit() == false)
hidetextpanel();
}
/**
* on mouse enter
*/
function onmouseenter() {
showcontrols();
}
/**
* on mouse leave
*/
function onmouseleave() {
hidecontrols();
}
/**
* on slide video play button click
*/
function objvideoplayclick(objbutton) {
var objslide = objbutton.parent();
t.startslideaction(objslide);
}
/**
* on video player show event
*/
function onvideoplayershow() {
if (g_gallery.isplaymode()) {
g_gallery.pauseplaying();
}
g_objthis.trigger(t.events.action_start);
}
/**
* on video player hide event
*/
function onvideoplayerhide() {
if (g_gallery.isplaymode()) {
g_gallery.continueplaying();
}
g_objthis.trigger(t.events.action_end);
}
/**
* on item image update, update the image inside the slider if relevant
*/
function onitemimageupdate(event, index, urlimage) {
if (g_objslide1.data("index") == index) {
objitem = g_gallery.getitem(index);
setimagetoslide(g_objslide1, objitem, true); //force
}
if (g_objslide2.data("index") == index) {
objitem = g_gallery.getitem(index);
setimagetoslide(g_objslide2, objitem, true);
}
if (g_objslide3.data("index") == index) {
objitem = g_gallery.getitem(index);
setimagetoslide(g_objslide3, objitem, true);
}
}
/**
* after image loaded. position video play button
*/
function onslideimageloaded(data, objslide) {
objslide = jquery(objslide);
var objimage = t.getslideimage(objslide);
var objbuttonvideoplay = getslidevideoplaybutton(objslide);
var objsize = g_functions.getelementsize(objimage);
g_functions.placeelement(objbuttonvideoplay, "center", "middle", objsize.left, objsize.top, objimage);
}
/**
* init event of current slide
*/
function initslideevents(objslide) {
//set video player events
var objvideoplaybutton = getslidevideoplaybutton(objslide);
g_functions.addclassonhover(objvideoplaybutton);
g_functions.setbuttononclick(objvideoplaybutton, objvideoplayclick);
}
/**
* init events
*/
function initevents() {
//on item image update, update the image inside the slider if relevant
g_objgallery.on(g_gallery.events.item_image_updated, onitemimageupdate);
//on item change, change the item in the slider.
g_objgallery.on(g_gallery.events.item_change, onitemchange);
if (g_objbullets)
jquery(g_objbullets).on(g_objbullets.events.bullet_click, onbulletclick);
//arrows events
if (g_options.slider_enable_arrows == true) {
g_functions.addclassonhover(g_objarrowright, "ug-arrow-hover");
g_functions.addclassonhover(g_objarrowleft, "ug-arrow-hover");
g_gallery.setnextbutton(g_objarrowright);
g_gallery.setprevbutton(g_objarrowleft);
}
//show / hide controls
if (g_options.slider_controls_always_on == false) {
//assign hover evens only if no touch device
g_objslider.hover(onmouseenter, onmouseleave);
}
//touch events appear on tap event
g_objslider.on("touchend click", onclick);
//actual click event
g_objthis.on(t.events.click, onactualclick);
//show / hide text panel, if it's saparate from controls
if (g_objtextpanel && g_temp.istextpanelsaparatehover == true) {
g_objslider.hover(showtextpanel, hidetextpanel);
}
//init play / pause button
if (g_objbuttonplay) {
g_functions.addclassonhover(g_objbuttonplay, "ug-button-hover");
g_gallery.setplaybutton(g_objbuttonplay);
}
//init fullscreen button
if (g_objbuttonfullscreen) {
g_functions.addclassonhover(g_objbuttonfullscreen, "ug-button-hover");
g_gallery.setfullscreentogglebutton(g_objbuttonfullscreen);
}
//on zoom start / end events
if (g_objzoomslider) {
g_objthis.on(t.events.zoom_change, onzoomchange);
}
if (g_objzoompanel)
g_objzoompanel.initevents();
//init video player related events
g_objvideoplayer.initevents();
//video api events
jquery(g_objvideoplayer).on(g_objvideoplayer.events.show, onvideoplayershow);
jquery(g_objvideoplayer).on(g_objvideoplayer.events.hide, onvideoplayerhide);
//add slide events
initslideevents(g_objslide1);
initslideevents(g_objslide2);
initslideevents(g_objslide3);
//on image loaded
g_objthis.on(t.events.after_put_image, onslideimageloaded);
//image mouseenter / mouseleave event
//set mouseover events on the images
g_objslider.on("mouseenter", ".ug-item-wrapper img", function (event) {
g_objthis.trigger(t.events.image_mouseenter);
});
g_objslider.on("mouseleave", ".ug-item-wrapper img", function (event) {
var ismouseover = t.ismouseinsideslideimage(event);
if (ismouseover == false)
g_objthis.trigger(t.events.image_mouseleave);
});
}
/**
* destroy slider events
*/
this.destroy = function () {
g_objthis.off(t.events.after_put_image);
g_objgallery.off(g_gallery.events.item_image_updated);
g_objgallery.off(g_gallery.events.item_change);
if (g_objbullets)
jquery(g_objbullets).on(g_objbullets.events.bullet_click);
g_objslider.off("mouseenter");
g_objslider.off("mouseleave");
g_objslider.off("touchend");
g_objslider.off("click");
g_objthis.off(t.events.click);
if (g_objzoomslider)
g_objthis.off(t.events.zoom_change);
g_objthis.off(t.events.before_switch_slides);
jquery(g_objvideoplayer).off(g_objvideoplayer.events.show);
jquery(g_objvideoplayer).off(g_objvideoplayer.events.hide);
g_objvideoplayer.destroy();
g_objslider.off("mouseenter", ".ug-item-wrapper img");
g_objslider.off("mouseleave", ".ug-item-wrapper img");
}
function __________getters___________() { };
/**
* get loader class by loader type
*/
function getloaderclass() {
var loaderclass;
switch (g_options.slider_loader_type) {
default:
case 1: loaderclass = "ug-loader1"; break;
case 2: loaderclass = "ug-loader2"; break;
case 3: loaderclass = "ug-loader3"; break;
case 4: loaderclass = "ug-loader4"; break;
case 5: loaderclass = "ug-loader5"; break;
case 6: loaderclass = "ug-loader6"; break;
case 7: loaderclass = "ug-loader7"; break;
case 8: loaderclass = "ug-loader8"; break;
case 9: loaderclass = "ug-loader9"; break;
}
if (g_options.slider_loader_color == "black")
loaderclass += " ug-loader-black";
return (loaderclass);
}
/**
*
* get slide by number
*/
function getslidebynum(num) {
switch (num) {
case 1:
return (g_objslide1);
break;
case 2:
return (g_objslide2);
break;
case 3:
return (g_objslide3);
break;
default:
throw new error("wrong num: " + num);
break;
}
}
/**
*
* get slide direction of current item
*/
function getslidedirection(objitem) {
var slides = t.getslidesreference();
//validate if the item is not selected already
var currentindex = slides.objcurrentslide.data("index");
var nextindex = objitem.index;
var direction = "left";
if (currentindex > nextindex)
direction = "right";
return (direction);
}
/**
* get slide preloader
*/
function getslidepreloader(objslide) {
if (!objslide)
var objslide = t.getcurrentslide();
var objpreloader = objslide.children(".ug-slider-preloader");
return (objpreloader);
}
/**
* get slide videoplay button
*/
function getslidevideoplaybutton(objslide) {
var objbutton = objslide.children(".ug-button-videoplay");
return (objbutton);
}
/**
* get slide item
*/
function getslideitem(objslide) {
if (!objslide)
var objslide = t.getcurrentslide();
var index = objslide.data("index");
if (index == undefined)
return (null);
var objitem = g_gallery.getitem(index);
return (objitem);
}
/**
* get slide number
*/
function getnumslide(objslide) {
var numslide = objslide.data("slidenum");
return (numslide);
}
this.________external_general___________ = function () { };
/**
* init function for avia controls
* options: width / height
*/
this.init = function (objgallery, objoptions, optionsprefix) {
initslider(objgallery, objoptions, optionsprefix);
}
/**
* get slide image
*/
this.getslideimage = function (objslide) {
if (!objslide)
var objslide = t.getcurrentslide();
var objimage = objslide.find(".ug-item-wrapper img");
return (objimage);
}
/**
* set slider html
*/
this.sethtml = function (objparent) {
sethtmlslider(objparent);
}
/**
* run the slider
*/
this.run = function () {
runslider();
}
/**
* check if the inner object in place, for panning znd zooming posibility check
*/
this.isinnerinplace = function () {
var slides = t.getslidesreference();
var poscurrent = g_functions.getelementsize(slides.objcurrentslide);
var inplacex = -poscurrent.left;
var objinnersize = g_functions.getelementsize(g_objinner);
if (inplacex == objinnersize.left)
return (true);
else
return (false);
}
/**
* is animating
*/
this.isanimating = function () {
var isanimated = g_objinner.is(":animated");
return (isanimated);
}
/**
* check if the slide is current
*/
this.isslidecurrent = function (objslide) {
var numslide = objslide.data("slidenum");
if (g_temp.numcurrent == numslide)
return (true);
return (false);
}
/**
*
* tells if the slide has item
*/
this.isslidehasitem = function (objslide) {
var index = objslide.data("index");
if (index === undefined || index === null)
return (false);
return (true);
}
/**
* get image padding object for scaling the image
*/
this.getobjimagepadding = function () {
var objpadding = {
padding_top: g_options.slider_image_padding_top,
padding_bottom: g_options.slider_image_padding_bottom,
padding_left: g_options.slider_image_padding_left,
padding_right: g_options.slider_image_padding_right
};
return (objpadding);
}
/**
* get items reference by their order
*/
this.getslidesreference = function () {
var obj = {
objprevslide: getslidebynum(g_temp.numprev),
objnextslide: getslidebynum(g_temp.numnext),
objcurrentslide: getslidebynum(g_temp.numcurrent)
};
return (obj);
}
/**
* get current slide
*/
this.getcurrentslide = function () {
var slides = t.getslidesreference();
return (slides.objcurrentslide);
}
/**
* get index of current item
*/
this.getcurrentitemindex = function () {
var slides = t.getslidesreference();
var currentindex = slides.objcurrentslide.data("index");
if (currentindex === null || currentindex === undefined)
currentindex = -1;
return (currentindex);
}
/**
* get current slide item
*/
this.getcurrentitem = function () {
var currentindex = t.getcurrentitemindex();
if (currentindex == -1)
return (null);
var objitem = g_gallery.getitem(currentindex);
return (objitem);
}
/**
* get type of some slide
*/
this.getslidetype = function (objslide) {
if (objslide == undefined)
objslide = t.getcurrentslide();
var type = objslide.data("type");
return (type);
}
/**
* is mouse inside slide image
* get mouse position from event
*/
this.ismouseinsideslideimage = function (event) {
var objimage = t.getslideimage();
var point = g_functions.getmouseposition(event);
if (point.pagex === undefined)
point = g_objtouchslider.getlastmousepos();
var pointimg = g_functions.getmouseelementpoint(point, objimage);
var objsize = g_functions.getelementsize(objimage);
ismouseinside = g_functions.ispointinsideelement(pointimg, objsize);
return (ismouseinside);
}
/**
* check if current slide type is certain type
*/
this.iscurrentslidetype = function (type) {
var currentslidetype = t.getslidetype();
if (currentslidetype == type)
return (true);
return (false);
}
/**
* check if current slide is loading image
*/
this.iscurrentslideloadingimage = function () {
var currentslide = t.getcurrentslide();
var isloading = currentslide.data("isloading");
if (isloading === true)
return (true);
return (false);
}
/**
* change the slider to some item content
*/
this.setitem = function (objitem, forsetransition, role) {
var slides = t.getslidesreference();
//validate if the item is not selected already
var currentindex = slides.objcurrentslide.data("index");
var nextindex = objitem.index;
if (nextindex == currentindex) {
return (true);
}
var isfirstslide = (currentindex == undefined);
if (isfirstslide) {
setitemtoslide(slides.objcurrentslide, objitem);
t.placenabouritems();
} else {
var direction = "left"; //move foreward
var numitems = g_gallery.getnumitems();
if (role == "next")
direction = "left";
else if (role == "prev" || currentindex > nextindex)
direction = "right";
else if (currentindex > nextindex)
direction = "right";
dotransition(direction, objitem, forsetransition);
}
}
/**
* when the transition complete, put the next / prev items at their place
*/
this.placenabouritems = function () {
var slides = t.getslidesreference();
var currentindex = slides.objcurrentslide.data("index");
var itemprev = g_gallery.getprevitem(currentindex);
var itemnext = g_gallery.getnextitem(currentindex);
//trace(itemprev);
//trace(itemnext);
//trace("place " + currentindex, "next: "+);
setitemtoslide(slides.objnextslide, itemnext);
setitemtoslide(slides.objprevslide, itemprev);
positionslides();
}
this.________external_api___________ = function () { };
/**
* stop some slide action if active
*/
this.stopslideaction = function (objslide, ispause) {
if (!objslide)
objslide = t.getcurrentslide();
if (ispause === true)
g_objvideoplayer.pause();
else
g_objvideoplayer.hide();
// trace("stop action");
}
/**
* start some slide action if exists
*/
this.startslideaction = function (objslide) {
// trace("start action");
if (!objslide)
objslide = t.getcurrentslide();
var objitem = getslideitem(objslide);
if (objitem.type == "image")
return (true)
if (g_options.slider_video_constantsize == true)
setvideoplayerconstantsize();
setvideoplayerposition();
g_objvideoplayer.show();
switch (objitem.type) {
case "youtube":
g_objvideoplayer.playyoutube(objitem.videoid);
break;
case "vimeo":
g_objvideoplayer.playvimeo(objitem.videoid);
break;
case "html5video":
g_objvideoplayer.playhtml5video(objitem.videoogv, objitem.videowebm, objitem.videomp4, objitem.urlimage);
break;
case "soundcloud":
g_objvideoplayer.playsoundcloud(objitem.trackid);
break;
case "wistia":
g_objvideoplayer.playwistia(objitem.videoid);
break;
}
}
/**
* get the scale mode according the state (normal, fullscreen).
*/
this.getscalemode = function (objslide) {
if (!objslide)
var objslide = t.getcurrentslide();
var slidetype = t.getslidetype(objslide);
//return media scale mode
if (slidetype != "image")
return (g_options.slider_scale_mode_media);
if (g_options.slider_scale_mode == g_options.slider_scale_mode_fullscreen)
return (g_options.slider_scale_mode);
if (g_gallery.isfullscreen() == true)
return (g_options.slider_scale_mode_fullscreen);
else
return (g_options.slider_scale_mode);
}
/**
* get slider objects
*/
this.getobjects = function () {
var obj = {
g_objslider: g_objslider,
g_objinner: g_objinner,
g_options: g_options,
g_objzoomslider: g_objzoomslider
};
return (obj);
}
/**
* get zoom object
*/
this.getobjzoom = function () {
return (g_objzoomslider);
}
/**
* get slider options
*/
this.getoptions = function () {
return (g_options);
}
/**
* get slider element
*/
this.getelement = function () {
return (g_objslider);
}
/**
* get video object
*/
this.getvideoobject = function () {
return (g_objvideoplayer);
}
/**
* return true if current slider image fit the slider
* @returns
*/
this.iscurrentslideimagefit = function () {
var objslide = t.getcurrentslide();
var slidetype = t.getslidetype(objslide);
validateslidetype("image", objslide);
var objimage = t.getslideimage(objslide);
//if image don't yet added to dom, return false
if (objimage.length == 0)
return (false);
var isfit = g_functions.isimagefitparent(objimage);
return (isfit);
}
/**
* check if current image in place
*/
this.iscurrentimageinplace = function () {
var objimage = t.getslideimage();
if (objimage.length == 0)
return (false);
var scalemode = t.getscalemode();
var objpadding = t.getobjimagepadding();
var objitem = getslideitem();
var objparent = objimage.parent();
var objfitsize = g_functions.getimageinsideparentdata(objparent, objitem.imagewidth, objitem.imageheight, scalemode, objpadding);
var objsize = g_functions.getelementsize(objimage);
var output = false;
if (objfitsize.imagewidth == objsize.width)
output = true;
return (output);
}
/**
* if slide is bussy in some action
*/
this.isslideactionactive = function () {
return g_objvideoplayer.isvisible();
}
/**
* return if swipe action active
*/
this.isswiping = function () {
if (!g_objtouchslider)
return (false);
var isactive = g_objtouchslider.istouchactive();
return (isactive);
}
/**
* if slider preloading image (if preloader visible)
*/
this.ispreloading = function () {
var objpreloader = getslidepreloader();
if (objpreloader.is(":visible"))
return (true);
return (false);
}
/**
* set the options
*/
this.setoptions = function (objoptions) {
//change options by prefix
if (g_optionsprefix)
objoptions = g_functions.convertcustomprefixoptions(objoptions, g_optionsprefix, "slider");
g_options = jquery.extend(g_options, objoptions);
}
/**
* set the slider size
* works well on resize too.
*/
this.setsize = function (width, height) {
if (width < 0 || height < 0)
return (true);
var objcssslider = {};
objcssslider["width"] = width + "px";
objcssslider["height"] = height + "px";
g_objslider.css(objcssslider);
//set inner:
var objcssinner = {};
objcssinner["height"] = height + "px";
objcssinner["top"] = "0px";
objcssinner["left"] = "0px";
g_objinner.css(objcssinner);
//set slide wrapper
var objcssslide = {};
objcssslide["height"] = height + "px";
objcssslide["width"] = width + "px";
g_objslide1.css(objcssslide);
g_objslide2.css(objcssslide);
g_objslide3.css(objcssslide);
var itemwidth = width - g_options.slider_item_padding_left - g_options.slider_item_padding_right;
var itemheight = height - g_options.slider_item_padding_top - g_options.slider_item_padding_bottom;
//set item wrapper
var objcssitemwrapper = {};
objcssitemwrapper["width"] = itemwidth + "px";
objcssitemwrapper["height"] = itemheight + "px";
objcssitemwrapper["top"] = g_options.slider_item_padding_top + "px";
objcssitemwrapper["left"] = g_options.slider_item_padding_left + "px";
g_objslider.find(".ug-item-wrapper").css(objcssitemwrapper);
//set text panel size
if (g_objtextpanel) {
g_objtextpanel.setsizebyparent();
}
positionelements();
//set image to slides
resizeslideitem(g_objslide1);
resizeslideitem(g_objslide2);
resizeslideitem(g_objslide3);
positionslides();
//set video player size
var currentslidetype = t.getslidetype();
if (currentslidetype != "image" && g_options.slider_video_constantsize == true) {
setvideoplayerconstantsize();
} else {
var videowidth = width - g_options.slider_video_padding_left - g_options.slider_video_padding_right;
var videoheight = height - g_options.slider_video_padding_top - g_options.slider_video_padding_bottom;
//set video player size
g_objvideoplayer.setsize(videowidth, videoheight);
}
setvideoplayerposition();
}
/**
* refresh slide items after options change
*/
this.refreshslideitems = function () {
if (t.isanimating() == true)
return (true);
resizeslideitem(g_objslide1);
resizeslideitem(g_objslide2);
resizeslideitem(g_objslide3);
positionslides();
}
/**
* is mouse over the slider
*/
this.ismouseover = function () {
return g_objslider.ismouseover();
}
/**
* set slider position
*/
this.setposition = function (left, top) {
g_functions.placeelement(g_objslider, left, top);
}
/**
* zoom in
*/
this.zoomin = function () {
if (!g_objzoomslider)
return (true);
g_objzoomslider.zoomin();
}
/**
* zoom out
*/
this.zoomout = function () {
if (!g_objzoomslider)
return (true);
g_objzoomslider.zoomout();
}
/**
* zoom back to original
*/
this.zoomback = function () {
if (!g_objzoomslider)
return (true);
g_objzoomslider.zoomback();
}
}
/** -------------- textpanel class ---------------------*/
function ugtextpanel() {
var t = this;
var g_objpanel, g_objparent, g_objtitle, g_objdesc;
var g_objbg, g_objtextwrapper, g_gallery;
var g_functions = new ugfunctions(), g_optionsprefix = "";
var g_options = {
textpanel_align: "bottom", //(top , bottom), textpanel align according the parent
textpanel_margin: 0, //margin from the textpanel position according the textpanel_align
textpanel_text_valign: "middle", //middle, top, bottom - text vertical align
textpanel_padding_top: 10, //textpanel padding top
textpanel_padding_bottom: 10, //textpanel padding bottom
textpanel_height: null, //textpanel height. if null it will be set dynamically
textpanel_padding_title_description: 5, //the space between the title and the description
textpanel_padding_right: 11, //cut some space for text from right
textpanel_padding_left: 11, //cut some space for text from left
textpanel_fade_duration: 200, //the fade duration of textpanel appear
textpanel_enable_title: true, //enable the title text
textpanel_enable_description: true, //enable the description text
textpanel_enable_bg: true, //enable the textpanel background
textpanel_bg_color: "#000000", //textpanel background color
textpanel_bg_opacity: 0.4, //textpanel background opacity
textpanel_title_color: null, //textpanel title color. if null - take from css
textpanel_title_font_family: null, //textpanel title font family. if null - take from css
textpanel_title_text_align: null, //textpanel title text align. if null - take from css
textpanel_title_font_size: null, //textpanel title font size. if null - take from css
textpanel_title_bold: null, //textpanel title bold. if null - take from css
textpanel_css_title: {}, //textpanel additional css of the title
textpanel_desc_color: null, //textpanel description font family. if null - take from css
textpanel_desc_font_family: null, //textpanel description font family. if null - take from css
textpanel_desc_text_align: null, //textpanel description text align. if null - take from css
textpanel_desc_font_size: null, //textpanel description font size. if null - take from css
textpanel_desc_bold: null, //textpanel description bold. if null - take from css
textpanel_css_description: {}, //textpanel additional css of the description
textpanel_desc_style_as_title: false, //set that the description style will be as title
textpanel_bg_css: {} //textpanel background css
};
var g_temp = {
isfirsttime: true,
setinternalheight: true, //flag if set internal height or not
lasttitlebottom: 0,
lastdescheight: 0
};
/**
* position elements from top
*/
function positionelementstop(animateheight, starty) {
if (!starty)
var starty = g_options.textpanel_padding_top;
//place title
var maxy = starty;
//place title
if (g_objtitle) {
var titley = maxy;
g_functions.placeelement(g_objtitle, 0, titley);
var istitlevisible = g_objtitle.is(":visible");
if (istitlevisible == true) {
var objtitlesize = g_functions.getelementsize(g_objtitle);
var maxy = objtitlesize.bottom;
if (maxy > 0)
g_temp.lasttitlebottom = maxy;
} else {
var maxy = 20; //get last or assumed maxy
if (g_temp.lasttitlebottom > 0)
maxy = g_temp.lasttitlebottom;
}
}
//place description
var textdesc = "";
if (g_objdesc)
textdesc = jquery.trim(g_objdesc.text());
if (textdesc != "") {
var descy = maxy;
if (g_objtitle)
descy += g_options.textpanel_padding_title_description;
g_functions.placeelement(g_objdesc, 0, descy);
var isvisible = jquery(g_objdesc).is(":visible");
if (isvisible == true) {
var objdescsize = g_functions.getelementsize(g_objdesc);
maxy = objdescsize.bottom;
if (objdescsize.height > 0)
g_temp.lastdescheight = objdescsize.height;
} else {
var descheight = 16; //take from last saved
if (g_temp.lastdescheight > 0)
descheight = g_temp.lastdescheight;
maxy = descy + descheight;
}
}
//change panel height
if (!g_options.textpanel_height && g_temp.setinternalheight == true) {
var panelheight = maxy + g_options.textpanel_padding_bottom;
setheight(panelheight, animateheight);
}
}
/**
* get total text and description height
*/
function gettotaltextheight() {
var totalheight = 0;
if (g_objtitle)
totalheight += g_objtitle.outerheight();
if (g_objdesc) {
var textdesc = "";
if (g_objdesc)
textdesc = jquery.trim(g_objdesc.text());
if (textdesc != "") {
if (g_objtitle)
totalheight += g_options.textpanel_padding_title_description;
totalheight += g_objdesc.outerheight();
}
}
return (totalheight);
}
/**
* position elements to center
*/
function positionelementsmiddle() {
var totaltextheight = gettotaltextheight();
var starty = (g_objtextwrapper.height() - totaltextheight) / 2;
positionelementstop(false, starty);
}
/**
* position elements to bottom
*/
function positionelementbottom() {
var totaltextheight = gettotaltextheight();
var starty = g_objtextwrapper.height() - totaltextheight - g_options.textpanel_padding_bottom;
positionelementstop(false, starty);
}
/**
* position elements inside the panel
*/
this.positionelements = function (animateheight) {
//if(g_objpanel.is(":visible") == false)
//trace("the text panel is hidden. can't position elements")
//if height not set, position only top
if (!g_options.textpanel_height || g_options.textpanel_text_valign == "top") {
positionelementstop(animateheight);
return (false);
}
switch (g_options.textpanel_text_valign) {
default:
case "top":
positionelementstop(false); //no animation in this case
break;
case "bottom":
positionelementbottom();
break;
case "center":
case "middle":
positionelementsmiddle();
break;
}
}
/**
* set new panel height
*/
function setheight(height, animateheight) {
if (!animateheight)
var animateheight = false;
if (animateheight == true) {
if (g_objbg) {
//avoid background jumps
var currentheight = g_objbg.height();
if (height > currentheight)
g_objbg.height(height);
}
var objcss = { height: height + "px" };
g_objpanel.add(g_objtextwrapper).animate(objcss, g_options.textpanel_fade_duration);
} else {
if (g_objbg)
g_objbg.height(height);
g_objpanel.add(g_objtextwrapper).height(height);
}
}
/**
* init the panel
*/
this.init = function (objgallery, customoptions, optionsprefix) {
g_gallery = objgallery;
//change options by prefix
if (optionsprefix) {
g_optionsprefix = optionsprefix;
customoptions = g_functions.convertcustomprefixoptions(customoptions, g_optionsprefix, "textpanel");
}
if (customoptions)
g_options = jquery.extend(g_options, customoptions);
//validation:
if (g_options.textpanel_enable_title == false && g_options.textpanel_enable_description == false)
throw new error("textpanel error: the title or description must be enabled");
if (g_options.textpanel_height && g_options.textpanel_height < 0)
g_options.textpanel_height = null;
//copy desc style from title
if (g_options.textpanel_desc_style_as_title == true) {
if (!g_options.textpanel_desc_color)
g_options.textpanel_desc_color = g_options.textpanel_title_color;
if (!g_options.textpanel_desc_bold)
g_options.textpanel_desc_bold = g_options.textpanel_title_bold;
if (!g_options.textpanel_desc_font_family)
g_options.textpanel_desc_font_family = g_options.textpanel_title_font_family;
if (!g_options.textpanel_desc_font_size)
g_options.textpanel_desc_font_size = g_options.textpanel_title_font_size;
if (!g_options.textpanel_desc_text_align)
g_options.textpanel_desc_text_align = g_options.textpanel_title_text_align;
}
}
/**
* append the bullets html to some parent
*/
this.appendhtml = function (objparent, addclass) {
g_objparent = objparent;
if (addclass) {
addclass = " " + addclass;
} else
addclass = "";
var html = "
";
if (g_options.textpanel_enable_bg == true)
html += "";
html += "
";
if (g_options.textpanel_enable_title == true)
html += "";
if (g_options.textpanel_enable_description == true)
html += "";
html += "
";
objparent.append(html);
g_objpanel = objparent.children(".ug-textpanel");
g_objtextwrapper = g_objpanel.children(".ug-textpanel-textwrapper");
setcss();
}
/**
* set panel css according the options
*/
function setcss() {
//set background css
if (g_options.textpanel_enable_bg == true) {
g_objbg = g_objpanel.children(".ug-textpanel-bg");
g_objbg.fadeto(0, g_options.textpanel_bg_opacity);
var objcssbg = { "background-color": g_options.textpanel_bg_color };
objcssbg = jquery.extend(objcssbg, g_options.textpanel_bg_css);
g_objbg.css(objcssbg);
}
//set title css from options
if (g_options.textpanel_enable_title == true) {
g_objtitle = g_objtextwrapper.children(".ug-textpanel-title");
var objcsstitle = {};
if (g_options.textpanel_title_color !== null)
objcsstitle["color"] = g_options.textpanel_title_color;
if (g_options.textpanel_title_font_family !== null)
objcsstitle["font-family"] = g_options.textpanel_title_font_family;
if (g_options.textpanel_title_text_align !== null)
objcsstitle["text-align"] = g_options.textpanel_title_text_align;
if (g_options.textpanel_title_font_size !== null)
objcsstitle["font-size"] = g_options.textpanel_title_font_size + "px";
if (g_options.textpanel_title_bold !== null) {
if (g_options.textpanel_title_bold === true)
objcsstitle["font-weight"] = "bold";
else
objcsstitle["font-weight"] = "normal";
}
//set additional css
if (g_options.textpanel_css_title)
objcsstitle = jquery.extend(objcsstitle, g_options.textpanel_css_title);
g_objtitle.css(objcsstitle);
}
//set description css
if (g_options.textpanel_enable_description == true) {
g_objdesc = g_objtextwrapper.children(".ug-textpanel-description");
var objcssdesc = {};
if (g_options.textpanel_desc_color !== null)
objcssdesc["color"] = g_options.textpanel_desc_color;
if (g_options.textpanel_desc_font_family !== null)
objcssdesc["font-family"] = g_options.textpanel_desc_font_family;
if (g_options.textpanel_desc_text_align !== null)
objcssdesc["text-align"] = g_options.textpanel_desc_text_align;
if (g_options.textpanel_desc_font_size !== null)
objcssdesc["font-size"] = g_options.textpanel_desc_font_size + "px";
if (g_options.textpanel_desc_bold !== null) {
if (g_options.textpanel_desc_bold === true)
objcssdesc["font-weight"] = "bold";
else
objcssdesc["font-weight"] = "normal";
}
//set additional css
if (g_options.textpanel_css_title)
objcssdesc = jquery.extend(objcssdesc, g_options.textpanel_css_description);
g_objdesc.css(objcssdesc);
}
}
/**
* on item change, set the text
*/
function onitemchange() {
var objitem = g_gallery.getselecteditem();
t.settext(objitem.title, objitem.description);
}
/**
* init events
*/
function initevents() {
//on item change, set the text in the slider.
jquery(g_gallery).on(g_gallery.events.item_change, onitemchange);
}
/**
* destroy the events
*/
this.destroy = function () {
jquery(g_gallery).off(g_gallery.events.item_change);
}
/**
* run the text panel
*/
this.run = function () {
t.setsizebyparent();
initevents();
}
/**
* set panel size
*/
this.setpanelsize = function (panelwidth, panelheight) {
g_temp.setinternalheight = true;
if (!panelheight)
var panelheight = 80; //some default number
else
g_temp.setinternalheight = false;
if (g_options.textpanel_height)
panelheight = g_options.textpanel_height;
g_objpanel.width(panelwidth);
g_objpanel.height(panelheight);
//set background size
if (g_objbg) {
g_objbg.width(panelwidth);
g_objbg.height(panelheight);
}
//set textwrapper size and position
var textwrapperwidth = panelwidth - g_options.textpanel_padding_left - g_options.textpanel_padding_right;
var textwrapperleft = g_options.textpanel_padding_left;
g_functions.setelementsizeandposition(g_objtextwrapper, textwrapperleft, 0, textwrapperwidth, panelheight);
//set text width
if (g_objtitle)
g_objtitle.width(textwrapperwidth);
//set description height
if (g_objdesc)
g_objdesc.width(textwrapperwidth);
if (g_temp.isfirsttime == false)
t.positionelements(false);
}
/**
* set size by parent. the height is set to default meanwhile
*/
this.setsizebyparent = function () {
var objsize = g_functions.getelementsize(g_objparent);
t.setpanelsize(objsize.width);
}
/**
* set plain sext without other manipulations
*/
this.settextplain = function (title, description) {
if (g_objtitle)
g_objtitle.html(title);
if (g_objdesc)
g_objdesc.html(description);
}
/**
* set html text
*/
this.settext = function (title, description) {
if (g_temp.isfirsttime == true) {
t.settextplain(title, description);
g_temp.isfirsttime = false;
t.positionelements(false);
} else { //width animation
g_objtextwrapper.stop().fadeto(g_options.textpanel_fade_duration, 0, function () {
t.settextplain(title, description);
t.positionelements(true);
jquery(this).fadeto(g_options.textpanel_fade_duration, 1);
});
}
}
/**
* position the panel
*/
this.positionpanel = function (customtop, customleft) {
var objcss = {};
if (customtop !== undefined && customtop !== null) {
objcss.top = customtop;
objcss.bottom = "auto";
} else {
switch (g_options.textpanel_align) {
case "top":
objcss.top = g_options.textpanel_margin + "px";
break;
case "bottom":
objcss.top = "auto";
objcss.bottom = g_options.textpanel_margin + "px";
break;
case "middle":
objcss.top = g_functions.getelementrelativepos(g_objpanel, "middle", g_options.textpanel_margin);
break;
}
}
if (customleft !== undefined && customleft !== null)
objcss.left = customleft;
g_objpanel.css(objcss);
}
/**
* set custom options
*/
this.setoptions = function (objoptions) {
if (g_optionsprefix)
objoptions = g_functions.convertcustomprefixoptions(objoptions, g_optionsprefix, "textpanel");
g_options = jquery.extend(g_options, objoptions);
}
/**
* get html element
*/
this.getelement = function () {
return (g_objpanel);
}
/**
* get element size
*/
this.getsize = function () {
var objsize = g_functions.getelementsize(g_objpanel);
return (objsize);
}
/**
* refresh panel size, position and contents
*/
this.refresh = function (toshow, noposition, panelwidth, panelheight) {
setcss();
if (!panelwidth)
t.setsizebyparent();
else
t.setpanelsize(panelwidth, panelheight);
t.positionelements(false);
if (noposition !== true)
t.positionpanel();
if (toshow === true)
t.show();
}
/**
* hide the panel
*/
this.hide = function () {
g_objpanel.hide();
}
/**
* show the panel
*/
this.show = function () {
g_objpanel.show();
}
/**
* get options
*/
this.getoptions = function () {
return (g_options);
}
/**
* get text panel option
*/
this.getoption = function (optionname) {
if (g_options.hasownproperty(optionname) == false)
return (null);
return (g_options[optionname]);
}
}
/** -------------- ugzoombuttonspanel class ---------------------*/
/**
* zoom buttons panel class
*/
function ugzoombuttonspanel() {
var t = this;
var g_objpanel, g_objparent, g_objbuttonplus, g_objbuttonminus, g_objbuttonreturn;
var g_slider = new ugslider;
var g_functions = new ugfunctions();
var g_options = {
slider_zoompanel_skin: "" //skin of the zoom panel, if empty inherit from gallery skin
};
var g_temp = {
};
/**
* init the panel
*/
this.init = function (objslider, customoptions) {
g_slider = objslider;
if (customoptions)
g_options = jquery.extend(g_options, customoptions);
}
/**
* append the bullets html to some parent
*/
this.appendhtml = function (objparent) {
g_objparent = objparent;
var html = "
";
html += "";
html += "";
html += "";
html += "
";
objparent.append(html);
g_objpanel = objparent.children(".ug-zoompanel");
g_objbuttonplus = g_objpanel.children(".ug-zoompanel-plus");
g_objbuttonminus = g_objpanel.children(".ug-zoompanel-minus");
g_objbuttonreturn = g_objpanel.children(".ug-zoompanel-return");
}
/**
* set objects - use it instead insert html
*/
this.setobjects = function (objbuttonplus, objbuttonminus, objbuttonreturn) {
g_objbuttonplus = objbuttonplus;
g_objbuttonminus = objbuttonminus;
g_objbuttonreturn = objbuttonreturn;
if (g_objbuttonminus)
g_objbuttonminus.addclass("ug-zoompanel-button-disabled");
if (g_objbuttonreturn)
g_objbuttonreturn.addclass("ug-zoompanel-button-disabled");
}
/**
* get buttons element
*/
this.getelement = function () {
return (g_objpanel);
}
/**
* check if the button disabled
*/
function isbuttondisabled(objbutton) {
if (!objbutton)
return (true);
if (objbutton.hasclass("ug-zoompanel-button-disabled"))
return (true);
return (false);
}
/**
* disable some button
*/
function disablebutton(objbutton) {
if (objbutton)
objbutton.addclass("ug-zoompanel-button-disabled");
}
/**
* enable some button
*/
function enablebutton(objbutton) {
if (objbutton)
objbutton.removeclass("ug-zoompanel-button-disabled");
}
/**
* on zoom change
*/
function onzoomchange() {
//skip not image types
if (g_slider.iscurrentslidetype("image") == false)
return (true);
var isfit = g_slider.iscurrentslideimagefit();
if (isfit == true) { //if fit, disable buttons
if (isbuttondisabled(g_objbuttonminus) == false) {
disablebutton(g_objbuttonminus);
disablebutton(g_objbuttonreturn);
}
} else { //if not fit, enable minus buttons
if (isbuttondisabled(g_objbuttonminus) == true) {
enablebutton(g_objbuttonminus);
enablebutton(g_objbuttonreturn);
}
}
}
/**
* init zoompanel events
*/
t.initevents = function () {
//add hover class on buttons
g_functions.addclassonhover(g_objbuttonplus, "ug-button-hover");
g_functions.addclassonhover(g_objbuttonminus, "ug-button-hover");
g_functions.addclassonhover(g_objbuttonreturn, "ug-button-hover");
//set buttons click events
g_functions.setbuttononclick(g_objbuttonplus, function () {
if (isbuttondisabled(g_objbuttonplus) == true)
return (true);
g_slider.zoomin();
});
g_functions.setbuttononclick(g_objbuttonminus, function () {
if (isbuttondisabled(g_objbuttonminus) == true)
return (true);
g_slider.zoomout();
});
g_functions.setbuttononclick(g_objbuttonreturn, function () {
if (isbuttondisabled(g_objbuttonreturn) == true)
return (true);
g_slider.zoomback();
});
//on zoom change event
jquery(g_slider).on(g_slider.events.zoom_change, onzoomchange);
jquery(g_slider).on(g_slider.events.item_changed, onzoomchange);
}
}
/** -------------- ugbullets class ---------------------*/
function ugbullets() {
var t = this, g_numbullets = 0, g_gallery = new unitegallerymain();
var g_objbullets, g_objparent, g_activeindex = -1, g_bulletwidth;
var g_functions = new ugfunctions();
var g_temp = {
isinited: false
};
var g_options = {
bullets_skin: "", //bullets_skin: "" //skin of the bullets, if empty inherit from gallery skin
bullets_addclass: "", //bullets object class addition
bullets_space_between: -1 //set the space between bullets. if -1 then will be set default space from the skins
}
/**
* the events
*/
this.events = {
bullet_click: "bullet_click"
};
/**
* init the bullets
*/
this.init = function (gallery, customoptions, numbullets) {
g_gallery = gallery;
if (numbullets)
g_numbullets = numbullets;
else
g_numbullets = g_gallery.getnumitems();
g_temp.isinited = true;
g_options = jquery.extend(g_options, customoptions);
if (g_options.bullets_skin == "")
g_options.bullets_skin = g_options.gallery_skin;
}
/**
* add bullets to the html
*/
function sethtmlbullets() {
var html = "";
var addhtml = "";
if (g_options.bullets_space_between != -1)
addhtml = " style='margin-left:" + g_options.bullets_space_between + "px'";
for (var i = 0; i < g_numbullets; i++) {
if (i == 0)
html += "";
else
html += "";
}
g_objbullets.html(html);
//set bullet width value
if (!g_bulletwidth) {
var objbullet = g_objbullets.find(".ug-bullet:first-child");
if (objbullet.length)
g_bulletwidth = objbullet.width();
}
}
/**
* get total bullets width
*/
this.getbulletswidth = function () {
if (g_numbullets == 0)
return (0);
if (!g_bulletwidth)
return (0);
var totalwidth = g_numbullets * g_bulletwidth + (g_numbullets - 1) * g_options.bullets_space_between;
return (totalwidth);
}
/**
* append the bullets html to some parent
*/
this.appendhtml = function (objparent) {
g_objparent = objparent;
validateinited();
var addclass = "";
if (g_options.bullets_addclass != "")
addclass = " " + g_options.bullets_addclass;
var html = "
";
html += "
";
g_objbullets = jquery(html);
objparent.append(g_objbullets);
sethtmlbullets();
initevents();
}
/**
* update number of bullets
*/
this.updatenumbullets = function (numbullets) {
g_numbullets = numbullets;
sethtmlbullets();
initevents();
}
/**
*
* on bullet click
*/
function onbulletclick(objbullet) {
//filter not active only
if (t.isactive(objbullet) == true)
return (true);
var index = objbullet.index();
jquery(t).trigger(t.events.bullet_click, index);
}
/**
* init the bullets events
* trigger bullet click event
*/
function initevents() {
var objbullets = g_objbullets.children(".ug-bullet");
g_functions.setbuttononclick(objbullets, onbulletclick);
objbullets.on("mousedown mouseup", function (event) {
//event.preventdefault();
return (false);
});
}
/**
* get the bullets element
*/
this.getelement = function () {
return g_objbullets;
}
/**
* set some item active
*/
this.setactive = function (index) {
validateinited();
validateindex(index);
var children = g_objbullets.children(".ug-bullet");
children.removeclass("ug-bullet-active");
var bullet = jquery(children[index]);
bullet.addclass("ug-bullet-active");
g_activeindex = index;
}
/**
* check if the bullet is active
*/
this.isactive = function (index) {
validateindex(index);
if (typeof index != "number")
var objbullet = index;
else {
var objbullet = g_objbullets.children(".ug-bullet")[index];
}
if (objbullet.hasclass("ug-bullet-active"))
return (true);
return (false);
}
/**
* get bullets number
*/
this.getnumbullets = function () {
return (g_numbullets);
}
/**
* validate bullets index
*/
function validateindex(index) {
if (index < 0 || index >= g_numbullets)
throw new error("wrong bullet index: " + index);
}
/**
* validate that the bullets are inited
*/
function validateinited() {
if (g_temp.isinited == true)
return (true);
throw new error("the bullets are not inited!");
}
}
/** -------------- ugprogressbar class ---------------------*/
function ugprogressbar() {
var t = this, g_isinited = false;
var g_percent = 0, g_objbar, g_objinner, g_functions = new ugfunctions();
var g_options = {
slider_progressbar_color: "#ffffff", //progress bar color
slider_progressbar_opacity: 0.6, //progress bar opacity
slider_progressbar_line_width: 5 //progress bar line width
}
/**
* put progress pie to some wrapper
*/
this.put = function (g_objwrapper, useroptions) {
if (useroptions)
g_options = jquery.extend(g_options, useroptions);
g_objwrapper.append("
");
g_objbar = g_objwrapper.children(".ug-progress-bar");
g_objinner = g_objbar.children(".ug-progress-bar-inner");
//init the objects
g_objinner.css("background-color", g_options.slider_progressbar_color);
g_objbar.height(g_options.slider_progressbar_line_width);
g_objinner.height(g_options.slider_progressbar_line_width);
g_objinner.width("0%");
//set opacity old way (because ie bug)
var opacity = g_options.slider_progressbar_opacity;
var objinnerhtml = g_objinner[0];
objinnerhtml.style.opacity = opacity;
objinnerhtml.style.filter = 'alpha(opacity=' + opacity * 100 + ')';
}
/**
* put the pie hidden
*/
this.puthidden = function (g_objwrapper, useroptions) {
t.put(g_objwrapper, useroptions);
g_objbar.hide();
}
/**
* get the bar object
*/
this.getelement = function () {
return (g_objbar);
}
/**
* set progress bar size
*/
this.setsize = function (width) {
g_objbar.width(width);
g_objinner.width(width);
t.draw();
}
/**
* set position
*/
this.setposition = function (left, top, offsetleft, offsettop) {
g_functions.placeelement(g_objbar, left, top, offsetleft, offsettop);
}
/**
* draw the progress bar
*/
this.draw = function () {
var innerwidth = g_percent * 100;
g_objinner.width(innerwidth + "%");
}
/**
* set and draw the progress
*/
this.setprogress = function (percent) {
g_percent = g_functions.normalizepercent(percent);
//debugline(g_percent, true);
t.draw();
}
/**
* get type string
*/
this.gettype = function () {
return ("bar");
}
}
/** -------------- ugprogresspie class ---------------------*/
function ugprogresspie() {
var t = this, g_isinited = false;
var g_percent, g_objpie, g_functions = new ugfunctions();
var g_options = {
slider_progresspie_type_fill: false, //false is stroke, true is fill - the progress pie type, stroke of fill
slider_progresspie_color1: "#b5b5b5", //the first color of the progress pie
slider_progresspie_color2: "#e5e5e5", //progress pie second color
slider_progresspie_stroke_width: 6, //progress pie stroke width
slider_progresspie_width: 30, //progess pie width
slider_progresspie_height: 30 //progress pie height
}
/**
* put progress pie to some wrapper
*/
this.put = function (g_objwrapper, useroptions) {
if (useroptions)
g_options = jquery.extend(g_options, useroptions);
g_objwrapper.append("");
g_objpie = g_objwrapper.children(".ug-canvas-pie");
}
/**
* put the pie hidden
*/
this.puthidden = function (g_objwrapper, useroptions) {
t.put(g_objwrapper, useroptions);
draw(0.1);
g_objpie.hide();
}
/**
* get jquery object
*/
this.getelement = function () {
return (g_objpie);
}
/**
* set position
*/
this.setposition = function (left, top) {
g_functions.placeelement(g_objpie, left, top);
}
/**
* get the height and width of the object
*/
this.getsize = function () {
var obj = {
width: g_options.slider_progresspie_width,
height: g_options.slider_progresspie_height
};
return (obj);
}
/**
* draw the progress pie
*/
function draw(percent) {
if (!percent)
var percent = 0;
var radius = math.min(g_options.slider_progresspie_width, g_options.slider_progresspie_height) / 2;
var ctx = g_objpie[0].getcontext('2d');
//init the context
if (g_isinited == false) {
g_isinited = true;
ctx.rotate(math.pi * (3 / 2));
ctx.translate(-2 * radius, 0);
}
ctx.clearrect(0, 0, g_options.slider_progresspie_width, g_options.slider_progresspie_height);
var centerx = g_options.slider_progresspie_width / 2;
var centery = g_options.slider_progresspie_height / 2;
//draw main arc
var startpoint = 0;
var endpoint = percent * math.pi * 2;
if (g_options.slider_progresspie_type_fill == true) { //fill
ctx.beginpath();
ctx.moveto(centerx, centery);
ctx.arc(centerx, centery, radius, startpoint, endpoint);
ctx.lineto(centerx, centery);
ctx.fillstyle = g_options.slider_progresspie_color1;
ctx.fill();
ctx.closepath();
} else { //stroke
ctx.globalcompositeoperation = "source-over";
ctx.beginpath();
ctx.moveto(centerx, centery);
ctx.arc(centerx, centery, radius, startpoint, endpoint);
ctx.lineto(centerx, centery);
ctx.fillstyle = g_options.slider_progresspie_color1;
ctx.fill();
ctx.closepath();
ctx.globalcompositeoperation = "destination-out";
var radius2 = radius - g_options.slider_progresspie_stroke_width;
ctx.beginpath();
ctx.moveto(centerx, centery);
ctx.arc(centerx, centery, radius2, startpoint, endpoint);
ctx.lineto(centerx, centery);
ctx.fillstyle = g_options.slider_progresspie_color1;
ctx.fill();
ctx.closepath();
}
//draw rest arc (only on fill type):
if (g_options.slider_progresspie_type_fill == true) {
startpoint = endpoint;
endpoint = math.pi * 2;
ctx.beginpath();
ctx.arc(centerx, centery, radius, startpoint, endpoint);
ctx.lineto(centerx, centery);
ctx.fillstyle = g_options.slider_progresspie_color2;
ctx.fill();
ctx.closepath();
}
}
/**
* set progress (0-1)
*/
this.setprogress = function (percent) {
percent = g_functions.normalizepercent(percent);
g_percent = percent;
draw(percent);
}
/**
* get type string
*/
this.gettype = function () {
return ("pie");
}
}
/**f
* touch thumbs control class
* addon to strip gallery
*/
function ugtouchslidercontrol() {
var g_objslider, g_objinner, g_parent = new ugslider();
var g_objparent, g_options, t = this;
var g_functions = new ugfunctions();
var g_options = {
slider_transition_continuedrag_speed: 250, //the duration of continue dragging after drag end
slider_transition_continuedrag_easing: "linear", //easing function of continue dragging animation
slider_transition_return_speed: 300, //the duration of the "return to place" animation
slider_transition_return_easing: "easeinoutquad" //easing function of the "return to place" animation
};
var g_temp = {
touch_active: false,
startmousex: 0,
startmousey: 0,
lastmousex: 0,
lastmousey: 0,
startposx: 0,
starttime: 0,
isinitdatavalid: false,
slides: null,
lastnumtouches: 0,
isdragging: false,
storedeventid: "touchslider",
videostartx: 0,
isdragvideo: false,
videoobject: null
};
/**
* get diff inner object position from current item pos
*/
function getdiffposfromcurrentitem(slides) {
if (!slides)
var slides = g_parent.getslidesreference();
var poscurrent = g_functions.getelementsize(slides.objcurrentslide);
var inplacex = -poscurrent.left;
var objinnersize = g_functions.getelementsize(g_objinner);
var diffpos = inplacex - objinnersize.left;
return (diffpos);
}
/**
* check if the movement that was held is valid for slide change
*/
function ismovementvalidforchange() {
var slides = g_parent.getslidesreference();
//check position, if more then half, move
var diffpos = getdiffposfromcurrentitem(slides);
var breaksize = math.round(slides.objcurrentslide.width() * 3 / 8);
if (math.abs(diffpos) >= breaksize)
return (true);
//check gesture, if vertical mostly then not move
var diffx = math.abs(g_temp.lastmousex - g_temp.startmousex);
var diffy = math.abs(g_temp.lastmousey - g_temp.startmousey);
//debugline("diffx: " + diffx, true, true);
if (diffx < 20)
return (false);
//if(diffy >= diffx)
//return(false);
//check time. short time always move
var endtime = jquery.now();
var difftime = endtime - g_temp.starttime;
//debugline("time: " + difftime, true);
if (difftime < 500)
return (true);
return (false);
}
/**
* check tab event occured
* invokes on touchend event on the slider object
*/
this.istapeventoccured = function (event) {
//validate one touch
var arrtouches = g_functions.getarrtouches(event);
var numtouches = arrtouches.length;
if (numtouches != 0 || g_temp.lastnumtouches != 0) {
g_temp.lastnumtouches = numtouches;
return (false);
}
g_temp.lastnumtouches = numtouches;
var slides = g_parent.getslidesreference();
//check position, if more then half, move
var diffpos = getdiffposfromcurrentitem(slides);
//check gesture, if vertical mostly then not move
var diffx = math.abs(g_temp.lastmousex - g_temp.startmousex);
var diffy = math.abs(g_temp.lastmousey - g_temp.startmousey);
//check by time
var endtime = jquery.now();
var difftime = endtime - g_temp.starttime;
//combine move and time
if (diffx < 20 && diffy < 50 && difftime < 500)
return (true);
return (false);
}
/**
* return the item to place
*/
function returntoplace(slides) {
if (g_parent.isinnerinplace() == true)
return (false);
//trigger before return event
g_objparent.trigger(g_parent.events.before_return);
if (!slides)
var slides = g_parent.getslidesreference();
var poscurrent = g_functions.getelementsize(slides.objcurrentslide);
var destx = -poscurrent.left;
//animate objects
g_objinner.animate({ left: destx + "px" }, {
duration: g_options.slider_transition_return_speed,
easing: g_options.slider_transition_continuedrag_easing,
queue: false,
progress: function (animation, number, remainingms) {
//check drag video
if (g_temp.isdragvideo == true) {
var objsize = g_functions.getelementsize(g_objinner);
var innerx = objsize.left;
var posdiff = innerx - destx;
var videoposx = g_temp.videostartx + posdiff;
g_temp.videoobject.css("left", videoposx);
}
},
complete: function () {
g_objparent.trigger(g_parent.events.after_return);
}
});
}
/**
*
* change the item to given direction
*/
function changeitem(direction) {
g_parent.getvideoobject().hide();
g_parent.switchslidenums(direction);
g_parent.placenabouritems();
}
/**
* continue the dragging by changing the slides to the right place.
*/
function continueslidedragchange() {
//get data
var slides = g_parent.getslidesreference();
var diffpos = getdiffposfromcurrentitem(slides);
if (diffpos == 0)
return (false);
var direction = (diffpos > 0) ? "left" : "right";
var isreturn = false;
switch (direction) {
case "right": //change to prev item
if (g_parent.isslidehasitem(slides.objprevslide)) {
var posprev = g_functions.getelementsize(slides.objprevslide);
var destx = -posprev.left;
} else //return current item
isreturn = true;
break;
case "left": //change to next item
if (g_parent.isslidehasitem(slides.objnextslide)) {
var posnext = g_functions.getelementsize(slides.objnextslide);
var destx = -posnext.left;
} else
isreturn = true;
break;
}
if (isreturn == true) {
returntoplace(slides);
} else {
//animate objects
g_objinner.stop().animate({ left: destx + "px" }, {
duration: g_options.slider_transition_continuedrag_speed,
easing: g_options.slider_transition_continuedrag_easing,
queue: false,
progress: function () {
//check drag video
if (g_temp.isdragvideo == true) {
var objsize = g_functions.getelementsize(g_objinner);
var innerx = objsize.left;
var posdiff = innerx - g_temp.startposx;
var videoposx = g_temp.videostartx + posdiff;
g_temp.videoobject.css("left", videoposx);
}
},
always: function () {
changeitem(direction);
g_objparent.trigger(g_parent.events.after_drag_change);
}
});
}
}
/**
* handle slider drag on mouse drag
*/
function handlesliderdrag(event) {
var diff = g_temp.lastmousex - g_temp.startmousex;
if (diff == 0)
return (true);
var direction = (diff < 0) ? "left" : "right";
var objzoomslider = g_parent.getobjzoom();
//don't drag if the zoom panning enabled
//store init position after image zoom pan end
if (objzoomslider) {
var ispanenabled = objzoomslider.ispanenabled(event, direction);
if (ispanenabled == true) {
g_temp.isinitdatavalid = false;
return (true);
} else {
if (g_temp.isinitdatavalid == false) {
storeinittouchdata(event);
return (true);
}
}
}
//set inner div position
var currentposx = g_temp.startposx + diff;
//check out of borders and slow down the motion:
if (diff > 0 && currentposx > 0)
currentposx = currentposx / 3;
else if (diff < 0) {
var innerend = currentposx + g_objinner.width();
var sliderwidth = g_objslider.width();
if (innerend < sliderwidth) {
currentposx = g_temp.startposx + diff / 3;
}
}
if (g_temp.isdragging == false) {
g_temp.isdragging = true;
g_objparent.trigger(g_parent.events.start_drag);
}
g_objinner.css("left", currentposx + "px");
//drag video
if (g_temp.isdragvideo == true) {
var posdiff = currentposx - g_temp.startposx;
var videoposx = g_temp.videostartx + posdiff;
g_temp.videoobject.css("left", videoposx);
}
}
/**
* store init touch position
*/
function storeinittouchdata(event) {
var mousepos = g_functions.getmouseposition(event);
g_temp.startmousex = mousepos.pagex;
//debugline("startx:" + g_temp.startmousex, true, true);
g_temp.startmousey = mousepos.pagey;
g_temp.lastmousex = g_temp.startmousex;
g_temp.lastmousey = g_temp.startmousey;
g_temp.starttime = jquery.now();
var arrtouches = g_functions.getarrtouches(event);
g_temp.startarrtouches = g_functions.getarrtouchpositions(arrtouches);
var objpos = g_functions.getelementsize(g_objinner);
g_temp.startposx = objpos.left;
g_temp.isinitdatavalid = true;
//check if video object need to be dragged
g_temp.isdragvideo = false;
g_functions.storeeventdata(event, g_temp.storedeventid);
}
/**
* disable touch active
*/
function disabletouchactive(who) {
g_temp.touch_active = false;
//debugline("disable: " + who, true, true);
}
/**
* enable the touch active
*/
function enabletouchactive(who, event) {
g_temp.touch_active = true;
storeinittouchdata(event);
//debugline("enable: " + who, true, true);
}
/**
* on touch slide start
*
*/
function ontouchstart(event) {
event.preventdefault();
g_temp.isdragging = false;
//debugline("touchstart", true, true);
//check if the slides are changing from another event.
if (g_parent.isanimating() == true) {
g_objinner.stop(true, true);
}
//check num touches
var arrtouches = g_functions.getarrtouches(event);
if (arrtouches.length > 1) {
if (g_temp.touch_active == true) {
disabletouchactive("1");
}
return (true);
}
if (g_temp.touch_active == true) {
return (true);
}
enabletouchactive("1", event);
}
/**
*
* on touch move event
*/
function ontouchmove(event) {
if (g_temp.touch_active == false)
return (true);
//detect moving without button press
if (event.buttons == 0) {
disabletouchactive("2");
continueslidedragchange();
return (true);
}
g_functions.updatestoredeventdata(event, g_temp.storedeventid);
event.preventdefault();
var mousepos = g_functions.getmouseposition(event);
g_temp.lastmousex = mousepos.pagex;
g_temp.lastmousey = mousepos.pagey;
//debugline("lastx:" + g_temp.lastmousex, true, true);
var scrolldir = null;
if (g_options.slider_vertical_scroll_ondrag == true)
scrolldir = g_functions.handlescrolltop(g_temp.storedeventid);
if (scrolldir !== "vert")
handlesliderdrag(event);
}
/**
* on touch end event
*/
function ontouchend(event) {
//debugline("touchend", true, true);
var arrtouches = g_functions.getarrtouches(event);
var numtouches = arrtouches.length;
var isparentinplace = g_parent.isinnerinplace();
if (isparentinplace == true && g_temp.touch_active == false && numtouches == 0) {
return (true);
}
if (numtouches == 0 && g_temp.touch_active == true) {
disabletouchactive("3");
var isvalid = false;
var wasverticalscroll = g_functions.wasverticalscroll(g_temp.storedeventid);
if (wasverticalscroll == false)
isvalid = ismovementvalidforchange();
if (isvalid == true)
continueslidedragchange(); //change the slide
else
returntoplace(); //return the inner object to place (if not in place)
} else {
if (numtouches == 1 && g_temp.touch_active == false) {
enabletouchactive("2", event);
}
}
}
/**
* init touch events
*/
function initevents() {
//slider mouse down - drag start
g_objslider.bind("mousedown touchstart", ontouchstart);
//on body move
jquery("body").bind("mousemove touchmove", ontouchmove);
//on body mouse up - drag end
jquery(window).add("body").bind("mouseup touchend", ontouchend);
}
/**
* init function for avia controls
*/
this.init = function (objslider, customoptions) {
g_parent = objslider;
g_objparent = jquery(g_parent);
g_objects = objslider.getobjects();
g_objslider = g_objects.g_objslider;
g_objinner = g_objects.g_objinner;
g_options = jquery.extend(g_options, customoptions);
initevents();
}
/**
* get last mouse position
*/
this.getlastmousepos = function () {
var obj = {
pagex: g_temp.lastmousex,
pagey: g_temp.lastmousey
};
return (obj);
}
/**
* is touch active
*/
this.istouchactive = function () {
return (g_temp.touch_active);
}
}
/**
* touch thumbs control class
* addon to strip gallery
*/
function ugzoomslidercontrol() {
var g_objslider, g_objinner, g_parent = new ugslider(), g_objparent;
var g_functions = new ugfunctions();
var t = this;
var g_options = {
slider_zoom_step: 1.2, //the step of zooming with mouse wheel or zoom button
slider_zoom_max_ratio: 6, //max zoom ratio
slider_zoom_return_pan_duration: 400, //the return from pan animation duration
slider_zoom_return_pan_easing: "easeoutcubic" //the return from pan wasing function
};
var g_temp = {
ispanactive: false,
startmousex: 0,
startmousey: 0,
lastmousex: 0,
lastmousey: 0,
startimagex: 0,
startimagey: 0,
panxactive: false,
panyactive: false,
objimage: null,
objimagesize: null,
objparent: null,
objparentsize: null,
objslide: null,
storeimagelasttime: 0,
iszoomactive: false,
startdistance: 0,
startmiddlepoint: null,
imageorientpoint: null,
objfitimagesize: null,
iszoomedonce: false
};
/**
* init the object
*/
function initobject(objslider, customoptions) {
g_parent = objslider;
g_objparent = jquery(g_parent);
g_objects = objslider.getobjects();
g_objslider = g_objects.g_objslider;
g_objinner = g_objects.g_objinner;
g_options = jquery.extend(g_options, customoptions);
initevents();
}
/**
* get fit image to slider scale mode
* the fill become fit
*/
function getfitscalemode() {
var scalemode = g_parent.getscalemode();
if (scalemode != "down")
scalemode = "fit";
return (scalemode);
}
/**
* cache current slide and image
*/
function storecurrentimage() {
//prevent continious image storring
var currenttime = jquery.now();
var diff = currenttime - g_temp.storeimagelasttime;
if (diff < 20)
return (false);
var slides = g_parent.getslidesreference();
g_temp.objslide = slides.objcurrentslide;
g_temp.objimage = slides.objcurrentslide.find("img");
if (g_temp.objimage.length == 0)
return (false);
g_temp.objimagesize = g_functions.getelementsize(g_temp.objimage);
g_temp.objparent = g_temp.objimage.parent();
g_temp.objparentsize = g_functions.getelementsize(g_temp.objparent);
var scalemode = getfitscalemode();
objpadding = g_parent.getobjimagepadding();
g_temp.objfitimagesize = g_functions.getimageinsideparentdatabyimage(g_temp.objimage, scalemode, objpadding);
var currenttime = jquery.now();
g_temp.storeimagelasttime = currenttime;
return (true);
}
/**
* zoom current image
* mode: in, out, back
*/
function zoomcurrentimage(mode, mousepos) {
var slides = g_parent.getslidesreference();
var objimage = slides.objcurrentslide.find("img");
var scalemode = getfitscalemode();
g_objparent.trigger(g_parent.events.zoom_start);
//flag if the images zoomed
var iszoomed = true;
var objpadding = g_parent.getobjimagepadding();
if (mode == "back") {
var objoriginalsize = g_functions.getimageoriginalsize(objimage);
g_functions.scaleimagefitparent(objimage, objoriginalsize.width, objoriginalsize.height, scalemode, objpadding);
}
else {
var zoomin = (mode == "in") ? true : false;
iszoomed = g_functions.zoomimageinsideparent(objimage, zoomin, g_options.slider_zoom_step, mousepos, scalemode, g_options.slider_zoom_max_ratio, objpadding);
}
if (iszoomed == true) {
g_objparent.trigger(g_parent.events.zooming);
g_objparent.trigger(g_parent.events.zoom_change);
g_objparent.trigger(g_parent.events.zoom_end);
}
}
function ____________pan_____________() { };
/**
* check if pan is posible for the current image
* check if the image is bigger then the parent
*/
function ispanposible(objimage, event, sticttouchescheck) {
//check num touches, strict means that even if 0 - pan not posible
var arrtouches = g_functions.getarrtouches(event);
if (sticttouchescheck === true) {
if (arrtouches.length != 1)
return (false);
} else {
if (arrtouches.length > 1)
return (false);
}
if (g_functions.iselementbiggerthenparent(objimage))
return (true);
return (false);
}
/**
* store pan values
*/
function storepaninitvalues(event) {
var mousepos = g_functions.getmouseposition(event);
g_temp.startmousex = mousepos.pagex;
g_temp.startmousey = mousepos.pagey;
g_temp.lastmousex = g_temp.startmousex;
g_temp.lastmousey = g_temp.startmousey;
g_temp.startimagex = g_temp.objimagesize.left;
g_temp.startimagey = g_temp.objimagesize.top;
g_temp.panxactive = (g_temp.objimagesize.width > g_temp.objparentsize.width);
g_temp.panyactive = (g_temp.objimagesize.height > g_temp.objparentsize.height);
}
/**
* check pan start, and start if posible
*/
function startpan(event) {
g_temp.ispanactive = true;
storepaninitvalues(event);
}
/**
* pan the image
*/
function panimage(event) {
if (g_temp.objimage == undefined || g_temp.objimage.length == 0)
return (true);
var mousepos = g_functions.getmouseposition(event);
var diffx = mousepos.pagex - g_temp.startmousex;
var diffy = mousepos.pagey - g_temp.startmousey;
//get active direction
var difflastx = mousepos.pagex - g_temp.lastmousex;
var difflasty = mousepos.pagey - g_temp.lastmousey;
var directionx = (difflastx < 0) ? "left" : "right";
var directiony = (difflasty < 0) ? "up" : "down";
g_temp.lastmousex = mousepos.pagex;
g_temp.lastmousey = mousepos.pagey;
var posimage = g_functions.getelementsize(g_temp.objimage);
//var imagex = g_temp.startimagex + diffx;
//var imagey = g_temp.startimagey + diffy;
//slow down if no pan available in this point
//slow down y
if (g_temp.panyactive == false) {
difflasty = 0;
} else { //zoom enabled
if (directiony == "down" && posimage.top > 0) {
difflasty = difflasty / 3;
} else if (directiony == "up" && posimage.bottom < g_temp.objparentsize.height) {
difflasty = difflasty / 3;
}
}
//slow down x (only if the pan enabled)
if (g_temp.panxactive == false || g_parent.isinnerinplace() == false) {
difflastx = 0;
} else { //zoom enabled
if (directionx == "right" && posimage.left > 0) {
difflastx = difflastx / 3;
}
else if (directionx == "left" && posimage.right < g_temp.objparentsize.width) {
difflastx = difflastx / 3;
}
}
var imagex = posimage.left + difflastx;
var imagey = posimage.top + difflasty;
g_functions.placeelement(g_temp.objimage, imagex, imagey);
}
/**
* return the image to place if it's out of borders
*/
function checkreturnafterpan() {
var isreturnx = false, isreturny = false, newx = 0, newy = 0;
var objsize = g_functions.getelementsize(g_temp.objimage);
var objimagepadding = g_parent.getobjimagepadding();
var objcenterpos = g_functions.getelementcenterposition(g_temp.objimage, objimagepadding);
g_temp.panxactive = (g_temp.objimagesize.width > g_temp.objparentsize.width);
g_temp.panyactive = (g_temp.objimagesize.height > g_temp.objparentsize.height);
if (g_temp.panyactive == true) {
if (objsize.top > 0) { //off limit top
newy = 0;
isreturny = true;
} else if (objsize.bottom < g_temp.objparentsize.height) { //off limit bottom
newy = g_temp.objparentsize.height - objsize.height;
isreturny = true;
}
} else { //pan not active y - return to center
if (objsize.top != objcenterpos.top) {
isreturny = true;
newy = objcenterpos.top;
}
}
//check return x to place
if (g_temp.panxactive == true) {
if (objsize.left > 0) { //off limit left
newx = 0;
isreturnx = true;
} else if (objsize.right < g_temp.objparentsize.width) { //off limit right
newx = g_temp.objparentsize.width - objsize.width;
isreturnx = true;
}
} else { //pan not active x - return to center
// debugline("not active", true);
if (objsize.left != objcenterpos.left) {
isreturnx = true;
newx = objcenterpos.left;
}
}
//do the animation
var objcss = {};
if (isreturny == true)
objcss.top = newy + "px";
if (isreturnx == true)
objcss.left = newx + "px";
if (isreturny == true || isreturnx == true) {
g_temp.objimage.animate(objcss, {
duration: g_options.slider_zoom_return_pan_duration,
easing: g_options.slider_zoom_return_pan_easing,
queue: false
});
}
}
/**
* check if the image animating or not
*/
function isimageanimating() {
if (g_temp.objimage && g_temp.objimage.is(":animated"))
return (true);
return (false);
}
function ____________end_pan_____________() { };
function ________touch_zoom_____________() { };
/**
* start touch zoom
*/
function starttouchzoom(arrtouches) {
g_temp.iszoomactive = true;
//store init diff
g_temp.startdistance = g_functions.getdistance(arrtouches[0].pagex, arrtouches[0].pagey, arrtouches[1].pagex, arrtouches[1].pagey);
if (g_temp.startdistance == 0)
g_temp.startdistance = 1;
//store init positions
g_temp.startmiddlepoint = g_functions.getmiddlepoint(arrtouches[0].pagex, arrtouches[0].pagey, arrtouches[1].pagex, arrtouches[1].pagey);
g_temp.objimagesize = g_functions.getelementsize(g_temp.objimage);
g_temp.startimagex = g_temp.objimagesize.left;
g_temp.startimagey = g_temp.objimagesize.top;
//set orient point
g_temp.imageorientpoint = g_functions.getelementlocalpoint(g_temp.startmiddlepoint, g_temp.objimage);
var isinsideimage = g_functions.ispointinsideelement(g_temp.imageorientpoint, g_temp.objimagesize);
if (isinsideimage == false) {
g_temp.imageorientpoint = g_functions.getelementcenterpoint(g_temp.objimage);
}
//trigger start zoom event
g_objparent.trigger(g_parent.events.zoom_start);
}
/**
* check num touches, if not 2 - end zoom
*/
function checktouchzoomend(event) {
if (g_temp.iszoomactive == false)
return (false);
var arrtouches = g_functions.getarrtouches(event);
if (arrtouches.length != 2) { //end touch zoom
g_temp.iszoomactive = false;
//trigger end zoom event
g_objparent.trigger(g_parent.events.zoom_end);
}
}
/**
* check start touch zoom
*/
function checktouchzoomstart(event) {
if (g_temp.iszoomactive == true)
return (true);
var arrtouches = g_functions.getarrtouches(event);
if (arrtouches.length != 2)
return (true);
starttouchzoom(arrtouches);
}
/**
* do touch zoom on touch devices
*/
function dotouchzoom(event) {
var arrtouches = g_functions.getarrtouches(event);
var distance = g_functions.getdistance(arrtouches[0].pagex, arrtouches[0].pagey, arrtouches[1].pagex, arrtouches[1].pagey);
var zoomratio = distance / g_temp.startdistance;
var middlepoint = g_functions.getmiddlepoint(arrtouches[0].pagex, arrtouches[0].pagey, arrtouches[1].pagex, arrtouches[1].pagey);
//set zoom data:
var newwidth = g_temp.objimagesize.width * zoomratio;
var newheight = g_temp.objimagesize.height * zoomratio;
//check max zoom ratio:
var objoriginalsize = g_functions.getimageoriginalsize(g_temp.objimage);
var expectedzoomratio = 1;
if (objoriginalsize.width > 0)
expectedzoomratio = newwidth / objoriginalsize.width;
if (expectedzoomratio > g_options.slider_zoom_max_ratio)
return (true);
//set pan data:
panx = -(g_temp.imageorientpoint.x * zoomratio - g_temp.imageorientpoint.x);
pany = -(g_temp.imageorientpoint.y * zoomratio - g_temp.imageorientpoint.y);
var diffmiddlex = (middlepoint.x - g_temp.startmiddlepoint.x);
var diffmiddley = (middlepoint.y - g_temp.startmiddlepoint.y);
var posx = g_temp.startimagex + panx + diffmiddlex;
var posy = g_temp.startimagey + pany + diffmiddley;
//resize and place:
g_functions.setelementsizeandposition(g_temp.objimage, posx, posy, newwidth, newheight);
//trigger zooming event
g_objparent.trigger(g_parent.events.zooming);
g_objparent.trigger(g_parent.events.zoom_change);
/*
debugline({
middlestartx: g_temp.startmiddlepoint.x,
middlex: middlepoint.x,
diffmiddlex: diffmiddlex
});
*/
}
/**
* check return the image from zoom
*/
function checkreturnfromzoom() {
if (g_temp.objimage == undefined || g_temp.objimage.length == 0)
return (true);
var objsize = g_functions.getelementsize(g_temp.objimage);
if (objsize.width < g_temp.objfitimagesize.imagewidth) {
g_temp.objimage.css({
position: "absolute",
margin: "none"
});
var objcss = {
top: g_temp.objfitimagesize.imagetop + "px",
left: g_temp.objfitimagesize.imageleft + "px",
width: g_temp.objfitimagesize.imagewidth + "px",
height: g_temp.objfitimagesize.imageheight + "px"
};
g_temp.objimage.animate(objcss, {
duration: g_options.slider_zoom_return_pan_duration,
easing: g_options.slider_zoom_return_pan_easing,
queue: false
});
} else {
checkreturnafterpan();
}
}
function ________end_touch_zoom_____________() { };
/**
*
* touch start event - start pan, remember start pan data
*/
function ontouchstart(event) {
//if no image type, exit
if (g_parent.iscurrentslidetype("image") == false)
return (true);
var isstored = storecurrentimage();
if (g_temp.objimage == undefined || g_temp.objimage.length == 0)
return (true);
event.preventdefault();
//stop animation if exists
if (isimageanimating() == true) {
g_temp.objimage.stop(true);
}
if (g_temp.iszoomactive == true) {
checktouchzoomend(event);
} else {
checktouchzoomstart(event);
}
//if zoom started stop panning, if not, start panning
if (g_temp.iszoomactive == true) {
g_temp.ispanactive = false;
} else if (ispanposible(g_temp.objimage, event) == true && g_temp.iszoomedonce == true) {
startpan(event);
}
/*
debugline({
pan: g_temp.ispanactive,
zoom: g_temp.iszoomactive,
event: "start"
}, true);
*/
}
/**
* touch end event - bring the image to place
*/
function ontouchend(event) {
if (g_parent.iscurrentslidetype("image") == false)
return (true);
//check if some gallery button clicked
var objtarget = jquery(event.target);
if (objtarget.data("ug-button") == true) {
//event.preventdefault();
return (false);
}
var isstored = storecurrentimage();
if (g_temp.objimage == undefined || g_temp.objimage.length == 0)
return (true);
var panwasactive = g_temp.ispanactive;
var zoomwasactive = g_temp.iszoomactive;
//if the inner not in place, don't return noting, let the slide change
if (g_parent.isinnerinplace() == false) {
g_temp.iszoomactive = false;
g_temp.ispanactive = false;
return (true);
}
//check end zoom
if (g_temp.iszoomactive == true) {
checktouchzoomend(event);
} else {
checktouchzoomstart(event);
}
if (g_temp.iszoomactive == true) {
g_temp.ispanactive = false;
} else {
var panposible = ispanposible(g_temp.objimage, event, true);
if (g_temp.ispanactive == true) {
g_temp.ispanactive = false;
} else if (panposible == true) {
startpan(event);
}
}
/*
debugline({
pan:g_temp.ispanactive,
zoom: g_temp.iszoomactive
}, true);
*/
if ((panwasactive || zoomwasactive) && g_temp.iszoomactive == false && g_temp.ispanactive == false) {
checkreturnfromzoom();
}
}
/**
*
* touch move event - pan
*/
function ontouchmove(event) {
if (g_parent.iscurrentslidetype("image") == false)
return (true);
//check touch zoom (pinch gesture)
if (g_temp.iszoomactive == true) {
dotouchzoom(event);
} else if (g_temp.ispanactive == true) {
panimage(event);
}
}
/**
* on slider mousewheel event
*/
function onslidermousewheel(event, delta, deltax, deltay) {
if (g_options.slider_zoom_mousewheel == false)
return (true);
if (g_parent.iscurrentslidetype("image") == false)
return (true);
event.preventdefault();
//prevent default only if needed
//if(zoomin == true || zoomin == false && g_functions.iselementbiggerthenparent(objimage))
//event.preventdefault();
var zoomin = (delta > 0);
var mousepos = g_functions.getmouseposition(event);
var mode = (zoomin == true) ? "in" : "out";
zoomcurrentimage(mode, mousepos);
}
/**
* init touch events
*/
function initevents() {
//debugline("init");
g_objslider.on("mousewheel", onslidermousewheel);
//slider mouse down - pan start
g_objslider.bind("mousedown touchstart", ontouchstart);
//on body move
jquery("body").bind("mousemove touchmove", ontouchmove);
//on body mouse up - pan end
jquery(window).add("body").bind("mouseup touchend", ontouchend);
//event before image returned to init position
g_objparent.bind(g_parent.events.before_return, function () {
checkreturnfromzoom();
});
//on item change update iszoomedonce event. allow panning only if zoomed once
g_objparent.bind(g_parent.events.item_changed, function () {
g_temp.iszoomedonce = false;
});
g_objparent.bind(g_parent.events.zoom_change, function () {
g_temp.iszoomedonce = true;
});
}
this.________external_____________ = function () { };
/**
* check if the image is zoomed, and there is a place for left panning
*/
this.ispanenabled = function (event, direction) {
storecurrentimage();
if (g_temp.objimage == undefined || g_temp.objimage.length == 0)
return (false);
if (g_temp.iszoomedonce == false)
return (false);
if (ispanposible(g_temp.objimage, event) == false)
return (false);
if (g_parent.isinnerinplace() == false)
return (false);
if (direction == "left") {
if (g_temp.objimagesize.right <= g_temp.objparentsize.width)
return (false);
} else { //right direction
if (g_temp.objimagesize.left >= 0)
return (false);
}
return (true);
}
/**
* init function for avia controls
*/
this.init = function (objslider, customoptions) {
initobject(objslider, customoptions);
}
/**
* zoom in
*/
this.zoomin = function () {
zoomcurrentimage("in");
}
/**
* zoom out
*/
this.zoomout = function () {
zoomcurrentimage("out");
}
/**
* zoom back
*/
this.zoomback = function () {
zoomcurrentimage("back");
}
}
/** -------------- wistia api ---------------------*/
function ugwistiaapi() {
this.isapiloaded = false;
var t = this, g_objthis = jquery(this), g_inthandle;
var g_player, g_isplayerready = false;
this.events = {
start_playing: "start_playing",
stop_playing: "stop_playing",
video_ended: "video_ended"
};
/**
* check if sound cloud active
*/
function iswistiaactive() {
return (typeof wistia != "undefined");
}
/**
* load vimeo api
*/
this.loadapi = function () {
if (g_ugwistiaapi.isapiloaded == true)
return (true);
if (iswistiaactive()) {
g_ugwistiaapi.isapiloaded = true;
return (true);
}
g_ugfunctions.loadjs("fast.wistia.com/assets/external/e-v1.js", true);
g_ugwistiaapi.isapiloaded = true;
}
/**
* actually put the video
*/
function putvideoactually(divid, videoid, width, height, isautoplay) {
g_player = null;
g_isplayerready = false;
var htmlid = divid + "_video";
var html = "
";
jquery("#" + divid).html(html);
g_player = wistia.embed(videoid, {
version: "v1",
videowidth: width,
videoheight: height,
container: htmlid,
autoplay: isautoplay
});
g_isplayerready = true;
initevents();
}
/**
* init events
*/
function initevents() {
//set "play" event
g_player.bind('play', function () {
g_objthis.trigger(t.events.start_playing);
});
//set "pause event"
g_player.bind('pause', function () {
g_objthis.trigger(t.events.stop_playing);
});
g_player.bind('end', function () {
g_objthis.trigger(t.events.stop_playing);
g_objthis.trigger(t.events.video_ended);
});
}
/**
* do some command
*/
this.docommand = function (command) {
if (g_player == null)
return (false);
if (g_isplayerready == false)
return (false);
switch (command) {
case "play":
g_player.play();
break;
case "pause":
g_player.pause();
break;
}
}
/**
* do pause command
*/
this.pause = function () {
t.docommand("pause");
}
/**
* do play command
*/
this.play = function () {
t.docommand("play");
}
/**
* put the vimeo video
*/
this.putvideo = function (divid, videoid, width, height, isautoplay) {
if (iswistiaactive()) {
putvideoactually(divid, videoid, width, height, isautoplay);
return (true);
}
//if no api present, wait for the api being ready
this.loadapi();
g_inthandle = setinterval(function () {
if (iswistiaactive()) {
putvideoactually(divid, videoid, width, height, isautoplay);
clearinterval(g_inthandle);
}
}, 500);
}
/**
* get if the player is ready
*/
this.isplayerready = function () {
if (g_isplayerready && g_player)
return (true);
return (false);
}
}
/** -------------- sound cloud api ---------------------*/
function ugsoundcloudapi() {
this.isapiloaded = false;
var t = this, g_objthis = jquery(this), g_inthandle;
var g_player, g_lastcontainerid;
this.events = {
start_playing: "start_playing",
stop_playing: "stop_playing",
video_ended: "video_ended"
};
/**
* check if sound cloud active
*/
function isscactive() {
return (typeof sc != "undefined");
}
/**
* load vimeo api
*/
this.loadapi = function () {
if (g_ugsoundcloudapi.isapiloaded == true)
return (true);
if (isscactive()) {
g_ugsoundcloudapi.isapiloaded = true;
return (true);
}
g_ugfunctions.loadjs("w.soundcloud.com/player/api.js", true);
g_ugsoundcloudapi.isapiloaded = true;
}
/**
* actually put the video
*/
function putsoundactually(divid, trackid, width, height, isautoplay) {
g_player = null;
g_isplayerready = false;
var iframeid = divid + "_iframe";
var url = location.protocol + "//w.soundcloud.com/player/?url=http://api.soundcloud.com/tracks/" + trackid;
url += "&buying=false&liking=false&download=false&sharing=false&show_artwork=true&show_comments=false&show_playcount=true&show_user=false&hide_related=true&visual=true&start_track=0&callback=true";
if (isautoplay === true)
url += "&auto_play=true";
else
url += "&auto_play=false";
var html = "";
jquery("#" + divid).html(html);
//get the player object
g_player = sc.widget(iframeid);
g_player.bind(sc.widget.events.ready, function () {
if (g_player) {
g_isplayerready = true;
initevents();
}
});
g_lastcontainerid = divid;
}
/**
* init events
*/
function initevents() {
//set "play" event
g_player.bind(sc.widget.events.play, function () {
g_objthis.trigger(t.events.start_playing);
});
//set "pause event"
g_player.bind(sc.widget.events.pause, function () {
g_objthis.trigger(t.events.stop_playing);
});
g_player.bind(sc.widget.events.finish, function () {
g_objthis.trigger(t.events.stop_playing);
g_objthis.trigger(t.events.video_ended);
});
}
/**
* put the youtube video
*/
this.putsound = function (divid, trackid, width, height, isautoplay) {
if (isscactive()) {
putsoundactually(divid, trackid, width, height, isautoplay);
return (true);
}
//if no api present, wait for the api being ready
this.loadapi();
g_inthandle = setinterval(function () {
if (isscactive()) {
putsoundactually(divid, trackid, width, height, isautoplay);
clearinterval(g_inthandle);
}
}, 500);
}
/**
* do some command
*/
this.docommand = function (command) {
if (g_player == null)
return (false);
if (g_isplayerready == false)
return (false);
switch (command) {
case "play":
g_player.play();
break;
case "pause":
g_player.pause();
break;
}
}
/**
* pause video
*/
this.pause = function () {
t.docommand("pause");
}
/**
* play video
*/
this.play = function () {
t.docommand("play");
}
/**
* destroy the player
*/
this.destroy = function () {
g_isplayerready = false;
g_player = null;
if (g_lastcontainerid) {
jquery("#" + g_lastcontainerid).html("");
g_lastcontainerid = null;
}
}
}
/** -------------- html5 video api ---------------------*/
function ughtml5mediaapi() {
this.isapiloaded = false;
var t = this, g_objthis = jquery(this), g_inthandle;
var g_player;
this.events = {
start_playing: "start_playing",
stop_playing: "stop_playing",
video_ended: "video_ended"
};
/**
* load vimeo api
*/
this.loadapi = function () {
if (g_ughtml5mediaapi.isapiloaded == true)
return (true);
if (ismediaelementactive()) {
g_ughtml5mediaapi.isapiloaded = true;
return (true);
}
g_ugfunctions.loadjs("cdnjs.cloudflare.com/ajax/libs/mediaelement/2.18.1/mediaelement.min.js", true);
g_ugfunctions.loadcss("cdnjs.cloudflare.com/ajax/libs/mediaelement/2.18.1/mediaelementplayer.min.css", true);
g_ughtml5mediaapi.isapiloaded = true;
}
/**
* return true if the mediaelement is active
*/
function ismediaelementactive() {
return (typeof mejs != "undefined");
}
/**
* actually put the video
*/
function putvideoactually(divid, data, width, height, isautoplay) {
g_player = null;
g_isplayerready = false;
var urlflash = location.protocol + "//cdnjs.cloudflare.com/ajax/libs/mediaelement/2.18.1/flashmediaelement-cdn.swf";
var urlsilverlight = location.protocol + "//cdnjs.cloudflare.com/ajax/libs/mediaelement/2.18.1/silverlightmediaelement.xap";
var htmlid = divid + "_video";
var htmlautoplay = "";
if (isautoplay && isautoplay === true)
htmlautoplay = "autoplay='autoplay'"
var htmlposter = "";
if (data.posterimage)
htmlposter = "poster='" + data.posterimage + "'";
var html = "";
jquery("#" + divid).html(html);
new mediaelement(htmlid, {
enableplugindebug: false,
flashname: urlflash,
silverlightname: urlsilverlight,
success: function (mediaelement, domobject) {
g_isplayerready = true;
g_player = mediaelement;
if (isautoplay == false)
g_player.pause();
initevents();
},
error: function (objerror) {
trace(objerror);
}
});
}
/**
* init player events function
*/
function initevents() {
g_ugfunctions.addevent(g_player, "play", function () {
g_objthis.trigger(t.events.start_playing);
});
g_ugfunctions.addevent(g_player, "pause", function () {
g_objthis.trigger(t.events.stop_playing);
});
g_ugfunctions.addevent(g_player, "ended", function () {
g_objthis.trigger(t.events.stop_playing);
g_objthis.trigger(t.events.video_ended);
});
}
/**
* put the vimeo video
*/
this.putvideo = function (divid, data, width, height, isautoplay) {
if (ismediaelementactive()) {
putvideoactually(divid, data, width, height, isautoplay);
return (true);
}
//if no api present, wait for the api being ready
this.loadapi();
g_inthandle = setinterval(function () {
if (ismediaelementactive()) {
putvideoactually(divid, data, width, height, isautoplay);
clearinterval(g_inthandle);
}
}, 500);
}
/**
* do some command
*/
this.docommand = function (command) {
if (g_player == null)
return (false);
if (g_isplayerready == false)
return (false);
switch (command) {
case "play":
g_player.play();
break;
case "pause":
g_player.pause();
break;
}
}
/**
* pause video
*/
this.pause = function () {
t.docommand("pause");
}
/**
* play video
*/
this.play = function () {
t.docommand("play");
}
}
/** -------------- vimeo api class ---------------------*/
function ugvimeoapi() {
this.isapiloaded = false;
var t = this, g_objthis = jquery(this), g_inthandle;
var g_player = null, g_isplayerready = false, g_lastcotnainerid, g_cuechangeautoplay = false;
this.events = {
start_playing: "start_playing",
stop_playing: "stop_playing",
video_ended: "video_ended"
};
/**
* load vimeo api
*/
this.loadapi = function () {
if (g_ugvimeoapi.isapiloaded == true)
return (true);
if (isfroogaloopactive()) {
g_ugvimeoapi.isapiloaded = true;
return (true);
}
g_ugfunctions.loadjs("f.vimeocdn.com/js/froogaloop2.min.js", true);
g_ugvimeoapi.isapiloaded = true;
}
/**
* tells if the froogaloop library active
*/
function isfroogaloopactive() {
return (typeof froogaloop != "undefined");
}
/**
* actually put the video
*/
function putvideoactually(divid, videoid, width, height, isautoplay) {
g_player = null;
g_isplayerready = false;
var url = location.protocol + "//player.vimeo.com/video/" + videoid + "?api=1";
if (isautoplay === true)
url += "&byline=0&autoplay=1&title=0&portrait=0";
var html = "";
jquery("#" + divid).html(html);
//get the player object
var iframe = jquery("#" + divid + " iframe")[0];
g_player = froogaloop(iframe);
g_player.addevent('ready', function () {
if (g_player) {
g_isplayerready = true;
initevents();
}
});
g_lastcotnainerid = divid;
}
/**
* init events
*/
function initevents() {
if (!g_player)
return (false);
//set "cuechange" event
g_player.addevent('cuechange', function () {
if (g_cuechangeautoplay == true)
t.play();
});
//set "play" event
g_player.addevent('play', function () {
g_objthis.trigger(t.events.start_playing);
});
//set "pause event"
g_player.addevent('pause', function () {
g_objthis.trigger(t.events.stop_playing);
});
g_player.addevent('finish', function () {
g_objthis.trigger(t.events.stop_playing);
g_objthis.trigger(t.events.video_ended);
});
}
/**
* do some command
*/
this.docommand = function (command) {
if (g_player == null)
return (false);
if (g_isplayerready == false)
return (false);
switch (command) {
default:
g_player.api(command);
break;
}
}
/**
* do pause command
*/
this.pause = function () {
t.docommand("pause");
}
/**
* do play command
*/
this.play = function () {
t.docommand("play");
}
/**
* desrtoy the player and empty the div
*/
this.destroy = function () {
if (g_player) {
g_player.api("unload");
g_player = null;
g_isplayerready = false;
}
if (g_lastcotnainerid) {
jquery("#" + g_lastcotnainerid).html("");
}
}
/**
* put the vimeo video
*/
this.putvideo = function (divid, videoid, width, height, isautoplay) {
if (isfroogaloopactive()) {
putvideoactually(divid, videoid, width, height, isautoplay);
return (true);
}
//if no api present, wait for the api being ready
this.loadapi();
g_inthandle = setinterval(function () {
if (isfroogaloopactive()) {
putvideoactually(divid, videoid, width, height, isautoplay);
clearinterval(g_inthandle);
}
}, 500);
}
/**
* get if the player is ready
*/
this.isplayerready = function () {
if (g_isplayerready && g_player)
return (true);
return (false);
}
/**
* change the video
*/
this.changevideo = function (videoid, isautoplay) {
if (t.isplayerready() == false)
return (false);
g_cuechangeautoplay = isautoplay;
g_player.api("loadvideo", videoid);
}
/**
* get video images
*/
this.getvideoimages = function (videoid, itemindex, onsuccessfunction) {
var url = location.protocol + "//vimeo.com/api/v2/video/" + videoid + ".json";
jquery.get(url, {}, function (data) {
var obj = {};
obj.preview = data[0].thumbnail_large;
obj.thumb = data[0].thumbnail_medium;
onsuccessfunction(itemindex, obj);
});
}
}
/** -------------- youtube api class ---------------------*/
function ugyoutubeapi() {
this.isapiloaded = false;
var t = this, g_player = null, g_inthandle, g_isplayerready = false;
var g_objthis = jquery(this), g_prevstate = -1, g_lastcontainerid; //unstarted
var g_options = {
video_youtube_showinfo: true
}
this.events = {
start_playing: "start_playing",
stop_playing: "stop_playing",
video_ended: "video_ended"
};
/**
* actually put the video
*/
function putvideoactually(divid, videoid, width, height, isautoplay) {
if (g_player && g_isplayerready) {
g_player.destroy();
}
var playervars = {
controls: 2,
showinfo: g_options.video_youtube_showinfo,
rel: 0
};
if (isautoplay === true)
playervars.autoplay = 1;
g_isplayerready = false;
g_player = new yt.player(divid, {
height: height,
width: width,
videoid: videoid,
playervars: playervars,
events: {
'onready': onplayerready,
'onstatechange': onplayerstatechange
}
});
g_lastcontainerid = divid;
}
/**
* check if yt active
*/
function isytactive() {
if (typeof yt != "undefined" && typeof yt.player != "undefined")
return (true);
return (false);
}
/**
* set options
*/
this.setoptions = function (objoptions) {
g_options = jquery.extend(g_options, objoptions);
}
/**
* put the youtube video
*/
this.putvideo = function (divid, videoid, width, height, isautoplay) {
if (isytactive()) {
putvideoactually(divid, videoid, width, height, isautoplay);
return (true);
}
//if no api present, wait for the api being ready
this.loadapi();
g_inthandle = setinterval(function () {
if (isytactive()) {
putvideoactually(divid, videoid, width, height, isautoplay);
clearinterval(g_inthandle);
}
}, 500);
}
/**
* on player ready event
*/
function onplayerready() {
g_isplayerready = true;
}
/**
* on player state change event
* trigger events
*/
function onplayerstatechange() {
if (typeof g_player.getplayerstate != "function") {
trace("youtube api error: can't get player state");
return (false);
}
var state = g_player.getplayerstate();
switch (state) {
case yt.playerstate.playing:
g_objthis.trigger(t.events.start_playing);
break;
case yt.playerstate.ended:
g_objthis.trigger(t.events.stop_playing);
g_objthis.trigger(t.events.video_ended);
break;
default:
if (g_prevstate == yt.playerstate.playing)
g_objthis.trigger(t.events.stop_playing);
break;
}
g_prevstate = state;
}
/**
* load youtube api
*/
this.loadapi = function () {
if (g_ugyoutubeapi.isapiloaded == true)
return (true);
if (typeof yt != "undefined") {
g_ugyoutubeapi.isapiloaded = true;
return (true);
}
g_ugfunctions.loadjs("https://www.youtube.com/player_api", false);
g_ugyoutubeapi.isapiloaded = true;
}
/**
* do some command
*/
this.docommand = function (command, opt1) {
if (!g_player)
return (true);
if (g_isplayerready == false)
return (false);
switch (command) {
case "play":
if (typeof g_player.playvideo != "function")
return (false);
g_player.playvideo();
break;
case "pause":
if (typeof g_player.pausevideo != "function")
return (false);
g_player.pausevideo();
break;
case "seek":
if (typeof g_player.seekto != "function")
return (false);
g_player.seekto(opt1);
break;
case "stoptobeginning":
var state = g_player.getplayerstate();
g_player.pausevideo();
switch (state) {
case yt.playerstate.playing:
case yt.playerstate.ended:
case yt.playerstate.paused:
g_player.seekto(0);
break;
}
break;
}
}
/**
* play video
*/
this.play = function () {
t.docommand("play");
}
/**
* stop the video
*/
this.pause = function () {
t.docommand("pause");
}
/**
* destroy player
*/
this.destroy = function () {
try {
if (g_player) {
g_isplayerready = false;
g_player.clearvideo();
g_player.destroy();
}
} catch (objerror) {
jquery("#" + g_lastcontainerid).html("");
}
}
/**
* stop the video and seek to start
*/
this.stoptobeginning = function () {
t.docommand("stoptobeginning");
}
/**
* change the video
*/
this.changevideo = function (videoid, isautoplay) {
if (t.isplayerready() == false)
return (false);
if (isautoplay && isautoplay == true)
g_player.loadvideobyid(videoid, 0, "large");
else
g_player.cuevideobyid(videoid, 0, "large");
}
/**
* get if the player is ready
*/
this.isplayerready = function () {
if (g_isplayerready && g_player)
return (true);
return (false);
}
/**
* get preview and thumbs images according the id
*/
this.getvideoimages = function (videoid) {
var obj = {};
obj.preview = "https://i.ytimg.com/vi/" + videoid + "/sddefault.jpg";
obj.thumb = "https://i.ytimg.com/vi/" + videoid + "/default.jpg";
return (obj);
}
}
/** -------------- video player class ---------------------*/
function ugvideoplayer() {
var t = this, g_galleryid, g_objthis = jquery(this), g_functions = new ugfunctions();
var g_youtubeapi = new ugyoutubeapi(), g_vimeoapi = new ugvimeoapi();
var g_html5api = new ughtml5mediaapi(), g_soundcloudapi = new ugsoundcloudapi(), g_wistiaapi = new ugwistiaapi();
var g_objplayer, g_objyoutube, g_objvimeo, g_objhtml5, g_objbuttonclose, g_objsoundcloud, g_objwistia;
var g_activeplayertype = null;
var g_options = {
video_enable_closebutton: true
};
this.events = {
show: "video_show",
hide: "video_hide",
play_start: "video_play_start",
play_stop: "video_play_stop",
video_ended: "video_ended"
};
var g_temp = {
standalonemode: false,
youtubeinnerid: "",
vimeoplayerid: "",
html5playerid: "",
wistiaplayerid: "",
soundcloudplayerid: ""
};
/**
* init the object
*/
this.init = function (optoptions, isstandalonemode, galleryid) {
g_galleryid = galleryid;
if (!g_galleryid)
throw new error("missing gallery id for video player, it's a must!");
g_options = jquery.extend(g_options, optoptions);
g_youtubeapi.setoptions(g_options);
if (isstandalonemode && isstandalonemode == true)
g_temp.standalonemode = true;
}
/**
* set the player html
*/
this.sethtml = function (objparent) {
g_temp.youtubeinnerid = g_galleryid + "_youtube_inner";
g_temp.vimeoplayerid = g_galleryid + "_videoplayer_vimeo";
g_temp.html5playerid = g_galleryid + "_videoplayer_html5";
g_temp.wistiaplayerid = g_galleryid + "_videoplayer_wistia";
g_temp.soundcloudplayerid = g_galleryid + "_videoplayer_soundcloud";
var html = "
";
html += "
";
html += "";
html += "";
html += "";
html += "";
if (g_temp.standalonemode == false && g_options.video_enable_closebutton == true)
html += "";
html += "
";
objparent.append(html);
g_objplayer = objparent.children(".ug-videoplayer");
g_objyoutube = g_objplayer.children(".ug-videoplayer-youtube");
g_objvimeo = g_objplayer.children(".ug-videoplayer-vimeo");
g_objhtml5 = g_objplayer.children(".ug-videoplayer-html5");
g_objsoundcloud = g_objplayer.children(".ug-videoplayer-soundcloud");
g_objwistia = g_objplayer.children(".ug-videoplayer-wistia");
if (g_temp.standalonemode == false && g_options.video_enable_closebutton == true)
g_objbuttonclose = g_objplayer.children(".ug-videoplayer-button-close")
}
function __________events___________() { };
/**
* on close button click event
*/
function onclosebuttonclick() {
t.hide();
}
/**
* on some video play start
*/
function onplaystart() {
g_objthis.trigger(t.events.play_start);
if (g_objbuttonclose)
g_objbuttonclose.hide();
}
/**
* on some video play stop
*/
function onplaystop() {
g_objthis.trigger(t.events.play_stop);
if (g_objbuttonclose)
g_objbuttonclose.show();
}
/**
* on video ended
*/
function onvideoended() {
g_objthis.trigger(t.events.video_ended);
}
/**
* init events
*/
function initevents() {
//close button events
if (g_objbuttonclose) {
g_functions.setbuttonmobileready(g_objbuttonclose);
g_functions.setbuttononclick(g_objbuttonclose, onclosebuttonclick);
}
//youtube events
jquery(g_youtubeapi).on(g_youtubeapi.events.start_playing, onplaystart);
jquery(g_youtubeapi).on(g_youtubeapi.events.stop_playing, onplaystop);
jquery(g_youtubeapi).on(g_youtubeapi.events.video_ended, onvideoended);
//vimeo events
jquery(g_vimeoapi).on(g_vimeoapi.events.start_playing, onplaystart);
jquery(g_vimeoapi).on(g_vimeoapi.events.stop_playing, onplaystop);
jquery(g_vimeoapi).on(g_vimeoapi.events.video_ended, onvideoended);
//html5 video events
jquery(g_html5api).on(g_html5api.events.start_playing, onplaystart);
jquery(g_html5api).on(g_html5api.events.stop_playing, onplaystop);
jquery(g_html5api).on(g_html5api.events.video_ended, onvideoended);
jquery(g_soundcloudapi).on(g_soundcloudapi.events.start_playing, onplaystart);
jquery(g_soundcloudapi).on(g_soundcloudapi.events.stop_playing, onplaystop);
jquery(g_soundcloudapi).on(g_soundcloudapi.events.video_ended, onvideoended);
jquery(g_wistiaapi).on(g_wistiaapi.events.start_playing, onplaystart);
jquery(g_wistiaapi).on(g_wistiaapi.events.stop_playing, onplaystop);
jquery(g_wistiaapi).on(g_wistiaapi.events.video_ended, onvideoended);
}
/**
* destroy the video player events
*/
this.destroy = function () {
if (g_objbuttonclose) {
g_objbuttonclose.off("click");
g_objbuttonclose.off("touchend");
}
//youtube events
jquery(g_youtubeapi).off(g_youtubeapi.events.start_playing);
jquery(g_youtubeapi).off(g_youtubeapi.events.stop_playing);
//vimeo events
jquery(g_vimeoapi).off(g_vimeoapi.events.start_playing);
jquery(g_vimeoapi).off(g_vimeoapi.events.stop_playing);
//html5 video events
jquery(g_html5api).off(g_html5api.events.start_playing);
jquery(g_html5api).off(g_html5api.events.stop_playing);
jquery(g_soundcloudapi).off(g_soundcloudapi.events.start_playing, onplaystart);
jquery(g_soundcloudapi).off(g_soundcloudapi.events.stop_playing, onplaystop);
jquery(g_wistiaapi).off(g_wistiaapi.events.start_playing, onplaystart);
jquery(g_wistiaapi).off(g_wistiaapi.events.stop_playing, onplaystop);
g_activeplayertype = null;
}
/**
* init events
*/
this.initevents = function () {
initevents();
}
/**
* set element size and position the button
*/
this.setsize = function (width, height) {
g_functions.setelementsize(g_objplayer, width, height);
if (g_objbuttonclose)
g_functions.placeelement(g_objbuttonclose, "right", "top");
}
/**
* set video player position
*/
this.setposition = function (left, top) {
g_functions.placeelement(g_objplayer, left, top);
}
/**
* get video player object for placing
*/
this.getobject = function () {
return (g_objplayer);
}
/**
* show the player
*/
this.show = function () {
if (t.isvisible() == true)
return (true);
g_objplayer.show();
g_objplayer.fadeto(0, 1);
if (g_objbuttonclose)
g_objbuttonclose.show();
g_objthis.trigger(t.events.show);
}
/**
* hide the player
*/
this.hide = function () {
if (t.isvisible() == false)
return (true);
//pause all players
stopandhideplayers();
g_activeplayertype = null;
g_objplayer.hide();
g_objthis.trigger(t.events.hide);
}
/**
* get active player
*/
this.getactiveapi = function () {
switch (g_activeplayertype) {
case "youtube":
return g_youtubeapi;
break;
case "vimeo":
return g_vimeoapi;
break;
case "wistia":
return g_wistiaapi;
break;
case "soundcloud":
return g_soundcloudapi;
break;
case "html5":
return g_html5api;
break;
default:
return null;
break;
}
}
/**
* pause active player if playing
*/
this.pause = function () {
var activeapi = t.getactiveapi();
if (activeapi == null)
return (false);
if (typeof activeapi.pause == "function")
activeapi.pause();
}
/**
* return if the player is visible
*/
this.isvisible = function () {
return g_objplayer.is(":visible");
}
/**
* stop and hide other elements except some
*/
function stopandhideplayers(except) {
var arrplayers = ["youtube", "vimeo", "html5", "soundcloud", "wistia"];
for (var index in arrplayers) {
var player = arrplayers[index];
if (player == except)
continue;
switch (player) {
case "youtube":
g_youtubeapi.pause();
g_youtubeapi.destroy();
g_objyoutube.hide();
break;
case "vimeo":
g_vimeoapi.pause();
g_vimeoapi.destroy();
g_objvimeo.hide();
break;
case "html5":
g_html5api.pause();
g_objhtml5.hide();
break;
case "soundcloud":
g_soundcloudapi.pause();
g_soundcloudapi.destroy();
g_objsoundcloud.hide();
break;
case "wistia":
g_wistiaapi.pause();
g_objwistia.hide();
break;
}
}
}
/**
* play youtube inside the video, isautoplay - true by default
*/
this.playyoutube = function (videoid, isautoplay) {
if (typeof isautoplay == "undefined")
var isautoplay = true;
stopandhideplayers("youtube");
g_objyoutube.show();
var objyoutubeinner = g_objyoutube.children("#" + g_temp.youtubeinnerid);
if (objyoutubeinner.length == 0)
g_objyoutube.append("");
if (g_youtubeapi.isplayerready() == true && g_temp.standalonemode == true)
g_youtubeapi.changevideo(videoid, isautoplay);
else {
g_youtubeapi.putvideo(g_temp.youtubeinnerid, videoid, "100%", "100%", isautoplay);
}
g_activeplayertype = "youtube";
}
/**
* play vimeo
*/
this.playvimeo = function (videoid, isautoplay) {
if (typeof isautoplay == "undefined")
var isautoplay = true;
stopandhideplayers("vimeo");
g_objvimeo.show();
g_vimeoapi.putvideo(g_temp.vimeoplayerid, videoid, "100%", "100%", isautoplay);
/*
if(g_vimeoapi.isplayerready() && g_temp.standalonemode == true){
g_vimeoapi.changevideo(videoid, isautoplay);
}
else
g_vimeoapi.putvideo(g_temp.vimeoplayerid, videoid, "100%", "100%", isautoplay);
*/
g_activeplayertype = "vimeo";
}
/**
* play html5 video
*/
this.playhtml5video = function (ogv, webm, mp4, posterimage, isautoplay) {
if (typeof isautoplay == "undefined")
var isautoplay = true;
stopandhideplayers("html5");
g_objhtml5.show();
//trace(posterimage);
var data = {
ogv: ogv,
webm: webm,
mp4: mp4,
posterimage: posterimage
};
g_html5api.putvideo(g_temp.html5playerid, data, "100%", "100%", isautoplay);
g_activeplayertype = "html5";
}
/**
* play sound cloud
*/
this.playsoundcloud = function (trackid, isautoplay) {
if (typeof isautoplay == "undefined")
var isautoplay = true;
stopandhideplayers("soundcloud");
g_objsoundcloud.show();
g_soundcloudapi.putsound(g_temp.soundcloudplayerid, trackid, "100%", "100%", isautoplay);
g_activeplayertype = "soundcloud";
}
/**
* play sound cloud
*/
this.playwistia = function (videoid, isautoplay) {
if (typeof isautoplay == "undefined")
var isautoplay = true;
stopandhideplayers("wistia");
g_objwistia.show();
g_wistiaapi.putvideo(g_temp.wistiaplayerid, videoid, "100%", "100%", isautoplay);
g_activeplayertype = "wistia";
}
}
var g_ugyoutubeapi = new ugyoutubeapi();
var g_ugvimeoapi = new ugvimeoapi();
var g_ughtml5mediaapi = new ughtml5mediaapi();
var g_ugsoundcloudapi = new ugsoundcloudapi();
var g_ugwistiaapi = new ugwistiaapi();
/**
* prototype gallery funciton
*/
jquery.fn.unitegallery = function (options) {
var element = jquery(this);
var galleryid = "#" + element.attr("id");
if (!options)
var options = {};
var objgallery = new unitegallerymain();
objgallery.run(galleryid, options);
var api = new ug_api(objgallery);
return (api);
}
/**
* check for min jquery version
*/
function ugcheckforminjqueryversion() {
var isminjquery = g_ugfunctions.checkminjqueryversion("1.8.0");
if (isminjquery == false)
throw new error("the gallery can run from jquery 1.8 you have jquery " + jquery.fn.jquery + " please update your jquery library.");
}
/**
* check for errors function
*/
function ugcheckforerrors(galleryid, type) {
/**
* check for jquery presents
*/
function checkforjquerypresents() {
if (typeof jquery == "undefined")
throw new error("jquery library not included");
}
/**
* check for double jquery error
*/
function checkfordoublejquery() {
if (typeof jquery.fn.unitegallery == "function")
return (true);
var errormessage = "you have some jquery.js library include that comes after the gallery files js include.";
errormessage += " this include eliminates the gallery libraries, and make it not work.";
if (type == "cms") {
errormessage += "
to fix it you can: 1. in the gallery settings -> troubleshooting set option: put js includes to body option to true.";
errormessage += " 2. find the double jquery.js include and remove it.";
} else {
errormessage += "
please find and remove this jquery.js include and the gallery will work. * there should be only one jquery.js include before all other js includes in the page.";
}
throw new error(errormessage);
}
try {
if (type == "jquery") {
checkforjquerypresents();
ugcheckforminjqueryversion();
} else {
ugcheckforminjqueryversion();
checkfordoublejquery();
}
} catch (objerror) {
var message = objerror.message;
message = "unite gallery error: " + message;
message = "
" + message + "
"
if (type == "jquery") {
var objgallery = document.getelementbyid(galleryid);
objgallery.innerhtml = message;
objgallery.style.display = "block";
}
else
jquery(galleryid).show().html(message);
return (false);
}
return (true);
}
function unitegallerymain() {
var t = this;
var g_galleryid;
var g_objgallery = jquery(t), g_objwrapper, g_objparent;
var g_objthumbs, g_objslider, g_functions = new ugfunctions(), g_objtabs, g_objloadmore;
var g_arritems = [], g_numitems, g_selecteditem = null, g_selecteditemindex = -1;
var g_objtheme, g_objcache = {};
this.events = {
item_change: "item_change",
size_change: "size_change",
enter_fullscreen: "enter_fullscreen",
exit_fullscreen: "exit_fullscreen",
start_play: "start_play",
stop_play: "stop_play",
pause_playing: "pause_playing",
continue_playing: "continue_playing",
slider_action_start: "slider_action_start",
slider_action_end: "slider_action_end",
item_image_updated: "item_image_updated",
gallery_keypress: "gallery_keypress",
gallery_before_request_items: "gallery_before_request_items", //before ajax load items
open_lightbox: "open_lightbox",
close_lightbox: "close_lightbox"
};
var gallery_width = $("#gallery").parent().width();
//set the default gallery options
var g_options = {
gallery_width: gallery_width, //gallery width
gallery_height: (gallery_width + smallimgheight * imgzoom) / imgzoom, //gallery height
gallery_min_width: 300, //gallery minimal width when resizing
gallery_min_height: (300 + smallimgheight * imgzoom) / imgzoom, //gallery minimal height when resizing
gallery_theme: "default", //default,compact,grid,slider - select your desired theme from the list of themes.
gallery_skin: "default", //default, alexis etc... - the global skin of the gallery. will change all gallery items by default.
gallery_images_preload_type: "minimal", //all , minimal , visible - preload type of the images.
//minimal - only image nabours will be loaded each time.
//visible - visible thumbs images will be loaded each time.
//all - load all the images first time.
gallery_autoplay: false, //true / false - begin slideshow autoplay on start
gallery_play_interval: 3000, //play interval of the slideshow
gallery_pause_on_mouseover: true, //true,false - pause on mouseover when playing slideshow true/false
gallery_mousewheel_role: "zoom", //none, zoom, advance
gallery_control_keyboard: true, //true,false - enable / disble keyboard controls
gallery_carousel: true, //true,false - next button on last image goes to first image.
gallery_preserve_ratio: true, //true, false - preserver ratio when on window resize
gallery_background_color: "", //set custom background color. if not set it will be taken from css.
gallery_debug_errors: false, //show error message when there is some error on the gallery area.
gallery_shuffle: false, //randomise position of items at start.
gallery_urlajax: null, //ajax url for requesting new items etc.
gallery_enable_tabs: false, //enable/disable category tabs
gallery_enable_loadmore: false, //enable / disable loadmore button
gallery_enable_cache: true, //enable caching items
gallery_initial_catid: "" //initial category id (for caching)
};
//gallery_control_thumbs_mousewheel
var g_temp = { //temp variables
objcustomoptions: {},
isallitemspreloaded: false, //flag that tells that all items started preloading
isfreestylemode: false, //no special html additions
lastwidth: 0,
lastheigh: 0,
handleresize: null,
isinited: false,
isplaymode: false,
isplaymodepaused: false,
playtimepassed: 0,
playtimelaststep: 0,
playhandle: "",
playstepinterval: 33,
objprogress: null,
isfakefullscreen: false,
thumbstype: null,
isyoutubepresent: false, //flag if present youtube items
isvimeopresent: false, //flag if present vimeo items
ishtml5videopresent: false, //flag if present html5 video items
issoundcloudpresent: false, //flag if present soundcloud items
iswistiapresent: false, //flag if some wistia movie present
resizedelay: 100,
isrunfirsttime: true,
originaloptions: {},
funccustomheight: null //custom height function, set by the theme if needed
};
function __________init_gallery_______() { };
/**
* get theme function from theme name
*/
function getthemefunction(themename) {
var themefunction = themename;
if (themefunction.indexof("ugtheme_") == -1)
themefunction = "ugtheme_" + themefunction;
return (themefunction);
}
/**
* init the theme
*/
function inittheme(objcustomoptions) {
//set theme function:
if (objcustomoptions.hasownproperty("gallery_theme"))
g_options.gallery_theme = objcustomoptions.gallery_theme;
else {
var defaulttheme = g_options.gallery_theme;
if (g_ugfunctions.isthemeregistered(defaulttheme) == false)
g_options.gallery_theme = g_ugfunctions.getfirstregisteredtheme();
}
var themefunction = getthemefunction(g_options.gallery_theme);
try {
g_options.gallery_theme = eval(themefunction);
} catch (e) {
//check registered themes
};
g_options.gallery_theme = eval(themefunction);
//init the theme
g_objtheme = new g_options.gallery_theme();
g_objtheme.init(t, objcustomoptions);
}
/**
* reset all the options for the second time run
*/
function resetoptions() {
g_options = jquery.extend({}, g_temp.originaloptions);
g_selecteditemindex = -1;
g_selecteditem = null;
g_objslider = undefined;
g_objthumbs = undefined;
g_objslider = undefined;
}
/**
* check for some errors and fire error if needed
*/
function checkforstartuperrors() {
//protection agains old jquery version
try {
ugcheckforminjqueryversion();
} catch (e) {
throwerrorshowmessage(e.message);
}
//protection against some jquery ui function change
if (typeof g_objwrapper.outerwidth() == "object")
throwerrorshowmessage("you have some buggy script. most chances jquery-ui.js that destroy jquery outerwidth, outerheight functions. the gallery can't run. please update jquery-ui.js to latest version.");
//check for late jquery include
settimeout(function () { ugcheckforerrors(g_galleryid, "cms") }, 5000);
}
/**
* the gallery
*/
function rungallery(galleryid, objcustomoptions, htmlitems, cacheid) {
var iscustomoptions = (typeof objcustomoptions == "object");
if (iscustomoptions)
g_temp.objcustomoptions = objcustomoptions;
if (g_temp.isrunfirsttime == true) {
g_galleryid = galleryid;
g_objwrapper = jquery(g_galleryid);
if (g_objwrapper.length == 0) {
trace("div with id: " + g_galleryid + " not found");
return (false);
}
g_objparent = g_objwrapper.parent();
checkforstartuperrors();
g_temp.originaloptions = jquery.extend({}, g_options);
//merge options
if (iscustomoptions)
g_options = jquery.extend(g_options, objcustomoptions);
//cache items
if (g_options.gallery_enable_cache == true && g_options.gallery_initial_catid)
cacheitems(g_options.gallery_initial_catid);
//set size class
t.setsizeclass();
//fill arritems
var objitems = g_objwrapper.children();
fillitemsarray(objitems);
loadapis();
//hide images:
g_objwrapper.find("img").fadeto(0, 0).hide();
g_objwrapper.show();
clearinitdata();
} else { //reset options - not first time run
t.destroy();
resetoptions();
g_options = jquery.extend(g_options, g_temp.objcustomoptions);
if (htmlitems) {
//cache items
if (cacheid && g_options.gallery_enable_cache == true)
cacheitems(cacheid, htmlitems);
if (htmlitems == "noitems") {
showerrormessage("no items in this category", "");
return (false);
}
g_objwrapper.html(htmlitems);
var objitems = g_objwrapper.children();
fillitemsarray(objitems);
loadapis();
g_objwrapper.children().fadeto(0, 0).hide();
g_objwrapper.show();
clearinitdata();
}
}
//init tabs
if (g_temp.isrunfirsttime == true && g_options.gallery_enable_tabs == true) {
g_objtabs = new ugtabs();
g_objtabs.init(t, g_options);
}
//init loadmore button
if (g_temp.isrunfirsttime == true && g_options.gallery_enable_loadmore == true) {
g_objloadmore = new ugloadmore();
g_objloadmore.init(t, g_options);
}
//modify and verify the params
if (iscustomoptions)
modifyinitparams(g_temp.objcustomoptions);
validateparams();
//shuffle items
if (g_options.gallery_shuffle == true)
t.shuffleitems();
//init the theme
inittheme(g_temp.objcustomoptions);
//set gallery html elements
setgalleryhtml();
//set html properties to all elements
sethtmlobjectsproperties();
var gallerywidth = g_objwrapper.width();
if (gallerywidth == 0) {
g_functions.waitforwidth(g_objwrapper, rungalleryactually);
} else
rungalleryactually();
}
/**
* actually run the gallery
*/
function rungalleryactually() {
t.setsizeclass();
if (g_temp.isfreestylemode == false) {
if (g_options.gallery_preserve_ratio == true)
setheightbyoriginalratio();
}
g_objtheme.run();
if (g_objtabs && g_temp.isrunfirsttime)
g_objtabs.run();
preloadbigimages();
initevents();
//select first item
if (g_numitems > 0)
t.selectitem(0);
//set autoplay
if (g_options.gallery_autoplay == true)
t.startplaymode();
g_temp.isrunfirsttime = false;
}
/**
*
* show error message
*/
function showerrormessage(message, prefix) {
if (typeof prefix == "undefined")
var prefix = "unite gallery error: ";
else
prefix = "" + prefix + ": ";
message = prefix + message;
var html = "
" + message + "
";
g_objwrapper.children().remove();
g_objwrapper.html(html);
g_objwrapper.show();
}
/**
* show error message and throw error
*/
function throwerrorshowmessage(message) {
showerrormessage(message);
throw new error(message);
}
/**
*
* @param objparams
*/
function modifyinitparams() {
//set default for preloading
if (!g_options.gallery_images_preload_type)
g_options.gallery_images_preload_type = "minimal";
//normalize gallery min height and width
if (g_options.gallery_min_height == undefined || g_options.gallery_height < g_options.gallery_min_height) {
g_options.gallery_min_height = 0;
}
if (g_options.gallery_min_width == undefined || g_options.gallery_width < g_options.gallery_min_width) {
g_options.gallery_min_width = 0;
}
}
/**
* validate the init parameters
*/
function validateparams() {
//validate theme:
if (!g_options.gallery_theme)
throw new error("the gallery can't run without theme");
//if(typeof g_options.theme != "function")
//throw new error("wrong theme function: " + g_options.theme.tostring());
//validate height and width
if (jquery.isnumeric(g_options.gallery_height) && g_options.gallery_height < g_options.gallery_min_height)
throw new error("the gallery_height option must be bigger then gallery_min_height option");
if (g_options.gallery_width < g_options.gallery_min_width)
throw new error("the gallery_width option must be bigger then gallery_min_width option");
}
/**
* set gallery html
*/
function setgalleryhtml() {
//add classes and divs
g_objwrapper.addclass("ug-gallery-wrapper");
g_objwrapper.append("");
t.setsizeclass();
}
/**
* if the thumbs panel don't exists, delete initial images from dom
*/
function clearinitdata() {
var objitems = g_objwrapper.children().remove();
}
/**
* store last gallery size
*/
function storelastsize() {
var objsize = t.getsize();
g_temp.lastwidth = objsize.width;
g_temp.lastheight = objsize.height;
}
/**
* set gallery height by original ratio
*/
function setheightbyoriginalratio() {
var objsize = t.getsize();
var ratio = objsize.width / objsize.height;
if (ratio != objsize.orig_ratio) {
var newheight = objsize.width / objsize.orig_ratio;
newheight = math.round(newheight);
if (newheight < g_options.gallery_min_height)
newheight = g_options.gallery_min_height;
g_objwrapper.height(newheight);
}
}
/**
* set properties of the html objects
*/
function sethtmlobjectsproperties() {
var optionwidth = g_functions.getcsssizeparam(g_options.gallery_width);
//set size
var objcss = {
//"width":optionwidth, //make it work within tabs
"max-width": optionwidth,
"min-width": g_functions.getcsssizeparam(g_options.gallery_min_width)
};
if (g_temp.isfreestylemode == false) {
var galleryheight = g_functions.getcsssizeparam(g_options.gallery_height);
objcss["height"] = galleryheight;
} else {
objcss["overflow"] = "visible";
}
//set background color
if (g_options.gallery_background_color)
objcss["background-color"] = g_options.gallery_background_color;
g_objwrapper.css(objcss);
}
/**
* fill item by html child
*/
function fillitembychild(objchild) {
var ismobile = t.ismobilemode();
var tagname = objchild.prop("tagname").tolowercase();
//handle link wrapper
var itemlink = "";
if (tagname == "a") {
itemlink = objchild.attr("href");
objchild = objchild.children();
var tagname = objchild.prop("tagname").tolowercase();
}
var itemtype = objchild.data("type");
if (itemtype == undefined)
itemtype = "image";
var objitem = {};
objitem.type = itemtype;
if (tagname == "img") {
//protection agains lasy load
var lasyloadsrc = objchild.data("lazyload-src");
if (lasyloadsrc && lasyloadsrc != "") {
objchild.attr("src", lasyloadsrc);
jquery.removedata(objchild, "lazyload-src");
}
//src is thumb
var urlimage = objchild.data("image");
var urlthumb = objchild.data("thumb");
if (typeof (urlimage) == "undefined")
urlimage = null;
if (typeof (urlthumb) == "undefined")
urlthumb = null;
var imagesrc = objchild.attr("src");
if (!urlimage)
urlimage = imagesrc;
if (!urlthumb)
urlthumb = imagesrc;
if (!urlthumb)
urlthumb = urlimage;
if (!urlimage)
urlimage = urlthumb;
objitem.urlthumb = urlthumb;
objitem.urlimage = urlimage;
objitem.title = objchild.attr("alt");
//always set thumb image to object
objitem.objthumbimage = objchild;
objitem.objthumbimage.attr("src", objitem.urlthumb);
} else {
if (itemtype == "image") {
trace("problematic gallery item found:");
trace(objchild);
trace("please look for some third party js script that could add this item to the gallery");
throw new error("the item should not be image type");
}
objitem.urlthumb = objchild.data("thumb");
objitem.title = objchild.data("title");
objitem.objthumbimage = null;
objitem.urlimage = objchild.data("image");
}
//trace(ismobile);
//check mobile version images
if (ismobile == true) {
var urlthumbmobile = objchild.data("thumb-mobile");
if (typeof urlthumbmobile != "undefined" && urlthumbmobile != "") {
objitem.urlthumb = urlthumbmobile;
if (tagname == "img")
objchild.attr("src", objitem.urlthumb);
}
var urlimagemobile = objchild.data("image-mobile");
if (typeof urlimagemobile != "undefined" && urlimagemobile != "")
objitem.urlimage = urlimagemobile;
}
objitem.link = itemlink;
//get description:
objitem.description = objchild.attr("title");
if (!objitem.description)
objitem.description = objchild.data("description");
if (!objitem.description)
objitem.description = "";
objitem.isnewadded = false; //fill outside
objitem.isloaded = false;
objitem.isthumbimageloaded = false; //if the image loaded or error load
objitem.objpreloadimage = null;
objitem.isbigimageloadstarted = false;
objitem.isbigimageloaded = false;
objitem.isbigimageloaderror = false;
objitem.imagewidth = 0;
objitem.imageheight = 0;
//set thumb size
objitem.thumbwidth = 0;
objitem.thumbheight = 0;
objitem.thumbratiobywidth = 0;
objitem.thumbratiobyheight = 0;
var datawidth = objchild.data("width");
var dataheight = objchild.data("height");
if (datawidth && typeof datawidth == "number" && dataheight && typeof dataheight == "number") {
objitem.thumbwidth = datawidth;
objitem.thumbheight = dataheight;
objitem.thumbratiobywidth = datawidth / dataheight;
objitem.thumbratiobyheight = dataheight / datawidth;
}
objitem.addhtml = null;
var isimagemissing = (objitem.urlimage == undefined || objitem.urlimage == "");
var isthumbmissing = (objitem.urlthumb == undefined || objitem.urlthumb == "");
switch (objitem.type) {
case "youtube":
objitem.videoid = objchild.data("videoid");
if (isimagemissing || isthumbmissing) {
var objimages = g_ugyoutubeapi.getvideoimages(objitem.videoid);
//set preview image
if (isimagemissing)
objitem.urlimage = objimages.preview;
//set thumb image
if (isthumbmissing) {
objitem.urlthumb = objimages.thumb;
if (tagname == "img")
objchild.attr("src", objitem.urlthumb);
}
}
g_temp.isyoutubepresent = true;
break;
case "vimeo":
objitem.videoid = objchild.data("videoid");
g_temp.isvimeopresent = true;
break;
case "html5video":
objitem.videoogv = objchild.data("videoogv");
objitem.videowebm = objchild.data("videowebm");
objitem.videomp4 = objchild.data("videomp4");
g_temp.ishtml5videopresent = true;
break;
case "soundcloud":
objitem.trackid = objchild.data("trackid");
g_temp.issoundcloudpresent = true;
break;
case "wistia":
objitem.videoid = objchild.data("videoid");
g_temp.iswistiapresent = true;
break;
case "custom":
var objchildimage = objchild.children("img");
if (objchildimage.length) {
objchildimage = jquery(objchildimage[0]);
objitem.urlthumb = objchildimage.attr("src");
objitem.title = objchildimage.attr("alt");
objitem.objthumbimage = objchildimage;
}
//add additional html
var objchildren = objchild.children().not("img:first-child");
if (objchildren.length)
objitem.addhtml = objchildren.clone();
break;
}
//clear not needed attributes
if (objitem.objthumbimage) {
objitem.objthumbimage.removeattr("data-description", "");
objitem.objthumbimage.removeattr("data-image", "");
objitem.objthumbimage.removeattr("data-thumb", "");
objitem.objthumbimage.removeattr("title", "");
}
return (objitem);
}
/**
* fill items array from images object
*/
function fillitemsarray(arrchildren, isappend) {
if (isappend !== true) {
g_arritems = [];
} else { //append
//clear last new added items
for (var i = 0; i < g_numitems; i++)
g_arritems[i].isnewadded = false;
}
for (var i = 0; i < arrchildren.length; i++) {
var objchild = jquery(arrchildren[i]);
var objitem = fillitembychild(objchild);
numindex = g_arritems.length;
objitem.index = numindex;
if (isappend === true) {
objitem.isnewadded = true;
}
g_arritems.push(objitem);
}
g_numitems = g_arritems.length;
}
/**
* load api's according presented item types
*/
function loadapis() {
//load youtube api
if (g_temp.isyoutubepresent)
g_ugyoutubeapi.loadapi();
if (g_temp.isvimeopresent)
g_ugvimeoapi.loadapi();
if (g_temp.ishtml5videopresent)
g_ughtml5mediaapi.loadapi();
if (g_temp.issoundcloudpresent)
g_ugsoundcloudapi.loadapi();
if (g_temp.iswistiapresent)
g_ugwistiaapi.loadapi();
}
/**
* preload big images
*/
function preloadbigimages() {
//check and fix preload type
if (g_options.gallery_images_preload_type == "visible" && !g_objthumbs)
g_options.gallery_images_preload_type = "minimal";
if (g_temp.isallitemspreloaded == true)
return (true);
switch (g_options.gallery_images_preload_type) {
default:
case "minimal":
break;
case "all":
jquery(g_arritems).each(function () {
preloaditemimage(this);
});
break;
case "visible":
jquery(g_arritems).each(function () {
var objitem = this;
var isvisible = g_objthumbs.isitemthumbvisible(objitem);
if (isvisible == true)
preloaditemimage(objitem);
});
break;
}
}
/**
* check if item needed to preload and preload it
*/
function checkpreloaditemimage(objitem) {
if (objitem.isbigimageloadstarted == true ||
objitem.isbigimageloaded == true ||
objitem.isbigimageloaderror == true) {
return (false);
}
switch (g_options.gallery_images_preload_type) {
default:
case "minimal":
break;
case "all":
preloaditemimage(objitem);
break;
case "visible":
var isvisible = g_objthumbs.isitemthumbvisible(objitem);
if (isvisible == true)
preloaditemimage(objitem);
break;
}
}
/**
* preload item image
*/
function preloaditemimage(objitem) {
if (objitem.isbigimageloadstarted == true ||
objitem.isbigimageloaded == true ||
objitem.isbigimageloaderror == true) {
return (true);
}
var imageurl = objitem.urlimage;
if (imageurl == "" || imageurl == undefined) {
objitem.isbigimageloaderror = true;
return (false);
}
objitem.isbigimageloadstarted = true;
objitem.objpreloadimage = jquery('').attr("src", imageurl);
objitem.objpreloadimage.data("itemindex", objitem.index);
//set image load event (not that reliable)
objitem.objpreloadimage.on("load", t.onitembigimageloaded);
//set load error event
objitem.objpreloadimage.on("error", function () {
var objimage = jquery(this);
var itemindex = objimage.data("itemindex");
var objitem = g_arritems[itemindex];
//update error:
objitem.isbigimageloaderror = true;
objitem.isbigimageloaded = false;
//print error
var imageurl = jquery(this).attr("src");
console.log("can't load image: " + imageurl);
//try to load the image again
g_objgallery.trigger(t.events.item_image_updated, [itemindex, objitem.urlimage]);
objitem.objthumbimage.attr("src", objitem.urlthumb);
});
//check the all items started preloading flag
checkallitemsstartedpreloading();
}
/**
* on item big image loaded event function.
* update image size and that the image has been preloaded
* can be called from another objects like the slider
*/
this.onitembigimageloaded = function (event, objimage) {
if (!objimage)
var objimage = jquery(this);
var itemindex = objimage.data("itemindex");
var objitem = g_arritems[itemindex];
objitem.isbigimageloaded = true;
//get size with fallback function
var objsize = g_functions.getimageoriginalsize(objimage);
objitem.imagewidth = objsize.width;
objitem.imageheight = objsize.height;
}
/**
* check and fill image size in item object
*/
this.checkfillimagesize = function (objimage, objitem) {
if (!objitem) {
var itemindex = objimage.data("itemindex");
if (itemindex === undefined)
throw new error("wrong image given to gallery.checkfillimagesize");
var objitem = g_arritems[itemindex];
}
var objsize = g_functions.getimageoriginalsize(objimage);
objitem.imagewidth = objsize.width;
objitem.imageheight = objsize.height;
}
/**
* preload next images near current item
*/
function preloadnearbigimages(objitem) {
if (g_temp.isallitemspreloaded == true)
return (false);
if (!objitem)
var objitem = g_selecteditem;
if (!objitem)
return (true);
var currentindex = objitem.index;
var lastitemindex = currentindex - 1;
var nextitemindex = currentindex + 1;
if (lastitemindex > 0)
preloaditemimage(g_arritems[lastitemindex]);
if (nextitemindex < g_numitems)
preloaditemimage(g_arritems[nextitemindex]);
}
/**
* check that all items started preloading, if do, set
* flag g_temp.isallitemspreloaded to true
*/
function checkallitemsstartedpreloading() {
if (g_temp.isallitemspreloaded == true)
return (false);
//if some of the items not started, exit function:
for (var index in g_arritems) {
if (g_arritems[index].isbigimageloadstarted == false)
return (false);
}
//if all started, set flag to true
g_temp.isallitemspreloaded = true;
}
/**
* set freestyle mode
*/
this.setfreestylemode = function () {
g_temp.isfreestylemode = true;
}
/**
* attach thumbs panel to the gallery
*/
this.attachthumbspanel = function (type, objthumbs) {
g_temp.thumbstype = type;
g_objthumbs = objthumbs;
}
/**
* init the slider
*/
this.initslider = function (customoptions, optionsprefix) {
//mix options with user options
if (!customoptions)
var customoptions = {};
customoptions = jquery.extend(g_temp.objcustomoptions, customoptions);
g_objslider = new ugslider();
g_objslider.init(t, customoptions, optionsprefix);
}
function __________end_init_gallery_______() { };
function __________events_____________() { };
/**
* on gallery mousewheel event handler, advance the thumbs
*/
this.ongallerymousewheel = function (event, delta, deltax, deltay) {
event.preventdefault();
if (delta > 0)
t.previtem();
else
t.nextitem();
}
/**
* on mouse enter event
*/
function onslidermouseenter(event) {
if (g_options.gallery_pause_on_mouseover == true && t.isfullscreen() == false && g_temp.isplaymode == true && g_objslider && g_objslider.isslideactionactive() == false)
t.pauseplaying();
}
/**
* on mouse move event
*/
function onslidermouseleave(event) {
if (g_options.gallery_pause_on_mouseover == true && g_temp.isplaymode == true && g_objslider && g_objslider.isslideactionactive() == false) {
var isstillloading = g_objslider.iscurrentslideloadingimage();
if (isstillloading == false)
t.continueplaying();
}
}
/**
* on keypress - keyboard control
*/
function onkeypress(event) {
var obj = jquery(event.target);
if (obj.is("textarea") || obj.is("select") || obj.is("input"))
return (true);
var keycode = (event.charcode) ? event.charcode : ((event.keycode) ? event.keycode : ((event.which) ? event.which : 0));
var wasaction = true;
switch (keycode) {
case 39: //right key
t.nextitem();
break;
case 37: //left key
t.previtem();
break;
default:
wasaction = false;
break;
}
//only first page gallery affected
if (wasaction == true) {
event.preventdefault();
event.stoppropagation();
event.stopimmediatepropagation();
}
g_objgallery.trigger(t.events.gallery_keypress, [keycode, event]);
}
/**
* check that the gallery resized, if do, trigger onresize event
*/
function ongalleryresized() {
var objsize = t.getsize();
if (objsize.width == 0) //fix hidden gallery change
return (true);
t.setsizeclass();
var objsize = t.getsize();
if (objsize.width != g_temp.lastwidth || (g_temp.isfreestylemode == false && objsize.height != g_temp.lastheight)) {
var heightwasset = false;
//set height with custom function (if exists)
if (g_temp.funccustomheight) {
var newheight = g_temp.funccustomheight(objsize);
if (newheight) {
g_objwrapper.height(newheight);
heightwasset = true;
}
}
if (heightwasset == false && g_options.gallery_preserve_ratio == true && g_temp.isfreestylemode == false)
setheightbyoriginalratio();
storelastsize();
g_objgallery.trigger(t.events.size_change);
}
}
/**
* on strip move event
* preload visible images if that option selected
*/
function onthumbschange(event) {
//preload visible images
if (g_options.gallery_images_preload_type == "visible" && g_temp.isallitemspreloaded == false) {
preloadbigimages();
}
}
/**
* on full screen change event
*/
function onfullscreenchange() {
var isfullscreen = g_functions.isfullscreen();
var event = isfullscreen ? t.events.enter_fullscreen : t.events.exit_fullscreen;
var fullscreenid = g_functions.getglobaldata("fullscreenid");
//check if this gallery was affected
if (g_galleryid !== fullscreenid)
return (true);
//add classes for the gallery
if (isfullscreen) {
g_objwrapper.addclass("ug-fullscreen");
} else {
g_objwrapper.removeclass("ug-fullscreen");
}
g_objgallery.trigger(event);
ongalleryresized();
}
/**
* on big image updated, if needed - preload this item image
*/
function onitemimageupdated(event, index) {
var objitem = t.getitem(index);
checkpreloaditemimage(objitem);
}
/**
* on current slide image load end. if playing mode, begin playing again
*/
function oncurrentslideimageloadend() {
if (t.isplaymode() == true)
t.continueplaying();
}
/**
* init all events
*/
function initevents() {
//avoid annoyong firefox image dragging
g_objwrapper.on("dragstart", function (event) {
event.preventdefault();
});
//on big image updated, if needed - preload this item image
g_objgallery.on(t.events.item_image_updated, onitemimageupdated);
//init custom event on strip moving
if (g_objthumbs) {
switch (g_temp.thumbstype) {
case "strip":
jquery(g_objthumbs).on(g_objthumbs.events.strip_move, onthumbschange);
break;
case "grid":
jquery(g_objthumbs).on(g_objthumbs.events.pane_change, onthumbschange);
break;
}
}
//init mouse wheel
if (g_options.gallery_mousewheel_role == "advance" && g_temp.isfreestylemode == false)
g_objwrapper.on("mousewheel", t.ongallerymousewheel);
//on resize event
storelastsize();
jquery(window).resize(function () {
g_objwrapper.css("width", "auto");
g_functions.whencontiniouseventover("gallery_resize", ongalleryresized, g_temp.resizedelay);
});
//check resize once in a time, start from 10 seconds
settimeout(function () {
setinterval(ongalleryresized, 2000);
}, 10000);
//fullscreen:
g_functions.addfullscreenchangeevent(onfullscreenchange);
//on slider item changed event
if (g_objslider) {
jquery(g_objslider).on(g_objslider.events.item_changed, function () {
var sliderindex = g_objslider.getcurrentitemindex();
if (sliderindex != -1)
t.selectitem(sliderindex);
});
//add slider onmousemove event
if (g_options.gallery_pause_on_mouseover == true) {
var sliderelement = g_objslider.getelement();
sliderelement.hover(onslidermouseenter, onslidermouseleave);
//on full screen, run on mouse leave
g_objgallery.on(t.events.enter_fullscreen, function () {
onslidermouseleave();
});
}
//retrigger slider events
retriggerevent(g_objslider, g_objslider.events.action_start, t.events.slider_action_start);
retriggerevent(g_objslider, g_objslider.events.action_end, t.events.slider_action_end);
jquery(g_objslider).on(g_objslider.events.currentslide_load_end, oncurrentslideimageloadend);
}
//add keyboard events
if (g_options.gallery_control_keyboard == true)
jquery(document).keydown(onkeypress);
}
/**
* destroy all gallery events
*/
this.destroy = function () {
g_objwrapper.off("dragstart");
g_objgallery.off(t.events.item_image_updated);
//init custom event on strip moving
if (g_objthumbs) {
switch (g_temp.thumbstype) {
case "strip":
jquery(g_objthumbs).off(g_objthumbs.events.strip_move);
break;
case "grid":
jquery(g_objthumbs).off(g_objthumbs.events.pane_change);
break;
}
}
g_objwrapper.off("mousewheel");
jquery(window).off("resize");
//fullscreen:
g_functions.destroyfullscreenchangeevent();
//on slider item changed event
if (g_objslider) {
jquery(g_objslider).off(g_objslider.events.item_changed);
//add slider onmousemove event
var sliderelement = g_objslider.getelement();
sliderelement.off("mouseenter");
sliderelement.off("mouseleave");
g_objgallery.off(t.events.enter_fullscreen);
jquery(g_objslider).off(g_objslider.events.action_start);
jquery(g_objslider).off(g_objslider.events.action_end);
jquery(g_objslider).off(g_objslider.events.currentslide_load_end);
}
//add keyboard events
if (g_options.gallery_control_keyboard == true)
jquery(document).off("keydown");
//destroy theme
if (g_objtheme && typeof g_objtheme.destroy == "function") {
g_objtheme.destroy();
}
g_objwrapper.html("");
}
function __________general_______() { };
/**
* get items array
*/
this.getarritems = function () {
return g_arritems;
}
/**
* get gallery objects
*/
this.getobjects = function () {
var objects = {
g_galleryid: g_galleryid,
g_objwrapper: g_objwrapper,
g_objthumbs: g_objthumbs,
g_objslider: g_objslider,
g_options: g_options,
g_arritems: g_arritems,
g_numitems: g_numitems
};
return (objects);
}
/**
* get slider object
*/
this.getobjslider = function () {
return (g_objslider);
}
/**
*
* get item by index, if the index don't fit, trace error
*/
this.getitem = function (index) {
if (index < 0) {
throw new error("item with index: " + index + " not found");
return (null);
}
if (index >= g_numitems) {
throw new error("item with index: " + index + " not found");
return (null);
}
return (g_arritems[index]);
}
/**
* get gallery width
*/
this.getwidth = function () {
var objsize = t.getsize();
return (objsize.width);
}
/**
* get gallery height
*/
this.getheight = function () {
var objsize = t.getsize();
return (objsize.height);
}
/**
* get gallery size
*/
this.getsize = function () {
var objsize = g_functions.getelementsize(g_objwrapper);
objsize.orig_width = g_options.gallery_width;
objsize.orig_height = g_options.gallery_height;
objsize.orig_ratio = objsize.orig_width / objsize.orig_height;
return (objsize);
}
/**
* get gallery id
*/
this.getgalleryid = function () {
var id = g_galleryid.replace("#", "");
return (id);
}
/**
* get next item by current index (or current object)
*/
this.getnextitem = function (index, forcecarousel) {
if (typeof index == "object")
index = index.index;
var nextindex = index + 1;
if (forcecarousel !== true && g_numitems == 1)
return (null);
if (nextindex >= g_numitems) {
if (g_options.gallery_carousel == true || forcecarousel === true)
nextindex = 0;
else
return (null);
}
var objitem = g_arritems[nextindex];
return (objitem);
}
/**
* get previous item by index (or item object)
*/
this.getprevitem = function (index) {
if (typeof index == "object")
index = index.index;
var previndex = index - 1;
if (previndex < 0) {
if (g_options.gallery_carousel == true || forcecarousel === true)
previndex = g_numitems - 1;
else
return (null);
}
var objitem = g_arritems[previndex];
return (objitem);
}
/**
* get selected item
*/
this.getselecteditem = function () {
return (g_selecteditem);
}
/**
* get selected item index
*/
this.getselecteditemindex = function () {
return (g_selecteditemindex);
}
/**
* get number of items
*/
this.getnumitems = function () {
return g_numitems;
}
/**
* get true if the current item is last
*/
this.islastitem = function () {
if (g_selecteditemindex == g_numitems - 1)
return (true);
return (false);
}
/**
* get true if the current item is first
*/
this.isfirstitem = function () {
if (g_selecteditemindex == 0)
return (true);
return (false);
}
/**
* get gallery options
*/
this.getoptions = function () {
return g_options;
}
/**
* get the gallery wrapper element
*/
this.getelement = function () {
return (g_objwrapper);
}
this.___________set_controls___________ = function () { }
/**
* set next button element
* set onclick event
*/
this.setnextbutton = function (objbutton) {
//register button as a unite gallery belong
objbutton.data("ug-button", true);
g_functions.setbuttononclick(objbutton, t.nextitem);
}
/**
* set prev button element
* set onclick event
*/
this.setprevbutton = function (objbutton) {
//register button as a unite gallery belong
objbutton.data("ug-button", true);
g_functions.setbuttononclick(objbutton, t.previtem);
}
/**
* set fullscreen button to enter / exit fullscreen.
* on fullscreen mode ug-fullscreenmode class wil be added
*/
this.setfullscreentogglebutton = function (objbutton) {
//register button as a unite gallery belong
objbutton.data("ug-button", true);
g_functions.setbuttonontap(objbutton, t.togglefullscreen);
g_objgallery.on(t.events.enter_fullscreen, function () {
objbutton.addclass("ug-fullscreenmode");
});
g_objgallery.on(t.events.exit_fullscreen, function () {
objbutton.removeclass("ug-fullscreenmode");
});
}
/**
* destroy full screen button
*/
this.destroyfullscreenbutton = function (objbutton) {
g_functions.destroybutton(objbutton);
g_objgallery.off(t.events.enter_fullscreen);
g_objgallery.off(t.events.exit_fullscreen);
}
/**
* set play button event
*/
this.setplaybutton = function (objbutton) {
//register button as a unite gallery belong
objbutton.data("ug-button", true);
g_functions.setbuttononclick(objbutton, t.toggleplaymode);
g_objgallery.on(t.events.start_play, function () {
objbutton.addclass("ug-stop-mode");
});
g_objgallery.on(t.events.stop_play, function () {
objbutton.removeclass("ug-stop-mode");
});
}
/**
* destroy the play button
*/
this.destroyplaybutton = function (objbutton) {
g_functions.destroybutton(objbutton);
g_objgallery.off(t.events.start_play);
g_objgallery.off(t.events.stop_play);
}
/**
* set playing progress indicator
*/
this.setprogressindicator = function (objprogress) {
g_temp.objprogress = objprogress;
}
/**
* set title and descreiption containers
*/
this.settextcontainers = function (objtitle, objdescription) {
g_objgallery.on(t.events.item_change, function () {
var objitem = t.getselecteditem();
objtitle.html(objitem.title);
objdescription.html(objitem.description);
});
}
/**
* show overlay disabled
*/
this.showdisabledoverlay = function () {
g_objwrapper.children(".ug-overlay-disabled").show();
}
/**
* show overlay disabled
*/
this.hidedisabledoverlay = function () {
g_objwrapper.children(".ug-overlay-disabled").hide();
}
this.___________end_set_controls___________ = function () { }
/**
* cache items, put to cache array by id
* the items must be unprocessed yet
*/
function cacheitems(cacheid, htmlitemsarg) {
if (htmlitemsarg) {
var htmlitems = htmlitemsarg;
if (htmlitems != "noitems")
htmlitems = jquery(htmlitemsarg).clone();
} else {
var htmlitems = g_objwrapper.children().clone();
}
g_objcache[cacheid] = htmlitems;
}
/**
* remove all size classes
*/
function removeallsizeclasses(objwrapper) {
if (!objwrapper)
objwrapper = g_objwrapper;
objwrapper.removeclass("ug-under-480");
objwrapper.removeclass("ug-under-780");
objwrapper.removeclass("ug-under-960");
}
/**
* retrigger event from another objects
* the second parameter will be the second object
*/
function retriggerevent(object, originalevent, newevent) {
jquery(object).on(originalevent, function (event) {
g_objgallery.trigger(newevent, [this]);
});
}
/**
* advance next play step
*/
function advancenextstep() {
var timenow = jquery.now();
var timediff = timenow - g_temp.playtimelaststep;
g_temp.playtimelaststep = timenow;
var isvisible = t.isgalleryvisible();
if (isvisible == false) {
return (false);
}
g_temp.playtimepassed += timediff;
//set the progress
if (g_temp.objprogress) {
var percent = g_temp.playtimepassed / g_options.gallery_play_interval;
g_temp.objprogress.setprogress(percent);
}
//if interval passed - proceed to next item
if (g_temp.playtimepassed >= g_options.gallery_play_interval) {
t.nextitem();
g_temp.playtimepassed = 0;
}
}
this.___________play_mode___________ = function () { }
/**
* start play mode
*/
this.startplaymode = function () {
g_temp.isplaymode = true;
g_temp.isplaymodepaused = false;
g_temp.playtimepassed = 0;
g_temp.playtimelaststep = jquery.now();
g_temp.playhandle = setinterval(advancenextstep, g_temp.playstepinterval);
//show and reset progress indicator
if (g_temp.objprogress) {
var objelement = g_temp.objprogress.getelement();
g_temp.objprogress.setprogress(0);
objelement.show();
}
g_objgallery.trigger(t.events.start_play);
//check if there is a need to pause
if (g_objslider && g_objslider.iscurrentslideloadingimage() == true) {
t.pauseplaying();
}
}
/**
* reset playing - set the timer to 0
*/
this.resetplaying = function () {
if (g_temp.isplaymode == false)
return (true);
g_temp.playtimepassed = 0;
g_temp.playtimelaststep = jquery.now();
}
/**
* pause playing slideshow
*/
this.pauseplaying = function () {
if (g_temp.isplaymodepaused == true)
return (true);
g_temp.isplaymodepaused = true;
clearinterval(g_temp.playhandle);
g_objgallery.trigger(t.events.pause_playing);
}
/**
* continue playing slideshow
*/
this.continueplaying = function () {
if (g_temp.isplaymodepaused == false)
return (true);
g_temp.isplaymodepaused = false;
g_temp.playtimelaststep = jquery.now();
g_temp.playhandle = setinterval(advancenextstep, g_temp.playstepinterval);
}
/**
* stop play mode
*/
this.stopplaymode = function () {
g_temp.isplaymode = false;
clearinterval(g_temp.playhandle);
g_temp.playtimepassed = 0;
//hide progress indicator
if (g_temp.objprogress) {
var objelement = g_temp.objprogress.getelement();
objelement.hide();
}
g_objgallery.trigger(t.events.stop_play);
}
/**
* tells if the play mode are active
*/
this.isplaymode = function () {
return (g_temp.isplaymode);
}
/**
* start / stop play mode
*/
this.toggleplaymode = function () {
if (t.isplaymode() == false)
t.startplaymode();
else
t.stopplaymode();
}
/**
* unselect all items
*/
function unselectseleteditem() {
if (g_selecteditem == null)
return (true);
if (g_objthumbs)
g_objthumbs.setthumbunselected(g_selecteditem.objthumbwrapper);
g_selecteditem = null;
g_selecteditemindex = -1;
}
this.___________general_external___________ = function () { }
/**
* shuffle items - usually before theme start
*/
this.shuffleitems = function () {
g_arritems = g_functions.arrayshuffle(g_arritems);
for (var index in g_arritems) //fix index
g_arritems[index].index = parseint(index);
}
/**
* set main gallery params, extend current params
*/
this.setoptions = function (customoptions) {
g_options = jquery.extend(g_options, customoptions);
}
/**
* select some item
* the input can be index or object
* role - the role of the object who selected the item
*/
this.selectitem = function (objitem, role) {
if (typeof objitem == "number")
objitem = t.getitem(objitem);
var itemindex = objitem.index;
if (itemindex == g_selecteditemindex)
return (true);
unselectseleteditem();
//set selected item
g_selecteditem = objitem;
g_selecteditemindex = itemindex;
g_objgallery.trigger(t.events.item_change, [objitem, role]);
//reset playback, if playing
if (g_temp.isplaymode == true) {
t.resetplaying();
var stillloading = g_objslider.iscurrentslideloadingimage();
if (stillloading == true)
t.pauseplaying();
}
}
/**
* go to next item
*/
this.nextitem = function () {
var newitemindex = g_selecteditemindex + 1;
if (g_numitems == 0)
return (true);
if (g_options.gallery_carousel == false && newitemindex >= g_numitems)
return (true);
if (newitemindex >= g_numitems)
newitemindex = 0;
//debugline(newitemindex,true);
t.selectitem(newitemindex, "next");
}
/**
* go to previous item
*/
this.previtem = function () {
var newitemindex = g_selecteditemindex - 1;
if (g_selecteditemindex == -1)
newitemindex = 0;
if (g_numitems == 0)
return (true);
if (g_options.gallery_carousel == false && newitemindex < 0)
return (true);
if (newitemindex < 0)
newitemindex = g_numitems - 1;
t.selectitem(newitemindex, "prev");
}
/**
* expand gallery to body size
*/
function tofakefullscreen() {
jquery("body").addclass("ug-body-fullscreen");
g_objwrapper.addclass("ug-fake-fullscreen");
g_temp.isfakefullscreen = true;
g_objgallery.trigger(t.events.enter_fullscreen);
g_objgallery.trigger(t.events.size_change);
}
/**
* exit fake fullscreen
*/
function exitfakefullscreen() {
jquery("body").removeclass("ug-body-fullscreen");
g_objwrapper.removeclass("ug-fake-fullscreen");
g_temp.isfakefullscreen = false;
g_objgallery.trigger(t.events.exit_fullscreen);
g_objgallery.trigger(t.events.size_change);
}
/**
* return if the fullscreen mode is available
*/
this.isfullscreen = function () {
if (g_temp.isfakefullscreen == true)
return (true);
if (g_functions.isfullscreen() == true)
return (true);
return (false);
}
/**
* tells if it's fake fullscreen
*/
this.isfakefullscreen = function () {
return (g_temp.isfakefullscreen);
}
/**
* go to fullscreen mode
*/
this.tofullscreen = function () {
g_functions.setglobaldata("fullscreenid", g_galleryid);
var divgallery = g_objwrapper.get(0);
var issupported = g_functions.tofullscreen(divgallery);
if (issupported == false)
tofakefullscreen();
}
/**
* exit full screen
*/
this.exitfullscreen = function () {
if (g_temp.isfakefullscreen == true)
exitfakefullscreen();
else
g_functions.exitfullscreen();
}
/**
* toggle fullscreen
*/
this.togglefullscreen = function () {
if (t.isfullscreen() == false) {
t.tofullscreen();
} else {
t.exitfullscreen();
}
}
/**
* resize the gallery
* noevent - initally false
*/
this.resize = function (newwidth, newheight, noevent) {
g_objwrapper.css("width", "auto");
g_objwrapper.css("max-width", newwidth + "px");
if (newheight)
g_objwrapper.height(newheight);
if (!noevent && noevent !== true)
ongalleryresized();
}
/**
* set size class to the wrapper
* this can work to any other wrapper too
*/
this.setsizeclass = function (objwrapper, width) {
if (!objwrapper)
var objwrapper = g_objwrapper;
if (!width) {
var objsize = t.getsize();
var width = objsize.width;
}
if (width == 0)
var width = jquery(window).width();
var addclass = "";
if (width <= 480) {
addclass = "ug-under-480";
} else
if (width <= 780) {
addclass = "ug-under-780";
} else
if (width < 960) {
addclass = "ug-under-960";
}
if (objwrapper.hasclass(addclass) == true)
return (true);
removeallsizeclasses(objwrapper);
if (addclass != "")
objwrapper.addclass(addclass);
}
/**
* return if the size is suited for mobile
*/
this.ismobilemode = function () {
if (g_objwrapper.hasclass("ug-under-480"))
return (true);
return (false);
}
/**
* get if small screen
*/
this.issmallwindow = function () {
var windowwidth = jquery(window).width();
if (!windowwidth)
return (true);
if (windowwidth <= 480)
return (true);
return (false);
}
/**
* check if the gallery is visible
*/
this.isgalleryvisible = function () {
var isvisible = g_objwrapper.is(":visible");
return (isvisible);
}
/**
* change gallery items
*/
this.changeitems = function (itemscontent, cacheid) {
if (!itemscontent)
var itemscontent = "noitems";
rungallery(g_galleryid, "nochange", itemscontent, cacheid);
}
/**
* add items
*/
this.additems = function (itemscontent) {
if (!itemscontent || itemscontent.length == 0)
return (false);
//add new items wrapper
var objnewitemswrapper = g_objwrapper.children(".ug-newitems-wrapper");
if (objnewitemswrapper.length == 0)
g_objwrapper.append("");
objnewitemswrapper = g_objwrapper.children(".ug-newitems-wrapper");
//add the items
objnewitemswrapper.append(itemscontent);
var objchildren = jquery(objnewitemswrapper.children());
fillitemsarray(objchildren, true);
loadapis();
if (!g_objtheme || typeof g_objtheme.additems != "function")
throw new error("additems function not found in the theme");
objnewitemswrapper.remove();
g_objtheme.additems();
}
/**
* get new added items indexes array
*/
this.getnewaddeditemsindexes = function () {
var arrindexes = [];
jquery.each(g_arritems, function (index, objitem) {
if (objitem.isnewadded == true)
arrindexes.push(index);
});
return (arrindexes);
}
/**
* show error message, replace whole gallery div
*/
this.showerrormessagereplacegallery = function (message) {
showerrormessage(message);
}
/**
* set custom height function by width
*/
this.setfunccustomheight = function (func) {
g_temp.funccustomheight = func;
}
this.__________external_events_______ = function () { };
/**
* trigger event
*/
this.triggerevent = function (event, arrparams) {
if (!arrparams)
g_objgallery.trigger(event);
else {
if (jquery.type(arrparams) != "array")
arrparams = [arrparams];
g_objgallery.trigger(event, arrparams);
}
}
/**
* on event
*/
this.onevent = function (event, func) {
g_objgallery.on(event, func);
}
/**
* destroy event
*/
this.destroyevent = function (event) {
g_objgallery.off(event);
}
this.__________ajax_request_______ = function () { };
/**
* ajax request
*/
this.ajaxrequest = function (action, data, successfunction, errorfunction) {
if (!successfunction || typeof successfunction != "function")
throw new error("ajaxrequest error: success function should be passed");
var urlajax = g_options.gallery_urlajax;
if (!urlajax || urlajax == "")
throw new error("ajaxrequest error: ajax url don't passed");
if (typeof data == "undefined")
var data = {};
//add galleryid to data
var objdata = {
action: "unitegallery_ajax_action",
client_action: action,
galleryid: g_galleryid,
data: data
};
jquery.ajax({
type: "post",
url: g_options.gallery_urlajax,
datatype: 'json',
data: objdata,
success: function (response) {
if (!response) {
throw new error("empty ajax response!");
}
if (response == -1 || response === 0)
throw new error("ajax error!!!");
if (typeof response.success == "undefined")
throw new error("ajax error!!!");
if (response.success == false) {
showerrormessage(response.message, "ajax error");
return (false);
}
successfunction(response);
},
error: function (jqxhr, textstatus, errorthrown) {
console.log("ajax error!!! " + textstatus);
responsetext = jqxhr.responsetext;
if (errorfunction && typeof errorfunction == "function") {
errorfunction(responsetext);
} else
trace(responsetext);
}
});
}
/**
* request new items
* isforce - don't take from cache
*/
this.requestnewitems = function (catid, isforce, cacheid) {
var checkcache = g_options.gallery_enable_cache;
if (!cacheid)
cacheid = catid;
if (isforce == true)
checkcache = false;
//get items from cache
if (checkcache == true && g_objcache.hasownproperty(cacheid)) {
var htmlitems = g_objcache[cacheid];
t.changeitems(htmlitems, cacheid);
} else {
g_objgallery.trigger(t.events.gallery_before_request_items);
t.ajaxrequest("front_get_cat_items", { catid: catid }, function (response) {
var htmlitems = response.html;
t.changeitems(htmlitems, cacheid);
});
}
}
/**
* run the gallery
*/
this.run = function (galleryid, objparams) {
var debug_errors = g_options.gallery_debug_errors;
if (objparams && objparams.hasownproperty("gallery_debug_errors"))
g_options.gallery_debug_errors = objparams.gallery_debug_errors;
if (g_options.gallery_debug_errors == true) {
try {
rungallery(galleryid, objparams);
} catch (objerror) {
if (typeof objerror == "object") {
var message = objerror.message;
var linenumber = objerror.linenumber;
var filename = objerror.filename;
var stack = objerror.stack;
message += "
in file: " + filename;
message += " line " + linenumber + "";
trace(objerror);
} else {
var message = objerror;
}
//remove double "error:" text
message = message.replace("error:", "");
showerrormessage(message);
}
} else {
rungallery(galleryid, objparams);
}
}
} //unitegallery object end
/**
* tiles class
*/
function uglightbox() {
var t = this, g_objthis = jquery(this);
var g_gallery = new unitegallerymain(), g_objgallery, g_objwrapper;
var g_objslider = new ugslider(), g_objoverlay, g_objarrowleft, g_objarrowright, g_objbuttonclose;
var g_functions = new ugfunctions(), g_objtextpanel = new ugtextpanel(), g_objnumbers;
var g_objtoppanel;
var g_options = {
lightbox_type: "wide", //compact / wide - lightbox type
lightbox_show_textpanel: true, //show the text panel
lightbox_textpanel_width: 550, //the width of the text panel.
lightbox_hide_arrows_onvideoplay: true, //hide the arrows when video start playing and show when stop
lightbox_arrows_position: "sides", //sides, inside: position of the arrows, used on compact type
lightbox_arrows_offset: 10, //the horizontal offset of the arrows
lightbox_arrows_inside_offset: 10, //the offset from the image border if the arrows placed inside
lightbox_arrows_inside_alwayson: false, //show the arrows on mouseover, or always on.
lightbox_overlay_color: null, //the color of the overlay. if null - will take from css
lightbox_overlay_opacity: 1, //the opacity of the overlay. if null - will take from css
lightbox_top_panel_opacity: null, //the opacity of the top panel
lightbox_show_numbers: true, //show numbers on the right side
lightbox_numbers_size: null, //the size of the numbers string
lightbox_numbers_color: null, //the color of the numbers
lightbox_numbers_padding_top: null, //the top padding of the numbers (used in compact mode)
lightbox_numbers_padding_right: null, //the right padding of the numbers (used in compact mode)
lightbox_compact_closebutton_offsetx: 1, //the offsetx of the close button. valid only for compact mode
lightbox_compact_closebutton_offsety: 1, //the offsetx of the close button. valid only for compact mode
lightbox_close_on_emptyspace: true //close the lightbox on empty space
};
this.events = {
lightbox_init: "lightbox_init"
};
var g_temp = {
toppanelheight: 44,
inittextpanelheight: 26, //init height for compact mode
isopened: false,
isrightnowopened: false,
putslider: true,
iscompact: false,
fadeduration: 300,
positionfrom: null,
textpaneltop: null,
textpanelleft: null,
isarrowsinside: false,
isarrowsonhovermode: false,
lastmousex: null,
lastmousey: null,
originaloptions: null,
issliderchangedonce: false,
istoppanelenabled: true
};
var g_defaults = {
lightbox_slider_controls_always_on: true,
lightbox_slider_enable_bullets: false,
lightbox_slider_enable_arrows: false,
lightbox_slider_enable_progress_indicator: false,
lightbox_slider_enable_play_button: false,
lightbox_slider_enable_fullscreen_button: false,
lightbox_slider_enable_zoom_panel: false,
lightbox_slider_enable_text_panel: false,
lightbox_slider_scale_mode_media: "down",
lightbox_slider_scale_mode: "down",
lightbox_slider_loader_type: 3,
lightbox_slider_loader_color: "black",
lightbox_slider_transition: "fade",
lightbox_slider_image_padding_top: g_temp.toppanelheight,
lightbox_slider_image_padding_bottom: 0,
lightbox_slider_video_padding_top: 0,
lightbox_slider_video_padding_bottom: 0,
lightbox_textpanel_align: "middle",
lightbox_textpanel_padding_top: 5,
lightbox_textpanel_padding_bottom: 5,
slider_video_constantsize: false,
lightbox_slider_image_border: false,
lightbox_textpanel_enable_title: true,
lightbox_textpanel_enable_description: false,
lightbox_textpanel_desc_style_as_title: true,
lightbox_textpanel_enable_bg: false,
video_enable_closebutton: false,
lightbox_slider_video_enable_closebutton: false,
video_youtube_showinfo: false,
lightbox_slider_enable_links: false
};
var g_defaultscompact = {
lightbox_overlay_opacity: 0.6,
lightbox_slider_image_border: true,
lightbox_slider_image_shadow: true,
lightbox_slider_image_padding_top: 30,
lightbox_slider_image_padding_bottom: 30,
slider_video_constantsize: true,
lightbox_textpanel_align: "bottom",
lightbox_textpanel_title_text_align: "left",
lightbox_textpanel_desc_text_align: "left",
lightbox_textpanel_padding_left: 10, //the padding left of the textpanel
lightbox_textpanel_padding_right: 10
};
function __________general_________() { };
/**
* init the gallery
*/
function initlightbox(gallery, customoptions) {
g_gallery = gallery;
g_objgallery = jquery(gallery);
g_options = jquery.extend(g_options, g_defaults);
g_options = jquery.extend(g_options, customoptions);
g_temp.originaloptions = jquery.extend({}, g_options);
if (g_options.lightbox_type == "compact") {
g_temp.iscompact = true;
g_options = jquery.extend(g_options, g_defaultscompact);
g_options = jquery.extend(g_options, customoptions);
}
//modify some options
modifyoptions();
if (g_temp.putslider == true) {
g_gallery.initslider(g_options, "lightbox");
g_objects = gallery.getobjects();
g_objslider = g_objects.g_objslider;
} else {
g_objslider = null;
}
if (g_options.lightbox_show_textpanel == true) {
g_objtextpanel.init(g_gallery, g_options, "lightbox");
}
else
g_objtextpanel = null;
}
/**
* modify some options according user options
*/
function modifyoptions() {
if (g_temp.iscompact == true && g_options.lightbox_show_textpanel == true) {
g_options.lightbox_slider_image_padding_bottom = g_temp.inittextpanelheight;
}
if (g_temp.iscompact == true && g_options.lightbox_arrows_position == "inside") {
g_temp.isarrowsinside = true;
}
if (g_temp.isarrowsinside == true && g_options.lightbox_arrows_inside_alwayson == false)
g_temp.isarrowsonhovermode = true;
//disable top panel if no text panel enabled
if (g_options.lightbox_show_textpanel == false) {
g_temp.istoppanelenabled = false;
g_temp.toppanelheight = 0;
g_options.lightbox_slider_image_padding_top = 0;
}
//modify slider image border width
}
/**
* put the lightbox html
*/
function putlightboxhtml() {
var html = "";
var classaddition = "";
if (g_temp.iscompact == true) {
classaddition = " ug-lightbox-compact";
}
html += "
";
html += "";
//set top panel only on wide mode
if (g_temp.iscompact == false && g_temp.istoppanelenabled) {
html += "
";
html += "";
if (g_options.lightbox_show_numbers)
html += "";
html += "
"; //top panel
} else {
//put numbers without top panel
if (g_options.lightbox_show_numbers)
html += "";
}
html += "";
html += "";
html += "";
html += "
";
g_objwrapper = jquery(html);
jquery("body").append(g_objwrapper);
if (g_objslider)
g_objslider.sethtml(g_objwrapper);
g_objoverlay = g_objwrapper.children(".ug-lightbox-overlay");
if (g_temp.iscompact == false && g_temp.istoppanelenabled == true) {
g_objtoppanel = g_objwrapper.children(".ug-lightbox-top-panel");
if (g_objtoppanel.length == 0)
g_objtoppanel = null;
}
g_objbuttonclose = g_objwrapper.find(".ug-lightbox-button-close");
if (g_options.lightbox_show_numbers)
g_objnumbers = g_objwrapper.find(".ug-lightbox-numbers");
g_objarrowleft = g_objwrapper.children(".ug-lightbox-arrow-left");
g_objarrowright = g_objwrapper.children(".ug-lightbox-arrow-right");
if (g_objtextpanel) {
if (g_objtoppanel)
g_objtextpanel.appendhtml(g_objtoppanel);
else
g_objtextpanel.appendhtml(g_objwrapper);
}
}
/**
* set lightbox properties
*/
function setproperties() {
if (g_options.lightbox_overlay_color !== null)
g_objoverlay.css("background-color", g_options.lightbox_overlay_color);
if (g_options.lightbox_overlay_opacity !== null)
g_objoverlay.fadeto(0, g_options.lightbox_overlay_opacity);
if (g_objtoppanel && g_options.lightbox_top_panel_opacity !== null) {
g_objtoppanel.children(".ug-lightbox-top-panel-overlay").fadeto(0, g_options.lightbox_top_panel_opacity);
}
//set numbers properties
if (g_objnumbers) {
var cssnumbers = {};
if (g_options.lightbox_numbers_size !== null)
cssnumbers["font-size"] = g_options.lightbox_numbers_size + "px";
if (g_options.lightbox_numbers_color)
cssnumbers["color"] = g_options.lightbox_numbers_color;
if (g_options.lightbox_numbers_padding_right !== null)
cssnumbers["padding-right"] = g_options.lightbox_numbers_padding_right + "px";
if (g_options.lightbox_numbers_padding_top !== null)
cssnumbers["padding-top"] = g_options.lightbox_numbers_padding_top + "px";
g_objnumbers.css(cssnumbers);
}
}
/**
* refresh slider item with new height
*/
function refreshslideritem(newheight) {
if (!g_objslider)
return (true);
//set slider new image position
var objoptions = {
slider_image_padding_top: newheight
};
g_objslider.setoptions(objoptions);
g_objslider.refreshslideitems();
}
function __________wide_only_________() { };
/**
* handle panel height according text height
*/
function handlepanelheight(fromwhere) {
if (!g_objtoppanel)
return (false);
if (!g_objtextpanel)
return (false);
//check text panel size, get the panel bigger then
var panelheight = g_objtoppanel.height();
if (panelheight == 0)
return (false);
if (g_objtoppanel.is(":visible") == false)
return (false);
var newpanelheight = panelheight;
var objtextpanelsize = g_objtextpanel.getsize();
var textpanelheight = objtextpanelsize.height;
if (panelheight != g_temp.toppanelheight)
newpanelheight = g_temp.toppanelheight;
if (textpanelheight > newpanelheight)
newpanelheight = textpanelheight;
if (panelheight != newpanelheight) {
g_objtoppanel.height(newpanelheight);
if (g_objslider && g_objslider.isanimating() == false)
refreshslideritem(newpanelheight);
}
}
/**
* position text panel for wide
* size - wrapper size
*/
function positiontextpanelwide(size) {
var objoptions = {};
var textwidth = g_options.lightbox_textpanel_width;
var minpaddingleft = 47;
var minpaddingright = 40;
var maxtextpanelwidth = size.width - minpaddingleft - minpaddingright;
if (textwidth > maxtextpanelwidth) { //mobile mode
objoptions.textpanel_padding_left = minpaddingleft;
objoptions.textpanel_padding_right = minpaddingright;
objoptions.textpanel_title_text_align = "center";
objoptions.textpanel_desc_text_align = "center";
} else {
objoptions.textpanel_padding_left = math.floor((size.width - textwidth) / 2);
objoptions.textpanel_padding_right = objoptions.textpanel_padding_left;
objoptions.textpanel_title_text_align = "left";
objoptions.textpanel_desc_text_align = "left";
if (g_options.lightbox_textpanel_title_text_align)
objoptions.textpanel_title_text_align = g_options.lightbox_textpanel_desc_text_align;
if (g_options.lightbox_textpanel_desc_text_align)
objoptions.textpanel_desc_text_align = g_options.lightbox_textpanel_desc_text_align;
}
g_objtextpanel.setoptions(objoptions);
g_objtextpanel.refresh(true, true);
handlepanelheight("positiontextpanelwide");
g_objtextpanel.positionpanel();
}
/**
* hide top panel
*/
function hidetoppanel() {
if (!g_objtoppanel)
return (false);
g_objtoppanel.hide();
}
/**
* show top panel
*/
function showtoppanel() {
if (!g_objtoppanel)
return (false);
g_objtoppanel.show();
}
function __________compact_only_________() { };
/**
* handle slider image height according the textpanel height
* refresh the slider if the height is not in place
*/
function handlecompactheight(objimagesize) {
if (g_temp.isopened == false)
return (false);
if (!g_objtextpanel)
return (false);
if (!g_objslider)
return (false);
var wrappersize = g_functions.getelementsize(g_objwrapper);
var textpanelsize = g_objtextpanel.getsize();
if (textpanelsize.width == 0 || textpanelsize.height > 120)
return (false);
if (!objimagesize) {
var objimage = g_objslider.getslideimage();
var objimagesize = g_functions.getelementsize(objimage);
}
if (objimagesize.height == 0 || objimagesize.width == 0)
return (false);
//check elements end size
var totalbottom = objimagesize.bottom + textpanelsize.height;
if (totalbottom < wrappersize.height)
return (false);
var slideroptions = g_objslider.getoptions();
var imagepaddingbottom = textpanelsize.height;
if (imagepaddingbottom != slideroptions.slider_image_padding_bottom) {
var objoptions = {
slider_image_padding_bottom: imagepaddingbottom
};
if (g_objslider.isanimating() == false) {
g_objslider.setoptions(objoptions);
g_objslider.refreshslideitems();
return (true);
}
}
return (false);
}
/**
* set text panel top of compact mode
*/
function setcompacttextpaneltop(objimagesize, positionpanel) {
if (!objimagesize) {
var objimage = g_objslider.getslideimage();
var objimagesize = g_functions.getelementsize(objimage);
}
g_temp.textpaneltop = objimagesize.bottom;
if (positionpanel === true)
g_objtextpanel.positionpanel(g_temp.textpaneltop, g_temp.textpanelleft);
}
/**
* handle text panel width on compact mode,
* run when the image is ready.
* set top position of the panel as well
* position numbers as well
*/
function handlecompacttextpanelsizes(showtextpanel) {
var wrappersize = g_functions.getelementsize(g_objwrapper);
var objimage = g_objslider.getslideimage();
var objimagesize = g_functions.getelementsize(objimage);
if (objimagesize.width == 0)
return (false);
g_temp.textpanelleft = objimagesize.left;
g_temp.textpaneltop = objimagesize.bottom;
var textpanelwidth = objimagesize.width;
if (g_objnumbers) {
var objnumberssize = g_functions.getelementsize(g_objnumbers);
textpanelwidth -= objnumberssize.width;
//place numbers object
var numbersleft = objimagesize.right - objnumberssize.width;
g_functions.placeelement(g_objnumbers, numbersleft, g_temp.textpaneltop);
}
if (g_objtextpanel) {
g_objtextpanel.show();
g_objtextpanel.refresh(true, true, textpanelwidth);
setcompacttextpaneltop(objimagesize);
}
var ischanged = handlecompactheight(objimagesize);
if (ischanged == false) {
g_temp.positionfrom = "handlecompacttextpanelsizes";
if (g_objtextpanel) {
g_objtextpanel.positionpanel(g_temp.textpaneltop, g_temp.textpanelleft);
if (showtextpanel === true) {
showtextpanel();
shownumbers();
}
}
}
}
/**
* return that current slider image is in place
*/
function issliderimageinplace() {
if (g_objslider.iscurrentslidetype("image") == false)
return (true);
var isimageinplace = (g_objslider.iscurrentimageinplace() == true);
return (isimageinplace);
}
/**
* position the arrows inside mode
*/
function positionarrowsinside(toshow, isanimation) {
if (g_temp.isarrowsinside == false)
return (false);
if (!g_objarrowleft)
return (false);
var isimageinplace = issliderimageinplace();
g_objarrowleft.show();
g_objarrowright.show();
g_temp.positionfrom = "positionarrowsinside";
if (g_temp.isarrowsonhovermode == true && isimageinplace == true && ismouseinsideimage() == false)
hidearrows(true);
if (isimageinplace == false) {
var leftarrowleft = g_functions.getelementrelativepos(g_objarrowleft, "left", g_options.lightbox_arrows_offset);
var leftarrowtop = g_functions.getelementrelativepos(g_objarrowleft, "middle");
var rightarrowleft = g_functions.getelementrelativepos(g_objarrowright, "right", g_options.lightbox_arrows_offset);
var rightarrowtop = leftarrowtop;
} else {
var objimage = g_objslider.getslideimage();
var objimagesize = g_functions.getelementsize(objimage);
var objslidersize = g_functions.getelementsize(g_objslider.getelement());
var leftarrowleft = g_functions.getelementrelativepos(g_objarrowleft, "left", 0, objimage) + objimagesize.left + g_options.lightbox_arrows_inside_offset;
var leftarrowtop = g_functions.getelementrelativepos(g_objarrowleft, "middle", 0, objimage) + objimagesize.top;
var rightarrowleft = g_functions.getelementrelativepos(g_objarrowleft, "right", 0, objimage) + objimagesize.left - g_options.lightbox_arrows_inside_offset;
var rightarrowtop = leftarrowtop;
}
//place the image with animation or not
if (isanimation === true) {
var objcssleft = {
left: leftarrowleft,
top: leftarrowtop
};
var objcssright = {
left: rightarrowleft,
top: rightarrowtop
};
g_objarrowleft.stop().animate(objcssleft, {
duration: g_temp.fadeduration
});
g_objarrowright.stop().animate(objcssright, {
duration: g_temp.fadeduration
});
} else {
g_objarrowleft.stop();
g_objarrowright.stop();
g_functions.placeelement(g_objarrowleft, leftarrowleft, leftarrowtop);
g_functions.placeelement(g_objarrowright, rightarrowleft, rightarrowtop);
}
if (toshow == true)
showarrows(isanimation);
}
/**
* position close button for compact type
*/
function positionclosebutton(toshow, isanimation) {
g_temp.positionfrom = null;
var isimageinplace = issliderimageinplace();
var minbuttontop = 2;
var maxbuttonleft = g_functions.getelementrelativepos(g_objbuttonclose, "right", 2, g_objwrapper);
if (isimageinplace == false) { //put image to corner
var closebuttontop = minbuttontop;
var closebuttonleft = maxbuttonleft;
} else {
var objimage = g_objslider.getslideimage();
var objimagesize = g_functions.getelementsize(objimage);
var objslidersize = g_functions.getelementsize(g_objslider.getelement());
var objbuttonsize = g_functions.getelementsize(g_objbuttonclose);
//some strange bug
if (objslidersize.top == objslidersize.height)
objslidersize.top = 0;
var closebuttonleft = objslidersize.left + objimagesize.right - objbuttonsize.width / 2 + g_options.lightbox_compact_closebutton_offsetx;
var closebuttontop = objslidersize.top + objimagesize.top - objbuttonsize.height / 2 - g_options.lightbox_compact_closebutton_offsety;
if (closebuttontop < minbuttontop)
closebuttontop = minbuttontop;
if (closebuttonleft > maxbuttonleft)
closebuttonleft = maxbuttonleft;
}
//place the image with animation or not
if (isanimation === true) {
var objcss = {
left: closebuttonleft,
top: closebuttontop
};
g_objbuttonclose.stop().animate(objcss, {
duration: g_temp.fadeduration
});
} else {
g_objbuttonclose.stop();
g_functions.placeelement(g_objbuttonclose, closebuttonleft, closebuttontop);
}
if (toshow === true)
showclosebutton(isanimation);
}
/**
* hide close button
*/
function hidecompactelements() {
if (g_objbuttonclose)
g_objbuttonclose.stop().fadeto(g_temp.fadeduration, 0);
hidetextpanel();
hidenumbers();
g_temp.positionfrom = "hidecompactelements";
if (g_temp.isarrowsinside == true)
hidearrows();
}
/**
* actual hide all compact type elements
*/
function actualhidecompactelements() {
if (g_objbuttonclose)
g_objbuttonclose.hide();
if (g_objarrowleft && g_temp.isarrowsinside == true) {
g_objarrowleft.hide();
g_objarrowright.hide();
}
if (g_objnumbers)
g_objnumbers.hide();
if (g_objtextpanel)
g_objtextpanel.hide();
}
function __________common_________() { };
/**
* position the elements
*/
function positionelements() {
var size = g_functions.getelementsize(g_objwrapper);
//position top panel:
if (g_objtoppanel)
g_functions.setelementsizeandposition(g_objtoppanel, 0, 0, size.width, g_temp.toppanelheight);
//position arrows
if (g_objarrowleft && g_temp.isarrowsinside == false) {
if (g_options.lightbox_hide_arrows_onvideoplay == true) {
g_objarrowleft.show();
g_objarrowright.show();
}
g_functions.placeelement(g_objarrowleft, "left", "middle", g_options.lightbox_arrows_offset);
g_functions.placeelement(g_objarrowright, "right", "middle", g_options.lightbox_arrows_offset);
}
if (g_temp.iscompact == false)
g_functions.placeelement(g_objbuttonclose, "right", "top", 2, 2);
//place text panel
if (g_objtextpanel) {
g_temp.positionfrom = "positionelements";
if (g_temp.iscompact == false)
positiontextpanelwide(size);
else {
showtextpanel();
shownumbers();
}
}
var sliderwidth = size.width;
var sliderheight = size.height;
var slidertop = 0;
var sliderleft = 0;
if (g_objslider) {
if (g_objtoppanel) {
var toppanelheight = g_objtoppanel.height();
var objoptions = {
slider_image_padding_top: toppanelheight
};
g_objslider.setoptions(objoptions);
}
g_objslider.setsize(sliderwidth, sliderheight);
g_objslider.setposition(sliderleft, slidertop);
}
}
/**
* hide the text panel
*/
function hidetextpanel() {
if (g_objtextpanel)
g_objtextpanel.getelement().stop().fadeto(g_temp.fadeduration, 0);
}
/**
* hide the numbers text
*/
function hidenumbers() {
if (g_objnumbers)
g_objnumbers.stop().fadeto(g_temp.fadeduration, 0);
}
/**
* is mouse inside image
*/
function ismouseinsideimage() {
if (!g_temp.lastmousex)
return (true);
var obj = {
pagex: g_temp.lastmousex,
pagey: g_temp.lastmousey
};
var ismouseinside = g_objslider.ismouseinsideslideimage(obj);
return (ismouseinside);
}
/**
* hide the arrows
*/
function hidearrows(noanimation, isforce) {
if (!g_objarrowleft)
return (false);
//don't hide the arrows if mouse inside image
if (g_temp.isarrowsonhovermode == true && isforce === false) {
if (ismouseinsideimage() == true);
return (true);
}
if (noanimation === true) {
g_objarrowleft.stop().fadeto(0, 0);
g_objarrowright.stop().fadeto(0, 0);
} else {
g_objarrowleft.stop().fadeto(g_temp.fadeduration, 0);
g_objarrowright.stop().fadeto(g_temp.fadeduration, 0);
}
}
/**
* get if the arrows are hidden
*/
function isarrowshidden() {
if (!g_objarrowleft)
return (true);
if (g_objarrowleft.is(":visible") == false)
return (true);
var opacity = g_objarrowleft.css("opacity");
if (opacity != 1)
return (true);
return (false);
}
/**
* show the arrows
*/
function showarrows(nostop, fromhover) {
if (!g_objarrowleft)
return (false);
//don't show every time on arrowsonhover mode
if (g_temp.isarrowsonhovermode == true && fromhover !== true && issliderimageinplace() == true)
return (true);
//don't show if swiping
if (g_objslider.isswiping() == true)
return (true);
if (nostop !== true) {
g_objarrowleft.stop();
g_objarrowright.stop();
}
g_objarrowleft.fadeto(g_temp.fadeduration, 1);
g_objarrowright.fadeto(g_temp.fadeduration, 1);
}
/**
* show close button
*/
function showclosebutton(nostop) {
if (nostop !== true)
g_objbuttonclose.stop();
g_objbuttonclose.fadeto(g_temp.fadeduration, 1);
}
/**
* update text panel text of the curren item
*/
function updatetextpaneltext(currentitem) {
if (!g_objtextpanel)
return (false);
if (!currentitem)
var currentitem = g_objslider.getcurrentitem();
g_objtextpanel.settextplain(currentitem.title, currentitem.description);
}
/**
* update numbers text
*/
function updatenumberstext(currentitem) {
if (!g_objnumbers)
return (false);
if (!currentitem)
var currentitem = g_objslider.getcurrentitem();
var numitems = g_gallery.getnumitems();
var numcurrentitem = currentitem.index + 1;
g_objnumbers.html(numcurrentitem + " / " + numitems);
}
/**
* show the text panel
*/
function showtextpanel() {
if (!g_objtextpanel)
return (false);
g_objtextpanel.getelement().show().stop().fadeto(g_temp.fadeduration, 1);
}
/**
* show the numbers object
*/
function shownumbers() {
if (g_objnumbers)
g_objnumbers.stop().fadeto(g_temp.fadeduration, 1);
}
function __________events_________() { };
/**
* on start dragging slider item event. hide the elements
*/
function onsliderdragstart() {
if (g_temp.iscompact == false)
return (true);
hidecompactelements();
}
/**
* on zoom change
* move the assets of compact to their places
*/
function onzoomchange() {
if (g_temp.iscompact == false)
return (true);
g_temp.positionfrom = "onzoomchange";
positionclosebutton(false, true);
positionarrowsinside(false, true);
//handle compact text panel mode
if (g_temp.iscompact == true) {
var isimageinplace = (g_objslider.iscurrentslidetype("image") && g_objslider.iscurrentimageinplace() == true);
if (isimageinplace == false) {
hidetextpanel();
hidenumbers();
}
else {
g_temp.positionfrom = "onzoomchange";
showtextpanel();
shownumbers();
}
}
}
/**
* after return slider to it's place
* show close button
*/
function onsliderafterreturn() {
if (g_temp.iscompact == false)
return (true);
g_temp.positionfrom = "onsliderafterreturn";
positionclosebutton(true);
positionarrowsinside(true);
var ischanged = handlecompactheight();
if (ischanged == false)
handlecompacttextpanelsizes();
showtextpanel();
shownumbers();
}
/**
* after put image to the slide
* position compact elements
*/
function onsliderafterputimage(data, objslide) {
objslide = jquery(objslide);
if (g_temp.iscompact == false)
return (true);
if (g_objslider.isslidecurrent(objslide) == false)
return (true);
g_temp.positionfrom = "onsliderafterputimage";
positionclosebutton(true);
positionarrowsinside(true);
handlecompacttextpanelsizes();
}
/**
* on slider transition end, handle panel height
*/
function onslidertransitionend() {
var slideroptions = g_objslider.getoptions();
var imagepaddingtop = slideroptions.slider_image_padding_top;
//handle wide
if (g_objtoppanel) {
var panelheight = g_objtoppanel.height();
if (panelheight != imagepaddingtop)
refreshslideritem(panelheight);
}
//handle compact
if (g_temp.iscompact == true) {
updatetextpaneltext();
updatenumberstext();
g_temp.positionfrom = "onslidertransitionend";
positionclosebutton(true);
positionarrowsinside(true);
if (g_objslider.isslideactionactive() == false) {
var ischanged = handlecompactheight();
if (ischanged == false)
handlecompacttextpanelsizes();
}
showtextpanel();
shownumbers();
}
}
/**
* on item change
* update numbers text and text panel text/position
*/
function onitemchange(data, currentitem) {
if (g_temp.iscompact == false) { //wide mode
if (g_objnumbers)
updatenumberstext(currentitem);
if (g_objtextpanel) {
updatetextpaneltext(currentitem);
//update panel height only if the lightbox is already opened, and the items changed within it.
if (g_temp.isrightnowopened == false) {
g_objtextpanel.positionelements(false);
handlepanelheight("onchange");
g_objtextpanel.positionpanel();
}
}
} else {
if (g_objslider.isanimating() == false) {
if (g_objtextpanel)
updatetextpaneltext(currentitem);
if (g_objnumbers)
updatenumberstext(currentitem);
}
}
//trigger lightbox init event
if (g_temp.issliderchangedonce == false) {
g_temp.issliderchangedonce = true;
g_objthis.trigger(t.events.lightbox_init);
}
}
/**
* on slider click
*/
function onsliderclick(data, event) {
var slidetype = g_objslider.getslidetype();
if (slidetype != "image" && g_temp.iscompact == false && g_objslider.isslideactionactive())
return (true);
var ispreloading = g_objslider.ispreloading();
if (ispreloading == true) {
t.close("slider");
return (true);
}
//close the lightbox on empty space click
if (g_options.lightbox_close_on_emptyspace == true) {
var isinside = g_objslider.ismouseinsideslideimage(event);
if (isinside == false)
t.close("slider_inside");
}
}
/**
* on lightbox resize
*/
function onresize() {
positionelements();
}
/**
* on start play - hide the side buttons
*/
function onplayvideo() {
if (g_objtoppanel) {
hidetoppanel();
} else {
if (g_objnumbers)
g_objnumbers.hide();
}
if (g_objarrowleft && g_options.lightbox_hide_arrows_onvideoplay == true) {
g_objarrowleft.hide();
g_objarrowright.hide();
}
}
/**
* on stop video - show the side buttons
*/
function onstopvideo() {
if (g_objtoppanel) {
showtoppanel();
handlepanelheight("onstopvideo");
} else {
if (g_objnumbers)
g_objnumbers.show();
}
if (g_objarrowleft && g_options.lightbox_hide_arrows_onvideoplay == true) {
g_objarrowleft.show();
g_objarrowright.show();
}
}
/**
* on gallery keypres, do operations
*/
function onkeypress(data, key, event) {
var isscrollkey = false;
switch (key) {
case 27: //escape - close lightbox
if (g_temp.isopened == true)
t.close("keypress");
break;
case 38: //up and down arrows
case 40:
case 33: //page up and down
case 34:
isscrollkey = true;
break;
}
if (g_temp.isopened == true && isscrollkey == true)
event.preventdefault();
}
/**
* on image mouse enter event
*/
function onimagemouseenter() {
if (g_temp.isarrowsonhovermode == true)
showarrows(false, true);
}
/**
* on image mouse leave
*/
function onimagemouseleave(event) {
g_temp.positionfrom = "hidecompactelements";
if (g_temp.isarrowsonhovermode == true && issliderimageinplace() == true)
hidearrows(false, true);
}
/**
* on mouse move event
* show arrows if inside image
*/
function onmousemove(event) {
g_temp.lastmousex = event.pagex;
g_temp.lastmousey = event.pagey;
var ishidden = isarrowshidden()
if (ishidden == true && ismouseinsideimage() && g_objslider.isanimating() == false) {
g_temp.positionfrom = "onmousemove";
if (g_objarrowleft && g_objarrowleft.is(":animated") == false)
showarrows(false, true);
}
}
/**
* on mouse wheel
*/
function onmousewheel(event, delta, deltax, deltay) {
if (g_temp.isopened == false)
return (true);
switch (g_options.gallery_mousewheel_role) {
default:
case "zoom":
var slidetype = g_objslider.getslidetype();
if (slidetype != "image")
event.preventdefault();
break;
case "none":
event.preventdefault();
break;
case "advance":
g_gallery.ongallerymousewheel(event, delta, deltax, deltay);
break;
}
}
/**
* init events
*/
function initevents() {
g_objoverlay.on("touchstart", function (event) {
event.preventdefault();
});
g_objoverlay.on("touchend", function (event) {
t.close("overlay");
});
g_functions.addclassonhover(g_objarrowright, "ug-arrow-hover");
g_functions.addclassonhover(g_objarrowleft, "ug-arrow-hover");
g_functions.addclassonhover(g_objbuttonclose);
g_gallery.setnextbutton(g_objarrowright);
g_gallery.setprevbutton(g_objarrowleft);
g_objbuttonclose.click(function () {
t.close("button");
});
g_objgallery.on(g_gallery.events.item_change, onitemchange);
if (g_objslider) {
jquery(g_objslider).on(g_objslider.events.transition_end, onslidertransitionend);
//on slider click event
jquery(g_objslider).on(g_objslider.events.click, onsliderclick);
//on slider video
var objvideo = g_objslider.getvideoobject();
jquery(objvideo).on(objvideo.events.play_start, onplayvideo);
jquery(objvideo).on(objvideo.events.play_stop, onstopvideo);
//handle close button hide / appear
jquery(g_objslider).on(g_objslider.events.start_drag, onsliderdragstart);
jquery(g_objslider).on(g_objslider.events.transition_start, onsliderdragstart);
jquery(g_objslider).on(g_objslider.events.after_drag_change, onsliderafterreturn);
jquery(g_objslider).on(g_objslider.events.after_return, onsliderafterreturn);
jquery(g_objslider).on(g_objslider.events.after_put_image, onsliderafterputimage);
jquery(g_objslider).on(g_objslider.events.zoom_change, onzoomchange);
jquery(g_objslider).on(g_objslider.events.image_mouseenter, onimagemouseenter);
jquery(g_objslider).on(g_objslider.events.image_mouseleave, onimagemouseleave);
}
//on resize
jquery(window).resize(function () {
if (g_temp.isopened == false)
return (true);
g_functions.whencontiniouseventover("lightbox_resize", onresize, 100);
});
g_objgallery.on(g_gallery.events.gallery_keypress, onkeypress);
//store last mouse x and y
if (g_temp.isarrowsonhovermode == true) {
jquery(document).bind('mousemove', onmousemove);
}
//on mouse wheel - disable functionality if video
g_objwrapper.on("mousewheel", onmousewheel);
}
/**
* destroy the lightbox events and the html it created
*/
this.destroy = function () {
jquery(document).unbind("mousemove");
g_objoverlay.off("touchstart");
g_objoverlay.off("touchend");
g_objbuttonclose.off("click");
g_objgallery.off(g_gallery.events.item_change);
if (g_objslider) {
jquery(g_objslider).off(g_objslider.events.transition_end);
jquery(g_objslider).off(g_objslider.events.click);
jquery(g_objslider).off(g_objslider.events.start_drag);
jquery(g_objslider).off(g_objslider.events.transition_start);
jquery(g_objslider).off(g_objslider.events.after_drag_change);
jquery(g_objslider).off(g_objslider.events.after_return);
var objvideo = g_objslider.getvideoobject();
jquery(objvideo).off(objvideo.events.play_start);
jquery(objvideo).off(objvideo.events.play_stop);
jquery(g_objslider).on(g_objslider.events.image_mouseenter, onimagemouseenter);
jquery(g_objslider).on(g_objslider.events.image_mouseleave, onimagemouseleave);
g_objslider.destroy();
}
jquery(window).unbind("resize");
g_objgallery.off(g_gallery.events.gallery_keypress, onkeypress);
g_objwrapper.off("mousewheel");
//remove the html
g_objwrapper.remove();
}
/**
* open the lightbox with some item index
*/
this.open = function (index) {
var objitem = g_gallery.getitem(index);
g_temp.isopened = true;
//set if the panel right now opened
g_temp.isrightnowopened = true;
settimeout(function () { g_temp.isrightnowopened = false }, 100);
if (g_objslider) {
g_objslider.setitem(objitem, "lightbox_open");
}
if (g_objtextpanel) {
g_objtextpanel.settextplain(objitem.title, objitem.description);
}
g_objoverlay.stop().fadeto(0, 0);
g_objwrapper.show();
g_objwrapper.fadeto(0, 1);
//show the overlay
g_objoverlay.stop().fadeto(g_temp.fadeduration, g_options.lightbox_overlay_opacity);
positionelements();
if (g_temp.iscompact == true) {
var ispreloading = g_objslider.ispreloading();
if (ispreloading == true) {
actualhidecompactelements();
} else {
//hide only arrows if they are inside
if (g_temp.isarrowsinside == true) {
g_objarrowleft.hide();
g_objarrowright.hide();
}
}
}
if (g_objslider)
g_objslider.startslideaction();
//trigger gallery event
g_objgallery.trigger(g_gallery.events.open_lightbox, objitem);
}
/**
* close the lightbox
*/
this.close = function (fromwhere) {
g_temp.isopened = false;
if (g_temp.iscompact == true)
hidecompactelements();
if (g_objslider)
g_objslider.stopslideaction();
var slidetype = g_objslider.getslidetype();
if (slidetype != "image")
g_objwrapper.hide();
else {
g_objwrapper.fadeto(g_temp.fadeduration, 0, function () {
g_objwrapper.hide();
});
}
g_objgallery.trigger(g_gallery.events.close_lightbox);
}
/**
* external init function
*/
this.init = function (gallery, customoptions) {
initlightbox(gallery, customoptions);
}
/**
* switch to wide mode from compact mode
*/
function switchtowide() {
g_temp.iscompact = false;
modifyoptions();
g_temp.isarrowsinside = false;
g_temp.isarrowsonhovermode = false;
g_options = jquery.extend({}, g_temp.originaloptions);
g_options.lightbox_arrows_position = "sides";
g_objslider.setoptions(g_options);
}
/**
* external put html function
*/
this.puthtml = function () {
//check if switch to wide mode
var issmallwindow = g_gallery.issmallwindow();
if (issmallwindow && g_temp.iscompact == true)
switchtowide();
putlightboxhtml();
}
/**
* run lightbox elements
*/
this.run = function () {
setproperties();
if (g_objslider)
g_objslider.run();
initevents();
}
}
/**
* carousel class
*/
function ugcarousel() {
var t = this, g_objthis = jquery(this);
var g_gallery = new unitegallerymain(), g_objgallery, g_objwrapper;
var g_functions = new ugfunctions(), g_arritems, g_objtiledesign = new ugtiledesign();
var g_thumbs = new ugthumbsgeneral(), g_objcarouselwrapper, g_objinner, arrorigtiles = [];
var g_options = {
carousel_padding: 8, //padding at the sides of the carousel
carousel_space_between_tiles: 20, //space between tiles
carousel_navigation_numtiles: 3, //number of tiles to scroll when user clicks on next/prev button
carousel_scroll_duration: 500, //duration of scrolling to tile
carousel_scroll_easing: "easeoutcubic", //easing of scrolling to tile animation
carousel_autoplay: true, //true,false - autoplay of the carousel on start
carousel_autoplay_timeout: 3000, //autoplay timeout
carousel_autoplay_direction: "right", //left,right - autoplay direction
carousel_autoplay_pause_onhover: true, //pause the autoplay on mouse over
carousel_vertical_scroll_ondrag: false //vertical screen scroll on carousel drag
};
this.events = {
start_play: "carousel_start_play",
pause_play: "carousel_pause_play",
stop_play: "carousel_stop_play"
};
var g_temp = {
eventsizechange: "thumb_size_change",
isfirsttimerun: true, //if run once
carouselmaxwidth: null,
tilewidth: 0,
inittilewidth: 0,
inittileheight: 0,
sidespace: 1500, //the space that must be filled with items
spaceactionsize: 500,
numcurrent: 0,
touchactive: false,
startinnerpos: 0,
lasttime: 0,
starttime: 0,
startmousepos: 0,
lastmousepos: 0,
scrollshortduration: 200,
scrollshorteasing: "easeoutquad",
handle: null,
isplaymode: false,
ispaused: false,
storedeventid: "carousel"
};
function __________general_________() { };
/**
* init the gallery
*/
function init(gallery, customoptions) {
g_objects = gallery.getobjects();
g_gallery = gallery;
g_objgallery = jquery(gallery);
g_objwrapper = g_objects.g_objwrapper;
g_arritems = g_objects.g_arritems;
g_options = jquery.extend(g_options, customoptions);
g_objtiledesign.setfixedmode();
g_objtiledesign.setapproveclickfunction(isapprovetileclick);
g_objtiledesign.init(gallery, g_options);
g_thumbs = g_objtiledesign.getobjthumbs();
g_options = g_objtiledesign.getoptions();
g_temp.inittilewidth = g_options.tile_width;
g_temp.inittileheight = g_options.tile_height;
g_temp.tilewidth = g_options.tile_width;
}
/**
* set the grid panel html
*/
function sethtml(objparent) {
if (!objparent)
var objparent = g_objwrapper;
var html = "
";
g_objwrapper.append(html);
g_objcarouselwrapper = g_objwrapper.children(".ug-carousel-wrapper");
g_objinner = g_objcarouselwrapper.children(".ug-carousel-inner");
g_objtiledesign.sethtml(g_objinner);
g_thumbs.getthumbs().fadeto(0, 1);
}
/**
* resize tiles to new width / height
*/
function resizetiles(newtilewidth, newtileheight) {
if (!newtileheight) {
var newtileheight = g_temp.inittileheight / g_temp.inittilewidth * newtilewidth;
}
g_temp.tilewidth = newtilewidth;
//update all options
var optupdate = {
tile_width: newtilewidth,
tile_height: newtileheight
};
g_objtiledesign.setoptions(optupdate);
g_options.tile_width = newtilewidth;
g_options.tile_height = newtileheight;
//resize all tiles
g_objtiledesign.resizealltiles(newtilewidth);
//reposition tiles
positiontiles(true); //must to position tiles right after size change, for inner size change
}
/**
* run the gallery after init and set html
*/
function run() {
//validation
if (g_temp.carouselmaxwidth === null) {
throw new error("the carousel width not set");
return (false);
}
//if the size changed, change it anyway
if (g_temp.tilewidth < g_temp.inittilewidth) {
var newtilewidth = g_temp.carouselmaxwidth - g_options.carousel_padding * 2;
if (newtilewidth > g_temp.inittilewidth)
newtilewidth = g_temp.inittilewidth;
resizetiles(newtilewidth);
var numtiles = g_functions.getnumitemsinspace(g_temp.carouselmaxwidth, newtilewidth, g_options.carousel_space_between_tiles);
} else {
//check if need to lower tiles size
var numtiles = g_functions.getnumitemsinspace(g_temp.carouselmaxwidth, g_temp.tilewidth, g_options.carousel_space_between_tiles);
//if no tiles fit, resize the tiles
if (numtiles <= 0) {
numtiles = 1;
var newtilewidth = g_temp.carouselmaxwidth - g_options.carousel_padding * 2;
resizetiles(newtilewidth);
}
}
//set wrapper width
var realwidth = g_functions.getspacebynumitems(numtiles, g_temp.tilewidth, g_options.carousel_space_between_tiles);
realwidth += g_options.carousel_padding * 2;
g_objcarouselwrapper.width(realwidth);
if (g_temp.isfirsttimerun == true) {
initevents();
g_objtiledesign.run();
//set data indexes to tiles
jquery.each(g_arritems, function (index, item) {
item.objthumbwrapper.data("index", index);
g_objwrapper.trigger(g_temp.eventsizechange, [item.objthumbwrapper, true]);
item.objtileoriginal = item.objthumbwrapper.clone(true, true);
});
positiontiles(true); //set heights at first time
if (g_options.carousel_autoplay == true)
t.startautoplay();
} else {
if (g_options.carousel_autoplay == true)
t.pauseautoplay();
scrolltotile(0, false);
if (g_options.carousel_autoplay == true)
t.startautoplay();
}
positionelements();
g_temp.isfirsttimerun = false;
}
function __________getters_______() { };
/**
* get inner position
*/
function getinnerpos() {
return g_functions.getelementsize(g_objinner).left;
}
/**
* get mouse position
*/
function getmousepos(event) {
return g_functions.getmouseposition(event).pagex;
}
/**
* get all tiles
*/
function gettiles() {
var objtiles = g_objinner.children(".ug-thumb-wrapper");
return (objtiles);
}
/**
* get num tiles in some space
*/
function getnumtilesinspace(space) {
var numitems = g_functions.getnumitemsinspace(space, g_temp.tilewidth, g_options.carousel_space_between_tiles)
return (numitems);
}
/**
* get num tiles
*/
function getnumtiles() {
return gettiles().length;
}
/**
* get tile
*/
function gettile(numtile) {
validatetilenum(numtile);
var objtiles = gettiles();
var objtile = jquery(objtiles[numtile]);
return (objtile);
}
/**
* get first tile in the inner object
*/
function getfirsttile() {
return g_objinner.children(".ug-thumb-wrapper").first();
}
/**
* get last tile in the inner object
*/
function getlasttile() {
return g_objinner.children(".ug-thumb-wrapper").last();
}
/**
* get clone of the time next or prev the given
*/
function gettileclones(objtile, numclones, dir) {
var index = objtile.data("index");
if (index == undefined) {
throw new error("every tile should have index!");
}
var arrcloneditems = [];
for (var i = 0; i < numclones; i++) {
if (dir == "prev")
var itemtoadd = g_gallery.getprevitem(index, true);
else
var itemtoadd = g_gallery.getnextitem(index, true);
if (!itemtoadd) {
throw new error("the item to add is empty");
}
var clonedtile = itemtoadd.objtileoriginal.clone(true, true);
index = itemtoadd.index;
clonedtile.addclass("cloned");
arrcloneditems.push(clonedtile);
}
return (arrcloneditems);
}
/**
* get space left from the right
*/
function getremainspaceright() {
var wrappersize = g_functions.getelementsize(g_objcarouselwrapper);
var innersize = g_functions.getelementsize(g_objinner);
var spacetaken = innersize.width - wrappersize.width + innersize.left;
var spaceremain = g_temp.sidespace - spacetaken;
return (spaceremain);
}
/**
* get remain space on the left
*/
function getremainspaceleft() {
var spacetaken = -getinnerpos();
var spaceremain = g_temp.sidespace - spacetaken;
return (spaceremain);
}
/**
* get carousel width
*/
function getcarouselwidth() {
var objsize = g_functions.getelementsize(g_objcarouselwrapper);
return (objsize.width);
}
/**
* get num tiles in the carousel
*/
function getnumtilesincarousel() {
var width = getcarouselwidth();
var numtiles = getnumtilesinspace(width);
return (numtiles);
}
function __________other_methods_______() { };
/**
* position existing tiles
*/
function positiontiles(setheight) {
if (!setheight)
var setheight = false;
var objtiles = gettiles();
var posx = 0;
var maxheight = 0, totalwidth;
jquery.each(objtiles, function (index, objtile) {
objtile = jquery(objtile);
g_functions.placeelement(objtile, posx, 0);
var tilesize = g_functions.getelementsize(objtile);
posx += tilesize.width + g_options.carousel_space_between_tiles;
maxheight = math.max(maxheight, tilesize.height);
if (index == (objtiles.length - 1))
totalwidth = tilesize.right;
});
//set heights and widths
g_objinner.width(totalwidth);
maxheight += g_options.carousel_padding * 2;
if (setheight === true) {
g_objinner.height(maxheight);
g_objcarouselwrapper.height(maxheight);
}
scrolltotile(g_temp.numcurrent, false);
return (totalwidth);
}
/**
* validate that the num not more then num tiles
*/
function validatetilenum(numtile) {
if (numtile > (gettiles().length - 1))
throw new error("wrogn tile number: " + numtile);
}
/**
* add tile to left
*/
function addtiles(numtiles, dir) {
if (dir == "left")
var anchortile = getfirsttile();
else
var anchortile = getlasttile();
var clonestype = (dir == "left") ? "prev" : "next";
var arrnewtiles = gettileclones(anchortile, numtiles, clonestype);
jquery.each(arrnewtiles, function (index, objtile) {
if (dir == "left")
g_objinner.prepend(objtile);
else
g_objinner.append(objtile);
g_objwrapper.trigger(g_temp.eventsizechange, objtile);
g_objtiledesign.loadtileimage(objtile);
});
}
/**
* remove some tiles
*/
function removetiles(numtilestoremove, direction) {
validatetilenum(numtiles);
var arrtiles = gettiles();
var numtiles = arrtiles.length;
for (var i = 0; i < numtilestoremove; i++) {
if (direction == "left")
jquery(arrtiles[i]).remove();
else {
jquery(arrtiles[numtiles - 1 - i]).remove();
}
}
}
/**
* set inner strip position
*/
function setinnerpos(pos) {
var objcss = {
"left": pos + "px"
};
g_objinner.css(objcss);
}
/**
* scroll to tile by number
*/
function scrolltotile(numtile, isanimation, isshort) {
if (isanimation === undefined) {
var isanimation = true;
if (g_objinner.is(":animated"))
return (true);
}
var objtile = gettile(numtile);
var objsize = g_functions.getelementsize(objtile);
var posscroll = -objsize.left + g_options.carousel_padding;
var objcss = {
"left": posscroll + "px"
};
if (isanimation === true) {
var duration = g_options.carousel_scroll_duration;
var easing = g_options.carousel_scroll_easing;
if (isshort === true) {
duration = g_temp.scrollshortduration;
easing = g_temp.scrollshorteasing;
}
g_objinner.stop(true).animate(objcss, {
duration: duration,
easing: easing,
queue: false,
//progress:function(){t.triggerstripmoveevent()},
complete: function () {
g_temp.numcurrent = numtile;
fillsideswithtiles(true);
}
});
} else {
g_temp.numcurrent = numtile;
g_objinner.css(objcss);
}
}
/**
* get number of neerest tile
*/
function getneeresttilenum() {
var innerpos = -getinnerpos();
var numtiles = getnumtilesinspace(innerpos);
var tile1pos = g_functions.getelementsize(gettile(numtiles)).left;
var tile2pos = g_functions.getelementsize(gettile(numtiles + 1)).left;
if (math.abs(tile1pos - innerpos) < math.abs(tile2pos - innerpos))
return (numtiles);
else
return (numtiles + 1);
}
/**
* get neerest tile to inner position
*/
function scrolltoneeresttile() {
var tilenum = getneeresttilenum();
scrolltotile(tilenum, true, true);
}
/**
* fill the sides with tiles till it fil the sidespace
*/
function fillsideswithtiles() {
var spaceleft = getremainspaceleft();
var spaceright = getremainspaceright();
var numitemsleft = 0, numitemsright = 0, numitemsremoveleft = 0, numitemsremoveright = 0;
//trace("left: " + spaceleft+ " right: " + spaceright);
var numtiles = getnumtiles();
//add tiles to left
if (spaceleft > g_temp.spaceactionsize) {
numitemsleft = getnumtilesinspace(spaceleft);
addtiles(numitemsleft, "left");
g_temp.numcurrent += numitemsleft;
} else if (spaceleft < -g_temp.spaceactionsize) {
var numitemsremoveleft = getnumtilesinspace(math.abs(spaceleft));
removetiles(numitemsremoveleft, "left");
g_temp.numcurrent -= numitemsremoveleft;
}
//add tiles to right
if (spaceright > g_temp.spaceactionsize) {
numitemsright = getnumtilesinspace(spaceright);
addtiles(numitemsright, "right");
} else if (spaceright < -g_temp.spaceactionsize) {
numitemsremoveright = getnumtilesinspace(math.abs(spaceright));
removetiles(numitemsremoveright, "right");
}
//small validation
if (numitemsremoveright > numtiles) {
throw new error("can't remove more then num tiles");
}
//trace(numitemsremoveright);
//trace("numitems: " + getnumtiles());
//scroll to tile and position inner object
var ispositioned = false;
if (numitemsleft || numitemsright || numitemsremoveleft || numitemsremoveright) {
/*
debugline({
numitemsleft:numitemsleft,
numitemsright:numitemsright,
numitemsremoveleft:numitemsremoveleft,
numitemsremoveright: numitemsremoveright
});
*/
//trace("do something");
positiontiles();
ispositioned = true
}
return (ispositioned);
}
/**
* position tiles
*/
function positionelements(isfirsttime) {
//position inner strip
g_functions.placeelement(g_objinner, 0, g_options.carousel_padding);
//position sides
fillsideswithtiles();
}
function __________autoplay_______() { };
/**
* start autoplay
*/
this.startautoplay = function () {
g_temp.isplaymode = true;
g_temp.ispaused = false;
g_objthis.trigger(t.events.start_play);
if (g_temp.handle)
clearinterval(g_temp.handle);
g_temp.handle = setinterval(autoplaystep, g_options.carousel_autoplay_timeout);
}
/**
* unpause autoplay after pause
*/
this.unpauseautoplay = function () {
if (g_temp.isplaymode == false)
return (true);
if (g_temp.ispaused == false)
return (true);
t.startautoplay();
}
/**
* pause the autoplay
*/
this.pauseautoplay = function () {
if (g_temp.isplaymode == false)
return (true);
g_temp.ispaused = true;
if (g_temp.handle)
clearinterval(g_temp.handle);
g_objthis.trigger(t.events.pause_play);
}
/**
* stop autoplay
*/
this.stopautoplay = function () {
if (g_temp.isplaymode == false)
return (true);
g_temp.ispaused = false;
g_temp.isplaymode = false;
if (g_temp.handle)
clearinterval(g_temp.handle);
g_objthis.trigger(t.events.stop_play);
}
/**
* autoplay step, advance the carousel by 1
*/
function autoplaystep() {
if (g_options.carousel_autoplay_direction == "left") {
t.scrollright(1);
} else {
t.scrollleft(1);
}
}
function __________events_______() { };
/**
* on touch start
*/
function ontouchstart(event) {
if (g_temp.touchactive == true)
return (true);
g_temp.touchactive = true;
t.pauseautoplay();
g_temp.starttime = jquery.now();
g_temp.startmousepos = getmousepos(event);
g_temp.startinnerpos = getinnerpos();
g_temp.lasttime = g_temp.starttime;
g_temp.lastmousepos = g_temp.startmousepos;
g_functions.storeeventdata(event, g_temp.storedeventid);
}
/**
* on touch move
*/
function ontouchmove(event) {
if (g_temp.touchactive == false)
return (true);
g_functions.updatestoredeventdata(event, g_temp.storedeventid);
event.preventdefault();
var scrolldir = null;
if (g_options.carousel_vertical_scroll_ondrag == true)
scrolldir = g_functions.handlescrolltop(g_temp.storedeventid);
if (scrolldir === "vert")
return (true);
g_temp.lastmousepos = getmousepos(event);
var diff = g_temp.lastmousepos - g_temp.startmousepos;
var innerpos = g_temp.startinnerpos + diff;
var direction = (diff > 0) ? "prev" : "next";
var innersize = g_functions.getelementsize(g_objinner).width;
//slow down when off limits
if (innerpos > 0 && direction == "prev") {
innerpos = innerpos / 3;
}
if (innerpos < -innersize && direction == "next") {
innerpos = g_temp.startinnerpos + diff / 3;
}
setinnerpos(innerpos);
}
/**
* on touch end
* change panes or return to current pane
*/
function ontouchend(event) {
if (g_temp.touchactive == false)
return (true);
//event.preventdefault();
g_temp.touchactive = false;
scrolltoneeresttile();
t.unpauseautoplay();
}
/**
* pause the playing
*/
function onmouseenter(event) {
if (g_options.carousel_autoplay_pause_onhover == false)
return (true);
if (g_temp.isplaymode == true && g_temp.ispaused == false)
t.pauseautoplay();
}
/**
* start the playing again
*/
function onmouseleave(event) {
if (g_options.carousel_autoplay_pause_onhover == false)
return (true);
t.unpauseautoplay();
}
/**
* init panel events
*/
function initevents() {
g_objtiledesign.initevents();
//touch drag events
//slider mouse down - drag start
g_objcarouselwrapper.bind("mousedown touchstart", ontouchstart);
//on body move
jquery("body").bind("mousemove touchmove", ontouchmove);
//on body mouse up - drag end
jquery(window).add("body").bind("mouseup touchend", ontouchend);
g_objcarouselwrapper.hover(onmouseenter, onmouseleave);
}
/**
* destroy the carousel events
*/
this.destroy = function () {
if (g_temp.handle)
clearinterval(g_temp.handle);
g_objthis.off(t.events.start_play);
g_objthis.off(t.events.stop_play);
//touch drag events
//slider mouse down - drag start
g_objcarouselwrapper.unbind("mousedown");
g_objcarouselwrapper.unbind("touchstart");
//on body move
jquery("body").unbind("mousemove");
jquery("body").unbind("touchmove");
//on body mouse up - drag end
jquery(window).add("body").unbind("mouseup").unbind("touchend");
g_objcarouselwrapper.off("mouseenter").off("mouseleave");
g_objtiledesign.destroy();
}
/**
* init function for avia controls
*/
this.init = function (gallery, customoptions, width) {
if (width)
this.setmaxwidth(width);
init(gallery, customoptions);
}
/**
* set the width
*/
this.setmaxwidth = function (width) {
g_temp.carouselmaxwidth = width;
}
/**
* set html
*/
this.sethtml = function (objparent) {
sethtml(objparent);
}
/**
* get the carousel element
*/
this.getelement = function () {
return g_objcarouselwrapper;
}
/**
* get tile design object
*/
this.getobjtiledesign = function () {
return (g_objtiledesign);
}
/**
* get estimated height
*/
this.getestimatedheight = function () {
var height = g_options.tile_height + g_options.carousel_padding * 2;
return (height);
}
/**
* set html and properties
*/
this.run = function () {
run();
}
/**
* scroll to right
*/
this.scrollright = function (tilestoscroll) {
if (!tilestoscroll || typeof tilestoscroll == "object")
var tilestoscroll = g_options.carousel_navigation_numtiles;
var numtilesincarousel = getnumtilesincarousel();
if (tilestoscroll > numtilesincarousel)
tilestoscroll = numtilesincarousel;
var numprev = g_temp.numcurrent - tilestoscroll;
if (numprev <= 0)
numprev = 0;
scrolltotile(numprev);
}
/**
* scroll to left
*/
this.scrollleft = function (tilestoscroll) {
if (!tilestoscroll || typeof tilestoscroll == "object")
var tilestoscroll = g_options.carousel_navigation_numtiles;
var numtilesincarousel = getnumtilesincarousel();
if (tilestoscroll > numtilesincarousel)
tilestoscroll = numtilesincarousel;
var numtiles = getnumtiles();
var numnext = g_temp.numcurrent + tilestoscroll;
if (numnext >= numtiles)
numnext = numtiles - 1;
scrolltotile(numnext);
}
/**
* set scroll left button
*/
this.setscrollleftbutton = function (objbutton) {
g_functions.setbuttonmobileready(objbutton);
g_functions.setbuttononclick(objbutton, t.scrollleft);
}
/**
* set scroll right button
*/
this.setscrollrightbutton = function (objbutton) {
g_functions.setbuttonmobileready(objbutton);
g_functions.setbuttononclick(objbutton, t.scrollright);
}
/**
* set scroll right button
*/
this.setplaypausebutton = function (objbutton) {
g_functions.setbuttonmobileready(objbutton);
if (g_temp.isplaymode == true && g_temp.ispaused == false) {
objbutton.addclass("ug-pause-icon");
}
g_objthis.on(t.events.start_play, function () {
objbutton.addclass("ug-pause-icon");
});
g_objthis.on(t.events.stop_play, function () {
objbutton.removeclass("ug-pause-icon");
});
g_functions.setbuttononclick(objbutton, function () {
if (g_temp.isplaymode == false || g_temp.ispaused == true)
t.startautoplay();
else
t.stopautoplay();
});
}
/**
* return if passed some significant movement
*/
function isapprovetileclick() {
var passedtime = g_temp.lasttime - g_temp.starttime;
var passeddistanceabs = math.abs(g_temp.lastmousepos - g_temp.startmousepos);
if (passedtime > 300)
return (false);
if (passeddistanceabs > 30)
return (false);
return (true);
}
}
/**
tabs panel class addon to unite gallery
*/
function ugtabs() {
var t = this, g_objthis = jquery(this), g_objgallery;
var g_gallery = new unitegallerymain(), g_functions = new ugfunctions();
var g_objtabs, g_objselect;
var g_options = {
tabs_type: "tabs", //tabs type: tabs, select
tabs_container: "#ug_tabs", //tabs container
tabs_class_selected: "ug-tab-selected"
};
this.events = {
};
/**
* init tabs function
*/
function inittabs(gallery, customoptions) {
g_gallery = gallery;
g_objgallery = jquery(g_gallery);
g_options = jquery.extend(g_options, customoptions);
if (g_options.tabs_type == "select")
g_objselect = jquery(g_options.tabs_container);
else
g_objtabs = jquery(g_options.tabs_container + " .ug-tab");
}
/**
* run the tabs
*/
function runtabs() {
initevents();
}
/**
* request new gallery items
*/
function requestgalleryitems(catid) {
g_gallery.requestnewitems(catid);
}
/**
* on tab click
*/
function ontabclick() {
var classselected = g_options.tabs_class_selected;
var objtab = jquery(this);
if (objtab.hasclass(classselected))
return (true);
g_objtabs.not(objtab).removeclass(classselected);
objtab.addclass(classselected);
var catid = objtab.data("catid");
if (!catid)
return (true);
requestgalleryitems(catid);
}
/**
* on select change
*/
function onselectchange() {
var objselect = jquery(this);
var catid = objselect.val();
if (!catid)
return (true);
requestgalleryitems(catid);
}
/**
* init tabs events
*/
function initevents() {
if (g_options.tabs_type == "select")
g_objselect.change(onselectchange);
else
g_objtabs.click(ontabclick);
}
/**
* destroy
*/
this.destroy = function () {
if (g_objselect)
g_objselect.off("change");
if (g_objtabs)
g_objtabs.off("click");
}
/**
* outer init function, move to inner init
*/
this.init = function (gallery, customoptions) {
inittabs(gallery, customoptions);
}
/**
* run the tabs
*/
this.run = function () {
runtabs();
}
}
/**
* api class
* addon to unite gallery
*/
function ug_api(gallery) {
var t = this, g_objthis = jquery(t);
var g_gallery = new unitegallerymain(), g_objgallery;
var g_arrevents = [];
g_gallery = gallery;
g_objgallery = jquery(gallery);
this.events = {
api_init_functions: "api_init",
api_on_event: "api_on_event"
}
/**
* get item data for output
*/
function convertitemdataforoutput(item) {
var output = {
index: item.index,
title: item.title,
description: item.description,
urlimage: item.urlimage,
urlthumb: item.urlthumb
};
//add aditional variables to the output
var adddata = item.objthumbimage.data();
for (var key in adddata) {
switch (key) {
case "image":
case "description":
continue;
break;
}
output[key] = adddata[key];
}
return (output);
}
/**
* event handling function
*/
this.on = function (event, handlerfunction, notcache) {
//remember cache
if (notcache !== true) {
g_arrevents.push({ event: event, func: handlerfunction });
}
switch (event) {
case "item_change":
g_objgallery.on(g_gallery.events.item_change, function () {
var currentitem = g_gallery.getselecteditem();
var output = convertitemdataforoutput(currentitem);
handlerfunction(output.index, output);
});
break;
case "resize":
g_objgallery.on(g_gallery.events.size_change, handlerfunction);
break;
case "enter_fullscreen":
g_objgallery.on(g_gallery.events.enter_fullscreen, handlerfunction);
break;
case "exit_fullscreen":
g_objgallery.on(g_gallery.events.exit_fullscreen, handlerfunction);
break;
case "play":
g_objgallery.on(g_gallery.events.start_play, handlerfunction);
break;
case "stop":
g_objgallery.on(g_gallery.events.stop_play, handlerfunction);
break;
case "pause":
g_objgallery.on(g_gallery.events.pause_playing, handlerfunction);
break;
case "continue":
g_objgallery.on(g_gallery.events.continue_playing, handlerfunction);
break;
case "open_lightbox":
g_objgallery.on(g_gallery.events.open_lightbox, handlerfunction);
break;
case "close_lightbox":
g_objgallery.on(g_gallery.events.close_lightbox, handlerfunction);
break;
default:
if (console)
console.log("wrong api event: " + event);
break;
}
g_objgallery.trigger(t.events.api_on_event, [event, handlerfunction]);
}
/**
* start playing
*/
this.play = function () {
g_gallery.startplaymode();
}
/**
* stop playing
*/
this.stop = function () {
g_gallery.stopplaymode();
}
/**
* toggle playing
*/
this.toggleplay = function () {
g_gallery.toggleplaymode();
}
/**
* enter fullscreen
*/
this.enterfullscreen = function () {
g_gallery.tofullscreen();
}
/**
* exit fullscreen
*/
this.exitfullscreen = function () {
g_gallery.exitfullscreen();
}
/**
* toggle fullscreen
*/
this.togglefullscreen = function () {
g_gallery.togglefullscreen();
}
/**
* reset zoom
*/
this.resetzoom = function () {
var objslider = g_gallery.getobjslider();
if (!objslider)
return (false);
objslider.zoomback();
}
/**
* zoom in
*/
this.zoomin = function () {
var objslider = g_gallery.getobjslider();
if (!objslider)
return (false);
objslider.zoomin();
}
/**
* zoom in
*/
this.zoomout = function () {
var objslider = g_gallery.getobjslider();
if (!objslider)
return (false);
objslider.zoomout();
}
/**
* next item
*/
this.nextitem = function () {
g_gallery.nextitem();
}
/**
* prev item
*/
this.previtem = function () {
g_gallery.previtem();
}
/**
* go to some item by index (0-numitems)
*/
this.selectitem = function (numitem) {
g_gallery.selectitem(numitem);
}
/**
* resize the gallery to some width (height).
*/
this.resize = function (width, height) {
if (height)
g_gallery.resize(width, height);
else
g_gallery.resize(width);
}
/**
* get some item by index
*/
this.getitem = function (numitem) {
var data = g_gallery.getitem(numitem);
var output = convertitemdataforoutput(data);
return (output);
}
/**
* get number of items in the gallery
*/
this.getnumitems = function () {
var numitems = g_gallery.getnumitems();
return (numitems);
}
/**
* refresh gallery with another options
*/
this.reloadgallery = function (customoptions) {
if (!customoptions)
var customoptions = {};
g_gallery.run(null, customoptions);
//restore events:
g_arrevents.map(function (obj) {
t.on(obj.event, obj.func, true);
});
}
/**
* destroy the gallery
*/
this.destroy = function () {
g_gallery.destroy();
}
//trigger api on init event
g_objgallery.trigger(t.events.api_init_functions, t);
}
/**
loadmore panel class addon to unite gallery
*/
function ugloadmore() {
var t = this, g_objthis = jquery(this), g_objgallery;
var g_gallery = new unitegallerymain(), g_functions = new ugfunctions();
var g_objwrapper, g_objbutton, g_objloader, g_objerror;
var g_temp = {
isinited: false
}
var g_options = {
loadmore_container: "ug_loadmore_wrapper" //tabs container
};
this.events = {
};
/**
* init wrapper
*/
function initobjects() {
g_objwrapper = jquery("#" + g_options.loadmore_container);
if (g_objwrapper.length == 0)
return (false);
g_objbutton = g_objwrapper.find(".ug-loadmore-button");
if (g_objbutton.length == 0)
return (false);
g_objloader = g_objwrapper.find(".ug-loadmore-loader");
if (g_objloader.length == 0)
return (false);
g_objerror = g_objwrapper.find(".ug-loadmore-error");
if (g_objerror.length == 0)
return (false);
g_temp.isinited = true;
}
/**
* show loadmore
*/
function showloadmore() {
g_objwrapper.show();
}
/**
* on loadore click event
*/
function onloadmoreclick() {
g_objbutton.hide();
g_objloader.show();
var data = {
numitems: g_gallery.getnumitems()
};
g_gallery.ajaxrequest("front_loadmore", data, function (response) {
g_objloader.hide();
var htmlitems = response.html_items;
var showloadmore = response.show_loadmore;
if (showloadmore == true) {
g_objbutton.blur().show();
g_objloader.hide();
} else {
g_objwrapper.hide();
}
g_gallery.additems(htmlitems);
}, function (errortext) {
errortext = "ajax error!" + errortext;
g_objloader.hide();
g_objerror.show();
g_objerror.html(errortext);
});
}
/**
* init events
*/
function initevents() {
g_gallery.onevent("tiles_first_placed", showloadmore);
g_objbutton.click(onloadmoreclick);
}
/**
* destroy
*/
this.destroy = function () {
if (g_temp.isinited == false)
return (false);
}
/**
* init the loadmore button
*/
this.init = function (gallery, customoptions) {
g_gallery = gallery;
g_objgallery = jquery(g_gallery);
g_options = jquery.extend(g_options, customoptions);
initobjects();
if (g_temp.isinited == false) {
trace("load more not inited, something is wrong");
return (false);
}
initevents();
}
}