| 1 | var Xinha = {}; |
|---|
| 2 | |
|---|
| 3 | _editor_url = _editor_url.replace(/\x2f*$/, '/'); |
|---|
| 4 | |
|---|
| 5 | Xinha.agt = navigator.userAgent.toLowerCase(); |
|---|
| 6 | Xinha.is_ie = ((Xinha.agt.indexOf("msie") != -1) && (Xinha.agt.indexOf("opera") == -1)); |
|---|
| 7 | Xinha.ie_version= parseFloat(Xinha.agt.substring(Xinha.agt.indexOf("msie")+5)); |
|---|
| 8 | Xinha.is_opera = (Xinha.agt.indexOf("opera") != -1); |
|---|
| 9 | Xinha.is_khtml = (Xinha.agt.indexOf("khtml") != -1); |
|---|
| 10 | Xinha.is_webkit = (Xinha.agt.indexOf("applewebkit") != -1); |
|---|
| 11 | Xinha.is_safari = (Xinha.agt.indexOf("safari") != -1); |
|---|
| 12 | Xinha.opera_version = navigator.appVersion.substring(0, navigator.appVersion.indexOf(" "))*1; |
|---|
| 13 | Xinha.is_mac = (Xinha.agt.indexOf("mac") != -1); |
|---|
| 14 | Xinha.is_mac_ie = (Xinha.is_ie && Xinha.is_mac); |
|---|
| 15 | Xinha.is_win_ie = (Xinha.is_ie && !Xinha.is_mac); |
|---|
| 16 | Xinha.is_gecko = (navigator.product == "Gecko" && !Xinha.is_safari); |
|---|
| 17 | Xinha.isRunLocally = document.URL.toLowerCase().search(/^file:/) != -1; |
|---|
| 18 | Xinha.is_designMode = (typeof document.designMode != 'undefined' && !Xinha.is_ie); |
|---|
| 19 | Xinha.isSupportedBrowser = Xinha.is_gecko || (Xinha.is_opera && Xinha.opera_version >= 9.1) || Xinha.ie_version >= 5.5 || Xinha.is_safari; |
|---|
| 20 | |
|---|
| 21 | Xinha.loadPlugins = function(plugins, callbackIfNotReady) |
|---|
| 22 | { |
|---|
| 23 | if ( !Xinha.isSupportedBrowser ) return; |
|---|
| 24 | |
|---|
| 25 | Xinha.loadStyle(typeof _editor_css == "string" ? _editor_css : "Xinha.css","XinhaCoreDesign"); |
|---|
| 26 | Xinha.createLoadingMessages(xinha_editors); |
|---|
| 27 | var loadingMessages = Xinha.loadingMessages; |
|---|
| 28 | Xinha._loadback(_editor_url + "XinhaCore.js",function () { |
|---|
| 29 | Xinha.removeLoadingMessages(xinha_editors); |
|---|
| 30 | Xinha.createLoadingMessages(xinha_editors); |
|---|
| 31 | callbackIfNotReady() |
|---|
| 32 | }); |
|---|
| 33 | return false; |
|---|
| 34 | } |
|---|
| 35 | |
|---|
| 36 | Xinha._loadback = function(Url, Callback, Scope, Bonus) |
|---|
| 37 | { |
|---|
| 38 | var T = !Xinha.is_ie ? "onload" : 'onreadystatechange'; |
|---|
| 39 | var S = document.createElement("script"); |
|---|
| 40 | S.type = "text/javascript"; |
|---|
| 41 | S.src = Url; |
|---|
| 42 | if ( Callback ) |
|---|
| 43 | { |
|---|
| 44 | S[T] = function() |
|---|
| 45 | { |
|---|
| 46 | if ( Xinha.is_ie && ( ! ( /loaded|complete/.test(window.event.srcElement.readyState) ) ) ) |
|---|
| 47 | { |
|---|
| 48 | return; |
|---|
| 49 | } |
|---|
| 50 | |
|---|
| 51 | Callback.call(Scope ? Scope : this, Bonus); |
|---|
| 52 | S[T] = null; |
|---|
| 53 | }; |
|---|
| 54 | } |
|---|
| 55 | document.getElementsByTagName("head")[0].appendChild(S); |
|---|
| 56 | }; |
|---|
| 57 | |
|---|
| 58 | Xinha.getElementTopLeft = function(element) |
|---|
| 59 | { |
|---|
| 60 | var curleft = curtop = 0; |
|---|
| 61 | if (element.offsetParent) |
|---|
| 62 | { |
|---|
| 63 | curleft = element.offsetLeft |
|---|
| 64 | curtop = element.offsetTop |
|---|
| 65 | while (element = element.offsetParent) |
|---|
| 66 | { |
|---|
| 67 | curleft += element.offsetLeft |
|---|
| 68 | curtop += element.offsetTop |
|---|
| 69 | } |
|---|
| 70 | } |
|---|
| 71 | return { top:curtop, left:curleft }; |
|---|
| 72 | } |
|---|
| 73 | |
|---|
| 74 | |
|---|
| 75 | Xinha.findPosX = function(obj) |
|---|
| 76 | { |
|---|
| 77 | var curleft = 0; |
|---|
| 78 | if ( obj.offsetParent ) |
|---|
| 79 | { |
|---|
| 80 | return Xinha.getElementTopLeft(obj).left; |
|---|
| 81 | } |
|---|
| 82 | else if ( obj.x ) |
|---|
| 83 | { |
|---|
| 84 | curleft += obj.x; |
|---|
| 85 | } |
|---|
| 86 | return curleft; |
|---|
| 87 | }; |
|---|
| 88 | |
|---|
| 89 | |
|---|
| 90 | Xinha.findPosY = function(obj) |
|---|
| 91 | { |
|---|
| 92 | var curtop = 0; |
|---|
| 93 | if ( obj.offsetParent ) |
|---|
| 94 | { |
|---|
| 95 | return Xinha.getElementTopLeft(obj).top; |
|---|
| 96 | } |
|---|
| 97 | else if ( obj.y ) |
|---|
| 98 | { |
|---|
| 99 | curtop += obj.y; |
|---|
| 100 | } |
|---|
| 101 | return curtop; |
|---|
| 102 | }; |
|---|
| 103 | |
|---|
| 104 | Xinha.createLoadingMessages = function(xinha_editors) |
|---|
| 105 | { |
|---|
| 106 | if ( Xinha.loadingMessages || !Xinha.isSupportedBrowser ) |
|---|
| 107 | { |
|---|
| 108 | return; |
|---|
| 109 | } |
|---|
| 110 | Xinha.loadingMessages = []; |
|---|
| 111 | |
|---|
| 112 | for (var i=0;i<xinha_editors.length;i++) |
|---|
| 113 | { |
|---|
| 114 | if (!document.getElementById(xinha_editors[i])) |
|---|
| 115 | { |
|---|
| 116 | continue; |
|---|
| 117 | } |
|---|
| 118 | Xinha.loadingMessages.push(Xinha.createLoadingMessage(document.getElementById(xinha_editors[i]))); |
|---|
| 119 | } |
|---|
| 120 | } |
|---|
| 121 | |
|---|
| 122 | Xinha.createLoadingMessage = function(textarea,text) |
|---|
| 123 | { |
|---|
| 124 | if ( document.getElementById("loading_" + textarea.id) || !Xinha.isSupportedBrowser) |
|---|
| 125 | { |
|---|
| 126 | return; |
|---|
| 127 | } |
|---|
| 128 | |
|---|
| 129 | |
|---|
| 130 | var loading_message = document.createElement("div"); |
|---|
| 131 | loading_message.id = "loading_" + textarea.id; |
|---|
| 132 | loading_message.className = "loading"; |
|---|
| 133 | |
|---|
| 134 | loading_message.style.left = (Xinha.findPosX(textarea) + textarea.offsetWidth / 2) - 106 + 'px'; |
|---|
| 135 | loading_message.style.top = (Xinha.findPosY(textarea) + textarea.offsetHeight / 2) - 50 + 'px'; |
|---|
| 136 | |
|---|
| 137 | var loading_main = document.createElement("div"); |
|---|
| 138 | loading_main.className = "loading_main"; |
|---|
| 139 | loading_main.id = "loading_main_" + textarea.id; |
|---|
| 140 | loading_main.appendChild(document.createTextNode(Xinha._lc("Loading in progress. Please wait!"))); |
|---|
| 141 | |
|---|
| 142 | var loading_sub = document.createElement("div"); |
|---|
| 143 | loading_sub.className = "loading_sub"; |
|---|
| 144 | loading_sub.id = "loading_sub_" + textarea.id; |
|---|
| 145 | text = text ? text : Xinha._lc("Loading Core"); |
|---|
| 146 | loading_sub.appendChild(document.createTextNode(text)); |
|---|
| 147 | loading_message.appendChild(loading_main); |
|---|
| 148 | loading_message.appendChild(loading_sub); |
|---|
| 149 | document.body.appendChild(loading_message); |
|---|
| 150 | |
|---|
| 151 | return loading_sub; |
|---|
| 152 | } |
|---|
| 153 | |
|---|
| 154 | Xinha.loadStyle = function(style, id) |
|---|
| 155 | { |
|---|
| 156 | var url = _editor_url || ''; |
|---|
| 157 | |
|---|
| 158 | url += style; |
|---|
| 159 | |
|---|
| 160 | var head = document.getElementsByTagName("head")[0]; |
|---|
| 161 | var link = document.createElement("link"); |
|---|
| 162 | link.rel = "stylesheet"; |
|---|
| 163 | link.href = url; |
|---|
| 164 | if (id) link.id = id; |
|---|
| 165 | head.appendChild(link); |
|---|
| 166 | }; |
|---|
| 167 | Xinha._lc = function(string) {return string;} |
|---|
| 168 | |
|---|
| 169 | Xinha._addEvent = function(el, evname, func) |
|---|
| 170 | { |
|---|
| 171 | if ( document.addEventListener ) |
|---|
| 172 | { |
|---|
| 173 | el.addEventListener(evname, func, true); |
|---|
| 174 | } |
|---|
| 175 | else |
|---|
| 176 | { |
|---|
| 177 | el.attachEvent("on" + evname, func); |
|---|
| 178 | } |
|---|
| 179 | } |
|---|
| 180 | Xinha.addOnloadHandler = function (func) |
|---|
| 181 | { |
|---|
| 182 | |
|---|
| 183 | |
|---|
| 184 | |
|---|
| 185 | var init = function () |
|---|
| 186 | { |
|---|
| 187 | |
|---|
| 188 | if (arguments.callee.done) return; |
|---|
| 189 | |
|---|
| 190 | arguments.callee.done = true; |
|---|
| 191 | |
|---|
| 192 | if (Xinha.onloadTimer) clearInterval(Xinha.onloadTimer); |
|---|
| 193 | |
|---|
| 194 | func.call(); |
|---|
| 195 | } |
|---|
| 196 | if (Xinha.is_ie) |
|---|
| 197 | { |
|---|
| 198 | document.write("<sc"+"ript id=__ie_onload defer src=javascript:void(0)><\/script>"); |
|---|
| 199 | var script = document.getElementById("__ie_onload"); |
|---|
| 200 | script.onreadystatechange = function() |
|---|
| 201 | { |
|---|
| 202 | if (this.readyState == "loaded") |
|---|
| 203 | { |
|---|
| 204 | init(); |
|---|
| 205 | } |
|---|
| 206 | }; |
|---|
| 207 | } |
|---|
| 208 | else if (/WebKit/i.test(navigator.userAgent)) |
|---|
| 209 | { |
|---|
| 210 | Xinha.onloadTimer = setInterval(function() |
|---|
| 211 | { |
|---|
| 212 | if (/loaded|complete/.test(document.readyState)) |
|---|
| 213 | { |
|---|
| 214 | init(); |
|---|
| 215 | } |
|---|
| 216 | }, 10); |
|---|
| 217 | } |
|---|
| 218 | else |
|---|
| 219 | { |
|---|
| 220 | document.addEventListener("DOMContentLoaded", init, false); |
|---|
| 221 | } |
|---|
| 222 | } |
|---|