From 24936ee4761dbc5fd625223f66220a7c279c7ea4 Mon Sep 17 00:00:00 2001 From: Jeff Pickhardt Date: Mon, 3 Dec 2012 16:38:11 -0800 Subject: [PATCH] Updated to 1.2.9 but forgot to push these (formerly untracked but very important!) files. --- guiders-1.2.9.css | 138 +++++++++++ guiders-1.2.9.js | 581 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 719 insertions(+) create mode 100755 guiders-1.2.9.css create mode 100644 guiders-1.2.9.js diff --git a/guiders-1.2.9.css b/guiders-1.2.9.css new file mode 100755 index 0000000..6093ff2 --- /dev/null +++ b/guiders-1.2.9.css @@ -0,0 +1,138 @@ +.guider { + background: #FFF; + border: 1px solid #666; + font-family: arial; + position: absolute; + outline: none; + padding: 4px 12px; + width: 500px; + z-index: 100000005 !important; + + /* Shadow */ + -moz-box-shadow: 0 0px 8px #111; + -webkit-box-shadow: 0 0px 8px #111; + box-shadow: 0 0px 8px #111; + /* End shadow */ + + /* Rounded corners */ + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + /* End rounded corners */ +} + +.guider_buttons_container { + height: 36px; + position: relative; + width: 100%; +} + +.guider_content { + position: relative; +} + +.guider_content h1 { + color: #1054AA; + float: left; + font-size: 21px; +} + +.guider_close { + float: right; + padding: 10px 0 0; +} + +.x_button { + background-repeat: no-repeat; + background-image: url(data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/4QOzRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAcAAAAcgEyAAIAAAAUAAAAjodpAAQAAAABAAAApAAAANAACvyAAAAnEAAK/IAAACcQQWRvYmUgUGhvdG9zaG9wIENTNCBXaW5kb3dzADIwMTA6MDk6MjQgMDg6MzY6NDEAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAADaADAAQAAAABAAAADQAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEAAgAAAgEABAAAAAEAAAEuAgIABAAAAAEAAAJ9AAAAAAAAAEgAAAABAAAASAAAAAH/2P/gABBKRklGAAECAABIAEgAAP/tAAxBZG9iZV9DTQAB/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgADQANAwEiAAIRAQMRAf/dAAQAAf/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x//aAAwDAQACEQMRAD8A74ehRj023172WNEODju36n3S76L0Q4p9RrdjfUNbnlm522Q5nt3bv3Hbd6jiueG17qqi70fabLHAbPz4b6Lmf8aoF7oafSb6PpOgeo/6G9n53o7/AE/7P8yip//Z/+0IRFBob3Rvc2hvcCAzLjAAOEJJTQQlAAAAAAAQAAAAAAAAAAAAAAAAAAAAADhCSU0D7QAAAAAAEABIAAAAAQABAEgAAAABAAE4QklNBCYAAAAAAA4AAAAAAAAAAAAAP4AAADhCSU0EDQAAAAAABAAAAHg4QklNBBkAAAAAAAQAAAAeOEJJTQPzAAAAAAAJAAAAAAAAAAABADhCSU0nEAAAAAAACgABAAAAAAAAAAI4QklNA/UAAAAAAEgAL2ZmAAEAbGZmAAYAAAAAAAEAL2ZmAAEAoZmaAAYAAAAAAAEAMgAAAAEAWgAAAAYAAAAAAAEANQAAAAEALQAAAAYAAAAAAAE4QklNA/gAAAAAAHAAAP////////////////////////////8D6AAAAAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAAOEJJTQQIAAAAAAAQAAAAAQAAAkAAAAJAAAAAADhCSU0EHgAAAAAABAAAAAA4QklNBBoAAAAAA0kAAAAGAAAAAAAAAAAAAAANAAAADQAAAAoAVQBuAHQAaQB0AGwAZQBkAC0AMQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAADQAAAA0AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAQAAAAAAAG51bGwAAAACAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAAAAAAAABCdG9tbG9uZwAAAA0AAAAAUmdodGxvbmcAAAANAAAABnNsaWNlc1ZsTHMAAAABT2JqYwAAAAEAAAAAAAVzbGljZQAAABIAAAAHc2xpY2VJRGxvbmcAAAAAAAAAB2dyb3VwSURsb25nAAAAAAAAAAZvcmlnaW5lbnVtAAAADEVTbGljZU9yaWdpbgAAAA1hdXRvR2VuZXJhdGVkAAAAAFR5cGVlbnVtAAAACkVTbGljZVR5cGUAAAAASW1nIAAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAAAFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAAANAAAAAFJnaHRsb25nAAAADQAAAAN1cmxURVhUAAAAAQAAAAAAAG51bGxURVhUAAAAAQAAAAAAAE1zZ2VURVhUAAAAAQAAAAAABmFsdFRhZ1RFWFQAAAABAAAAAAAOY2VsbFRleHRJc0hUTUxib29sAQAAAAhjZWxsVGV4dFRFWFQAAAABAAAAAAAJaG9yekFsaWduZW51bQAAAA9FU2xpY2VIb3J6QWxpZ24AAAAHZGVmYXVsdAAAAAl2ZXJ0QWxpZ25lbnVtAAAAD0VTbGljZVZlcnRBbGlnbgAAAAdkZWZhdWx0AAAAC2JnQ29sb3JUeXBlZW51bQAAABFFU2xpY2VCR0NvbG9yVHlwZQAAAABOb25lAAAACXRvcE91dHNldGxvbmcAAAAAAAAACmxlZnRPdXRzZXRsb25nAAAAAAAAAAxib3R0b21PdXRzZXRsb25nAAAAAAAAAAtyaWdodE91dHNldGxvbmcAAAAAADhCSU0EKAAAAAAADAAAAAI/8AAAAAAAADhCSU0EFAAAAAAABAAAAAI4QklNBAwAAAAAApkAAAABAAAADQAAAA0AAAAoAAACCAAAAn0AGAAB/9j/4AAQSkZJRgABAgAASABIAAD/7QAMQWRvYmVfQ00AAf/uAA5BZG9iZQBkgAAAAAH/2wCEAAwICAgJCAwJCQwRCwoLERUPDAwPFRgTExUTExgRDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBDQsLDQ4NEA4OEBQODg4UFA4ODg4UEQwMDAwMEREMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDP/AABEIAA0ADQMBIgACEQEDEQH/3QAEAAH/xAE/AAABBQEBAQEBAQAAAAAAAAADAAECBAUGBwgJCgsBAAEFAQEBAQEBAAAAAAAAAAEAAgMEBQYHCAkKCxAAAQQBAwIEAgUHBggFAwwzAQACEQMEIRIxBUFRYRMicYEyBhSRobFCIyQVUsFiMzRygtFDByWSU/Dh8WNzNRaisoMmRJNUZEXCo3Q2F9JV4mXys4TD03Xj80YnlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3EQACAgECBAQDBAUGBwcGBTUBAAIRAyExEgRBUWFxIhMFMoGRFKGxQiPBUtHwMyRi4XKCkkNTFWNzNPElBhaisoMHJjXC0kSTVKMXZEVVNnRl4vKzhMPTdePzRpSkhbSVxNTk9KW1xdXl9VZmdoaWprbG1ub2JzdHV2d3h5ent8f/2gAMAwEAAhEDEQA/AO+HoUY9Nt9e9ljRDg47t+p90u+i9EOKfUa3Y31DW55ZudtkOZ7d279x23eo4rnhte6qou9H2myxwGz8+G+i5n/GqBe6Gn0m+j6ToHqP+hvZ+d6O/wBP+z/Moqf/2QA4QklNBCEAAAAAAFUAAAABAQAAAA8AQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAAAATAEEAZABvAGIAZQAgAFAAaABvAHQAbwBzAGgAbwBwACAAQwBTADQAAAABADhCSU0EBgAAAAAABwAHAAAAAQEA/+EQZWh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNC4yLjItYzA2MyA1My4zNTI2MjQsIDIwMDgvMDcvMzAtMTg6MTI6MTggICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNCBXaW5kb3dzIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxMC0wOS0yNFQwODozNjo0MS0wNTowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxMC0wOS0yNFQwODozNjo0MS0wNTowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTAtMDktMjRUMDg6MzY6NDEtMDU6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvanBlZyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxQ0Q5QUNCNzQ4QzdERjExOUMyQkU4QkIzMTY5NzZDMCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoxQUQ5QUNCNzQ4QzdERjExOUMyQkU4QkIzMTY5NzZDMCIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjFDRDlBQ0I3NDhDN0RGMTE5QzJCRThCQjMxNjk3NkMwIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiBwaG90b3Nob3A6SUNDUHJvZmlsZT0ic1JHQiBJRUM2MTk2Ni0yLjEiIHRpZmY6T3JpZW50YXRpb249IjEiIHRpZmY6WFJlc29sdXRpb249IjcyMDAwMC8xMDAwMCIgdGlmZjpZUmVzb2x1dGlvbj0iNzIwMDAwLzEwMDAwIiB0aWZmOlJlc29sdXRpb25Vbml0PSIyIiB0aWZmOk5hdGl2ZURpZ2VzdD0iMjU2LDI1NywyNTgsMjU5LDI2MiwyNzQsMjc3LDI4NCw1MzAsNTMxLDI4MiwyODMsMjk2LDMwMSwzMTgsMzE5LDUyOSw1MzIsMzA2LDI3MCwyNzEsMjcyLDMwNSwzMTUsMzM0MzI7NEZDNkYxNUZCODNCMjY3MjY4NzRCNjRFRTEzRkY2QjgiIGV4aWY6UGl4ZWxYRGltZW5zaW9uPSIxMyIgZXhpZjpQaXhlbFlEaW1lbnNpb249IjEzIiBleGlmOkNvbG9yU3BhY2U9IjEiIGV4aWY6TmF0aXZlRGlnZXN0PSIzNjg2NCw0MDk2MCw0MDk2MSwzNzEyMSwzNzEyMiw0MDk2Miw0MDk2MywzNzUxMCw0MDk2NCwzNjg2NywzNjg2OCwzMzQzNCwzMzQzNywzNDg1MCwzNDg1MiwzNDg1NSwzNDg1NiwzNzM3NywzNzM3OCwzNzM3OSwzNzM4MCwzNzM4MSwzNzM4MiwzNzM4MywzNzM4NCwzNzM4NSwzNzM4NiwzNzM5Niw0MTQ4Myw0MTQ4NCw0MTQ4Niw0MTQ4Nyw0MTQ4OCw0MTQ5Miw0MTQ5Myw0MTQ5NSw0MTcyOCw0MTcyOSw0MTczMCw0MTk4NSw0MTk4Niw0MTk4Nyw0MTk4OCw0MTk4OSw0MTk5MCw0MTk5MSw0MTk5Miw0MTk5Myw0MTk5NCw0MTk5NSw0MTk5Niw0MjAxNiwwLDIsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMjAsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMzA7NkFFQjM0Q0IwNUE5MkY5RjlCMEU2RjQ1NTQxOUVCRkUiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjFDRDlBQ0I3NDhDN0RGMTE5QzJCRThCQjMxNjk3NkMwIiBzdEV2dDp3aGVuPSIyMDEwLTA5LTI0VDA4OjM2OjQxLTA1OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ1M0IFdpbmRvd3MiLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/eHBhY2tldCBlbmQ9InciPz7/4gxYSUNDX1BST0ZJTEUAAQEAAAxITGlubwIQAABtbnRyUkdCIFhZWiAHzgACAAkABgAxAABhY3NwTVNGVAAAAABJRUMgc1JHQgAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLUhQICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFjcHJ0AAABUAAAADNkZXNjAAABhAAAAGx3dHB0AAAB8AAAABRia3B0AAACBAAAABRyWFlaAAACGAAAABRnWFlaAAACLAAAABRiWFlaAAACQAAAABRkbW5kAAACVAAAAHBkbWRkAAACxAAAAIh2dWVkAAADTAAAAIZ2aWV3AAAD1AAAACRsdW1pAAAD+AAAABRtZWFzAAAEDAAAACR0ZWNoAAAEMAAAAAxyVFJDAAAEPAAACAxnVFJDAAAEPAAACAxiVFJDAAAEPAAACAx0ZXh0AAAAAENvcHlyaWdodCAoYykgMTk5OCBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQAAZGVzYwAAAAAAAAASc1JHQiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAPNRAAEAAAABFsxYWVogAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+EAAC2z2Rlc2MAAAAAAAAAFklFQyBodHRwOi8vd3d3LmllYy5jaAAAAAAAAAAAAAAAFklFQyBodHRwOi8vd3d3LmllYy5jaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNjAAAAAAAAAC5JRUMgNjE5NjYtMi4xIERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAtIHNSR0IAAAAAAAAAAAAAAC5JRUMgNjE5NjYtMi4xIERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAtIHNSR0IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGVzYwAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAALFJlZmVyZW5jZSBWaWV3aW5nIENvbmRpdGlvbiBpbiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZpZXcAAAAAABOk/gAUXy4AEM8UAAPtzAAEEwsAA1yeAAAAAVhZWiAAAAAAAEwJVgBQAAAAVx/nbWVhcwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAo8AAAACc2lnIAAAAABDUlQgY3VydgAAAAAAAAQAAAAABQAKAA8AFAAZAB4AIwAoAC0AMgA3ADsAQABFAEoATwBUAFkAXgBjAGgAbQByAHcAfACBAIYAiwCQAJUAmgCfAKQAqQCuALIAtwC8AMEAxgDLANAA1QDbAOAA5QDrAPAA9gD7AQEBBwENARMBGQEfASUBKwEyATgBPgFFAUwBUgFZAWABZwFuAXUBfAGDAYsBkgGaAaEBqQGxAbkBwQHJAdEB2QHhAekB8gH6AgMCDAIUAh0CJgIvAjgCQQJLAlQCXQJnAnECegKEAo4CmAKiAqwCtgLBAssC1QLgAusC9QMAAwsDFgMhAy0DOANDA08DWgNmA3IDfgOKA5YDogOuA7oDxwPTA+AD7AP5BAYEEwQgBC0EOwRIBFUEYwRxBH4EjASaBKgEtgTEBNME4QTwBP4FDQUcBSsFOgVJBVgFZwV3BYYFlgWmBbUFxQXVBeUF9gYGBhYGJwY3BkgGWQZqBnsGjAadBq8GwAbRBuMG9QcHBxkHKwc9B08HYQd0B4YHmQesB78H0gflB/gICwgfCDIIRghaCG4IggiWCKoIvgjSCOcI+wkQCSUJOglPCWQJeQmPCaQJugnPCeUJ+woRCicKPQpUCmoKgQqYCq4KxQrcCvMLCwsiCzkLUQtpC4ALmAuwC8gL4Qv5DBIMKgxDDFwMdQyODKcMwAzZDPMNDQ0mDUANWg10DY4NqQ3DDd4N+A4TDi4OSQ5kDn8Omw62DtIO7g8JDyUPQQ9eD3oPlg+zD88P7BAJECYQQxBhEH4QmxC5ENcQ9RETETERTxFtEYwRqhHJEegSBxImEkUSZBKEEqMSwxLjEwMTIxNDE2MTgxOkE8UT5RQGFCcUSRRqFIsUrRTOFPAVEhU0FVYVeBWbFb0V4BYDFiYWSRZsFo8WshbWFvoXHRdBF2UXiReuF9IX9xgbGEAYZRiKGK8Y1Rj6GSAZRRlrGZEZtxndGgQaKhpRGncanhrFGuwbFBs7G2MbihuyG9ocAhwqHFIcexyjHMwc9R0eHUcdcB2ZHcMd7B4WHkAeah6UHr4e6R8THz4faR+UH78f6iAVIEEgbCCYIMQg8CEcIUghdSGhIc4h+yInIlUigiKvIt0jCiM4I2YjlCPCI/AkHyRNJHwkqyTaJQklOCVoJZclxyX3JicmVyaHJrcm6CcYJ0kneierJ9woDSg/KHEooijUKQYpOClrKZ0p0CoCKjUqaCqbKs8rAis2K2krnSvRLAUsOSxuLKIs1y0MLUEtdi2rLeEuFi5MLoIuty7uLyQvWi+RL8cv/jA1MGwwpDDbMRIxSjGCMbox8jIqMmMymzLUMw0zRjN/M7gz8TQrNGU0njTYNRM1TTWHNcI1/TY3NnI2rjbpNyQ3YDecN9c4FDhQOIw4yDkFOUI5fzm8Ofk6Njp0OrI67zstO2s7qjvoPCc8ZTykPOM9Ij1hPaE94D4gPmA+oD7gPyE/YT+iP+JAI0BkQKZA50EpQWpBrEHuQjBCckK1QvdDOkN9Q8BEA0RHRIpEzkUSRVVFmkXeRiJGZ0arRvBHNUd7R8BIBUhLSJFI10kdSWNJqUnwSjdKfUrESwxLU0uaS+JMKkxyTLpNAk1KTZNN3E4lTm5Ot08AT0lPk0/dUCdQcVC7UQZRUFGbUeZSMVJ8UsdTE1NfU6pT9lRCVI9U21UoVXVVwlYPVlxWqVb3V0RXklfgWC9YfVjLWRpZaVm4WgdaVlqmWvVbRVuVW+VcNVyGXNZdJ114XcleGl5sXr1fD19hX7NgBWBXYKpg/GFPYaJh9WJJYpxi8GNDY5dj62RAZJRk6WU9ZZJl52Y9ZpJm6Gc9Z5Nn6Wg/aJZo7GlDaZpp8WpIap9q92tPa6dr/2xXbK9tCG1gbbluEm5rbsRvHm94b9FwK3CGcOBxOnGVcfByS3KmcwFzXXO4dBR0cHTMdSh1hXXhdj52m3b4d1Z3s3gReG54zHkqeYl553pGeqV7BHtje8J8IXyBfOF9QX2hfgF+Yn7CfyN/hH/lgEeAqIEKgWuBzYIwgpKC9INXg7qEHYSAhOOFR4Wrhg6GcobXhzuHn4gEiGmIzokziZmJ/opkisqLMIuWi/yMY4zKjTGNmI3/jmaOzo82j56QBpBukNaRP5GokhGSepLjk02TtpQglIqU9JVflcmWNJaflwqXdZfgmEyYuJkkmZCZ/JpomtWbQpuvnByciZz3nWSd0p5Anq6fHZ+Ln/qgaaDYoUehtqImopajBqN2o+akVqTHpTilqaYapoum/adup+CoUqjEqTepqaocqo+rAqt1q+msXKzQrUStuK4trqGvFq+LsACwdbDqsWCx1rJLssKzOLOutCW0nLUTtYq2AbZ5tvC3aLfguFm40blKucK6O7q1uy67p7whvJu9Fb2Pvgq+hL7/v3q/9cBwwOzBZ8Hjwl/C28NYw9TEUcTOxUvFyMZGxsPHQce/yD3IvMk6ybnKOMq3yzbLtsw1zLXNNc21zjbOts83z7jQOdC60TzRvtI/0sHTRNPG1EnUy9VO1dHWVdbY11zX4Nhk2OjZbNnx2nba+9uA3AXcit0Q3ZbeHN6i3ynfr+A24L3hROHM4lPi2+Nj4+vkc+T85YTmDeaW5x/nqegy6LzpRunQ6lvq5etw6/vshu0R7ZzuKO6070DvzPBY8OXxcvH/8ozzGfOn9DT0wvVQ9d72bfb794r4Gfio+Tj5x/pX+uf7d/wH/Jj9Kf26/kv+3P9t////7gAOQWRvYmUAZEAAAAAB/9sAhAABAQEBAQEBAQEBAgEBAQICAQEBAQICAgICAgICAwIDAwMDAgMDBAQEBAQDBQUFBQUFBwcHBwcICAgICAgICAgIAQEBAQICAgQDAwQHBQQFBwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAj/wAARCAANAA0DAREAAhEBAxEB/90ABAAC/8QBogAAAAYCAwEAAAAAAAAAAAAABwgGBQQJAwoCAQALAQAABgMBAQEAAAAAAAAAAAAGBQQDBwIIAQkACgsQAAIBAgUCAwQGBgUFAQMGbwECAwQRBQYhEgAHMUETCFEiYRRxgTKRCaEj8MFCsRXRFuHxUjMXJGIYQzQlggoZclMmY5JENaJUshpzNsLSJ0U3RuLyg5Ojs2RVKMPTKTjj80dIVmUqOTpJSldYWVpmdHWEhWd2d2iGh5SVpKW0tcTF1NXk5fT1lpemp7a3xsfW1+bn9vdpanh5eoiJipiZmqipqri5usjJytjZ2ujp6vj5+hEAAQMCAwQHBgMEAwYHBwFpAQIDEQAEIQUSMQZB8FFhBxMicYGRobHBCDLRFOEj8UIVUgkWM2LSciSCwpKTQxdzg6KyYyU0U+KzNSZEVGRFVScKhLQYGRooKSo2Nzg5OkZHSElKVldYWVplZmdoaWp0dXZ3eHl6hYaHiImKlJWWl5iZmqOkpaanqKmqtba3uLm6w8TFxsfIycrT1NXW19jZ2uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDbqppMjZDyF09zh1BymuP5ezjhcMUOLUOI1seKHHzHLUeXOk9ZHG0NQi+7Ku0RMCZLIdyvYk01hFK+p6Y1UePYPhyZXwpcy1eWsSzXU5WGI4x/KXqKfGqFY4TUfM7/ADFppniE9tu87/L2+7zWqtxX/9Db/wCmOKYrFRZUjrsjZYr8VTKCLhNZnrNeLUkEuAh5fm2hhly9U00bEbfnFjkYhdm8lbcdVTaaTlTimImjwWV8jUK5BXLGKR09Cua81FWwA5lw8ySNOcuiqWjVQgVBEValJJZQoDbrVf/Z); + *background-image: url('x_close_button.jpg'); + cursor: pointer; + height: 13px; + width: 13px; +} + +.guider_content p { + clear: both; + color: #333; + font-size: 13px; +} + +.guider_button { + background: -moz-linear-gradient(top, #5CA9FF 0%, #3D79C3 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #5CA9FF), color-stop(100%, #3D79C3)); + background-color: #4A95E0; /* overruled by background gradient, in browsers where they exist */ + border: solid 1px #4B5D7E; + color: #FFF; + cursor: pointer; + display: inline-block; + float: right; + font-size: 75%; + font-weight: bold; + margin-left: 6px; + min-width: 40px; + padding: 3px 5px; + text-align: center; + text-decoration: none; + /* Rounded corners */ + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; + /* End rounded corners */ +} + +#guider_overlay { + background-color: #000; + width: 100%; + height: 100%; + position: fixed; + top: 0px; + left: 0px; + opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + filter: alpha(opacity=50); + z-index: 10; +} + +.guider_arrow { + width: 42px; + height: 42px; + position: absolute; + display: none; + background-repeat: no-repeat; + z-index: 100000006 !important; + + /** + * For optimization, the arrows image is inlined in the css below. + * + * To use your own arrows image, replace this background-image with your own arrows. + * It should have four arrows, top, right, left, and down. + */ + background-image: url(data:image/png;base64,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); + *background-image: url('guider_arrows.png'); +} + +.guider_arrow_right { + display: block; + background-position: 0px 0px; + right: -42px; +} +.guider_arrow_down { + display: block; + background-position: 0px -42px; + bottom: -42px; +} +.guider_arrow_up { + display: block; + background-position: 0px -126px; + top: -42px; +} +.guider_arrow_left { + display: block; + background-position: 0px -84px; + left: -42px; +} + +.guider_highlight { + position: relative; + z-index: 101; +} \ No newline at end of file diff --git a/guiders-1.2.9.js b/guiders-1.2.9.js new file mode 100644 index 0000000..83da5d7 --- /dev/null +++ b/guiders-1.2.9.js @@ -0,0 +1,581 @@ +/** + * guiders.js + * + * version 1.2.9 + * + * Developed at Optimizely. (www.optimizely.com) + * We make A/B testing you'll actually use. + * + * Released under the Apache License 2.0. + * www.apache.org/licenses/LICENSE-2.0.html + * + * Questions about Guiders? + * You may email me (Jeff Pickhardt) at pickhardt+guiders@gmail.com + * + * Questions about Optimizely should be sent to: + * sales@optimizely.com or support@optimizely.com + * + * Enjoy! + */ + +var guiders = (function($) { + var guiders = {}; + + guiders.version = "1.2.9"; + + guiders._defaultSettings = { + attachTo: null, // Selector of the element to attach to. + autoFocus: false, // Determines whether or not the browser scrolls to the element. + buttons: [{name: "Close"}], + buttonCustomHTML: "", + classString: null, + closeOnEscape: false, + description: "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", + highlight: null, + isHashable: true, + offset: { + top: null, + left: null + }, + onClose: null, + onHide: null, + onShow: null, + overlay: false, + position: 0, // 1-12 follows an analog clock, 0 means centered. + shouldSkip: function() {}, // Optional handler allows you to skip a guider if returns true. + title: "Sample title goes here", + width: 400, + xButton: false // This places a closer "x" button in the top right of the guider. + }; + + guiders._htmlSkeleton = [ + "
", + "
", + "

", + "
", + "

", + "
", + "
", + "
", + "
", + "
", + "
" + ].join(""); + + guiders._arrowSize = 42; // This is the arrow's width and height. + guiders._backButtonTitle = "Back"; + guiders._buttonAttributes = {"href": "javascript:void(0);"}; + guiders._buttonClassName = "guider_button"; // Override this if you use a different class name for your buttons. + guiders._buttonElement = ""; // Override this if you want to use a different element for your buttons, like spans. + guiders._closeButtonTitle = "Close"; + guiders._currentGuiderID = null; + guiders._guiders = {}; + guiders._lastCreatedGuiderID = null; + guiders._nextButtonTitle = "Next"; + guiders._offsetNameMapping = { + "topLeft": 11, + "top": 12, + "topRight": 1, + "rightTop": 2, + "right": 3, + "rightBottom": 4, + "bottomRight": 5, + "bottom": 6, + "bottomLeft": 7, + "leftBottom": 8, + "left": 9, + "leftTop": 10 + }; + guiders._windowHeight = 0; + + guiders._addButtons = function(myGuider) { + var guiderButtonsContainer = myGuider.elem.find(".guider_buttons"); + + if (myGuider.buttons === null || myGuider.buttons.length === 0) { + guiderButtonsContainer.remove(); + return; + } + + for (var i = myGuider.buttons.length - 1; i >= 0; i--) { + var thisButton = myGuider.buttons[i]; + var thisButtonElem = $(guiders._buttonElement, + $.extend({"class" : guiders._buttonClassName, "html" : thisButton.name }, guiders._buttonAttributes, thisButton.html || {}) + ); + + if (typeof thisButton.classString !== "undefined" && thisButton.classString !== null) { + thisButtonElem.addClass(thisButton.classString); + } + + guiderButtonsContainer.append(thisButtonElem); + + var thisButtonName = thisButton.name.toLowerCase(); + if (thisButton.onclick) { + thisButtonElem.bind("click", thisButton.onclick); + } else { + switch (thisButtonName) { + case guiders._closeButtonTitle.toLowerCase(): + thisButtonElem.bind("click", function () { + guiders.hideAll(); + if (myGuider.onClose) { + myGuider.onClose(myGuider, false /* close by button */); + } + }); + break; + case guiders._nextButtonTitle.toLowerCase(): + thisButtonElem.bind("click", function () { + !myGuider.elem.data("locked") && guiders.next(); + }); + break; + case guiders._backButtonTitle.toLowerCase(): + thisButtonElem.bind("click", function () { + !myGuider.elem.data("locked") && guiders.prev(); + }); + break; + } + } + } + + if (myGuider.buttonCustomHTML !== "") { + var myCustomHTML = $(myGuider.buttonCustomHTML); + myGuider.elem.find(".guider_buttons").append(myCustomHTML); + } + + if (myGuider.buttons.length === 0) { + guiderButtonsContainer.remove(); + } + }; + + guiders._addXButton = function(myGuider) { + var xButtonContainer = myGuider.elem.find(".guider_close"); + var xButton = $("
", { + "class" : "x_button", + "role" : "button" + }); + xButtonContainer.append(xButton); + xButton.click(function() { + guiders.hideAll(); + if (myGuider.onClose) { + myGuider.onClose(myGuider, true); + } + }); + }; + + guiders._wireEscape = function (myGuider) { + $(document).keydown(function(event) { + if (event.keyCode == 27 || event.which == 27) { + guiders.hideAll(); + if (myGuider.onClose) { + myGuider.onClose(myGuider, true /*close by X/Escape*/); + } + return false; + } + }); + }; + + guiders._unWireEscape = function (myGuider) { + $(document).unbind("keydown"); + }; + + guiders._attach = function(myGuider) { + if (typeof myGuider !== 'object') { + return; + } + + var attachTo = $(myGuider.attachTo); + + var myHeight = myGuider.elem.innerHeight(); + var myWidth = myGuider.elem.innerWidth(); + + if (myGuider.position === 0 || attachTo.length === 0) { + // The guider is positioned in the center of the screen. + myGuider.elem.css("position", "fixed"); + myGuider.elem.css("top", ($(window).height() - myHeight) / 3 + "px"); + myGuider.elem.css("left", ($(window).width() - myWidth) / 2 + "px"); + return; + } + + // Otherwise, the guider is positioned relative to the attachTo element. + var base = attachTo.offset(); + var top = base.top; + var left = base.left; + + // topMarginOfBody corrects positioning if body has a top margin set on it. + var topMarginOfBody = $("body").outerHeight(true) - $("body").outerHeight(false); + top -= topMarginOfBody; + + // Now, take into account how the guider should be positioned relative to the attachTo element. + // e.g. top left, bottom center, etc. + if (guiders._offsetNameMapping[myGuider.position]) { + // As an alternative to the clock model, you can also use keywords to position the guider. + myGuider.position = guiders._offsetNameMapping[myGuider.position]; + } + + var attachToHeight = attachTo.innerHeight(); + var attachToWidth = attachTo.innerWidth(); + var bufferOffset = 0.9 * guiders._arrowSize; + + // offsetMap follows the form: [height, width] + var offsetMap = { + 1: [-bufferOffset - myHeight, attachToWidth - myWidth], + 2: [0, bufferOffset + attachToWidth], + 3: [attachToHeight/2 - myHeight/2, bufferOffset + attachToWidth], + 4: [attachToHeight - myHeight, bufferOffset + attachToWidth], + 5: [bufferOffset + attachToHeight, attachToWidth - myWidth], + 6: [bufferOffset + attachToHeight, attachToWidth/2 - myWidth/2], + 7: [bufferOffset + attachToHeight, 0], + 8: [attachToHeight - myHeight, -myWidth - bufferOffset], + 9: [attachToHeight/2 - myHeight/2, -myWidth - bufferOffset], + 10: [0, -myWidth - bufferOffset], + 11: [-bufferOffset - myHeight, 0], + 12: [-bufferOffset - myHeight, attachToWidth/2 - myWidth/2] + }; + var offset = offsetMap[myGuider.position]; + top += offset[0]; + left += offset[1]; + + var positionType = "absolute"; + // If the element you are attaching to is position: fixed, then we will make the guider + // position: fixed as well. + if (attachTo.css("position") == "fixed") { + positionType = "fixed"; + top -= $(window).scrollTop(); + left -= $(window).scrollLeft(); + } + + // If you specify an additional offset parameter when you create the guider, it gets added here. + if (myGuider.offset.top !== null) { + top += myGuider.offset.top; + } + if (myGuider.offset.left !== null) { + left += myGuider.offset.left; + } + + guiders._styleArrow(myGuider); + + // Finally, set the style of the guider and return it! + myGuider.elem.css({ + "position": positionType, + "top": top, + "left": left + }); + + return myGuider; + }; + + guiders._guiderById = function(id) { + if (typeof guiders._guiders[id] === "undefined") { + throw "Cannot find guider with id " + id; + } + return guiders._guiders[id]; + }; + + guiders._showOverlay = function() { + $("#guider_overlay").fadeIn("fast", function(){ + if (this.style.removeAttribute) { + this.style.removeAttribute("filter"); + } + }); + // This callback is needed to fix an IE opacity bug. + // See also: + // http://www.kevinleary.net/jquery-fadein-fadeout-problems-in-internet-explorer/ + }; + + guiders._highlightElement = function(selector) { + $(selector).addClass('guider_highlight'); + }; + + guiders._dehighlightElement = function(selector) { + $(selector).removeClass('guider_highlight'); + }; + + guiders._hideOverlay = function() { + $("#guider_overlay").fadeOut("fast"); + }; + + guiders._initializeOverlay = function() { + if ($("#guider_overlay").length === 0) { + $("
").hide().appendTo("body"); + } + }; + + guiders._styleArrow = function(myGuider) { + var position = myGuider.position || 0; + if (!position) { + return; + } + var myGuiderArrow = $(myGuider.elem.find(".guider_arrow")); + var newClass = { + 1: "guider_arrow_down", + 2: "guider_arrow_left", + 3: "guider_arrow_left", + 4: "guider_arrow_left", + 5: "guider_arrow_up", + 6: "guider_arrow_up", + 7: "guider_arrow_up", + 8: "guider_arrow_right", + 9: "guider_arrow_right", + 10: "guider_arrow_right", + 11: "guider_arrow_down", + 12: "guider_arrow_down" + }; + myGuiderArrow.addClass(newClass[position]); + + var myHeight = myGuider.elem.innerHeight(); + var myWidth = myGuider.elem.innerWidth(); + var arrowOffset = guiders._arrowSize / 2; + var positionMap = { + 1: ["right", arrowOffset], + 2: ["top", arrowOffset], + 3: ["top", myHeight/2 - arrowOffset], + 4: ["bottom", arrowOffset], + 5: ["right", arrowOffset], + 6: ["left", myWidth/2 - arrowOffset], + 7: ["left", arrowOffset], + 8: ["bottom", arrowOffset], + 9: ["top", myHeight/2 - arrowOffset], + 10: ["top", arrowOffset], + 11: ["left", arrowOffset], + 12: ["left", myWidth/2 - arrowOffset] + }; + var position = positionMap[myGuider.position]; + myGuiderArrow.css(position[0], position[1] + "px"); + }; + + /** + * One way to show a guider to new users is to direct new users to a URL such as + * http://www.mysite.com/myapp#guider=welcome + * + * This can also be used to run guiders on multiple pages, by redirecting from + * one page to another, with the guider id in the hash tag. + * + * Alternatively, if you use a session variable or flash messages after sign up, + * you can add selectively add JavaScript to the page: "guiders.show('first');" + */ + guiders._showIfHashed = function(myGuider) { + var GUIDER_HASH_TAG = "guider="; + var hashIndex = window.location.hash.indexOf(GUIDER_HASH_TAG); + if (hashIndex !== -1) { + var hashGuiderId = window.location.hash.substr(hashIndex + GUIDER_HASH_TAG.length); + if (myGuider.id.toLowerCase() === hashGuiderId.toLowerCase()) { + // Success! + guiders.show(myGuider.id); + } + } + }; + + guiders.reposition = function() { + var currentGuider = guiders._guiders[guiders._currentGuiderID]; + guiders._attach(currentGuider); + }; + + guiders.next = function() { + var currentGuider = guiders._guiders[guiders._currentGuiderID]; + if (typeof currentGuider === "undefined") { + return; + } + currentGuider.elem.data("locked", true); + + var nextGuiderId = currentGuider.next || null; + if (nextGuiderId !== null && nextGuiderId !== "") { + var nextGuider = guiders._guiderById(nextGuiderId); + var omitHidingOverlay = nextGuider.overlay ? true : false; + guiders.hideAll(omitHidingOverlay, true); + if (currentGuider && currentGuider.highlight) { + guiders._dehighlightElement(currentGuider.highlight); + } + if (nextGuider.shouldSkip && nextGuider.shouldSkip()) { + guiders._currentGuiderID = nextGuider.id; + guiders.next(); + return; + } + else { + guiders.show(nextGuiderId); + } + } + }; + + guiders.prev = function () { + var currentGuider = guiders._guiders[guiders._currentGuiderID]; + if (typeof currentGuider === "undefined") { + // not what we think it is + return; + } + if (currentGuider.prev === null) { + // no previous to look at + return; + } + + var prevGuider = guiders._guiders[currentGuider.prev]; + prevGuider.elem.data("locked", true); + + // Note we use prevGuider.id as "prevGuider" is _already_ looking at the previous guider + var prevGuiderId = prevGuider.id || null; + if (prevGuiderId !== null && prevGuiderId !== "") { + var myGuider = guiders._guiderById(prevGuiderId); + var omitHidingOverlay = myGuider.overlay ? true : false; + guiders.hideAll(omitHidingOverlay, true); + if (prevGuider && prevGuider.highlight) { + guiders._dehighlightElement(prevGuider.highlight); + } + guiders.show(prevGuiderId); + } + }; + + guiders.createGuider = function(passedSettings) { + if (passedSettings === null || passedSettings === undefined) { + passedSettings = {}; + } + + // Extend those settings with passedSettings + myGuider = $.extend({}, guiders._defaultSettings, passedSettings); + myGuider.id = myGuider.id || String(Math.floor(Math.random() * 1000)); + + var guiderElement = $(guiders._htmlSkeleton); + myGuider.elem = guiderElement; + if (typeof myGuider.classString !== "undefined" && myGuider.classString !== null) { + myGuider.elem.addClass(myGuider.classString); + } + myGuider.elem.css("width", myGuider.width + "px"); + + var guiderTitleContainer = guiderElement.find(".guider_title"); + guiderTitleContainer.html(myGuider.title); + + guiderElement.find(".guider_description").html(myGuider.description); + + guiders._addButtons(myGuider); + + if (myGuider.xButton) { + guiders._addXButton(myGuider); + } + + guiderElement.hide(); + guiderElement.appendTo("body"); + guiderElement.attr("id", myGuider.id); + + // Ensure myGuider.attachTo is a jQuery element. + if (typeof myGuider.attachTo !== "undefined" && myGuider !== null) { + guiders._attach(myGuider); + } + + guiders._initializeOverlay(); + + guiders._guiders[myGuider.id] = myGuider; + if (guiders._lastCreatedGuiderID != null) { + myGuider.prev = guiders._lastCreatedGuiderID; + } + guiders._lastCreatedGuiderID = myGuider.id; + + /** + * If the URL of the current window is of the form + * http://www.myurl.com/mypage.html#guider=id + * then show this guider. + */ + if (myGuider.isHashable) { + guiders._showIfHashed(myGuider); + } + + return guiders; + }; + + guiders.hideAll = function(omitHidingOverlay, next) { + next = next || false; + + $(".guider:visible").each(function(index, elem){ + var myGuider = guiders._guiderById($(elem).attr('id')); + if (myGuider.onHide) { + myGuider.onHide(myGuider, next); + } + }); + $(".guider").fadeOut("fast"); + var currentGuider = guiders._guiders[guiders._currentGuiderID]; + if (currentGuider && currentGuider.highlight) { + guiders._dehighlightElement(currentGuider.highlight); + } + if (typeof omitHidingOverlay !== "undefined" && omitHidingOverlay === true) { + // do nothing for now + } else { + guiders._hideOverlay(); + } + return guiders; + }; + + guiders.show = function(id) { + if (!id && guiders._lastCreatedGuiderID) { + id = guiders._lastCreatedGuiderID; + } + + var myGuider = guiders._guiderById(id); + if (myGuider.overlay) { + guiders._showOverlay(); + // if guider is attached to an element, make sure it's visible + if (myGuider.highlight) { + guiders._highlightElement(myGuider.highlight); + } + } + + if (myGuider.closeOnEscape) { + guiders._wireEscape(myGuider); + } else { + guiders._unWireEscape(myGuider); + } + + // You can use an onShow function to take some action before the guider is shown. + if (myGuider.onShow) { + myGuider.onShow(myGuider); + } + guiders._attach(myGuider); + myGuider.elem.fadeIn("fast").data("locked", false); + + guiders._currentGuiderID = id; + + var windowHeight = guiders._windowHeight = $(window).height(); + var scrollHeight = $(window).scrollTop(); + var guiderOffset = myGuider.elem.offset(); + var guiderElemHeight = myGuider.elem.height(); + + var isGuiderBelow = (scrollHeight + windowHeight < guiderOffset.top + guiderElemHeight); /* we will need to scroll down */ + var isGuiderAbove = (guiderOffset.top < scrollHeight); /* we will need to scroll up */ + + if (myGuider.autoFocus && (isGuiderBelow || isGuiderAbove)) { + // Sometimes the browser won't scroll if the person just clicked, + // so let's do this in a setTimeout. + setTimeout(guiders.scrollToCurrent, 10); + } + + $(myGuider.elem).trigger("guiders.show"); + + return guiders; + }; + + guiders.scrollToCurrent = function() { + var currentGuider = guiders._guiders[guiders._currentGuiderID]; + if (typeof currentGuider === "undefined") { + return; + } + + var windowHeight = guiders._windowHeight; + var scrollHeight = $(window).scrollTop(); + var guiderOffset = currentGuider.elem.offset(); + var guiderElemHeight = currentGuider.elem.height(); + + // Scroll to the guider's position. + var scrollToHeight = Math.round(Math.max(guiderOffset.top + (guiderElemHeight / 2) - (windowHeight / 2), 0)); + window.scrollTo(0, scrollToHeight); + }; + + // Change the bubble position after browser gets resized + var _resizing = undefined; + $(window).resize(function() { + if (typeof(_resizing) !== "undefined") { + clearTimeout(_resizing); // Prevents seizures + } + _resizing = setTimeout(function() { + _resizing = undefined; + if (typeof (guiders) !== "undefined") { + guiders.reposition(); + } + }, 20); + }); + + return guiders; +}).call(this, jQuery);