/* ע\ع (Ayn\Ayn) Lookup -- a tools for transliteration of Arabic/Syriac text
to Hebrew writing system and a convenience interface to on-line translation services/search engines.

Developed by Ze'ev (Zeev, Vladimir) Belkin ( http://zeevbelk.in).
© 2009, 2010, 2011 Ze'ev (Zeev, Vladimir) Belkin. All rights reserved. This file is a part of ע\ع (Ayn\Ayn) Lookup and should be used under terms of the ע\ع (Ayn\Ayn) Lookup license only. **/ if (!String.fromCodePoint) { (function() { var defineProperty = (function() { // IE 8 only supports `Object.defineProperty` on DOM elements try { var object = {}; var $defineProperty = Object.defineProperty; var result = $defineProperty(object, object, object) && $defineProperty; } catch(error) {} return result; }()); var stringFromCharCode = String.fromCharCode; var floor = Math.floor; var fromCodePoint = function() { var MAX_SIZE = 0x4000; var codeUnits = []; var highSurrogate; var lowSurrogate; var index = -1; var length = arguments.length; if (!length) { return ''; } var result = ''; while (++index < length) { var codePoint = Number(arguments[index]); if ( !isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity` codePoint < 0 || // not a valid Unicode code point codePoint > 0x10FFFF || // not a valid Unicode code point floor(codePoint) != codePoint // not an integer ) { throw RangeError('Invalid code point: ' + codePoint); } if (codePoint <= 0xFFFF) { // BMP code point codeUnits.push(codePoint); } else { // Astral code point; split in surrogate halves // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae codePoint -= 0x10000; highSurrogate = (codePoint >> 10) + 0xD800; lowSurrogate = (codePoint % 0x400) + 0xDC00; codeUnits.push(highSurrogate, lowSurrogate); } if (index + 1 == length || codeUnits.length > MAX_SIZE) { result += stringFromCharCode.apply(null, codeUnits); codeUnits.length = 0; } } return result; }; if (defineProperty) { defineProperty(String, 'fromCodePoint', { 'value': fromCodePoint, 'configurable': true, 'writable': true }); } else { String.fromCodePoint = fromCodePoint; } }()); } if (!window.com) window.com={}; if (!window.com.zeevbelkin) window.com.zeevbelkin={}; /*if (!window.com.zeevbelkin.utils)*/ window.com.zeevbelkin.utils={ defobject:function(objname,ns,init) { if (!ns) ns=window; var obj=ns[objname]; if (!obj) { var i=objname.indexOf('.'); if (i<0) { if (!init) init={}; return ns[objname]=init; } var nsn=objname.substr(0,i),ns1=ns[nsn]; if (!ns1) ns1=ns[nsn]={}; return this.defobject(objname.substr(i+1),ns1); } return obj; }, findobject:function(objname,ns) { if (!ns) ns=window; var obj=ns[objname]; if (!obj) { var i=objname.indexOf('.'); if (i<0) return false; var nsn=objname.substr(0,i),ns1=ns[nsn]; if (!ns1) return false; return this.findobject(objname.substr(i+1),ns1); } return obj; }, extend:function(obj,extension,ns) { obj=((typeof obj)=='string')?this.defobject(obj,ns):obj; if (extension) for (var i in extension) obj[i]=extension[i]; return obj; }, inheritFromInstance:function(prototypeUpdate,baseClass) { var c=function() { if (baseClass) baseClass.apply(this,arguments); if (prototypeUpdate.init) prototypeUpdate.init.apply(this,arguments); } if (baseClass) c.prototype=new baseClass(); for (var i in prototypeUpdate) c.prototype[i]=prototypeUpdate[i]; return c; }, defclass:function(classname,baseClass,prototypeUpdate) { var classobject=function() { if (baseClass) baseClass.apply(this,arguments); if (prototypeUpdate.init) prototypeUpdate.init.apply(this,arguments); }; var v; if (baseClass) { for (var i in baseClass.prototype) classobject.prototype[i]=baseClass.prototype[i]; //classobject.prototype=baseClass.prototype; } if (prototypeUpdate) { for (v in prototypeUpdate) { classobject.prototype[v]=prototypeUpdate[v]; } } if (classname) { classobject.prototype._className=classname; var j=classname.lastIndexOf('.'); if (j<0) { window[classname]=classobject; } else { var env=this.defobject(classname.substring(0,j)); env[classname.substr(j+1)]=classobject; } } return classobject; }, isDefined:function(x) { return typeof x!='undefined'; }, isObject:function(x) { return (typeof x)=='object'; }, isValidObject:function(objToTest) { if (null == objToTest) return false; if ("undefined" == typeof(objToTest)) return false; return true; }, isUrlSane:function(s) { return s.match(/^http(s)?:\/\/[a-zA-Z]+/)&&!(s.match(/<|>|\"|\'/g)||s.match(/^http(s)?:\/\/localhost/)); }, _rx_trim:/(^\s+)|(\s+$)/g, trim:function(s) { return s.replace(this._rx_trim,""); }, _rx_dec:/^\d+$/, isDecimalString:function(s) { return s.match(this._rx_dec); } }; with (com.zeevbelkin.utils) { extend( "com.zeevbelkin.utils", { isArray:function(obj) { if (Array.isArray) return Array.isArray(obj); return isObject(obj)&&(obj.constructor == Array); }, isFunction:function(obj) { return obj&&(typeof(obj)=='function'); }, isHtmlElement:function(obj) { return isObject(obj)&&(obj instanceof HTMLElement); }, containsAnyString:function(s,ss) { if (s) if (isArray(ss)) for (var i=0;i=0) return true; } else if (s.indexOf(ss)>=0) return true; return false; }, msgs:{ _subscribers:[], subscribe:function(msgname,handler) { var a=this._subscribers[msgname]; if (!a) a=this._subscribers[msgname]=[]; if (a.indexOf(handler)<0) a.push(handler); }, unsubscribe:function(msgname,handler) { var a=this._subscribers[msgname]; if (a) { var i=a.indexOf(handler); if (i>=0) a.splice(i,1); } }, send:function(msgname,args,context,faultHandler) { var a=this._subscribers[msgname]; var rv=null,x; if (a) { if (!context) context=null; for (var i=0;i"),i1=hl.indexOf(""); if ((i0>=0)&&(i1>i0)) { hl=html.substring(0,i0)+html.substr(i1); html=hl; } s=html .replace(/
/gi,"\n") .replace(/<[^>]+>/g,""); } return s; }, decodeUnicode:function(str) { var r = [], i = 0; while(i < str.length) { var chr = str.charCodeAt(i++); if(chr >= 0xD800 && chr <= 0xDBFF) { // surrogate pair var low = str.charCodeAt(i++); r.push(0x10000 + ((chr - 0xD800) << 10) | (low - 0xDC00)); } else { // ordinary character r.push(chr); } } return r; }, encodeUnicode:function(chr) { if(chr >= 0x10000) { // surrogate pair chr&=0xffff; var TEN_BITS = 0x3ff; function u(codeUnit) { return '&#x'+codeUnit.toString(16).toUpperCase()+';'; } //chr -= 0x10000; // Shift right to get to most significant 10 bits var leadSurrogate = 0xD800 + (chr >> 10); // Mask to get least significant 10 bits var tailSurrogate = 0xDC00 + (chr & TEN_BITS); return u(leadSurrogate) + u(tailSurrogate); //var low=(chr&0x3ff)|0xDC00, high=((chr>>10)&0x5ff)|0xD800; //return String.fromCharCode(high)+String.fromCharCode(low); /* var low = str.charCodeAt(i++); r.push(0x10000 + ((chr - 0xD800) << 10) | (low - 0xDC00)); */ } else { // ordinary character return String.fromCharCode(chr); } }, charcode:function(c) { if (c) return ((typeof c)=='string')?decodeUnicode(c)[0]:c; return false; }, valuesOf:function(obj) { var res=[]; for (var i in obj) res.push(obj[i]); return res; }, HashSet:function(a) { // set class constuctor var x; this.or=function() { var r={},key; for (key in this) r[key]=this[key]; if (arguments) for (var i=0;i1)) { return s.charAt(0).toUpperCase()+s.substr(1); } return s; }, bind:function(obj,id) { if (isArray(id)) for (var i=0;ia[i].length) { a.splice(i,0,s); return a; } } a.push(s); return a; }, ArrayPlus:inheritFromInstance( { insertStringByLength:function(s) { com.zeevbelkin.utils.insertStringByLength(this,s); } }, Array ), /* ArrayPlus:( function() { var c=function() { this.insertStringByLength=function(s) { com.zeevbelkin.utils.insertStringByLength(this,s); } }; c.prototype=[]; return c; } )(),*/ versIsGreater:function(a,b) { if (!a) a='';if (!b) b=''; var aa=a.split('.'),bb=b.split('.'); for (var i=0;iyy) return true; if (xxbb.length; }, urlencode:function(s) { var r=''; if (s) for (var i=0;i=n) { if (giveUp) giveUp(x); } else setTimeout( function() { tryNtimes(n,interval,doIt,giveUp,_time+1) }, interval ); } }, dupArray:function(a) { return a.filter(function(){return true}); }, reverseString:function(s) { var r=''; for (var i=s.length-1;i>=0;i--) r+=s[i]; return r; }, sheepsAndGoats:function( text, handleSheep, handleGoat, isASheep, shouldSkip ) { if (!handleSheep) handleSheep=function() {}; if (!handleGoat) handleGoat=function() {}; if (!shouldSkip) shouldSkip=function() {return false;}; var chunk='', sheep=false, utx=decodeUnicode(text); for (var i=0; i